У меня есть код, который я компилирую и запускаю с использованием openmpi.В последнее время я хотел запустить этот же код с использованием Intel MPI.Но мой код не работает, как ожидалось.Я покопался в коде и обнаружил, что MPI_Send ведет себя по-разному в обеих реализациях.
Я получил совет с другого форума использовать MPI_Isend вместо MPi_Send с другого форума.Но это требует огромной работы по модификации кода.Есть ли обходной путь в Intel 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();
}
Результат OpenMPI
# mpirun --allow-run-as-root -n 2 helloworld_openmpi
Calling MPI_Send() from rank 0 to 0
Returned from MPI_Send()
Calling MPI_Send() from rank 0 to 1
Returned from MPI_Send()
0 receieved from 0 Hello world
1 receieved from 0 Hello world
Результат Intel MPI
# mpiexec.hydra -n 2 /root/helloworld_intel
Calling MPI_Send() from rank 0 to 0
Застрял в MPI_Send.