Hri*_*iev 28
mpicc只是某些编译器的包装器.大多数实现都让它们的mpicc包装器理解一个特殊的选项,如-showme(Open MPI)或-show(Open MPI,MPICH和derived),它提供了包装器传递给后端编译器的完整选项列表.
例如,在Open MPI中,包装器是C++程序,它读取纯文本配置文件并构建进一步传递给编译器的命令行选项.mpicc -showme显示这些选项的完整列表:
$ mpicc -showme
icc
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
Run Code Online (Sandbox Code Playgroud)
(这是我在这里拆分以提高可读性的单行)
在特定情况下,英特尔C编译器icc用作后端编译器,但我们也有使用GCC的变体.您还可以获得完成阶段所需的选项列表(通常称为CFLAGS)mpicc -showme:compile:
$ mpicc -showme:compile
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
Run Code Online (Sandbox Code Playgroud)
以及需要传递给链接器的选项列表(称为LDFLAGS)mpicc -showme:link:
$ mpicc -showme:link
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
Run Code Online (Sandbox Code Playgroud)
这些可以用于,例如在a中Makefile,像这样:
...
CFLAGS += $(shell mpicc -showme:compile)
LDFLAGS += $(shell mpicc -showme:link)
...
Run Code Online (Sandbox Code Playgroud)
据我所知-showme:compile并且-showme:link特定于Open MPI和其他实现仅在调用时给出完整的选项列表-show.
我仍然认为最好mpicc直接使用,因为如果发生MPI设置中的某些内容发生更改,它将立即反映在包装器中,而您必须Makefile手动更改构建脚本(除非您使用-showme:compile并-showme:link自动获取选项) ).
是的,您实际上可以使用 gcc。但在我的情况下(在 Ubuntu 上)mpicc 只是 gcc 的一个包装器,这是命令的输出mpicc -showme:
gcc -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread -Wl,-rpath -Wl,/usr/lib/openmpi/lib -Wl,--enable-new-dtags -L/usr/lib/openmpi/lib -lmpi
Run Code Online (Sandbox Code Playgroud)
Open MPI 团队强烈建议您只使用 Open MPI 的“包装器”编译器来编译您的 MPI 应用程序。也就是说,不要使用(例如)gcc 来编译您的程序,而是使用 mpicc。
我们重复以上声明:Open MPI 团队强烈建议使用包装器编译器来编译和链接 MPI 应用程序。如果您发现自己在说,“但我不想使用包装编译器!”,请幽默我们并尝试使用它们。看看他们是否为你工作。如果它们不适合您,请务必让我们知道。许多人认为他们的“包装编译器很烂!” 对 1990 年代中期实施不佳的包装编译器的不良行为的心态。现在情况好多了。包装器编译器几乎可以处理任何情况,并且比您尝试手动硬编码 Open MPI 特定的编译器和链接器标志要可靠得多。话虽如此,有一些 - 非常,很少 - 使用包装器编译器可能会出现问题的情况 - 例如嵌套多个项目的多个包装器编译器。因此,Open MPI 提供了一种解决方法来找出编译 MPI 应用程序所需的命令行标志。
在这里,这个答案对您有用。
| 归档时间: |
|
| 查看次数: |
42382 次 |
| 最近记录: |