Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPI/OpenMP混合代码中的单功能计时_Mpi_Openmp - Fatal编程技术网

MPI/OpenMP混合代码中的单功能计时

MPI/OpenMP混合代码中的单功能计时,mpi,openmp,Mpi,Openmp,我有一个MPI/OpenMP的混合代码。我想知道每个MPI进程在特定功能(比如A)上花费的时间是多少。此函数在OpenMP do/for循环内被调用,其上的各种函数也以非常复杂的方式调用(例如,其他一些函数,比如B和C可能调用a,a也可能在OpenMP do/for循环内)。我的计划如下: double A() { time1 = MPI_Wtime(); //compute result... //Note: inside this function there is no OpenMP

我有一个MPI/OpenMP的混合代码。我想知道每个MPI进程在特定功能(比如A)上花费的时间是多少。此函数在OpenMP do/for循环内被调用,其上的各种函数也以非常复杂的方式调用(例如,其他一些函数,比如B和C可能调用a,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进程为此功能花费的总时间?如果没有,请你告诉我如何正确得到它,谢谢

我建议不要重新发明轮子,而是使用一些已经为分析而构建的专业级软件,例如,或


这里有一个不错的开始

我们不想重新发明轮子,也不想重新发明MPI分析器。那很难

许多集群系统的制造商提供了非常强大的工具。例如,Cray机器通常配有CrayPat


此外,还有像这样的自由软件

这样的方法,每个线程/MPI进程都有自己的时间1和time2@pyCthon您能否建议一种仅获取每个MPI进程的方法?谢谢@torem,VampirTrace在完全检测模式下(默认模式)将跟踪MPI作业中所有进程中代码的每个函数的执行情况(或者您可以编写一个过滤器,将其限制为
a()
),然后Vampir(商业)或Scalasca(开源)可用于分析OTF跟踪。@HristoIliev谢谢,但在我使用的机器中,我没有吸血鬼赛跑…:(Scalasca是开源的,您可以自己构建它(这样做不需要管理员权限).VampirTrace也是开源的。至于Vampir,我认为您可以获得评估许可证。如果您使用Intel MPI,则有可能Intel的跟踪分析器和收集器作为软件包的一部分。它与VampirTrace+Vampir具有几乎相同的跟踪和分析能力,因为它们都来自同一父项目。我使用了crayPat.对于我的函数A,只得到一个结果,即不是每个我正在运行的MPI进程,表中显示“用户时间(约)100.055秒”,这是哪个MPI进程?@torem您想解决负载不平衡问题?我想我提到的链接给出了如何做到这一点的确切说明。您应该发布编译行,并可能就此打开一个CrayPat特定的问题。也许您应该使用发出的patreport命令修改您的帖子。因为CrayPat是用来显示exac的我尝试使用gprof,但它没有为每个MPI进程创建gmon文件,它只创建了一个gmon.out。然后我创建了“gprof a.exe gmon.out”,它没有给我任何信息……你需要添加环境变量,而且(如果你在linux上)如果你向下滚动,你不需要在第三个链接中为你的对象文件创建.exe