MVAPICH2为了优化性能,默认的情况是将进程绑定到处理器的。因此默认是只支持单线程的,如果要运行MPI多线程程序,可以通过以下方式运行多线程:
$ mpirun -np 2 –env MV2_ENABLE_AFFINITY 0 ./mpi app
(或者:$ mpirun_rsh -np 2 MV2_ENABLE_AFFINITY =0 ./mpi app)
当然在程序mpiapp的代码中MPI初始化函数MPI_Init(),要用函数MPI_Init_thread()代替,例如:
int provided;
MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided);
if(provided != MPI_THREAD_MULTIPLE)
{
printf("MPI do not Support Multiple thread\n");
MPI_Abort(MPI_COMM_WORLD,-1);
}
环境配置文件:将配置文件中MV2_ENABLE_AFFINITY置0;
系统的配置文件在:/etc/mvapich2.conf;
用户的配置文件在:~/.mvapich2.conf;
GPU内存间的MPI通信