- 注册时间
- 2017-12-7
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3243
- 在线时间
- 小时
|
发表于 2021-1-11 11:11:02
|
显示全部楼层
两个512x512的矩阵相乘,GPU加成需要19毫秒,CPU需要500毫秒- > a=matrix(rnorm(512*512),512)
- > b=matrix(rnorm(512*512),512)
- > system.time(for(i in 1:1000)tcrossprod(a,b))/1000
- 用户 系统 流逝
- 0.005463 0.000560 0.006028
- > system.time(for(i in 1:1000)crossprod(a,b))/1000
- 用户 系统 流逝
- 0.005346 0.000546 0.005897
- > system.time(for(i in 1:1000)a%*%b)/1000
- 用户 系统 流逝
- 0.005376 0.000540 0.005921
复制代码 很遗憾,平均下来,cpu算512*512的矩阵乘法大概也就差不多6ms的样子
就算1024*1024,CPU耗时也只是不足44ms
- > a=matrix(rnorm(1024^2),1024)
- > b=matrix(rnorm(1024^2),1024)
- > system.time(for(i in 1:100)a%*%b)/100
- 用户 系统 流逝
- 0.04078 0.00236 0.04320
- > system.time(for(i in 1:100)crossprod(a,b))/100
- 用户 系统 流逝
- 0.04067 0.00226 0.04297
- > system.time(for(i in 1:100)tcrossprod(a,b))/100
- 用户 系统 流逝
- 0.04129 0.00217 0.04350
复制代码 以上测试只使用了i7-8750H的一个线程,如果开多线程,算得1024*1024的矩阵乘法只需要15ms- > a=matrix(rnorm(1024^2),1024)
- > b=matrix(rnorm(1024^2),1024)
- > system.time(for(i in 1:1000)a%*%b)/1000
- 用户 系统 流逝
- 0.075156 0.008686 0.014022
- > system.time(for(i in 1:1000)crossprod(a,b))/1000
- 用户 系统 流逝
- 0.074508 0.010014 0.014122
- > system.time(for(i in 1:1000)tcrossprod(a,b))/1000
- 用户 系统 流逝
- 0.076402 0.009120 0.014287
复制代码 我并不知道你用了什么算法,但是,你的比较很可能是不公平的。 |
|