【问题标题】:how to parallelize this for-loop using reduction?如何使用减少并行化这个 for 循环?
【发布时间】:2016-10-17 16:18:39
【问题描述】:

我试图通过使用 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];

【问题讨论】:

    标签: c arrays parallel-processing openmp reduction


    【解决方案1】:

    你要做的操作是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 中的说明自行实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-30
      • 2011-10-29
      • 2016-10-13
      • 2011-12-22
      • 1970-01-01
      • 2019-01-26
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多