如何使用归纳法并行化这个for循环?

5

我想通过使用Openmp使这个for循环并行化,我发现这个循环有一个reduction操作,所以我添加了“#pragma omp parallel for reduction(+,ftab)”,但是它没有起作用,给我了这个错误:error: user defined reduction not found for ‘ftab’.

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

3

您想要执行的操作是前缀和。这可以并行完成。一种简单的方法是使用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);

您也可以按照 维基百科页面 中提到的方法自己实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接