我正在研究 nvidia torch matmul 函数。
### variable creation
a = torch.randn(size=(1,128,3),dtype=torch.float32).to(cuda)
b = torch.randn(size=(1,3,32),dtype=torch.float32).to(cuda)
### execution
c = torch.matmul(a,b)
我无法理解里面的很多东西。
- sgemm_128_32 是什么意思?我看到 sgemm 中的“s”代表单精度,“gemm”表示一般矩阵乘法。但我不知道 128_32 的意思。我的输出矩阵尺寸为 128 x 32。但我知道 cutlass 使用外积优化了 sgemm。(我会给你链接,参考 1)实际上我无法理解链接。
(1) 128_32 是否仅表示输出矩阵的维度?(2)有什么方法可以实际计算我的输出矩阵(c,在我的代码中)?(例如,总共有128*32个线程。每个线程使用内积方式负责一个输出元素)
为什么网格和块各有 3 个维度以及网格和块如何用于 sgemm_128_32?网格由 x、y、z 组成。Block 由 x、y、z 组成。(1) 为什么需要 3 维?我看到(在上图中)块 X 有 256 个线程。(2) 这是真的吗?并且 Grid Y 是 4。所以这意味着 Grid Y 中有 4 个块。 (3) 这是真的吗?
通过使用该 pyprof 结果,我可以计算出使用了多少个 SM 吗?该SM中激活了多少条经线?
谢谢你。
参考 1:https ://developer.nvidia.com/blog/cutlass-linear-algebra-cuda/