如何测量openmp中每个线程的执行时间?

Mar*_*uen 4 c parallel-processing multithreading openmp

我想衡量每个线程花费在执行代码块上的时间。我想看看我的负载平衡策略是否在工作人员之间平均分配块。通常,我的代码如下所示:

#pragma omp parallel for schedule(dynamic,chunk) private(i)
for(i=0;i<n;i++){
//loop code here
}
Run Code Online (Sandbox Code Playgroud)

更新我在gcc中使用openmp 3.1

Gil*_*les 5

您可以用这种方式打印每个线程的时间(未经测试,甚至没有编译):

#pragma omp parallel
{
    double wtime = omp_get_wtime();
    #pragma omp for schedule( dynamic, 1 ) nowait
    for ( int i=0; i<n; i++ ) {
        // whatever
    }
    wtime = omp_get_wtime() - wtime;
    printf( "Time taken by thread %d is %f\n", omp_get_thread_num(), wtime );
}
Run Code Online (Sandbox Code Playgroud)

注意,the nowaitbarrierfor循环结束时删除,否则将不会引起任何兴趣。

当然,使用适当的分析工具是一种更好的方法...