如何使用缩减并行化这个 for 循环?
how to parallelize this for-loop using 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];
您要执行的操作是 prefix sum. It can be done in parallel. A simple way is to use 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.
自行实现
我正在尝试通过使用 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];
您要执行的操作是 prefix sum. It can be done in parallel. A simple way is to use 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.
自行实现