0

http://scicomp.stackexchange.com我問了this有關IDL中的並行矩陣算法的問題。答案建議使用多線程LAPACK實現,並建議一些黑客讓IDL使用特定的LAPACK庫。我一直無法得到這個工作。更改IDL線性代數例程使用的LAPACK實現?

我會理想地喜歡現有的LAPACK DLM,以便能夠使用多線程的LAPACK庫,並且感覺這應該是可能的,但是我沒有取得任何成功。或者,我想下一個最簡單的步驟是創建一個新的DLM,以在一些C代碼中包裝矩陣求逆調用,並確保這個DLM指向期望的實現。雖然創建DLM的文檔讓我目不暇接,所以任何指向這樣做的指針(如果需要的話)也將被讚賞。

回答

1

您定位的是哪個平臺?

看着idl_lapack.sonm我的平臺(Mac OS X中,IDL 8.2.1)上,似乎表明LAPACK例程是直接在.so,所以我的(儘管有限)的理解是,它不會是簡單的換出(即通過設置LD_LIBRARY_PATH)。

$ nm idl_lapack.so 
... 
000000000023d5bb t _dgemm_ 
000000000023dfcb t _dgemv_ 
000000000009d9be t _dgeqp3_ 
000000000009e204 t _dgeqr2_ 
000000000009e41d t _dgeqrf_ 
000000000023e714 t _dger_ 
000000000009e9ad t _dgerfs_ 
000000000009f4ba t _dgerq2_ 
000000000009f6e1 t _dgerqf_ 

一些其他的可能性...

我​​具有包含程序對於給定的「簡單」(即不使用類型定義)函數原型庫自動創建綁定目錄src/dist_tools/bindings。 LAPACK將很容易創建綁定(最難的部分可能是構建你想要使用ATLAS,PLAPACK,ScaLAPACK等的包)。圖書館可以免費使用,如果您希望爲您完成一項小型諮詢合同,可以完成。

GPULib的下一個版本將包含使用MAGMA庫的LAPACK GPU實現。這實際上是一個高度並行的選項,但只適用於CUDA顯卡。如果除了矩陣反轉之外的其他操作可以在GPU上完成以最大限度地減少內存傳輸,它也可以發揮最佳效果。這個選項需要花錢。