我有一个带MPI / OpenMP的混合代码。我想知道每个MPI进程在特定功能上花费的时间,比方说A。这个函数在OpenMP do / for循环中也是通过它上面的各种函数以非常复杂的方式调用的(即一些其他函数假设B和C可能正在调用A,这也可能在OpenMP do / for循环中) 。我计划如下:
double A()
{
time1 = MPI_Wtime();
//compute result...
//Note: inside this function there is no OpenMP or MPI calls...
// just pure computation of results...
time2 = MPI_Wtime();
printf("myRank=%d timeSpent=%f\n", myRank, (time2-time1));
return result;
}
每个MPI流程的所有时间总和是否是该MPI流程为此功能花费的总时间?如果没有,请你能告诉我如何正确使用它,谢谢!
答案 0 :(得分:1)
我们不想重新发明轮子,我们不想重新发明MPI探查器。那很难。
许多集群系统的制造商都提供了非常强大的工具。例如,Cray机器通常带有CrayPat spits out magic。
此外还有免费软件,例如http://mpip.sourceforge.net/
答案 1 :(得分:0)
我建议不要重新发明轮子,而是使用一些专为级别分析而构建的专业级软件,例如TAU,MPIP或Gprof ......
这是一个体面的presentation让你开始