获取程序传输的总MPI字节数

时间:2017-05-16 00:53:22

标签: c parallel-processing mpi distributed-computing

MPI中是否有任何方法可以获取我的整个MPI程序在C中传输的总字节数?

2 个答案:

答案 0 :(得分:4)

最好的方法是使用MPI分析工具,例如简单mpiP。还有更复杂/重量级的工具也可以做到这一点,比如Score-P。如果您在HPC站点上运行代码,则应检查是否有可用的内容。

答案 1 :(得分:0)

不是我直接知道的,但您可以根据您的目的调整以下代码:

uint64_t bytes_recv = 0;

void CommRecv(MyObject* a){
  MPI_Status status;

  MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);

  int msg_size;
  MPI_Get_count(&status, MPI_BYTE, &msg_size);
  bytes_recv += msg_size;

  // Allocate a buffer to hold the incoming data
  char* buf = (char*)malloc(msg_size);
  assert(buf!=NULL);

  MPI_Recv(buf, msg_size, MPI_BYTE, from, MPI_ANY_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE);

  //Do stuff

  free(buf);
}

这里的要点是将标准MPI通信功能包含在跟踪数据传输统计信息的功能中。在内部,这些函数使用MPI_Get_count()来检索传入消息的大小。然后将其添加到全局变量中,该变量跟踪所有包装的MPI函数的通信。

在程序结束时,您可以在主进程上累积每个实例的全局变量。