インデックスが0..n-1の配列があるとします。各スレッドが処理するセルを選択する方法はありますか?たとえば、スレッド0はセル0と5を処理し、スレッド1はセル1と6を処理します。
質問する
1479 次
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 に答える