File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed
docs/11_gemm_optimize/01_tiled2d Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change 66
77在介绍二维 Thread Tile 之前,我们先来回顾一下一维 Thread Tile 的优化方法。在初级系列中,我们使用了一维线程块来优化矩阵乘法的性能,我们将矩阵乘法的计算任务分配给了一维线程块,每个线程块负责计算一个小的矩阵块。这样做的好处是可以充分利用共享内存,减少全局内存的访问次数,从而提高矩阵乘法的性能。
88
9- 还记得一维 Thread Tile中的例子吗 ?如果输入的 A 和 B 都是 8x8 的矩阵:
9+ 还记得一维 Thread Tile 中的例子吗 ?如果输入的 A 和 B 都是 8x8 的矩阵:
1010
11111 . 如果我们一次读取 1 行 A 和 1 列 B,当每一个线程只计算一个结果的时候,我们需要从 A 中读取 8 个数据,从 B 中读取 8 个数据,从 C 中读取 1 个数据,然后写一次 C。这样的话,每个线程需要读取 16 个数据,写一次数据。一共需要 64 个线程,共 64x17 = 1088 次 IO。
12- 2 . 如果我们一次读取 4 行 A 和 1 列 B,那么每一个线程计算 4 个结果,次数需要从 A 中读取 4x8 个数据,从 B 中读取 8 个数据,从 C 中读取 4 个数据,然后写 4 次 C。一共需要 64/4=16 个线程,共 16x48 = 768 次 IO。
13- 3 . 如果我们一次读取 4 行 A 和 4 列 B,那么每一个线程计算 16 个结果,次数需要从 A 中读取 4x8 个数据,从 B 中读取 4x8 个数据,从 C 中读取 16 个数据,然后写 16 次 C。一共需要 64/16=4 个线程,共 4x96 = 384 次 IO。
12+ 2 . 如果我们一次读取 4 行 A 和 1 列 B,那么每一个线程计算 4 个结果,此时需要从 A 中读取 4x8 个数据,从 B 中读取 8 个数据,从 C 中读取 4 个数据,然后写 4 次 C。一共需要 64/4=16 个线程,共 16x48 = 768 次 IO。
13+ 3 . 如果我们一次读取 4 行 A 和 4 列 B,那么每一个线程计算 16 个结果,此时需要从 A 中读取 4x8 个数据,从 B 中读取 4x8 个数据,从 C 中读取 16 个数据,然后写 16 次 C。一共需要 64/16=4 个线程,共 4x96 = 384 次 IO。
1414
1515上述的 ` 2 ` 就是一维 Thread Tile 优化,上述的 ` 3 ` 就是 二维 Thread Tile 优化,计算结果不变的同时,减少 IO 次数,提升算法效率。所以想要继续优化这个 Kernel 的性能,我们可以使用二维线程块来计算二维的矩阵块。
1616
You can’t perform that action at this time.
0 commit comments