c++ - openmp两个连续循环,归约子句问题

标签 c++ openmp

有两个连续的循环,第二个循环中有一个减少子句。

#pragma opm parallel
{
#pragma omp for
    for (size_t i = 0; i < N; ++i)
    {
      
    }
#pragma omp barrier
#pragma omp for reduction(+ \
                    : sumj)
    for (size_t i = 0; i < N; ++i)
    {
        sumj = 0.0;
        for (size_t j = 0; j < adjList[i].size(); ++j)
        {
            sumj += 0;
        }
        Jac[i, i] = sumj;
    }
}
为了减少创建线程的开销,我想保留线程并在第二个循环中使用它们,但是出现以下错误
lib.cpp:131:17: error: reduction variable ‘sumj’ is private in outer context
         #pragma omp for reduction(+ \
                 ^~~

如何解决?

最佳答案

我不确定您要做什么,但似乎这样的事情会满足您的期望:

#pragma omp parallel
{
    #pragma omp for
    for (size_t i = 0; i < N; ++i)
    {
      
    }
    #pragma omp barrier
    #pragma omp for
    for (size_t i = 0; i < N; ++i)
    {
        double sumj = 0.0;
        for (size_t j = 0; j < adjList[i].size(); ++j)
        {
            sumj += 0;
        }
        Jac[i, i] = sumj;
    }
}
在内部循环中出现“omp for”的情况下,reduce将很有用。

关于c++ - openmp两个连续循环,归约子句问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64753313/

相关文章:

c++ - 在 Windows 上编辑 HOSTS 文件

c++ - 通常减少 cv::Mat 或 cv::Mat 的 vector

c - 在集群上运行 openmp

c++ - OpenMP 指针

c++ - 在并行 omp 循环中同时写入同一内​​存

c++ - 编译错误 "' struct' type redefinition"虽然它是它的第一个定义

c++ - 如何在 Arduino 上将时间设置为中央时区?

c++ - 2 个数组/图像相乘的多线程性能 - Intel IPP

c++ - 无法使用 eclipse cdt 在 C/C++ 中打开文件

c++ - 使用 sublime-build 时无法运行 C++ 程序,从终端运行时工作正常