2014-11-23 47 views
0

我在配備Intel Xeon CPU的機器上使用Ubuntu 14.04 x64。我正在經歷一個奇怪的行爲。我有一個Fortran代碼,並且計算的很長一部分與OpenMP並行。使用較小的數據集(比如小於4000),一切正常。但是,當我測試一個具有90K元素的數據集時,在中間的計算中突然使用的線程數量降爲1,這明顯減慢了計算速度。openmp Fortran代碼中的線程數改變

我已經做了這些檢查: 使用OMP_GET_NUM_THREADS()我監視進程中的線程數量,即使在系統使用1個線程後它也保持不變。

我使用LAPACK例程來計算循環內的特徵值計算。我在我的系統上再次編譯Lapack以確保我的系統上的庫不做任何事情。

難道系統會改變外部使用線程的數量嗎?如果是這樣,爲什 謝謝。

+0

您是否在任何地方調用了'omp_set_num_threads'? – 2014-11-24 07:42:51

+1

Tt看起來像一個負載平衡問題。試試動態調度:'!$ OMP PARALLEL SCHEDULE(DYNAMIC) – 2014-11-24 08:28:42

+0

@Anthony,謝謝。這固定了它。我認爲我的輸入數據的性質使這發生了。 – Strongman 2014-11-24 13:26:30

回答

2

它看起來像一個負載平衡問題。嘗試使用動態調度:

!$OMP PARALLEL SCHEDULE(DYNAMIC) 
+0

您可以詳細說明爲什麼這會解決問題。例如。如果輸入數據的處理時間(如Q註釋中提到的)不一致,那麼線程將不會同時完成,並且在特別糟糕的情況下,一個線程可能會比其他線程持續更長的時間。動態調度允許更好地調度線程以處理不均勻負載。 – casey 2014-11-24 23:58:32