OpenMP - 用于循环线程分配

时间:2012-12-01 21:08:27

标签: c openmp

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

2 个答案:

答案 0 :(得分:2)

您是否查看过parallel的schedule子句?

#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);
  }

}

答案 1 :(得分: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处理单元格第i,第i + n,第i + 2 *第n,第i + 3 * nth等等。