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

Getting number of total MPI bytes transferred by a program

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

据我所知,您可以根据自己的目的修改以下代码:

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 函数上的通信。

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

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