"Fast"测量代码执行时间的方法



我的代码中有一些子例程,我需要测量它们的执行时间。假设在极端情况下,例程每秒调用 10-100 次。在Fortran中有很多方法可以测量时间,但是由于调用的频率,我需要产生最低开销的方法。

时间测量本身不需要超级准确,因为我对子例程需要几毫秒或更短的时间不感兴趣,而是当它们峰值到 50 毫秒或更长时间时(这是我需要采取反作用并在内部重新平衡某些事情的时候)。

代码使用 MPI+OpenMP 并行化,所以MPI_Wtime()最简单的方法,但我想这个代码的成本相当大?我对一个好的解决方案的猜测是system_clock().有谁知道每秒调用 50-100 次是否"安全"(性能方面)?

system_clock可能比cpu_time便宜得多,并且精度要好得多。

对于 Linux 上的 GFortran,我依稀记得我曾经通过循环调用它进行测试,system_clock每次调用大约 50 ns。

对于 Linux 上的 GFortran,system_clock

clock_gettime(CLOCK_MONOTONIC, ...)的包装器(在 Linux 上使用 vDSO,而不是真正的系统调用,所以它非常非常快),libgomp(GFortran 使用的 OpenMP 运行时库)中omp_get_wtime也是如此,因此两者的性能应该或多或少相同。

我不确定MPI_Wtime如何在常见的 MPI 实现上实现,但如果它是相同的,我不会感到惊讶。

最新更新