【发布时间】:2016-09-02 06:27:33
【问题描述】:
为了计算 c 程序花费的总时间,我们通常使用头文件 <time.h> 中的 clock() 和 time() 函数。 clock() 测量 CPU 已使用的滴答数 (CLOCKS_PER_SEC),之后我们可以轻松地将我们希望计算的代码 sn-p 的起点和终点之间的差异除以 CLOCKS_PER_SEC。这有助于我们在秒内获得时间
同样time(null) 返回自特定时间点以来的整秒数。转介here
现在这是我的问题。为了计算使用 OpenMP 运行的普通 c 程序所花费的总时间(记录加速操作),我利用了系统中存在的所有处理器,计算所用时间的最佳方法是什么。由于 clock() 只会返回在每个处理器上运行程序所花费的累积时间,基本上 (actual_time_taken x omp_get_max_threads())
而 time() 是一种非常模糊的计算方法,就像我一样对以毫秒为单位的时间计算感兴趣。
【问题讨论】:
-
恕我直言,这是stackoverflow.com/questions/12392278/… 的副本。如果可以的话,我的个人建议是
clock_gettime(CLOCK_MONOTONIC_RAW ...。不幸的是,没有灵丹妙药——它总是在时钟质量和便携性,当然还有要求之间进行权衡。 -
我没有看到任何避免 omp_get_wtime 的理由。如果您的操作系统导致计时器质量存在特定问题,这应该是一个合理的解决方案。例如,在 Windows 上,它可能基于 queryperformance API。
标签: c performance datetime time openmp