我有一個C++代碼,包含許多在8線程計算機上與openMP並行的for-loops。openMP的並行化效率
但是單線程執行的速度比並行8線程快。我被告知,如果for循環的負載增加並行化將變得有效。
這裏的負載我是指例如循環的最大迭代次數。事情是我沒有機會比較大量數據的單線程和8線程並行代碼。
我應該使用並行代碼嗎?並行效率是否會隨着for-loops的負載而增加?
我有一個C++代碼,包含許多在8線程計算機上與openMP並行的for-loops。openMP的並行化效率
但是單線程執行的速度比並行8線程快。我被告知,如果for循環的負載增加並行化將變得有效。
這裏的負載我是指例如循環的最大迭代次數。事情是我沒有機會比較大量數據的單線程和8線程並行代碼。
我應該使用並行代碼嗎?並行效率是否會隨着for-loops的負載而增加?
OpenMP的規範用例是高迭代計數循環迭代的線程組之間的分配,條件是循環迭代沒有直接或間接的依賴關係。
通過考慮問題可以發現我的意思是直接依賴關係循環迭代執行順序是否會影響結果?。例如,如果迭代N + 1使用迭代N的結果,那麼就有這樣的依賴關係,以相反順序運行循環迭代將改變例程的輸出。
間接依賴關係我的意思主要是data races,其中線程必須協調對共享數據的訪問,特別是他們必須確保寫入共享變量以正確的順序進行。
在很多情況下,您可以重新設計一個依賴於循環來消除這些依賴關係。
如果你有一個沒有這種依賴的高迭代計數循環,那麼你有一個用OpenMP加速的候選者。下面是的擊打:
現在回到你的問題:
最後,如果不在不同情況下組合測量運行時間並瞭解您所做的測量結果是什麼,那麼您就無法成爲一名嚴肅的並行計算工作者。如果您無法比較大量數據的順序執行和並行執行,您必須對它們進行測量以獲取適量的數據,並在處理大量數據時對行爲進行預測之前瞭解所學的課程。
您的問題太寬泛,不適合SO。考慮縮小它並提供一些代碼示例。 –