【问题标题】:Vampir with local mpi installation本地 mpi 安装的 Vampir
【发布时间】:2016-08-26 23:27:25
【问题描述】:

我使用 Vampir 在集群上工作,用于可视化 mpi 通信。因为集群缺少 MPI3 实现,所以我在我的主目录中安装了 OpenMPI 2.0.0(除了 --prefix 之外没有使用其他标志)(没有 Vampir 也可以正常工作)。现在我不知道将我的本地 MPI3-install 与 Vampir 正确结合来构建我的程序 (fetchAndOpTest.f90)。我尝试了以下方法:

vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -o fetchAndOpTestF90.x fetchAndOpTest.f90

(不知道它是否重要,但这会发出以下警告:/usr/bin/ld: warning: libmpi.so.1, needed by /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libmpi_f77.so, may conflict with libmpi.so.20

使用~/OpenMPI2/bin/mpirun -np 2 fetchAndOpTestF90.x 执行我的程序会导致: fetchAndOpTestF90.x: error while loading shared libraries: libvt-mpi.so.0: cannot open shared object file: No such file or directory [...]

因此我也尝试了vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -L/opt/vampirtrace/5.14.4/lib -o fetchAndOpTestF90.x fetchAndOpTest.f90,但它并没有改变ldd输出。

编辑:按照@Harald 的建议编辑了 LD_LIBRARY_PATH。

> 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 noticed that process rank 0 with PID 0 on node cluster exited on signal 11 (Segmentation fault)(程序是正确的,并且在没有 Vampir 的情况下使用本地 MPI3 安装构建和执行运行正常)

【问题讨论】:

    标签: mpi trace openmpi


    【解决方案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 是一个闭源商业工具不同),您可以从 the official site 下载它并使用您自己的 Open MPI 构建进行编译。但这对您的情况没有帮助,因为 VampirTtrace 对新的 MPI-3 RMA 调用一无所知,并且不会跟踪它们(它们很可能在跟踪中显示为用户函数)。

    如前所述,请改用 Score-P。发布版本 2.0.2 支持整个 MPI-3.1 调用集合。

    【讨论】:

    • 不仅 vampirtrace 不会知道最近添加到 mpi 3/3.1 的内容,而且可能由于 MPI 3 的 const 化而无法编译。
    • 感谢您的额外解释,Score-P 完成了它的工作
    【解决方案2】:

    这个问题似乎可以通过不同的替代方案来解决,以便找到库:

    1. 静态链接应用程序(即在链接时使用-static 标志)。
    2. 在运行二进制文件之前,将${HOME}/OpenMPI2/lib(或/opt/vampirtrace/5.14.4/lib?)添加到您的LD_LIBRARY_PATH 环境变量中。
    3. 在链接二进制文件时使用 -rpath,以便链接器自动搜索给定目录。您可以使用-Wl,-rpath -Wl,${HOME}/OpenMPI2/lib(或/opt/vampirtrace/5.14.4/lib?)

    编辑 请注意,您指出您安装了 vampirtrace(/opt/vampirtrace/5.14.4),但与 OpenMPI 2.0(请参阅that)相比,它太旧了(请参阅this)——两者之间大约有 3 年的差异.这些年来 OpenMPI 发生了很大变化,尤其是在 2.0 版中。这也可能与您观察到的警告有关——即版本差异。此外,关于这个问题,这是一个坏消息,从最后一个 Web 链接中,您会注意到 OpenMPI 中的 vampirtrace 嵌入包已被删除。

    恕我直言,您最好的选择是尝试使用 vampirtrace 的继任者(名为 Score-P),它也会生成 Vampir 跟踪文件。由于 OpenMPI 2.0 是最新的,您可能需要从 Score-P 尝试 RC。

    【讨论】:

    • 我没有构建静态库,所以我直接使用了建议 2。这似乎工作正常(我编辑了 ldd 输出),但现在使用 ` ~/OpenMPI2/bin/mpirun -np 执行1 fetchAndOpTest.x` 抛出一个错误:mpirun noticed that process rank 0 with PID 0 on node cluster exited on signal 11 (Segmentation fault).(也发生在其他所有正确的程序中)。也许警告表明这个问题?
    • 我试试 Score-P。我认为在这些情况下,这是解决我的问题的最佳方法。
    猜你喜欢
    • 2014-02-04
    • 2014-02-04
    • 1970-01-01
    • 2023-03-29
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多