这篇博客介绍了 OpenAI 的名为 Triton 的新 python 扩展,解释了为什么 Triton 可以比 pytorch 更快地进行矩阵数学运算(参考一个示例,说明如何使用 Triton 沿着 m × n 矩阵的行计算 Softmax)
重要的是,softmax 的这种特殊实现在整个规范化过程中将 X 的行保留在 SRAM 中,这在适用时最大化了数据重用(~<32K 列)。这与 PyTorch 的内部 CUDA 代码不同,后者使用临时内存使其更通用但速度明显较慢(如下)。这里的底线不是 Triton 天生就更好,而是它简化了专用内核的开发,比通用库中的内核要快得多。
- pytorch如何为设备张量分配内存,这里所说的“临时内存”是什么?为什么使用这种临时内存更普遍,但比使用 SRAM 慢?
- 这里的SRAM是指高速缓存吗?如果是这样,这个库如何/为什么比 pytorch 内部更好地利用缓存?我的理解是,关于缓存哪些数据的决定主要取决于硬件而不是软件。