OpenMP – 用于循环线程分配

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

你甚至可以更明确:

 #pragma omp parallel { int nth = omp_get_num_threads(); int ith = omp_get_thread_num(); for (int i=ith; i 

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

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

 #pragma omp for schedule(static, 1) 

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

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