【发布时间】:2017-04-14 12:02:35
【问题描述】:
我正在尝试并行化代码以在脉冲神经元网络上运行一些模拟。这涉及一个双循环,我在主循环之外放置了一条语句“#pragma omp parallel for”。代码如下:
int main(void){
int i,j,count[200];
#pragma omp parallel for
for(i=0;i<200;i++){
count[i] = 0;
for (j=0;j<200;j++){
if (j!=i){
count[i]++;
printf("i: %d j: %d count[i]:%d, count[i]-j:%d\n",i,j,count[i], count[i]-j);
}
}
}
return 0;
}
查看结果,count[i] 的某些值超过了 200,即使循环仅从 1 变为 200。count[i]-j 可以是 0,1 或 -1,但值差异很大,即使每个线程都可以处理 i 的一个值,并且 count 数组仅取决于 i 的当前值。如何重写代码以便安全地增加计数?
【问题讨论】:
-
最终值是多少?您可以在此之后添加一个循环来打印所有值吗?
-
将
#pragma omp parallel放在第二个循环之前。 -
@purplepsycho 这是错误的,会在
count[i]上创建竞争条件。
标签: c parallel-processing openmp