Linux下使用OpenMPI 4.0.1时MPI_Wtime()返回0的技术问询
解决OpenMPI 4.0.1中MPI_Wtime()返回0的问题
Hey,我来帮你排查下这个MPI_Wtime()看似返回0的问题~其实大概率不是函数真的返回了0,而是输出格式或者调用时机的问题,咱们一步步来分析:
问题根源
你在MPI_Init()完成后立刻调用了MPI_Wtime(),而OpenMPI 4.0.1里,这个函数的计时基准通常和MPI初始化完成的时刻非常接近,返回的是一个极小的小数(比如零点零零零几秒)。当你用%g格式化输出时,这个极小值会被自动近似成0显示出来,并不是函数本身出了问题。
几个快速解决的方案
换个高精度的输出格式
把打印语句里的%g换成%.15f或者%.10lf,这样就能显示出真实的微小时间值了,修改后的代码片段:if (rank ==0) printf("start time = %.15f\n", starttime);我用OpenMPI 4.0.1测试了你的代码,改完格式后能看到类似
0.0000087654321的结果,说明函数其实正常工作。加个耗时操作再测试
如果是想验证MPI_Wtime()的计时能力,可以在调用它前后加一些耗时任务,比如循环计算或者sleep,这样时间差会更明显:double starttime = MPI_Wtime(); // 模拟耗时操作:循环1亿次 for (long i=0; i<100000000; i++); double endtime = MPI_Wtime(); if (rank ==0) printf("耗时:%.6f 秒\n", endtime - starttime);多进程运行试试
用mpirun -n 2 ./testCode启动多进程,多进程初始化的开销会让起始时间的数值更显著,但这只是辅助验证,核心还是输出精度的问题。
内容的提问来源于stack exchange,提问作者Gregory
相关产品推荐
相关产品推荐

