Closed Zhou-sx closed 1 year ago
显然,我写的很暴力,必须得128的倍数(
主要是因为一个block处理的是128x128,读取的时候也是直接写死的读128。代码里面也能看出其实kernel里并没有关于边界的判定(
(既然都有4的倍数的限制了,不如再贯彻的彻底一点。(实际上是我偷懒了(
关于边界判定,你可以先去看看李少侠的处理方式,他可以使用任意形状的矩阵大小。然后在回写的时候也采用了shared memory来做coalesced access。可以参考一下这个issue: Yinghan-Li/YHs_Sample#2。
主要这两个月我都没有gpu用(就可以光明正大的偷懒了),所以并没有更新。有时间大概可能会加上吧
我知道具体哪有问题了 读取和计算其实没问题,多出来的部分不会影响结果 但是写回的时候,地址会有冲突 采用朴素的warp排布,如果处理16x16, (1,15) 和 (0, 31) 地址索引是一样的,都是首地址+31个元素大小,后者是因为一个块处理128x128所以这个地址是存在的
M,N不应该满足4对齐就可以吗 shared_mem_gemm.cu也不对 例如取M=16, N=16, K=8 感觉128x8中有效的部分只有16x8,应该不影响呀