c++ - 并行化时的不同答案

标签 c++ parallel-processing openmp

#pragma omp parallel for    
for (int i = 0; i <500; i++)
   for (j=i; j < 102342; j++)
    {
      Output[j] += staticConstant[i] * data[j-i];
    }
}

vector 答案有的相同,有的不同。这可能是什么原因?一开始我以为可能是float的缘故,所以我把所有的都转换成了double。会有 5-6 个相同的答案,或者随机值非常接近的更大的 block ,而一些则相差很远。

最佳答案

您有多个线程写入 Output[j]。这会导致竞争条件。一个线程写入的值被另一个具有不同值的线程替换。

关于c++ - 并行化时的不同答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47625711/

相关文章:

java - 如何在java中并行迭代集合?

c - OpenMP 和 C 并行 for 循环 : why does my code slow down when using OpenMP?

c++ - 从函数 C++ 返回 vector

c# - COM 互操作性需要强命名程序集吗?

parallel-processing - MPI 缓冲发送/接收顺序

multithreading - Openmp创建许多线程,但似乎只使用一个内核

windows - LLVM/Clang 8 Windows 下 OpenMP 代码的编译

c++ - 将类集枚举更改为非类集枚举

C++11 regex_error - 为什么? (代码 : 2)

c# - 是否可以使用 WCF 架构每天处理 1B 请求?