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¶
shell$ ompi_info | grep "Thread support"
Thread support: posix (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: no, Event lib: yes)
shell$
在C程序里支持mult-thread¶
#include <mpi.h>
int MPI_Init_thread(int *argc, char ***argv,
int required, int *provided)
argc
C/C++ only: Pointer to the number of arguments.
argv
C/C++ only: Argument vector.
required
Desired level of thread support (integer).
provided
Available level of thread support (integer).
MPI_THREAD_SINGLE
Only one thread will execute.
MPI_THREAD_FUNNELED
If the process is multithreaded, only the thread that called MPI_Init_thread will make MPI calls.
MPI_THREAD_SERIALIZED
If the process is multithreaded, only one thread will make MPI library calls at one time.
MPI_THREAD_MULTIPLE
If the process is multithreaded, multiple threads may call MPI at once with no restrictions.
注意¶
3.1.6的多线程支持还在初级阶段。开销很高(虽然我不知道为什么)
需要进一步的研究学习¶
学习MapReduce或者Hadoop? pthread vs openmp?
遇到的问题¶
暂无
开题缘由、总结、反思、吐槽~~¶
参考文献¶
https://blog.csdn.net/Morizen/article/details/113863591