c 的矩陣乘法加速trick

2021-07-29 09:47:05 字數 784 閱讀 1735

最近讀rnnlm的源**,發現其實現矩陣乘法時使用了乙個trick,這裡描述一下這個trick。

首先是正常版的矩陣乘法(其實是矩陣乘向量)

void

matrixxvector

(float

* destvect,

float

* srcmatrix,

intsrcmatrix_rownum,

intsrcmatrix_colnum,

float

* srcvect,

intsrcvect_size)

destvect[row*8+0

]+=val1;

destvect[row*8+1

]+=val2;

destvect[row*8+2

]+=val3;

destvect[row*8+3

]+=val4;

destvect[row*8+4

]+=val5;

destvect[row*8+5

]+=val6;

destvect[row*8+6

]+=val7;

destvect[row*8+7

]+=val8;

}for

(row=row*8

;rowfor

(col=0

;col對比普通版,trick版把遍歷行的for迴圈分成了8份,同時進行列遍歷。

實際測試中,這個trick版比普通版快了接近2倍~這是編譯器優化造成的麼……?

參考:

矩陣乘法 C

using system using system.collections.generic using system.text namespace exe03 static void main string args int martixb new int int martixc new int m...

C 矩陣乘法

用慣了數學庫,有的時候有些基本的運算,像矩陣求逆,轉置矩陣什麼的,寫起來突然感覺有些生疏了,這裡算是對一些基本線性代數的複習。用c寫矩陣乘法 注意點 1 二維陣列與二級指標的區別 2 矩陣乘法的要點,新的結果矩陣的第i行第j列是矩陣a的第i行與矩陣b的第j列的乘積,這一點不熟悉,寫程式就會有點吃力 ...

c 模板 矩陣乘法

想起編寫這個程式是複習線代備考的時候看到了乙個這樣的問題 同濟線性代數 第五版 p30 例 2 四個城市的單向航線如圖所示 1,從 i 市到 j 市有1條單向航線 aij 0,從 i 市到 j 市沒有單向航線 則上圖可用乙個矩陣表示 a aij 0 1 1 1 1 0 0 0 0 1 0 0 1 0...