我有一個調用多線程例程的Fortran 90程序。我想從調用例程中調用這個程序。如果我使用cpu_time()
,我最終將所有線程的cpu_time(本例中爲8)加在一起,而不是程序運行所需的實際時間。 etime()
例程似乎也這樣做。任何想法如何我可以計時這個程序(不使用秒錶)?定時一個Fortran多線程程序
3
A
回答
4
嘗試omp_get_wtime()
;請參閱http://gcc.gnu.org/onlinedocs/libgomp/omp_005fget_005fwtime.html的簽名。
2
如果這是一次性的事情,那麼我同意larsmans,使用gprof或其他分析方法可能是一種可行的方法;但我也同意,它是很方便在您的代碼中有更粗略的計時器來計算不同階段的計算。您擁有的最佳時機信息是您實際使用的內容,並且很難擊敗運行代碼的每一個輸出內容。
耶利米威爾考克指出omp_get_wtime()
是非常有用的;它符合標準,因此可以在任何OpenMP編譯器上工作 -
但它只有第二種分辨率,根據您在做什麼
,這可能會或可能不夠。 編輯;以上是完全錯誤的。
Fortran90定義了system_clock()
,它也可用於任何符合標準的編譯器;該標準沒有規定時間分辨率,但gfortran似乎是毫秒,而ifort似乎是微秒。我通常用它是這樣的:
subroutine tick(t)
integer, intent(OUT) :: t
call system_clock(t)
end subroutine tick
! returns time in seconds from now to time described by t
real function tock(t)
integer, intent(in) :: t
integer :: now, clock_rate
call system_clock(now,clock_rate)
tock = real(now - t)/real(clock_rate)
end function tock
和使用它們:
call tick(calc)
! do big calculation
calctime = tock(calc)
print *,'Timing summary'
print *,'Calc: ', calctime
+0
omp_get_wtime()返回秒數作爲雙精度數,所以亞秒分辨率肯定是可能的。藉助GCC,如果平臺支持高分辨率定時器,則可提供毫微秒分辨率。 – janneb 2011-02-23 06:41:19
相關問題
- 1. 在Fortran中的另一個Fortran程序中調用Fortran程序77
- 2. 暫停/執行多線程程序中的一個線程(C#)
- 3. 的Fortran:如何讓多個程序共享同一個程序界面
- 4. 越來越構建一個FORTRAN程序
- 5. 如何創建多個線程池(即多個執行程序,每個線程池都有一個線程)
- 6. 在多線程程序中執行另一個程序
- 7. 可以從一個線程使用System.Threading.Timer啓動多少個線程(定時器)?
- 8. FORTRAN - 子程序
- 9. 線程多次加入()一個線程
- 10. 多線程程序
- 11. 從Fortran例程調用多線程(openmp)C++例程
- 12. 多線程程序的測量時間
- 13. 多線程時需要多少個處理程序
- 14. 線程綁定多個gridview
- 15. 鎖定多個線程
- 16. 應用程序內的多個線程
- 17. java多線程應用程序:正在線程阻塞時間
- 18. 多線程程序中完成線程的實時輸出(CompletionService)
- 19. 多線程應用程序,即時創建新線程?
- 20. Fortran程序錯誤
- 21. Openmp Fortran子程序
- 22. 一個線程定時快於其他
- 23. C++使用一個線程定時器
- 24. Android定時器只有一個線程
- 25. 一個畫布,多線程
- 26. 多線程一個jsp?
- 27. Android處理程序,定時器和多線程
- 28. 我在爲多線程程序創建第二個線程時遇到問題
- 29. 一個線程在iPhone應用程序中殺死另一個線程(兩個線程都是主線程)?
- 30. 調試多線程程序
`gprof`? `time`? – 2011-02-22 19:43:14