如何使用简化并行化这个for循环?

时间:2016-06-16 08:49:24

标签: c arrays parallel-processing openmp reduction

我试图通过使用Openmp使这个for循环并行化,我认识到这个循环减少所以我添加了“#pragma omp parallel for reduction(+,ftab)”,但它没有用,它给了我这个错误: 错误:找不到'ftab'的用户定义缩减。

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

1 个答案:

答案 0 :(得分: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中所述。