替换 Rblas 为 R 提速

2014-11-02 20:51:54 +08:00
 bigtan
不知道论坛里面玩R的有多少,R的矩阵运算速度广受诟病,究其原因是其blas库不给力,openblas是对其一个很好的补充。

R需要blas库,没那么需要lapack,所以我在windows下面编译了单纯的blas动态链接库,mingw编译。

和cygwin不同,mingw编译的库是不需要依赖于cygwin的,单文件替换即可走天下。

编译时使用的是dynamic arch,强制使用多线程,支持的最高线程数是16,需要的同学自取。

http://dl.changbizi.net/openblas/

ps:这几天windows下面编译程序上瘾,电脑快玩坏了。
3795 次点击
所在节点    分享创造
8 条回复
JamesRuan
2014-11-02 23:13:35 +08:00
只在Linux上用R,而且用的不多
bigtan
2014-11-02 23:42:58 +08:00
@JamesRuan 我以前自己都是针对自己的cpu编译的,同学让我帮他也弄一个,我就搞了一个通用一点的
wyf88
2014-11-28 23:22:09 +08:00
感谢!用这个脚本 http://r.research.att.com/benchmarks/R-benchmark-25.R 在我的台式机上测试,使用默认blas库,总共30秒左右,替换楼主编译的openblas,时间缩短到了8秒,效果非常显著!!
wyf88
2014-11-29 00:24:14 +08:00
悲剧,不知为何,这个 openblas 和我的程序不太兼容。我的程序用了 RcppArmadillo,用了楼主的openblas 就会报错:

Error in inDL(x, as.logical(local), as.logical(now), ...) :
unable to load shared object 'C:/Users/TYPE_O~1/AppData/Local/Temp/Rtmpaqp5JU/sourcecpp_344429851447/sourceCpp_94226.dll':
LoadLibrary failure: 找不到指定的模块。

换回 R 自带的 blas 则没问题。但是别人似乎有在 Windows 下替换 openblas 使用 RcppArmadillo 的成功例子,不知是我哪里没弄对呢…
wyf88
2015-06-04 15:36:22 +08:00
问题解决了,把 libopenblas.dll 复制到 R\bin\x64 里,再复制一份替代目录里原有的 Rblas.dll 就好了。我之前只是替换了 Rblas.dll,后来在错误提示里发现缺少 libopenblas.dll,所以又原样复制了一份在这个目录里就好了。这个目录在 PATH 里。
P.S. 我试了下我的程序,用楼主编译的库,发现运行时间比 openblas 网上提供的库的运行时间还要多几秒…下载在这里 http://sourceforge.net/projects/openblas/files/
wyf88
2015-06-04 15:45:07 +08:00
啰嗦一句,官网上的 openblas 库,需要分别下载 OpenBLAS-v0.2.X-Win64-int32.zip 和 mingw64_dll.zip,后者中那三个 dll 文件也要放到 R\bin\x64 里。
bigtan
2015-06-04 18:48:07 +08:00
@wyf88 我是静态编译的,不需要那几个动态链接库
baidao
2015-10-20 20:37:41 +08:00
能否分享一下编译经验?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/143454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX