我以爲我對此有一個非常清楚的瞭解,直到兩天前,但現在我可能會過度思考和迷惑自己。我會解釋我在做什麼,然後問一些可能簡單的問題,但我迄今爲止搜索並發現了相互矛盾的答案。當然有人可以讓我直接。希望快速平行最佳Lapack例程(gfortran)問題
我寫了一個Fortran代碼,利用LAPACK例程來解決特徵值問題。我的問題是(A-LB)x = 0,其中L是我的特徵值,x是我的特徵向量,A和B是方形的,複雜的,非對稱的非厄米非三角矩陣。 A和B都是NxN,在我的代碼中N通常在1000到3000之間。
現在代碼完美地工作。我正在使用LAPACK優化的地圖集安裝。我專門運行例行ZGGEV(link),因爲現在我需要所有的特徵值解和所有相關的特徵向量解。
現在我試圖優化我的代碼以加快運行速度。我們實驗室中的所有計算機都包含4個或8個核心CPU,並在Ubuntu上運行。在解決這個問題時,我可以做些什麼來利用我的全部CPU?我一直在尋找到它下面的事情:
- 我安裝一個優化OpenBlas庫,它肯定要快,但我發現它仍然只使用1個核心(也就是它使用了更多的我想一個小高峯。這個峯值是BLAS軟件包並行運行,而LAPACK僅限於一個內核?)
- 我調查了等離子體,但它看起來並不像它會解決我目前形式的等式。
- 我已經研究過ScaLAPACK,但此刻此刻已經過去了,我不確定值得學習如何利用8核CPU。此外,我在代碼的後面部分使用openmp線程,並且從未將openmp與MPI結合在一起。
最後,我有幾個具體的問題布拉斯:
- 阿特拉斯自帶的 「libptcblas」 和 「libptf77blas」 庫。這些應該是線程庫,但我使用它們時並沒有注意到差別,事實上它運行速度稍慢(我猜是由於開銷)。我需要打電話來利用這些電話嗎?我有理由在「libcblas」和「libf77blas?」上使用這些庫嗎?
- 在OpenBlas中,它還構建了一個非常具體的「libopenblas_penrynp-r0.2.12」。這是線程版本嗎?再次,我沒有注意到運行這個blas與運行「libopenblas」有什麼區別。
希望有人可以清除我的一些布拉斯問題,並指出我朝着更快的解決方法。謝謝!
非常感謝!我很確定我現在完全明白了。我爲每臺電腦建立了一個單獨的ATLAS。根據你的建議,我在ZGEMM上用Openblas做了一些測試,我確實看到了並行加速。經過進一步檢查,我確實得到了ZGGEV的一些加速,但很少。然而,Openblas的運行速度仍然比ATLAS快得多,所以這是一個優點。 – 2014-12-05 07:35:51