我們使用OpenMP(libgomp)來加速多線程Qt應用程序中的一些計算。並行OpenMP部分位於兩個不同的線程中,但實際上它們並不會並行執行。我們在這種情況下觀察到的是2N(其中N = OMP_THREAD_LIMIT
)omp線程啓動,顯然互相干擾。計算時間非常長,而處理器負載很低。設置OMP_WAIT_POLICY
幾乎沒有任何影響。在已經多線程的應用程序中使用OpenMP(libgomp)
我們也嘗試將所有omp節移到單個線程中(但從架構的角度來看,這不是一個好的解決方案)。在這種情況下,整體計算時間確實會下降並且處理器已滿載,但前提是OMP_WAIT_POLICY
設置爲ACTIVE
。當OMP_WAIT_POLICY == PASSIVE
時,計算時間保持較低,處理器空閒50%的時間。
奇怪的是,當我們在單線程中使用omp時,與多線程情況相比,使用omp(在一系列omp計算中)並行化的第一個循環執行速度要慢10倍。
UPD:我們的問題是:
一)有沒有辦法在不同的線程的上下文中使用OMP時,重用OpenMP的線程。
b)爲什麼使用OMP_WAIT_POLICY == PASSIVE
執行會減慢一切。喚醒線程需要很長時間嗎?
c)是那裏的第1並聯塊的速度比較慢(即使在主動模式下等待時)
UPD2的現象,任何合乎邏輯的解釋:請注意該問題可能與GNU OMP實施。 icc沒有它。
而你的問題是? – 2010-12-08 15:00:26
對不起,我更新了 – 2010-12-08 15:09:24