OpenMP动态For循环块剩余

时间:2015-06-23 18:41:54

标签: for-loop openmp

在OpenMP中为for循环指定块大小时,如果有余数,是否由编译器处理?例如,如果我使用大小为4和3的线程迭代13个点,假设使用了所有线程,其中一个将被赋予第5个点,或者我是否需要指定它?

1 个答案:

答案 0 :(得分:1)

是的,OpenMP会为您处理。您无需指定任何内容。

我假设你在这里讨论静态调度,因为动态调度看起来很明显。

例如来自Intel doc静态调度

  

将循环划分为相等大小的块或尽可能相等   循环迭代次数不能被整除的情况   线程数乘以块大小。

根据实施情况划分剩余的块。

如果您想了解更多详情,请参阅MSDN doc

  

对于一组p线程,让ceiling(n / p)为整数q,即   满足n = p * q -r,其中0 <= r <1。页。一个实现的   此示例的静态调度将q迭代分配给   第一个p-1线程,以及到最后一个线程的q-r迭代。另一个   可接受的实现将q迭代分配给第一个p-r   线程,以及对剩余r个线程的q-1次迭代。这个   说明了为什么程序不应该依赖于a的细节   具体实施。