首页 > 编程语言 > 详细

MVAPICH2支持多线程和设备间通信问题

时间:2014-06-16 00:26:21      阅读:558      评论:0      收藏:0      [点我收藏+]

MVAPICH2多线程支持问题

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_AFFINITY0

         系统的配置文件在:/etc/mvapich2.conf;

         用户的配置文件在:~/.mvapich2.conf;

 

 

GPU内存间的MPI通信

一般在没有CUDA的支持下,设备内存间的MPI通信如下:

cudaMemcpy(host buf, device buf, size, cudaMemcpyDeviceToDevice);

MPI_Send(host buf, size, MPI CHAR, 1, 100, MPI COMM WORLD, req);

 

若要从设备到设备内存,设备内存到主机内存,主机内存到设备内存的MPI通信,

则设置环境变量 MV2 USE CUDA 为1 (系统默认是0,即不支持设备间内存通信),设备间可以直接通信,如下:

MPI_Send(device buf, size, MPI CHAR, 1, 100, MPI COMM WORLD, req);

 

$ mpirun  -np 2 –env MV2_USE_CUDA  1  ./mpi app

(或者$ mpirun_rsh  -np 2 MV2_USE_CUDA =1  ./mpi app)

 

 

环境配置文件:将配置文件中MV2_USE_CUDA1

         系统的配置文件在:/etc/mvapich2.conf;

         用户的配置文件在:~/.mvapich2.conf;

MVAPICH2支持多线程和设备间通信问题,布布扣,bubuko.com

MVAPICH2支持多线程和设备间通信问题

原文:http://www.cnblogs.com/hiuser/p/3784198.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!