[問題] 如何利用cache讓程式整體效率提高?

看板C_and_CPP作者 (heymei)時間12年前 (2012/03/27 22:02), 編輯推噓3(3011)
留言14則, 6人參與, 最新討論串1/3 (看更多)
大家好 我想讓cache增加執行效率 比如說 兩個矩陣相乘 每個矩陣的維度為1000 其程式碼假設如下 int i,j,k; int sum; int a[1000][1000],b[1000][1000],c[1000][1000]; for(i=0;i<1000;i++) { for(k=0;k<1000;k++) { sum=0.0; for(j=0;j<1000;j++) sum=sum+a[i][j]*b[j][k]; c[i][k] = sum; } } 由上可知 a[i][j]這個資料會反覆的利用在第一列 我要怎麼才能確定a[i][j]會在cache L1 或者 L2? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.176.25

03/27 23:25, , 1F
j在迴圈最裡層 a[i][j]會一直變動吧
03/27 23:25, 1F

03/27 23:27, , 2F
轉置
03/27 23:27, 2F

03/27 23:27, , 3F
還有為什麼int sum = 0.0 ...
03/27 23:27, 3F

03/27 23:59, , 4F
不過要控制在哪個layer...這個嘛
03/27 23:59, 4F

03/28 00:09, , 5F
sum=0.0打錯
03/28 00:09, 5F

03/28 01:08, , 6F
你曾想過,為什麼 "可以用" 的matrix library, 最後都只
03/28 01:08, 6F

03/28 01:08, , 7F
拿一維當引數嗎? :)
03/28 01:08, 7F

03/28 02:48, , 8F
因為方便算cache的長度?
03/28 02:48, 8F

03/28 02:56, , 9F
locality
03/28 02:56, 9F

03/28 10:10, , 11F
「編譯器優化」,可能有你要的答案。
03/28 10:10, 11F

03/28 14:28, , 12F
你有修多核心設計吼!?
03/28 14:28, 12F

03/28 15:38, , 13F
to樓上..黑阿
03/28 15:38, 13F

03/28 15:44, , 14F
還是那句話, 轉置就好了
03/28 15:44, 14F
文章代碼(AID): #1FSSXPjq (C_and_CPP)
文章代碼(AID): #1FSSXPjq (C_and_CPP)