int count1(testcase *testcases, int n) {
int i;
int count = 0;
#pragma omp parallel for
for (i = 0; i < n; ++i) {
if (test(testcases[i]) == true) {
++count;
}
}
return count;
}
有點不尋常的問題,即似乎沒有問題。 自學OpenMP for C,這是關於我正在閱讀的主題的PDF文檔。循環中缺少錯誤(OpenMP with C)
作者暗示代碼存在一些問題。給定n個測試案例,我們有一些功能測試可以對案例進行處理,並返回一個布爾值,指示測試是否成功。這段代碼應該計算測試次數。作者說,它不正確 - 我只是不明白爲什麼。一直以來,我一直試圖圍繞它思考這個問題,這可能很簡單。
我已經試圖代碼的這個用0和1的陣列的示例版本和由表達式檢查,如果它是1和計數該取代
test(testcases[i]) == true
。但是,它正確地計算了我的1。錯誤在哪裏?
正確的做法是'#pragma omp parallel for reduction(+:count)'。試試這個,看看你能否讓它有所作爲。你可以從刪除條件測試開始,然後遞增count。它應該等於'n'。 –