最好的情况

最好的情况

问题描述:

我想询问有关回答以下问题最好的情况

对于通过使每个进程发送一个 值执行通信此MPI程序段,正,以环形模式转到其旁边的过程。也就是说,如果有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_Sendrecv() 这样可以避免你不得不处理奇数和偶数行列。

请记住,一般来说,MPI_Send()在发送小消息时会立即返回,而如果消息很大,则会一直发送匹配的MPI_Recv()。正确的MPI程序应该始终阻止MPI_Send(),直到发布匹配的MPI_Recv()

+0

谢谢我会照顾那个,但是对于这个问题和这个代码,因为他们是给予的是我想到的时间成本是否正确? 再次感谢。 –