[問題] 多個矩陣做點對點乘法再相加怎樣最快

看板Python作者 (青柳立夏)時間5年前 (2020/04/07 03:07), 編輯推噓4(404)
留言8則, 6人參與, 5年前最新討論串1/1
現在想要做的是 假設有矩陣 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

04/07 12:12, 5年前 , 1F
所以還差兩個數量級嗎?
04/07 12:12, 1F

04/07 12:36, 5年前 , 2F
沒有細算 但是用方法2 大概0.12秒做完一次
04/07 12:36, 2F

04/07 12:37, 5年前 , 3F
理想的話 希望加快10倍 0.012秒一次就達到目標了 !
04/07 12:37, 3F

04/07 12:57, 5年前 , 4F
算法的部分直接轉成3d array,兩個乘完再按照第三個dim
04/07 12:57, 4F

04/07 12:57, 5年前 , 5F
ension加就好了吧,但可能在gpu上加速才有感
04/07 12:57, 5F

04/07 21:20, 5年前 , 6F
numba 可以試試
04/07 21:20, 6F

04/08 17:53, 5年前 , 7F
推樓上的numba,速度真的快很多。
04/08 17:53, 7F

04/11 00:42, 5年前 , 8F
這運算是卡在頻寬 丟去GPU不會比較快 除非資料本來就在
04/11 00:42, 8F
文章代碼(AID): #1UY-w97C (Python)