|
发表于 2023-10-2 16:36:14
|
显示全部楼层
两个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
复制代码 我并不知道你用了什么算法,但是,你的比较很可能是不公平的。 |
|