l_thread = 4;
max = 1; //4
#pragma omp parallel for num_threads(l_thread) private(i)
for(i=0;i<max;i )
;//some operation
在這種情況下,omp 將創建 4 個執行緒。我想知道僅回圈 1 次的 for 回圈(在這種情況下)是否只會被 4 個執行緒之一占用,對嗎?而其他執行緒將處于空閑狀態?在這種情況下,我看到 4 個執行緒的 cpu 使用率幾乎相同。可能是什么原因?只有一個執行緒應該高,其他執行緒必須低對嗎?
uj5u.com熱心網友回復:
你對此的看法是正確的。如果max=1你有多個執行緒,執行緒 0 將執行單回圈迭代,其他執行緒將在并行區域結束時等待執行緒 0 趕上。您看到 n-1 個其他執行緒導致系統負載的原因是因為它們在區域結束時自旋等待,因為當執行緒必須喚醒并注意到并行作業(或在你的情況:不是那么并行作業:-)) 已完成。
OMP_WAIT_POLICY您可以通過環境變數更改此行為。有關完整說明,請參閱 OpenMP規范。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453957.html
