使用 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
同样的评论适用于您引用的第二个指令。
关于 atomic
和 reduction
子句错误,您的代码片段中没有足够的建议。
在使用 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 同样的评论适用于您引用的第二个指令。
关于 atomic
和 reduction
子句错误,您的代码片段中没有足够的建议。