带有本地mpi安装的Vampir
我在使用Vampir的集群上工作,以可视化mpi通信。因为集群缺少MPI3实现,所以我安装了OpenMPI2.0.0,在我的主目录中使用了-prefix以外的其他标志,没有Vampir也可以正常工作。现在我不知道如何将本地安装的MPI3与Vampir正确结合起来,以构建我的程序fetchAndOpTest.f90。我尝试了以下方法:带有本地mpi安装的Vampir,mpi,trace,openmpi,Mpi,Trace,Openmpi,我在使用Vampir的集群上工作,以可视化mpi通信。因为集群缺少MPI3实现,所以我安装了OpenMPI2.0.0,在我的主目录中使用了-prefix以外的其他标志,没有Vampir也可以正常工作。现在我不知道如何将本地安装的MPI3与Vampir正确结合起来,以构建我的程序fetchAndOpTest.f90。我尝试了以下方法: vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -o fetchAndOpTestF90.x fetchAndOpTest.f90 不知道这
vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -o fetchAndOpTestF90.x fetchAndOpTest.f90
不知道这是否重要,但这会给出以下警告:/usr/bin/ld:warning:libmpi.so.1,由/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../../../lib/libmpi_f77.so所需,可能与libmpi.so.20冲突
使用~/OpenMPI2/bin/mpirun-np 2 fetchAndOpTestF90.x执行我的程序会导致:
fetchAndOpTestF90.x:加载共享库时出错:libvt mpi.so.0:无法打开共享对象文件:没有这样的文件或目录[…]
因此,我也尝试了vtf90-vt:fc~/OpenMPI2/bin/mpif90-L/opt/vampirtrace/5.14.4/lib-o fetchAndOpTestF90.x fetchAndOpTest.f90,但它没有改变ldd输出
编辑:根据@Harald的建议编辑了LD_库_路径
>ldd fetchAndOpTestF90.x
linux vdso.so.1=>0x00007ffc6ada9000
libmpi_f77.so.1=>/usr/lib/libmpi_f77.so.1 0x00007ff8fdf2e000
libvt mpi.so.0=>/opt/vampirtrace/5.14.4/lib/libvt mpi.so.0 0x00007ff8fdca3000
libvt mpi unify.so.0=>/opt/vampirtrace/5.14.4/lib/libvt mpi unify.so.0 0x00007ff8fda18000
libotfaux.so.0=>/opt/vampirtrace/5.14.4/lib/libotfaux.so.0 0x00007ff8fd810000
libstdc++.so.6=>/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0x00007ff8fd50c000
libopen trace format.so.1=>/opt/vampirtrace/5.14.4/lib/libopen trace format.so.1 0x00007ff8fd2c4000
libz.so.1=>/lib/x86_64-linux-gnu/libz.so.1 0x00007ff8fd0ab000
libpapi.so.5.3=>/usr/lib/x86_64-linux-gnu/libpapi.so.5.3 0x00007ff8fce57000
libdl.so.2=>/lib/x86_64-linux-gnu/libdl.so.2 0x00007ff8fcc53000
libgfortran.so.3=>/usr/lib/x86_64-linux-gnu/libgfortran.so.3 0x00007ff8fc939000
libm.so.6=>/lib/x86_64-linux-gnu/libm.so.6 0x00007ff8fc633000
libmpi_usempi.so.20=>/home/USER/OpenMPI2/lib/libmpi_usempi.so.20 0x00007ff8fc430000
libmpi_mpifh.so.20=>/home/USER/OpenMPI2/lib/libmpi_mpifh.so.20 0x00007ff8fc1df000
libmpi.so.20=>/home/USER/OpenMPI2/lib/libmpi.so.20 0x00007ff8fbefb000
libgcc_s.so.1=>/lib/x86_64-linux-gnu/libgcc_s.so.1 0x00007ff8fbce5000
libquadmath.so.0=>/usr/lib/x86_64-linux-gnu/libquadmath.so.0 0x00007ff8fbaa9000
libpthread.so.0=>/lib/x86_64-linux-gnu/libpthread.so.0 0x00007ff8fb88b000
libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6 0x00007ff8fb4c6000
libmpi.so.1=>/usr/lib/libmpi.so.1 0x00007ff8fb145000
/lib64/ld-linux-x86-64.so.2 0x00007ff8fe162000
libpfm.so.4=>/usr/lib/x86_64-linux-gnu/libpfm.so.4 0x00007ff8fadff000
libopen-pal.so.20=>/home/USER/OpenMPI2/lib/libopen-pal.so.20 0x00007ff8fab09000
libopen-rte.so.20=>/home/USER/OpenMPI2/lib/libopen-rte.so.20 0x00007ff8fa887000
libutil.so.1=>/lib/x86_64-linux-gnu/libutil.so.1 0x00007ff8fa684000
libhwloc.so.5=>/usr/lib/x86_64-linux-gnu/libhwloc.so.5 0x00007ff8fa43b000
libltdl.so.7=>/usr/lib/x86_64-linux-gnu/libltdl.so.7 0x00007ff8fa231000
libnuma.so.1=>/usr/lib/x86_64-linux-gnu/libnuma.so.1 0x00007ff8fa026000
libpciaccess.so.0=>/usr/lib/x86_64-linux-gnu/libpciaccess.so.0 0x00007ff8f9e1d000
librt.so.1=>/lib/x86_64-linux-gnu/librt.so.1 0x00007ff8f9c15000
现在执行抛出错误:mpirun注意到节点群集上PID为0的进程秩0在信号11上退出分段错误程序是正确的,使用本地MPI3安装而不使用Vampir的构建和执行运行良好问题似乎可以通过不同的备选方案来解决,以便找到库: 静态链接应用程序,即在链接时使用-static标志。 添加${HOME}/OpenMPI2/lib或/opt/vampirtrace/5.14.4/lib?,因为在运行二进制文件之前,您的MPI安装已在LD_LIBRARY_PATH环境变量中。 在链接二进制文件时使用-rpath,以便链接器自动搜索给定目录。您可以使用-Wl,-rpath-Wl、${HOME}/OpenMPI2/lib或/opt/vampirtrace/5.14.4/lib? 编辑 请注意,您指出您有一个vampirtrace安装/opt/vampirtrace/5.14.4,但与OpenMPI 2.0相比,这太旧了,请参见-两者之间的差异约为3年。OpenMPI在这些年中发生了很大的变化,尤其是在2.0版中。这也可能与您观察到的警告有关,即版本差异。此外,这是关于这个问题的坏消息,从上一个web链接中,您会注意到OpenMPI中的vampirtrace嵌入式包已被删除 你最好的选择,IMHO,是尝试一下vampirtrace的继任者,它也会生成Vampir跟踪-
文件夹。由于OpenMPI 2.0是最新版本,您可能需要从Score-P尝试RC。
问题似乎可以通过不同的替代方案来解决,以便找到库:
静态链接应用程序,即在链接时使用-static标志。 添加${HOME}/OpenMPI2/lib或/opt/vampirtrace/5.14.4/lib?,因为在运行二进制文件之前,您的MPI安装已在LD_LIBRARY_PATH环境变量中。 在链接二进制文件时使用-rpath,以便链接器自动搜索给定目录。您可以使用-Wl,-rpath-Wl、${HOME}/OpenMPI2/lib或/opt/vampirtrace/5.14.4/lib? 编辑 请注意,您指出您有一个vampirtrace安装/opt/vampirtrace/5.14.4,但与OpenMPI 2.0相比,这太旧了,请参见-两者之间的差异约为3年。OpenMPI在这些年中发生了很大的变化,尤其是在2.0版中。这也可能与您观察到的警告有关,即版本差异。此外,这是关于这个问题的坏消息,从上一个web链接中,您会注意到OpenMPI中的vampirtrace嵌入式包已被删除你最好的选择,IMHO,是尝试一下vampirtrace的后继者,它也会生成Vampir跟踪文件。由于OpenMPI 2.0是最新版本,您可能需要从Score-P尝试RC。
您的VampirTrace库是根据其他一些系统范围的MPI实现编译的,并通过依赖项拉入其DSO:
--> libmpi_f77.so.1 => /usr/lib/libmpi_f77.so.1 (0x00007ff8fdf2e000)
libmpi_usempi.so.20 => /home/USER/OpenMPI2/lib/libmpi_usempi.so.20 (0x00007ff8fc430000)
libmpi_mpifh.so.20 => /home/USER/OpenMPI2/lib/libmpi_mpifh.so.20 (0x00007ff8fc1df000)
libmpi.so.20 => /home/USER/OpenMPI2/lib/libmpi.so.20 (0x00007ff8fbefb000)
--> libmpi.so.1 => /usr/lib/libmpi.so.1 (0x00007ff8fb145000)
libopen-pal.so.20 => /home/USER/OpenMPI2/lib/libopen-pal.so.20 (0x00007ff8fab09000)
libopen-rte.so.20 => /home/USER/OpenMPI2/lib/libopen-rte.so.20 (0x00007ff8fa887000)
VampirTrace使用的PMPI_*符号可能由系统范围的MPI库解析,因此PMPI机制的参数传递失败。由于VampirTrace是一个开源项目,与Vampir不同,Vampir是一个封闭源代码的商业工具,因此您可以从中下载它,并使用自己的开放MPI构建对其进行编译。但这对您的情况没有帮助,因为VampirTtrace对新的MPI-3 RMA调用一无所知,它不会跟踪它们,它们很可能会作为用户函数出现在跟踪中
如前所述,改用得分-p。版本2.0.2支持整个MPI-3.1调用集合。您的VampirTrace库是根据其他一些系统范围的MPI实现编译的,并通过其DSO中的依赖项拉入:
--> libmpi_f77.so.1 => /usr/lib/libmpi_f77.so.1 (0x00007ff8fdf2e000)
libmpi_usempi.so.20 => /home/USER/OpenMPI2/lib/libmpi_usempi.so.20 (0x00007ff8fc430000)
libmpi_mpifh.so.20 => /home/USER/OpenMPI2/lib/libmpi_mpifh.so.20 (0x00007ff8fc1df000)
libmpi.so.20 => /home/USER/OpenMPI2/lib/libmpi.so.20 (0x00007ff8fbefb000)
--> libmpi.so.1 => /usr/lib/libmpi.so.1 (0x00007ff8fb145000)
libopen-pal.so.20 => /home/USER/OpenMPI2/lib/libopen-pal.so.20 (0x00007ff8fab09000)
libopen-rte.so.20 => /home/USER/OpenMPI2/lib/libopen-rte.so.20 (0x00007ff8fa887000)
VampirTrace使用的PMPI_*符号可能由系统范围的MPI库解析,因此PMPI机制的参数传递失败。由于VampirTrace是一个开源项目,与Vampir不同,Vampir是一个封闭源代码的商业工具,因此您可以从中下载它,并使用自己的开放MPI构建对其进行编译。但这对您的情况没有帮助,因为VampirTtrace对新的MPI-3 RMA调用一无所知,它不会跟踪它们,它们很可能会作为用户函数出现在跟踪中
如前所述,改用得分-p。版本2.0.2支持整个MPI-3.1调用集合。我没有构建静态库,所以直接使用建议2。我编辑了ldd输出,但现在使用“~/OpenMPI2/bin/mpirun-np 1 fetchAndOpTest.x”执行时抛出一个错误:mpirun注意到节点集群上PID为0的进程秩0在信号11分段错误时退出。其他程序都正确,也会发生这种情况。也许这个警告说明了这个问题?我试试P分。我认为在这种情况下,这是解决我问题的最佳方案。我没有构建静态LIB,所以我直接使用建议2。我编辑了ldd输出,但现在使用“~/OpenMPI2/bin/mpirun-np 1 fetchAndOpTest.x”执行时抛出一个错误:mpirun注意到节点集群上PID为0的进程秩0在信号11分段错误时退出。其他程序都正确,也会发生这种情况。也许这个警告说明了这个问题?我试试P分。我认为在这种情况下,这是解决我问题的最佳方案。不仅vampirtrace不知道最近添加到mpi 3/3.1中的内容,而且可能由于mpi 3的构造而无法编译。感谢您的补充解释,Score-P如愿以偿地完成了它的工作,不仅vampirtrace不知道最近添加到mpi 3/3.1中的内容,而且可能由于mpi 3的构造而无法编译。感谢您的额外解释,Score-P按要求完成了它的工作