Triton教程:数学操作高效实现指南

2026-06-15阅读 0热度 0
ps

Triton 这套工具,本质上是一个面向并行编程的语言加编译器。它最大的价值在于,能让开发者在一个基于 Python 的友好环境中,高效地编写自定义的深度学习计算内核,并且这些内核在当代 GPU 上跑起来,几乎可以压榨出硬件的全部潜力。

【Triton 教程】math-ops

我们先把最常用的数学运算过一遍,这里整理的是Triton内置的数学操作函数集。先从最基础的说起。

triton_language.abs

triton.language.abs(x)

这个函数的作用很简单:对输入张量 x 里的每一个元素,计算它的绝对值。

参数:

  • x (Block) - 输入值,也就是你要处理的那个数据块。

triton_language.cdiv

triton.language.cdiv(x,div)

这个挺实用,用来做向上取整的除法。通俗点说,就是计算 x 除以 div 的结果,但如果除不尽,就直接进一位取整数。为什么要特别提这个函数?因为它在确定线程块、共享内存大小这些场景下,出镜率极高。

参数:

  • x (Block) - 输入数字。
  • div (Block) - 除数。

这个函数也支持用成员函数的方式调用,比如 x.div(...) 的写法,在代码里会更流畅一些。

triton_language.ceil

triton.language.ceil(x)

把输入张量 x 里的每个元素,统统向上取整。

参数:

  • x (Block) - 输入值。

triton_language.clamp

triton.language.clamp(x, min, max, propagate_nan: ~triton.language.core.constexpr = )

这个函数的作用是“夹紧”数据。它会检查张量 x 里的每一个值,如果小于 min,就强行拉回到 min;如果大于 max,就压制到 max。保证所有值都乖乖待在 [min, max] 这个区间里。

参数:

  • x (Block) - 输入值。
  • min (Block) – 下界,低于这个值的会被替换。
  • max (Block) – 上界,高于这个值的会被替换。
  • propagate_nan (tl.PropagateNan) – 一个控制选项,决定是否把 NaN(非数字)值传递出去。这个设置主要影响张量 x。需要注意,如果 minmax 里有任何一个值是 NaN,那最终结果就不确定了。

这个功能跟 tl.PropagateNan 枚举配合使用,具体可以参考一下它的文档。

triton_language.cos

triton.language.cos(x)

计算 x 里每个元素的余弦值。属于基础数学函数。

参数:

  • x (Block) - 输入值。

triton_language.div_rn

triton.language.div_rn(x,y)

这是一个高精度的除法运算。它计算 xy 中对应元素的精确除法,结果会按照 IEEE 标准,四舍五入到最近的浮点数。

参数:

  • x (Block) - 输入值。
  • y (Block) - 输入值。

triton_language.erf

triton.language.erf(x)

计算误差函数(erf)的值。这个在概率论和统计模型里经常用到。

参数:

  • x (Block) - 输入值。

triton_language.exp

triton.language.exp(x)

指数函数,以自然常数 e 为底。对输入 x 的每个元素计算 e^x

参数:

  • x (Block) - 输入值。

triton_language.exp2

triton.language.exp2(x)

跟上边一样,只不过底数换成了 2。计算 2^x

参数:

  • x (Block) - 输入值。

triton_language.fdiv

triton.language.fdiv(x,y)

这是一个快速的浮点除法。牺牲一点点精度(有时候甚至不牺牲),换来了更快的计算速度。

参数:

  • x (Block) - 输入值。
  • y (Block) - 输入值。

triton_language.floor

triton.language.floor(x)

向下取整。跟 ceil 正好相反,它把每个元素都取到小于或等于它的最大整数。

参数:

  • x (Block) - 输入值。

triton_language.fma

triton.language.fma(x,y,z)

“融合乘加”(Fused Multiply-Add)运算。一句话概括就是:计算 x*y + z。但这个操作不是简单拆成两步,而是在硬件层面“融合”起来,精度更高,而且通常也更快。在矩阵运算和深度学习内核里,这个操作是相当核心的。

参数:

  • x (Block) - 输入值。
  • y (Block) - 输入值。
  • z (Block) - 输入值。

triton_language.log

triton.language.log(x)

自然对数,底数为 e。计算 ln(x)

参数:

  • x (Block) - 输入值。

triton_language.log2

triton.language.log2(x)

以 2 为底的对数。信息论和某些算法中经常用到。

参数:

  • x (Block) - 输入值。

triton_language.maximum

triton.language.maximum(x, y, propagate_nan: ~triton.language.core.constexpr = 

逐元素比较两个张量,取较大的那个。同样地,它也带有一个 propagate_nan 参数,来决定 NaN 如何处理。

参数:

  • x (Block) - 第 1 个输入的张量。
  • y (Block) - 第 2 个输入的张量。
  • propagate_nan (tl.PropagateNan) - 是否传播 NaN 值。

细节处理可以参考 tl.PropagateNan 的文档。

triton_language.minimum

triton.language.minimum(x,y)

maximum 对称,取两个张量中对应位置的最小值。

参数:

  • x (Block) - 第 1 个输入的张量。
  • y (Block) - 第 2 个输入的张量。
  • propagate_nan (tl.PropagateNan) - 是否传播 NaN 值。

同样,建议参考 tl.PropagateNan 来理解 NaN 的行为。

triton_language.rsqrt

triton.language.rsqrt(x)

计算倒数平方根,即 1/sqrt(x)。在很多场景里,比如归一化操作中,这个操作比先算平方根再取倒数要高效得多。

参数:

  • x (Block) - 输入值。

triton_language.sigmoid

triton.language.sigmoid(x)

Sigmoid 激活函数。计算 1 / (1 + exp(-x))。在神经网络和机器学习里,它的地位不必多言。

参数:

  • x (Block) - 输入值。

这个函数也可以用成员函数形式调用,比如写成 x.sigmoid(...),代码风格上会更简洁。

triton_language.sin

triton.language.sin(x)

计算正弦值,跟 cos 配对使用。

参数:

  • x (Block) - 输入值。

triton_language.softmax

triton.language.softmax(x, ieee_rounding=False)

大名鼎鼎的 Softmax 函数。它会将一个向量中的元素“压缩”到 0 到 1 之间,并且所有元素之和为 1,非常适合表示概率分布。它有一个额外的参数 ieee_rounding,不过默认设为 False 就已经足够。

参数:

  • x (Block) - 输入值。

这个函数也支持成员函数调用:x.softmax(...)

triton_language.sqrt

triton.language.sqrt(x)

计算快速平方根。它跟 math.sqrt 类似,但侧重于速度。

参数:

  • x (Block) - 输入值。

triton_language.sqrt_rn

triton.language.sqrt_rn(x)

这就是精确平方根版本了。同样是平方根,但严格遵循 IEEE 标准的四舍五入,在任何场景下都能保证结果的一致性。

参数:

  • x (Block) - 输入值。

triton_language.umulhi

triton.language.umulhi(x,y)

这个函数稍微有些底层,它计算两个无符号整数 xy 的 2N 位乘积,然后提取出结果的高 N 位。在某些需要高精度算术或者整数运算内核的场景下会用到。

参数:

  • x (Block) - 输入值。
  • y (Block) - 输入值。
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策