0

假设我有一个索引为 0..n-1 的数组。有没有办法选择每个线程将处理哪些单元格?例如,线程 0 将处理单元格 0 和 5,线程 1 将处理单元格 1 和 6,依此类推。

4

2 回答 2

2

你看过并行的时间表子句吗?

#pragma omp for schedule(static, 1)

应该实现你想要的,你可以使用下面的简单代码来试验 schedule 子句:

#include<stdio.h>
#include<omp.h>

int main(){

  int i,th_id;

  #pragma omp parallel for schedule(static,1)
  for ( i = 0 ; i < 10 ; ++i){
    th_id = omp_get_thread_num();
    printf("Thread %d is on %d\n",th_id,i);
  }

}
于 2012-12-01T21:16:02.327 回答
0

你甚至可以更明确:

#pragma omp parallel
{
   int nth = omp_get_num_threads();
   int ith = omp_get_thread_num();
   for (int i=ith; i<n; i+=nth)
   {
      // handle cell i.
   }
}

这应该完全符合您的要求:线程 ith 处理单元格 ith、ith+nth、ith+2*nth、ith+3*nth 等等。

于 2012-12-02T11:54:27.467 回答