“快速”的方式来测量代码执行时间

时间:2018-12-11 12:11:21

标签: performance fortran profiling benchmarking

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

时间测量本身并不需要非常精确,因为我对子例程花费几毫秒或更短时间的情况不感兴趣,而是当它们上升到50ms或更长时(这就是我需要采取反措施并在内部重新平衡一些事情。

代码是使用MPI + OpenMP并行化的,所以MPI_Wtime()是最简单的方法,但是我想这会带来很大的成本吗?我对一个好的解决方案的猜测是system_clock()。有人知道每秒调用50-100次是否“安全”(在性能方面)?

1 个答案:

答案 0 :(得分:3)

system_clock可能比cpu_time便宜得多,并且精度更高。

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

对于Linux上的GFortran,system_clockclock_gettime(CLOCK_MONOTONIC, ...)的包装(在Linux上,它使用vDSO而不是真正的系统调用,因此非常快),omp_get_wtime在libgomp(GFortran使用的OpenMP运行时库),因此两者的性能应大致相同。

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