作者EdisonX (卡卡獸)
看板C_and_CPP
標題Re: [問題] 問個基礎問題,效能怎樣會高
時間Wed Aug 31 00:27:51 2016
※ 引述《sec5566 (sec)》之銘言:
: 之前面試一家考試有一題是
: 兩個程式哪個比較快
: 兩個記得只差在
: 一個陣列是a[2][5]
: 一個是a[5][2]
: 這兩個真的有差嗎?
: 有一段時間了 題目其他部分不太記得
: 只記得其他行都一樣
: 另外主要想問怎樣的程式效能比較高
: 是程式比較短?還是迴圈少?
: 還是差在變數型態?
: 我對這方面真的不知道耶
: 估過狗發現很少有資料
: 不過記算處理時間的文倒是滿多的
: 重點不知道怎樣變短
: 就算得到時間也不知為何
: -----
: Sent from JPTT on my Acer T02.
找到以前寫的測試 code
http://pan.baidu.com/s/1slCe9Hj
一樣週末刪除載點,這裡講實測結論
( VS2010 , Release Mode , A(709x604) x B(604x384) )
Function Td
---------------------------------
mat_mul_1 2941 這四個方法都是較保守的
mat_mul_2 304 matrix 相乘,關鍵只有
mat_mul_3 122 index 存取順序不同
mat_mul_3_2 117
mat_mul_block8 269 blocking 大小設 8
mat_mul_block16 223 blocking 大小設 16
mat_mul_block32 215 blocking 大小設 32
mat_mul_block64 200 blocking 大小設 64
mat_mul_block128 196 blocking 大小設 128
mat_mul_trans_2 147 將 B matrix 轉置後相乘
mat_mul_trans_3 188 將 B matrix 轉置後相乘
mat_mul_trans_3_bk64 245 將 B matrix 轉置且配合 blocking64 實作
有些可能沒寫很好,但綜合來說,這組專案就是 locality 對
速度的影響,在 mat_mul_1 ~ mat_mul_3 這裡可以看出,讓人
注意到直接做轉置再相乘 (有多做 malloc 和 loop assign),
結果竟然也比 blocking 還快。
再強調,這是實驗 locality (cache miss) 用的,真正 matrix
相乘有很多更快的解決方案了,如 FFT , 搭 CUDA 等,這些就不
贅述了。
以上,參考。
--
If there is no tomorrow,
I want to see u last time.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.73.92
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1472574475.A.7AE.html
→ MOONRAKER: 轉置 (transpose)。秩是rank。 08/31 14:12
謝謝指正。
推 wtchen: 推 08/31 15:01
※ 編輯: EdisonX (180.177.73.92), 09/04/2016 15:07:50