簡體   English   中英

“快速”方式來衡量代碼執行時間

[英]“Fast” way to measure code execution time

我的代碼中有一些子程序,我需要測量執行時間。 讓我們假設在極端情況下,例程在每秒10-100次被調用。 在Fortran中有很多方法可以測量時間,但是由於調用的頻率,我需要一個能夠產生最低開銷量的方法。

時間測量本身並不需要非常准確,因為我對子程序需要幾毫秒或更短時間的情況不感興趣,而是當它們達到50ms或更多時(當我需要采取反向時間時)行動並在內部重新平衡一些事情)。

代碼是使用MPI + OpenMP並行化的,所以MPI_Wtime()是最簡單的方法,但我猜這個代碼有相當大的成本呢? 我對一個好的解決方案的猜測是system_clock() 有沒有人知道每秒調用50-100次是否“安全”(性能方面)?

system_clock可能比cpu_time便宜很多,而且精度要高得多。

對於Linux上的GFortran,我模糊地回憶起我曾經通過在循環中調用它進行測試,並且system_clock每次調用大約需要50 ns。

對於Linux上的GFortran, system_clockclock_gettime(CLOCK_MONOTONIC, ...)的包裝器(在Linux上使用vDSO,而不是真正的系統調用,所以它非常快), omp_get_wtime中的omp_get_wtime(GFortran的OpenMP運行時庫)也是如此。使用),所以這兩者的表現應該或多或少相同。

我不確定MPI_Wtime是如何在常見的MPI實現上實現的,但如果它是相同的話我也不會感到驚訝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM