我有一個程序需要找到3x3矩陣的特徵值和特徵向量數百萬次。我剛剛轉而使用LAPACK的zheev(是的,它們是厄密矩陣),並且該程序在特定情況下運行約1分20秒。我已經將我的算法與OpenMP並行化(正如我們之前所做的那樣),突然我的程序在大約9米處運行。我給zheev打了個電話,我的程序運行時間爲9s。由於LAPACK,使用OpenMP編程較慢
我在網上看了一圈,發現(據我所知),你可以編譯你的BLAS庫來使用OpenMP,但我不認爲這是這裏的問題。
不幸的是,這段代碼來自我的工作,我沒有將lapack安裝在默認位置,我不知道編譯時使用了哪些編譯器選項。這也使我很難編制一個最低限度的測試程序來證明這個問題。
對這個問題可能有什麼想法?
編輯:
我剛剛發現,使用OpenMP zheev失敗,這在它運行的速度較慢可能的聯繫。我已經讀過LAPACK中的一些例程不是線程安全的(或者它們具有線程安全變體),我如何才能知道zheev是否正在調用其中的一個例程,我可以改變它嗎?
該程序需要多長時間連續運行調用'zheev'註釋掉?另外:你在哪個平臺上使用LAPACK和BLAS? – 2012-04-13 15:01:30
@StephenCanon好點,它需要大約23秒,OpenSuSe 12與LAPACK 3.2.1,並且據我所知,它隨附的BLAS – SirGuy 2012-04-13 15:04:39
LAPACK 3.2.1應該是線程安全的,除了您可能需要調用'dlamch在並行執行開始之前''和'slamch'。 – 2012-04-13 15:31:55