使用 OpenMP 时出错:并行缩减计算无效

Error while working with OpenMP: Parallel reduction calculation is invalid

在使用 C 和 OpenMP 对一组数据进行并行处理时,我的 for 循环不断出现以下错误。

Parallel reduction calculation is invalid!
Parallel atomic calculation is invalid!

密码是:

#pragma omp parallel for num_threads(numberOfThreads \
       reduction(+:number_in_circle) shared(count)
for(count = 0; count < iterations; count++)
    //calculate number in circle

# pragma omp parallel for num_threads(numberOfThreads) private(x, y,\
      dist_sqrd) shared(count, number_in_circle, iterations)
for(count = 0; count < iterations; count++)
    //calculate number_in_circle using atomic instruction to add to it.

是我的语法有问题还是循环本身有问题?

我不确定您的 OpenMP 指令副本是否 100% 正确,但此处肯定存在问题:

#pragma omp parallel for num_threads(numberOfThreads \
       reduction(+:number_in_circle) shared(count)
for(count = 0; count < iterations; count++)
  • num_threads(numberOfThreads 缺少右括号
  • shared(count) 无效,因为 count 是您要并行化的 for 循环的索引。试图定义这样的私有索引既愚蠢又 explicitly forbidden by the OpenMP standard 同样的评论适用于您引用的第二个指令。

关于 atomicreduction 子句错误,您的代码片段中没有足够的建议。