我想知道如何使用ltrace来获取mpi应用程序的库函数调用,但只是ltrace不起作用,我的mpirun无法成功.任何的想法?
你应该能够简单地使用:
$ mpiexec -n 4 -other_mpiexec_options ltrace ./executable
Run Code Online (Sandbox Code Playgroud)
但是,由于不同级别的产出将合并,这将造成巨大的混乱.一个更好的选择是将输出重定向ltrace到每个等级的单独文件.一些MPI实现很容易获得排名.例如,Open MPI在环境变量中导出世界排名OMPI_COMM_WORLD_RANK.以下包装脚本将有所帮助:
#!/bin/sh
ltrace --output trace.$OMPI_COMM_WORLD_RANK $*
Run Code Online (Sandbox Code Playgroud)
用法:
$ mpiexec -n 4 ... ltrace_wrapper ./executable
Run Code Online (Sandbox Code Playgroud)
这将产生4个跟踪文件,每个等级:trace.0,trace.1,trace.2,和trace.3.
对于MPICH和其他基于它的MPI实现并使用Hydra PM导出PMI_RANK和上面给出的脚本必须进行修改并OMPI_COMM_WORLD_RANK替换为PMI_RANK.人们还可以编写一个通用包装器,它适用于两个MPI实现系列.