看板 C_and_CPP 關於我們 聯絡資訊
大家好 我想讓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
lsc36:j在迴圈最裡層 a[i][j]會一直變動吧 03/27 23:25
loveme00835:轉置 03/27 23:27
lsc36:還有為什麼int sum = 0.0 ... 03/27 23:27
loveme00835:不過要控制在哪個layer...這個嘛 03/27 23:59
heymei0421:sum=0.0打錯 03/28 00:09
tropical72:你曾想過,為什麼 "可以用" 的matrix library, 最後都只 03/28 01:08
tropical72:拿一維當引數嗎? :) 03/28 01:08
heymei0421:因為方便算cache的長度? 03/28 02:48
BombCat:locality 03/28 02:56
tropical72:「編譯器優化」,可能有你要的答案。 03/28 10:10
cholid:你有修多核心設計吼!? 03/28 14:28
heymei0421:to樓上..黑阿 03/28 15:38
loveme00835:還是那句話, 轉置就好了 03/28 15:44