我有一个使用openmpi编译并运行的代码。最近,我想使用Intel MPI运行相同的代码。但是我的代码无法正常工作。我深入研究代码,发现MPI_Send在两种实现中的行为都不同。
我从其他论坛获得了使用MPI_Isend而不是来自其他论坛的MPi_Send的建议。但这需要大量的工作来修改代码。英特尔MPI中是否有任何变通办法,使其能够像在OpenMPI中那样工作。可能是某些标志或缓冲区增加或其他。预先感谢您的回答。
int main(int argc, char **argv) {
int numRanks;
int rank;
char cmd[] = "Hello world";
MPI_Status status;
MPI_Init (&argc, &argv);
MPI_Comm_size (MPI_COMM_WORLD, &numRanks);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
if(rank == 0) {
for (int i=0; i< numRanks; i++) {
printf("Calling MPI_Send() from rank %d to %d\n", rank, i);
MPI_Send(&cmd,sizeof(cmd),MPI_CHAR,i,MPI_TAG,MPI_COMM_WORLD);
printf("Returned from MPI_Send()\n");
}
}
MPI_Recv(&cmd,sizeof(cmd),MPI_CHAR,0,MPI_TAG,MPI_COMM_WORLD,&status);
printf("%d receieved from 0 %s\n", rank, cmd);
MPI_Finalize();
}
Run Code Online (Sandbox Code Playgroud)
# mpirun --allow-run-as-root -n 2 helloworld_openmpi
Calling MPI_Send() from rank 0 to 0
Returned …
Run Code Online (Sandbox Code Playgroud)