是使用2D塊可減少每塊訪問的不同矩陣元素的數量。這個簡單的計算應當明確:
Calculation of A*B=C
Matrix size: 4096*4096
Block size: 1024x1
Number of different elements read from Matrix A: 1 row = 4096 elements
Number of different elements read from Matrix B: 1024 columnes = 4096*1024
Sum: 4193280
Block size: 32x32
Number of different elements read from Matrix A: 32 rows = 32*1024
Number of different elements read from Matrix B: 32 columnes = 32*1024
Sum: 65536
要生成的矩陣計算C(I,J),你必須閱讀從矩陣A的第i行和矩陣B.
所以j列如果要在矩陣B.計算就得讀取N次的第一行(假設矩陣是N×N個)的結果矩陣的第一行和每列一次
4x1 Block
v v v v
>0 1 2 3 0 1 2 3 x x x x
4 5 6 7 4 5 6 7 - - - -
8 9 A B 8 9 A B - - - -
C D E F C D E F - - - -
2x2 Block
v v
>0 1 2 3 0 1 2 3 x x - -
>4 5 6 7 4 5 6 7 x x - -
8 9 A B 8 9 A B - - - -
C D E F C D E F - - - -
箭頭指向的行和列,需要計算x
指示的元素。
是的,如果你正在使用緩存的內存訪問。 –