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