作者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://www.ptt.cc/bbs/Python/M.1586228873.A.1CC.html
推 TuCH: 所以還差兩個數量級嗎? 04/07 12:12
→ doasgloria: 沒有細算 但是用方法2 大概0.12秒做完一次 04/07 12:36
→ doasgloria: 理想的話 希望加快10倍 0.012秒一次就達到目標了 ! 04/07 12:37
→ watashino: 算法的部分直接轉成3d array,兩個乘完再按照第三個dim 04/07 12:57
→ watashino: ension加就好了吧,但可能在gpu上加速才有感 04/07 12:57
推 LiloHuang: numba 可以試試 04/07 21:20
推 napyang: 推樓上的numba,速度真的快很多。 04/08 17:53
推 mike0227: 這運算是卡在頻寬 丟去GPU不會比較快 除非資料本來就在 04/11 00:42