Parallel processing 以环的形式发送和接收MPI消息的最佳情况

Parallel processing 以环的形式发送和接收MPI消息的最佳情况,parallel-processing,mpi,shared-memory,distributed-computing,Parallel Processing,Mpi,Shared Memory,Distributed Computing,我想问一下以下问题的答案 此MPI程序段通过让每个进程发送 值n,以环形模式添加到它旁边的进程。也就是说,如果有N个进程,那么进程0 将值发送到1,进程1将发送到2,依此类推。最后一个进程将发送其值 到0。这些信息将同时发生一次 if (my_rank%2 == 0) { MPI_SEND(msg,size,MPI_INT,(my_rank+1)%comm_sz,0,comm); MPI_RECV(new_msg,size,MPI_INT,(my_rank+comm_sz-1)%c

我想问一下以下问题的答案

此MPI程序段通过让每个进程发送 值n,以环形模式添加到它旁边的进程。也就是说,如果有N个进程,那么进程0 将值发送到1,进程1将发送到2,依此类推。最后一个进程将发送其值 到0。这些信息将同时发生一次

  if (my_rank%2 == 0) { MPI_SEND(msg,size,MPI_INT,(my_rank+1)%comm_sz,0,comm);

    MPI_RECV(new_msg,size,MPI_INT,(my_rank+comm_sz-1)%comm_sz,0,comm,MPI_STATUS_IGNORE); } 

else  {

    MPI_RECV(new_msg,size,MPI_INT,(my_rank+comm_sz-1)%comm_sz,0,comm,MPI_STATUS_IGNORE);

    MPI_SEND(msg,size,MPI_INT,(my_rank+1)%comm_sz,0,comm); }
假设发送消息的时间为一个时间单位,接收消息的时间为一个时间单位 消息是一个时间单位。仅包括消息传递的成本(忽略任何启动 并计算,在最好的情况下,代码需要多少时间单位 完成。你应该明确地陈述你所做的任何假设


我认为它应该是4,在最好的情况下,如果所有的偶数同时发送n,同时收到的所有赔率都是2,对于奇数发送相同的,那么另一个2,所以它应该是4,但我不知道我是否正确

您宁愿使用
MPI\u Sendrecv()
这将避免您必须处理奇数对偶数排名


请记住,一般来说,在发送小消息时,
MPI\u Send()
会立即返回,而如果消息较大,则会阻塞直到发布匹配的
MPI\u Recv()
。一个正确的MPI程序应该期望
MPI\u Send()
始终阻止,直到发布一个匹配的
MPI\u Recv()

谢谢你,我会处理这个问题,但是对于这个问题和这个代码,因为它们是给定的,这是我考虑的时间成本对不对?再次感谢。