性能方面,以下哪項更高效?OpenMP性能影響:私有指令與聲明構造內部的變量
分配在主螺紋和複製值到所有線程:
int i = 0;
#pragma omp parallel for firstprivate(i)
for(; i < n; i++){
...
}
聲明和在每個線程
#pragma omp parallel for
for(int i = 0; i < n; i++){
...
}
聲明在主線程變量分配可變的,但在分配給它每個線程。
int i;
#pragma omp parallel for private(i)
for(i = 0; i < n; i++){
...
}
這似乎是一個愚蠢的問題和/或性能影響可能可以忽略不計。但是我並行化了一個執行少量計算並被調用了很多次的循環,所以我可以從這個循環中排除任何優化都是有幫助的。
我正在尋找更低層次的解釋以及OpenMP如何處理此問題。
例如,如果並行了大量的線程我假設第二個執行效率會比較高,因爲初始化使用xor
變量大於變量複製到所有的線程高效得多
您是否嘗試過測量它,還是您要求我們爲您做這件事? – paddy 2013-03-18 01:23:23
我沒有測量它,但我沒有在數字上尋求答案,我尋求更低層次的答案。 – 2013-03-18 01:27:39
這個問題會更有趣,如果你有*試圖測量它,然後要求解釋結果。 – paddy 2013-03-18 01:29:04