2014-02-05 123 views
2

所以我想在C++中做一個大矩陣(1000-25000 x 4096)的SVD分解。我已經試過LAPACKE dgesdd,犰狳svd/svd_econ和Eigen,但它們都似乎是單線程和相當慢。我目前也在嘗試實施基於redsvd的解決方案。並行化SVD計算C++

對於如何實現快速SVD分解,最好使用多線程,你有什麼建議嗎?我注意到Matlab正在使用多線程SVD,所以它應該是可能的。

此外,我在64位Linux機器上運行g ++,如果這是重要的。

預先感謝您。

+0

我會建議使用CUDA並在GPU上執行此操作。 – 4pie0

回答

2

英特爾的Math Kernel Libraries提供了LAPACKE的並行實現。它們也可用於Linux。

+0

謝謝。我會嘗試這種方法。 – user3190373

+0

您也可以安裝[OpenBLAS](http://www.openblas.net/),然後重新安裝[Armadillo](http://arma.sourceforge.net)以使用它。這應該會給你多線程的SVD。 – mtall