看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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