Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPI&x2B;CUDA:通过多CPU主机(MPI)和单个GPU(CUDA)进行CPU到GPU的数据传输_Cuda_Mpi - Fatal编程技术网

MPI&x2B;CUDA:通过多CPU主机(MPI)和单个GPU(CUDA)进行CPU到GPU的数据传输

MPI&x2B;CUDA:通过多CPU主机(MPI)和单个GPU(CUDA)进行CPU到GPU的数据传输,cuda,mpi,Cuda,Mpi,我想改进我的MPI CPU节点和单个GPU之间的“数据传输”算法 对于NUMPROCS节点,每个MPI节点都有一个带有Ntot/NUMPROCESS float4的1D数组 我的算法非常简单: 1) 在主节点上的一个大数组(大小为Ntot)中收集1D数组(MPI_聚集) 2) 对于主节点,大阵列通过cudaMemcpy函数发送到GPU。CUDA内核与主节点一起启动 有可能避免第一步吗?我的意思是,每个MPI节点通过cudaMemcpy发送它的数组,连接直接在GPU的内存上完成 由于MPI-CPU

我想改进我的MPI CPU节点和单个GPU之间的“数据传输”算法

对于NUMPROCS节点,每个MPI节点都有一个带有Ntot/NUMPROCESS float4的1D数组

我的算法非常简单:

1) 在主节点上的一个大数组(大小为Ntot)中收集1D数组(MPI_聚集)

2) 对于主节点,大阵列通过cudaMemcpy函数发送到GPU。CUDA内核与主节点一起启动


有可能避免第一步吗?我的意思是,每个MPI节点通过cudaMemcpy发送它的数组,连接直接在GPU的内存上完成

由于MPI-CPU节点与GPU在同一物理主机上运行,因此可以避免第一步

您可以使用异步函数
CudaMemcpyAsync()
执行第二步。该函数有一个stream参数。它有助于同时进行GPU计算和
memcpy

在每个进程中,您都可以使用
CudaSetDevice(devicenumber)
控制您选择的GPU


有关详细信息,请参阅CUDA手册。

由于MPI-CPU节点与GPU在同一物理主机上运行,因此可以避免第一步

您可以使用异步函数
CudaMemcpyAsync()
执行第二步。该函数有一个stream参数。它有助于同时进行GPU计算和
memcpy

在每个进程中,您都可以使用
CudaSetDevice(devicenumber)
控制您选择的GPU


有关详细信息,请参阅CUDA手册。

参与MPI\U聚集的进程是否与GPU在同一物理主机上运行,或者它们是否通过网络进行通信?Open MPI支持某些操作的实验性直接GPU内存传输<代码>MPI_聚集是受支持的操作之一。代码在主干中,因此您应该从SVN源代码编译自己的开放MPI。请参阅和。我在四核CPU的4核上使用MPI_聚集。我的GPU是GTX680。我使用CUDA 4.2和MPICH2版本1.2.1p1Open MPI似乎是个好主意,但我没有找到任何MPI+CUDA教程。。。也许还有另一种使用cudastream的解决方案?在主干开放MPI中,它只需将设备指针作为源数据缓冲区参数传递给
MPI\u Gather
。Open MPI检测到指针是设备指针,并在后台使用CUDA函数。参与
MPI\U聚集的进程是否与GPU在同一物理主机上运行,或者是否通过网络进行通信?Open MPI支持某些操作的实验性直接GPU内存传输<代码>MPI_聚集
是受支持的操作之一。代码在主干中,因此您应该从SVN源代码编译自己的开放MPI。请参阅和。我在四核CPU的4核上使用MPI_聚集。我的GPU是GTX680。我使用CUDA 4.2和MPICH2版本1.2.1p1Open MPI似乎是个好主意,但我没有找到任何MPI+CUDA教程。。。也许还有另一种使用cudastream的解决方案?在主干开放MPI中,它只需将设备指针作为源数据缓冲区参数传递给
MPI\u Gather
。Open MPI检测到指针是设备指针,并在后台使用CUDA函数。