2017-07-07 244 views
3

在Java項目中,我使用了matrix-toolkits-java(MTJ)來實現高效的矩陣乘法。這依賴於netlib-java,而這又依賴於機器上安裝的BLAS和LAPACK的優化實現。它專門查找/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3來查找這些庫。在CentOS/Fedora上安裝OpenBLAS

當通過百勝安裝blaslapack,我們得到符號鏈接/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3從通過百勝安裝了參考blaslapack指向.so文件。

現在我們想要使用比參考的更快的實現,在我的例子中是OpenBLAS。無論我是自己編譯還是通過Yum安裝它,我都會以/usr/lib64/libopenblas-r0.2.18.so結束。

現在,根據互聯網上的任何指導我應該用符號鏈接到OpenBLAS執行替換符號鏈接的參考實現,像這樣的東西碰得:

libblas.so.3 -> libopenblas-r0.2.18.so 
liblapack.so.3 -> libopenblas-r0.2.18.so 

好吧,我可以做那!我可以用lnalternatives來做到這一點。如果我這樣做,我的代碼很高興使用快速的OpenBLAS。

但是,當ldconfig運行時,我的真棒符號鏈接消失了,它們被參考BLAS和LAPACK安裝覆蓋。然後我的軟件又悲傷又緩慢。

所以我的問題是,如何在CentOS/Fedora上安裝OpenBLAS以這種方式運行ldconfig不會破壞它?我無法刪除blaslapack程序包,因爲主機的其他客戶端可能依賴它。相反,我會以某種方式使操作系統明白,OpenBLAS是替代blaslapack的替代品。

+0

如果別人依賴blas和lapack包,他們最不可能還會依賴libblas.so.3指向blas的實現嗎? – Stefan

回答

0

This article後,提出了通過百勝安裝openblas-compat。這解決了我的問題。安裝默認的blas軟件包後,我的軟件仍在使用OpenBLAS。

0

我不認爲這種行爲是不需要刪除參考實現就可以避免的。 如果您需要手動重建ld.so.cache,則可以運行ldconfig -X以避免更新鏈接。

除了那你很可能需要創建一個自定義腳本的符號鏈接還原到openblas更新LDCONFIG鏈接