首页 > 解决方案 > cuda内核'volta_sgemm_128x32_nn'是什么意思?

问题描述

我正在研究 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)

我使用 pyprof 分析了这段代码,这给了我下面的结果。 在此处输入图像描述

我无法理解里面的很多东西。

  1. sgemm_128_32 是什么意思?我看到 sgemm 中的“s”代表单精度,“gemm”表示一般矩阵乘法。但我不知道 128_32 的意思。我的输出矩阵尺寸为 128 x 32。但我知道 cutlass 使用外积优化了 sgemm。(我会给你链接,参考 1)实际上我无法理解链接。

(1) 128_32 是否仅表示输出矩阵的维度?(2)有什么方法可以实际计算我的输出矩阵(c,在我的代码中)?(例如,总共有128*32个线程。每个线程使用内积方式负责一个输出元素)

  1. 为什么网格和块各有 3 个维度以及网格和块如何用于 sgemm_128_32?网格由 x、y、z 组成。Block 由 x、y、z 组成。(1) 为什么需要 3 维?我看到(在上图中)块 X 有 256 个线程。(2) 这是真的吗?并且 Grid Y 是 4。所以这意味着 Grid Y 中有 4 个块。 (3) 这是真的吗?

  2. 通过使用该 pyprof 结果,我可以计算出使用了多少个 SM 吗?该SM中激活了多少条经线?

谢谢你。

参考 1:https ://developer.nvidia.com/blog/cutlass-linear-algebra-cuda/

标签: multithreadinggridblocktorchnvprof

解决方案


推荐阅读