MPI:重载与负载及其通信成本

时间:2016-05-12 04:28:16

标签: mpi openmpi hpc

从我的代码和跟踪工具(Scalasca)中,当重载和欠载更改时,我会从相同的代码中获得各种成本。

这是我的结果: Scalasca result

我在Google上搜索过,但我找不到任何关于过载和欠载的解释,以及它对通信成本的影响。

任何人都可以为我解释一下吗?我们可以通过任何方法将其修复为恒定值吗?

我在同一个集群上完成了。 这是我的代码:

void MST_BCast(void* data,int root,int left,int right,MPI_Datatype datatype,MPI_Comm communicator,int count)
{
    if(left==right) return;
  int me; 
  MPI_Comm_rank(communicator, &me); 
  int world_size; 
  MPI_Comm_size(communicator, &world_size);
  int mid=(int)floor(((float)(left+right)/2));
  int dest;
  if(root<=mid)
      dest=right;
  else
      dest=left;
  printf("left=%d-right=%d,me=%d,mid=%d,dest=%d\n",left,right,me,mid,dest);
  if(me==root)
      MPI_Send(data, count, datatype, dest, 0, communicator);
  if(me==dest)
  {
      MPI_Recv(data, count, datatype, root, 0, communicator, MPI_STATUS_IGNORE);
  }
  if((me<=mid)&&(root<=mid))
      MST_BCast(data,root,left,mid,datatype,communicator,count);
  else if((me<=mid)&&(root>mid))
      MST_BCast(data,dest,left,mid,datatype,communicator,count);
  else if((me>mid)&&(root<=mid))
      MST_BCast(data,dest,mid+1,right,datatype,communicator,count);
  else if((me>mid)&&(root>mid))
      MST_BCast(data,root,mid+1,right,datatype,communicator,count);
  ;
}
void test(void* buff,int world_size)
{
    int i;
    for(i=0;i<100;i++)
    {
        MPI_Barrier(MPI_COMM_WORLD);
        MST_BCast(buff,0,0,world_size-1, MPI_INT,MPI_COMM_WORLD,400); 
        MPI_Barrier(MPI_COMM_WORLD);
    }
}
int main(int argc, char** argv) {
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    MPI_Init(&argc,&argv); 
    int world_rank,world_size,namelen; 
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    int* buff=(int*) malloc(world_size*sizeof(int)*100);
    int i;
      for (i = 0; i < world_size*100; i++) {
          if(world_rank==0)
              buff[i]=10;
          else
          buff[i]=world_rank;
      }
    test(buff,world_size);
    MPI_Finalize();
    return (EXIT_SUCCESS);
}

0 个答案:

没有答案