回 帖 发 新 帖 刷新版面

主题:有什么测试工具能获得OpenMP并行区运行时间么?

做OpenMP并行后,想知道该段程序的并行效果。当前在用GNU的gprof,能获得每个程序的运行时间,不过gprof获得的OpenMP并行后的时间似乎和实际运行时间有差别,无法知道精确的程序运行时间。有人用过比较好用的测试工具么?能直接获得并行后的各线程时间

回复列表 (共12个回复)

沙发

AQTime可以,Amplifier也可以。

板凳

这两个似乎是在windows环境下的软件,我的程序是跑在linux下的,有在linux下使用的性能分析软件么?

3 楼

好像都有Linux版本,只是贵~~~~

4 楼

可以使用SECNDS()函数,用法是:
    real *8 s
    s = secnds(0.0)
    …
    block
    …
    s = secnds(s)
       PRINT *, 'Time elapsed = ',  
     &           s, ' seconds'

也可以使用OpenMP自带的函数OMP_get_wtime
start = OMP_get_wtime()
... !work to be timed
end = OMP_get_wtime()
time = end - start

5 楼

翻了一下<the fortran 2003 handbook> secnds真的不是内部函数, 可能是ivf或某些编译器提供的函数而已. 用omp提供的函数对于并行块不是太多的话是个不错选择.
我个人是windows, linux两边调, 主要是linux下的工具不会用-_-'

6 楼

[quote]翻了一下<the fortran 2003 handbook> secnds真的不是内部函数, 可能是ivf或某些编译器提供的函数而已. 用omp提供的函数对于并行块不是太多的话是个不错选择.
我个人是windows, linux两边调, 主要是linux下的工具不会用-_-'[/quote]董兄大怒,曰:吾之器NB之极,尔等竟然不识耍~~~~唉~~~也罢,神马皆为浮云~~~

7 楼

其实那个我知道,我也不用……
也算事实上的标准吧,主流编译器都提供这个扩展

8 楼

[quote]翻了一下<the fortran 2003 handbook> secnds真的不是内部函数, 可能是ivf或某些编译器提供的函数而已. 用omp提供的函数对于并行块不是太多的话是个不错选择.
我个人是windows, linux两边调, 主要是linux下的工具不会用-_-'[/quote]

是吗,我去查查,但是OMP_get_wtime 肯定是可以用的

9 楼

linux还要多向两位学习. 偶是用到什么学什么的投机主义者, 呵呵.

10 楼

那在linux下用啥呢?最好是开源的....

我来回复

您尚未登录,请登录后再回复。点此登录或注册