【问题标题】:Best case for sending and receiving messages in MPI in a ring form以环形形式在 MPI 中发送和接收消息的最佳情况
【发布时间】:2017-06-03 00:04:52
【问题描述】:

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

对于这个通过让每个进程发送一个通信来执行通信的 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,但我不知道我是否正确

【问题讨论】:

    标签: parallel-processing mpi shared-memory distributed-computing


    【解决方案1】:

    你宁愿使用MPI_Sendrecv() 这将避免您不得不处理奇数和偶数排名。

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

    【讨论】:

    • 谢谢,我会处理好这个问题,但是对于这个问题和这个代码,因为它们是给定的,我考虑的时间成本是否正确?再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-12-30
    • 2015-12-31
    • 1970-01-01
    • 2015-10-01
    • 2015-08-16
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多