MPI中是否有任何方法可以获取我的整个MPI程序在C中传输的总字节数?
答案 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函数的通信。
在程序结束时,您可以在主进程上累积每个实例的全局变量。