我想测量每个线程花费大量代码的时间。我想看看我的负载均衡策略是否在工人之间平均分配了块。 通常,我的代码如下所示:
#pragma omp parallel for schedule(dynamic,chunk) private(i)
for(i=0;i<n;i++){
//loop code here
}
UPDATE 我正在使用openmp 3.1 with gcc
答案 0 :(得分: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 );
}
注意nowait
而不是删除barrier
循环末尾的for
,否则这不会有任何兴趣。
而且,使用适当的分析工具是一种更好的方法......