剛好有點時間來研究一下Rcpp怎樣直接使用底層Fortran 77的BLAS跟LAPACK函數
我覺得最難的還是要去讀BLAS或LAPACK的文件,然後配置適當的input餵進去
我這裡就簡單demo一下怎麼樣用LAPACK的dsyevr去計算symmetric matrix的eigenvalues跟eigenvectors
(BLAS部分其實很接近,有興趣的人可以自己改成用BLAS的函數去做,一樣用F77_CALL即可)
裡面還是有不少配置,我沒有好好活用,不過我覺得就先這樣吧,等到有需要再慢慢深入去寫
畢竟我現在直接使用BLAS/LAPACK的場合真的不多,寫那麼底層對我真的有點困難Orz
我還是乖乖去用RcppEigen跟RcppArmadillo好了“
不過直接用BLAS,可以gain到一些performance,也有比較多flexible的設定
深入去玩的話,我覺得對程式效能改進有一定幫助
R code:
1 | Sys.setenv("PKG_LIBS" = "$(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)") |
C++ code:
1 |
|
後記:歡迎留言,我最近才剛把DISQUS,改成可以guest留言,加上不用審查
之前設定錯誤,造成一些問題,害我PTT信箱收了不少信Orz
希望大家新的一年,能夠善用DISQUS留言,不要再塞爆我信箱了XDD
新的一年第一篇部落格,請大家多多指教