2016-06-16 15 views
5

私はこのforループをOpenmpを使って並列化しようとしていますが、このループではreduceがあることを認識していますので、 "#pragma omp parallel for reduction(+、ftab)"を追加しましたが、このエラー: エラー: 'ftab'のユーザー定義リダクションが見つかりませんでした。forループを減らして並列化する方法は?

#pragma omp parallel for reduction(+:ftab) 
    for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; 

答えて

3

操作はprefix sumです。それは並行して行うことができます。簡単な方法は、OpenMPまたはTBBバックエンドでthrust::inclusive_scanを使用することです。

thrust::inclusive_scan(thrust::omp::par, ftab, ftab + 65536, fab); 

または

thrust::inclusive_scan(thrust::tbb::par, ftab, ftab + 65536, fab); 

the Wikipedia pageで参照されます。また、自分でそれを実装することができます。

関連する問題