作者doasgloria (青柳立夏)
看板Python
标题[问题] 多个矩阵做点对点乘法再相加怎样最快
时间Tue Apr 7 11:07:49 2020
现在想要做的是
假设有
矩阵 A,B,C,...J共约10个
要与
同样数量shape的矩阵a,b,c,...,j
每个shape大约是
(3500,2500,3)
做
A*a + B*b + C*c +...+ J*j
点对点相乘再全部加总
所以出来的结果也是一个(3500,2500,3)的矩阵
该怎麽做最快呢 @_@"
type都是
numpy array,尝试了几种方法
1. 直接使用
np multiply方法再相+
当然这是最慢的, 要好多秒
2. 使用
numexpr把
"A*a+B*b+.."的算式写在
evaluate里面
这个很强 快超多 大概30%以上 但还是不够快
3. 使用
Cupy
这个当然是最快的 可是存在一个问题
我把20个矩阵用
cp.array()转到cupy
计算完後用
cp.asnumpy()转回来
这两个过程满耗时的 加起来又比上面两个慢了 Q.Q
目前尝试了上面三种方法 都没办法达到理想的速度
假设在 i5-7400CPU , 16G记忆体 , 1050Ti的GPU上
有方法可以达到一秒钟计算50次 甚至100次吗 ??
希望版上的计算达人们指教还是小蛇的小鲁 >///<
--
◤ | █ ヽ █ ◥ ▂▃▄▃▂ 回战文 疾如风
▍˙▆ 八███████▃▃▄ ●火 ◇ 风● 发废文 繁如林
▋˙●◤█◤ノ ヽ◥ ‧▋ ●◇ ◇● 挑衅文 呛如火
◥___ █◤ ● ● ██◣ ●山◇林● 宅在家不动如山
◢█ ██◤ ( _●_) ミ█◣ 彡 甲斐の熊-武田熊玄
◢▇▇▊█▼ |∪| ◢█ ◣_█◢◢ ◤、● 原SotaFujimor 改marubom
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.45.58.106 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1586228873.A.1CC.html
1F:推 TuCH: 所以还差两个数量级吗? 04/07 12:12
2F:→ doasgloria: 没有细算 但是用方法2 大概0.12秒做完一次 04/07 12:36
3F:→ doasgloria: 理想的话 希望加快10倍 0.012秒一次就达到目标了 ! 04/07 12:37
4F:→ watashino: 算法的部分直接转成3d array,两个乘完再按照第三个dim 04/07 12:57
5F:→ watashino: ension加就好了吧,但可能在gpu上加速才有感 04/07 12:57
6F:推 LiloHuang: numba 可以试试 04/07 21:20
7F:推 napyang: 推楼上的numba,速度真的快很多。 04/08 17:53
8F:推 mike0227: 这运算是卡在频宽 丢去GPU不会比较快 除非资料本来就在 04/11 00:42