并行程序的时间计算
Time Calculation on parallel programs
为了计算一个 c 程序所花费的总时间,我们通常使用头文件 <time.h>
中的 clock()
和 time()
函数。
clock()
测量 CPU 使用的刻度数 (CLOCKS_PER_SEC
) 之后我们可以很容易地划分我们希望计算的代码片段的起点和终点之间的差异CLOCKS_PER_SEC
。这有助于我们获得以秒为单位的时间
还有 time(null)
returns 自特定时间点以来的整秒数。推荐 here
现在我的问题来了。要计算一个正常的 c 程序所花费的总时间(记录加速操作),当 运行 使用 OpenMP
时,我利用了系统中存在的所有处理器,最好的方法是什么计算花费的时间。由于 clock()
只是 return 每个处理器上 运行 程序所花费的累积时间,基本上
(actual_time_taken x omp_get_max_threads())
而 time() 是一种非常模糊的计算方法,因为我对以毫秒为单位的时间计算很感兴趣。
由于您是用 C 语言编程,因此应该使用函数 getrusage()
。这将告诉您整个进程及其子进程、单独的当前进程或所有线程的系统和用户模式时间。开始调用一次,结束调用一次,然后取差。
OpenMP 提供 omp_get_wtime()
来做这件事。有什么理由不在你的代码中使用这个函数吗?
为了计算一个 c 程序所花费的总时间,我们通常使用头文件 <time.h>
中的 clock()
和 time()
函数。
clock()
测量 CPU 使用的刻度数 (CLOCKS_PER_SEC
) 之后我们可以很容易地划分我们希望计算的代码片段的起点和终点之间的差异CLOCKS_PER_SEC
。这有助于我们获得以秒为单位的时间
还有 time(null)
returns 自特定时间点以来的整秒数。推荐 here
现在我的问题来了。要计算一个正常的 c 程序所花费的总时间(记录加速操作),当 运行 使用 OpenMP
时,我利用了系统中存在的所有处理器,最好的方法是什么计算花费的时间。由于 clock()
只是 return 每个处理器上 运行 程序所花费的累积时间,基本上 (actual_time_taken x omp_get_max_threads())
而 time() 是一种非常模糊的计算方法,因为我对以毫秒为单位的时间计算很感兴趣。
由于您是用 C 语言编程,因此应该使用函数 getrusage()
。这将告诉您整个进程及其子进程、单独的当前进程或所有线程的系统和用户模式时间。开始调用一次,结束调用一次,然后取差。
OpenMP 提供 omp_get_wtime()
来做这件事。有什么理由不在你的代码中使用这个函数吗?