【发布时间】:2021-08-03 03:46:49
【问题描述】:
我在使用MPI_Send 和MPI_Recv 时遇到问题。当count <= 64的数量,整体问题运行没有任何问题,而对于count > 64,程序挂起。
有什么解决办法吗?该地址位于两个 GPU 上的全局内存地址上。
这是我使用的代码。当我设置 n<=64 时它可以工作,否则它会挂起。
#include <stdio.h>
#include <string.h>
#include <mpi.h>
int main(int argc, char *argv[])
{
char *d_msg;
int myrank, tag=99;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
const int n = 65; // <-- number of FLOATs
const int num_GPUs = 2;
cudaMalloc((void**)&d_msg, n*sizeof(float));
MPI_Send(d_msg, n, MPI_FLOAT, (myrank + 1)%num_GPUs, tag, MPI_COMM_WORLD);
MPI_Recv(d_msg, n, MPI_FLOAT, (myrank - 1 + num_GPUs)%num_GPUs, tag, MPI_COMM_WORLD, &status);
MPI_Finalize();
return 0;
}
【问题讨论】:
-
嗨,尝试使用不同的发送和接收缓冲区,当计数> 64时它仍然挂起