Hybrid Multithreaded/OpenMP + MPI parallel Programs
混合编程需要注意的问题
https://www.nhr.kit.edu/userdocs/horeka/batch_slurm_mpi_multithread/ 看这个
还有个ppt 16
google hydrid openmpi openmp
intelmpi 编译
这里值得要注意的是,似乎直接用mpif90/mpicxx编译的库会报错,所以需要用
icc -openmp hello.cpp -o hello -DMPICH_IGNORE_CXX_SEEK -L/Path/to/mpi/lib/ -lmpi_mt -lmpiic -I/path/to/mpi/include
其中-DMPICH_IGNORE_CXX_SEEK为防止MPI2协议中一个重复定义问题所使用的选项,为了保证线程安全,必须使用mpi_mt库
对于intel的mpirun,必须在mpirun后加上-env I_MPI_PIN_DOMAIN omp使得每个mpi进程会启动openmp线程。
通过export OMP_NUM_THREADS来控制每个MPI产生多少线程。
OpenMPI 如何实现mult-thread(OpenMP)2
检查编译安装支持mult-thread
1 | shell$ ompi_info | grep "Thread support" |
“MPI_THREAD_MULTIPLE: yes”说明是支持的。
在C程序里支持mult-thread
1 | #include <mpi.h> |
required 可选值 分别是0,1,2,3
1 | MPI_THREAD_SINGLE |
MPI_Init_thread调用MPI_thread_SINGLE等同于调用MPI_Init。
注意
3.1.6的多线程支持还在初级阶段。开销很高(虽然我不知道为什么)
需要进一步的研究学习
学习MapReduce或者Hadoop? pthread vs openmp?
遇到的问题
暂无
开题缘由、总结、反思、吐槽~~
参考文献
Hybrid Multithreaded/OpenMP + MPI parallel Programs
http://icarus.shaojiemike.top/2021/08/18/Work/HPC/MPI_OMP/MPI_OpenMP/