最近讀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...