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 に答える