Why MPI_Init is slow
MPI_Init的作用¶
StackOverflow的回答是,Init在调用过程中初始化MPI库,并且在进程间建立通讯和编号。
知乎的回答: OpenMPI会在调用MPI_Init时按照你传递给mpirun的指令新建进程,而你传递给MPI_Init的参数,会被传递给新建的进程。
这似乎在暗示,两个进程不是同时产生和运行的。
猜想1¶
即使有顺序 malloc的时间也没这么长。
猜想2¶
难道是malloc的数据需要MPI_Init复制一遍?
简单将MPI_Init提前到最开始,时间也基本没变,也不对。
如果单独写一个只有MPI_Init的程序,IntelMPI还是要耗时800ms
ipcc22_0029@ln121 ~/slurm/MPIInit [11:42:32]
> srun -p IPCC -N 2 -n 2 -c 64 -t 1 MPI
MPIInit took 882.110047 ms
MPIInit took 892.112269 ms
测试比较超算上MPI_Init的时间¶
以IPCC2022初赛的北京超算云 AMD机器举例
mpirun的选择 | mpi版本 | GCC或者ICC的选择版本 | 超算运行 | MPI_Init时间(ms) |
---|---|---|---|---|
IntelMPI | mpi/intel/2022.1 | gcc/10.2.0 | 只能sbatch,不能srun | 1282.24 ~ 1678.59 |
OpenMPI | mpi/openmpi/4.1.1-gcc7.3.0 | 2706ms~3235ms | ||
MPICH | mpich/3.1.4-gcc8.1.0 | 17ms | ||
mpich/3.4.2 | gcc/10.2.0 | 107ms |
不能srun IntelMPI的问题¶
需要export I_MPI_PMI_LIBRARY=libpmi2.so
VTune 分析MPI的程序¶
https://www.intel.com/content/www/us/en/develop/documentation/vtune-help/top/analyze-performance/code-profiling-scenarios/mpi-code-analysis.html
https://www.intel.com/content/www/us/en/develop/documentation/vtune-cookbook/top/configuration-recipes/profiling-mpi-applications.html
环境变量¶
设置这个Intel mpi 1200 -> 1100
需要进一步的研究学习¶
实在是弄不懂,为什么不同的实现,时间差别这么大。可能慢是因为额外的通路设置,是为了之后的快速传输??
3.1.4的安装选项也看不到
> mpiexec --version
mpiexec: error while loading shared libraries: libslurm.so.35: cannot open shared object file: No such file or directory
遇到的问题¶
暂无
开题缘由、总结、反思、吐槽~~¶
参考文献¶
无