我正在使用-rankfile
和-hostfile
标志运行具有特定绑定的MPI程序。如何检查是否有正确的绑定(只是为了确定)?我试过了--report-bindings
标志。类似的东西:
mpirun --report-bindings -rankfile rank_file -hostfile host_file -n 16 ./$prog
但是,它没有提供任何输出。我使用的是Open MPI 1.5.4版。我做错了什么?
答案 0 :(得分:3)
可能是odls
框架正在打印绑定信息的标准错误被重定向到某个地方。它适用于Open MPI 1.5.3:
$ mpiexec --report-bindings -rankfile rank_file -hostfile host_file \
-n 4 hostname
host
[host:18314] [[35226,0],0] odls:default:fork binding child [[35226,1],0] to slot_list 0
[host:18314] [[35226,0],0] odls:default:fork binding child [[35226,1],1] to slot_list 1
[host:18314] [[35226,0],0] odls:default:fork binding child [[35226,1],2] to slot_list 0
[host:18314] [[35226,0],0] odls:default:fork binding child [[35226,1],3] to slot_list 1
host
host
host
如果库因任何原因无法报告绑定,您可以使用一个简单的脚本来检查绑定是否实际发生:
#!/bin/sh
cpuset=$(cat /proc/self/status | grep Cpus_allowed_list | awk '{print $2;}')
echo "Rank $OMPI_COMM_WORLD_RANK bound to core(s) $cpuset"
只需将其命名为report_bindings
,然后通过mpiexec
运行:
$ mpiexec --report-bindings -rankfile rank_file -hostfile host_file \
-n 4 report_bindings
Rank 1 bound to core(s) 8
Rank 0 bound to core(s) 0
Rank 3 bound to core(s) 8
Rank 2 bound to core(s) 0