2016-06-16 53 views
5

我想通過使用Openmp使這個for-loop並行化,我認識到在這個循環中減少了所以我添加了「#pragma omp parallel for reduction(+,ftab)」,但它沒有工作,它給了我此錯誤: 錯誤:未找到'ftab'的用戶定義的縮減。如何使用約簡併行化這個for-loop?

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

回答

3

您要做的操作是prefix sum。它可以並行完成。一個簡單的方法是使用thrust::inclusive_scan與OpenMP或TBB後端。

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

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

您還可以通過實現它自己在the Wikipedia page引用。