1
我想并行化一个代码来运行尖峰神经元网络上的一些模拟。这涉及到一个双重循环,我在主循环外面放置了一个'#pragma omp parallel for'语句。下面的代码:嵌套循环与编译指示omp并行为,jumbling up
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;
}
结果看,一些计数的值[I]超过200,即使仅环从1到200计数[I] -j可以是0, 1或-1,但这些值差别很大,甚至认为每个线程都会对i的一个值起作用,并且count数组仅依赖于i的当前值。如何重写代码以便我可以安全地增加计数?
最终值是什么?你可以在这之后添加一个循环来打印所有的值吗? –
在第二个循环之前放置'#pragma omp parallel'。 – purplepsycho
@purplepsycho这只是错误的,会在'count [i]'上创建竞争条件。 – Zulan