繁体   English   中英

为什么OpenMP中的动态调度比静态调度快

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM