[英]Why dynamic scheduling is faster than static scheduling in openmp
我正在学习并行编程,并且试图找出动态和静态调度之间的区别。
据我所知,到目前为止,静态应该比动态更快,因为静态中的块是在编译期间而不是在运行时计算并调度到线程的。 但是我在下面执行程序,静态时间的结果大于动态时间...为什么会发生这种情况? 请帮我。
先感谢您。
#pragma omp parallel shared(a,b,c,nthreads,chunk) private(i,tid)
{
tid = omp_get_thread_num();
if (tid == 0){
nthreads = omp_get_num_threads();
printf("Number of threads = %d\n", nthreads);
}
printf("Thread %d starting...\n",tid);
#pragma omp for schedule(static,chunk)
for (i=0; i<N; i++){
c[i] = a[i] + b[i];
printf("Thread %d: c[%d]= %f\n",tid,i,c[i]);
}
}
真的很难评估任何代码的性能,尤其是这么短的代码。 从您的特定计算机开始,有许多因素会起作用。 您运行了几次代码? 每次运行多长时间? 您需要良好的统计信息,才能明确地判断某些事物比其他事物快/慢。 即使那样,对于其他人也可能并非如此。 您正在使用什么处理器,它具有多少个内核,以及正在调度多少个线程?
很大程度上还取决于您选择的chunk
大小。 也许您所做的选择不是最佳的。 如果您想了解更多信息,请对各种chunk
值进行扫描并确定性能基准。 话虽如此,您观察的可能原因是在两次测试期间您的系统使用情况不同。 动态调度更适合运行时条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.