Libdevice 开发者手册

SIMT 编译示例

使用 SIMT 编译的 triton kernel 示例

# Enable libdevice SIMT compilation
import os
os.environ['TRITON_ENABLE_LIBDEVICE_SIMT'] = '1'

import triton
import triton.language as tl
import triton.language.extra.cann.libdevice as libdevice
import torch

@triton.jit
def triton_kernel(input, output, XBLOCK: tl.constexpr, XBLOCK_SUB: tl.constexpr):
    offset = tl.program_id(0) * XBLOCK
    base = tl.arange(0, XBLOCK_SUB)
    loops: tl.constexpr = XBLOCK // XBLOCK_SUB
    for loop in range(loops):
        x0 = offset + (loop * XBLOCK_SUB) + base
        x = tl.load(input + (x0), None)
        y = libdevice.abs(x)
        tl.store(output + (x0), y, None)

dtype, shape, ncore, xblock, xblock_sub = ['int32', (128, 4096), 512, 1024, 1024]
input = torch.randn(shape, dtype=dtype).npu()
output = torch.randn(shape, dtype=dtype).npu()
triton_kernel[ncore, 1, 1](input, output, xblock, xblock_sub, force_simt_only=True)

1. triton.language.extra.cann.libdevice.abs

OP概述

计算输入参数的绝对值。

原型:

triton.language.extra.cann.libdevice.abs(x, _builder=None)

返回值: tl.tensor, 返回输入参数的绝对值。

支持类型:int32, float32

3. triton.language.extra.cann.libdevice.acos

OP概述

计算输入参数的反余弦值。

原型:

triton.language.extra.cann.libdevice.acos(x, _builder=None)

返回值: tl.tensor, 返回输入参数的反余弦值,取值范围 [0, π] 弧度。

支持类型:float32

4. triton.language.extra.cann.libdevice.acosh

OP概述

计算输入参数的反双曲余弦值。

原型:

triton.language.extra.cann.libdevice.acosh(x, _builder=None)

返回值: tl.tensor, 返回输入参数的反双曲余弦值,取值范围 [0, +∞]。

支持类型:float32

5. triton.language.extra.cann.libdevice.add_rd

OP概述

向下舍入浮点数加法。

原型:

triton.language.extra.cann.libdevice.add_rd(x, y, _builder=None)

返回值: tl.tensor, 返回向下舍入的加法结果。

支持类型:float32

6. triton.language.extra.cann.libdevice.add_rn

OP概述

最近偶数舍入浮点数加法。

原型:

triton.language.extra.cann.libdevice.add_rn(x, y, _builder=None)

返回值: tl.tensor, 返回最近偶数舍入的加法结果。

支持类型:float32

7. triton.language.extra.cann.libdevice.add_ru

OP概述

向上舍入浮点数加法。

原型:

triton.language.extra.cann.libdevice.add_ru(x, y, _builder=None)

返回值: tl.tensor, 返回向上舍入的加法结果。

支持类型:float32

8. triton.language.extra.cann.libdevice.add_rz

OP概述

向零舍入浮点数加法。

原型:

triton.language.extra.cann.libdevice.add_rz(x, y, _builder=None)

返回值: tl.tensor, 返回向零舍入的加法结果。

支持类型:float32

9. triton.language.extra.cann.libdevice.asin

OP概述

计算输入参数的反正弦值。

原型:

triton.language.extra.cann.libdevice.asin(x, _builder=None)

返回值: tl.tensor, 返回输入参数的反正弦值,取值范围 [-π/2, π/2] 弧度。

支持类型:float32

10. triton.language.extra.cann.libdevice.asinh

OP概述

计算输入参数的反双曲正弦值。

原型:

triton.language.extra.cann.libdevice.asinh(x, _builder=None)

返回值: tl.tensor, 返回输入参数的反双曲正弦值。

支持类型:float32

11. triton.language.extra.cann.libdevice.atan

OP概述

计算输入参数的反正切值。

原型:

triton.language.extra.cann.libdevice.atan(x, _builder=None)

返回值: tl.tensor, 返回输入参数的反正切值,取值范围 [-π/2, π/2] 弧度。

支持类型:float32

12. triton.language.extra.cann.libdevice.atan2

OP概述

反正切函数,计算 x / y 的反正切值。

原型:

triton.language.extra.cann.libdevice.atan2(x, y, _builder=None)

返回值: tl.tensor, 返回 x / y 的反正切值,取值范围 [-π, π] 弧度。

支持类型:float32

13. triton.language.extra.cann.libdevice.atanh

OP概述

反双曲正切函数,计算输入参数的反双曲正切值。

原型:

triton.language.extra.cann.libdevice.atanh(x, _builder=None)

返回值: tl.tensor, 返回输入参数的反双曲正切值,取值范围 [-1, 1]。

支持类型:float32

14. triton.language.extra.cann.libdevice.brev

OP概述

位反转函数,反转32位整数的位顺序。

原型:

triton.language.extra.cann.libdevice.brev(x, _builder=None)

返回值: tl.tensor, 返回位反转后的32位整数。

支持类型:int32

15. triton.language.extra.cann.libdevice.byte_perm

OP概述

原型:

triton.language.extra.cann.libdevice.byte_perm(x, y, s, _builder=None)

字节排列操作,从两个32位整数中选择字节组成新整数。输入整数 x 和 y 的字节顺序如下

input[0] = x<7:0>     input[1] = x<15:8>
input[2] = x<23:16>   input[3] = x<31:24>
input[4] = y<7:0>     input[5] = y<15:8>
input[6] = y<23:16>   input[7] = y<31:24>

字节选择参数 s 为32位整数,各比特位与字节选择对应关系如下

selector[0] = s<2:0>    selector[1] = s<6:4>
selector[2] = s<10:8>   selector[3] = s<14:12>

返回值: tl.tensor, 返回值 return[n] := input[selector[n]],n 表示输出整数的第 n 个字节。

支持类型:int32

16. triton.language.extra.cann.libdevice.ceil

OP概述

向上取整,返回大于或等于 x 的最小整数。

原型:

triton.language.extra.cann.libdevice.ceil(x, _builder=None)

返回值: tl.tensor, 返回向上取整的结果。

支持类型:float32

17. triton.language.extra.cann.libdevice.clz

OP概述

计算32位整数的前导零数量。

原型:

triton.language.extra.cann.libdevice.clz(x, _builder=None)

返回值: tl.tensor, 返回输入参数的前导零数量。范围 [0, 32]。

支持类型:int32

18. triton.language.extra.cann.libdevice.copysign

OP概述

生成一个浮点数,其绝对值等于 x 的绝对值,符号与 y 相同。

原型:

triton.language.extra.cann.libdevice.copysign(x, y, _builder=None)

返回值: tl.tensor, 返回一个浮点数,其绝对值等于 x 的绝对值,符号与 y 相同。

支持类型:float32

19. triton.language.extra.cann.libdevice.cos

OP概述

计算输入参数(弧度)的余弦值。

原型:

triton.language.extra.cann.libdevice.cos(x, _builder=None)

返回值: tl.tensor, 返回输入参数的余弦值。

支持类型:float32

20. triton.language.extra.cann.libdevice.cosh

OP概述

计算输入参数的双曲余弦值。

原型:

triton.language.extra.cann.libdevice.cosh(x, _builder=None)

返回值: tl.tensor, 返回输入参数的双曲余弦值。

支持类型:float32

21. triton.language.extra.cann.libdevice.cyl_bessel_i0

OP概述

计算输入参数的修正零阶贝塞尔函数值。

原型:

triton.language.extra.cann.libdevice.cyl_bessel_i0(x, _builder=None)

返回值: tl.tensor, 返回输入参数的修正零阶贝塞尔函数值。

支持类型:float32

22. triton.language.extra.cann.libdevice.div_rd

OP概述

向下舍入浮点数除法。

原型:

triton.language.extra.cann.libdevice.div_rd(x, y, _builder=None)

返回值: tl.tensor, 返回除法结果。

支持类型:float32

23. triton.language.extra.cann.libdevice.div_rn

OP概述

最近偶数舍入浮点数除法。

原型:

triton.language.extra.cann.libdevice.div_rn(x, y, _builder=None)

返回值: tl.tensor, 返回除法结果。

支持类型:float32

24. triton.language.extra.cann.libdevice.div_ru

OP概述

向上舍入浮点数除法。

原型:

triton.language.extra.cann.libdevice.div_ru(x, y, _builder=None)

返回值: tl.tensor, 返回除法结果。

支持类型:float32 |

25. triton.language.extra.cann.libdevice.div_rz

OP概述

向零舍入浮点数除法。

原型:

triton.language.extra.cann.libdevice.div_rz(x, y, _builder=None)

返回值: tl.tensor, 返回除法结果。

支持类型:float32

26. triton.language.extra.cann.libdevice.erfinv

OP概述

逆误差函数,找到满足 x = erf(y) 的值 y。

原型:

triton.language.extra.cann.libdevice.erfinv(x, _builder=None)

返回值: tl.tensor, 返回输入参数的逆误差函数值。

支持类型:float32

27. triton.language.extra.cann.libdevice.exp10

OP概述

以 10 为底的指数函数,计算 10 的 x 次方。

原型:

triton.language.extra.cann.libdevice.exp10(x, _builder=None)

返回值: tl.tensor, 返回 10 的 x 次方的计算结果。

支持类型:float32

29. triton.language.extra.cann.libdevice.exp2

OP概述

以 2 为底的指数函数,计算 2 的 x 次方。

原型:

triton.language.extra.cann.libdevice.exp2(x, _builder=None)

返回值: tl.tensor, 返回 2 的 x 次方的计算结果。

支持类型:float32

30. triton.language.extra.cann.libdevice.exp

OP概述

指数函数,计算 e 的 x 次方。

原型:

triton.language.extra.cann.libdevice.exp(x, _builder=None)

返回值: tl.tensor, 返回 e 的 x 次方的计算结果。

支持类型:float32

30. triton.language.extra.cann.libdevice.expm1

OP概述

计算 e 的 x 次方减 1 的结果。

原型:

triton.language.extra.cann.libdevice.expm1(x, _builder=None)

返回值: tl.tensor, 返回 e 的 x 次方减 1 的计算结果。

支持类型:float32

31. triton.language.extra.cann.libdevice.fast_dividef

OP概述

快速近似除法。

原型:

triton.language.extra.cann.libdevice.fast_dividef(x, y, _builder=None)

返回值: tl.tensor, 返回快速近似除法的结果。

支持类型:float32

32. triton.language.extra.cann.libdevice.fast_expf

OP概述

快速近似指数函数。

原型:

triton.language.extra.cann.libdevice.fast_expf(x, _builder=None)

返回值: tl.tensor, 返回快速近似指数函数的结果。

支持类型:float32

33. triton.language.extra.cann.libdevice.fdim

OP概述

计算 x 与 y 的正差。当 x > y 时,返回 x - y,否则返回 0。

原型:

triton.language.extra.cann.libdevice.fdim(x, y, _builder=None)

返回值: tl.tensor, 返回 x 与 y 之间的正差。

支持类型:float32

34. triton.language.extra.cann.libdevice.ffs

OP概述

查找第一个被置为1的位,返回最低被置为1的位的索引。

原型:

triton.language.extra.cann.libdevice.ffs(x, _builder=None)

返回值: tl.tensor, 返回最低被置为1的位的索引,取值范围 [0, 32]。

支持类型:int32

35. triton.language.extra.cann.libdevice.float_as_int

OP概述

将浮点数的比特位重新解释为32位整数。不进行数值转换。

原型:

triton.language.extra.cann.libdevice.float_as_int(x, _builder=None)

返回值: tl.tensor, 返回将浮点数的比特位重新解释为32位整数的结果。

支持类型:float32

36. triton.language.extra.cann.libdevice.floor

OP概述

向下取整,返回小于或等于 x 的最大整数。

原型:

triton.language.extra.cann.libdevice.floor(x, _builder=None)

返回值: tl.tensor, 返回向下取整的结果。

支持类型:float32

37. triton.language.extra.cann.libdevice.fma

OP概述

融合乘加,计算 x × y + z。

原型:

triton.language.extra.cann.libdevice.fma(x, y, z, _builder=None)

返回值: tl.tensor, 返回融合乘加的结果。

支持类型:float32

38. triton.language.extra.cann.libdevice.fma_rd

OP概述

向下舍入模式下的融合乘加操作。

原型:

triton.language.extra.cann.libdevice.fma_rd(x, y, z, _builder=None)

返回值: tl.tensor, 返回融合乘加的结果。

支持类型:float32

39. triton.language.extra.cann.libdevice.fma_rn

OP概述

最近偶数舍入模式下的融合乘加操作。

原型:

triton.language.extra.cann.libdevice.fma_rn(x, y, z, _builder=None)

返回值: tl.tensor, 返回融合乘加的结果。

支持类型:float32

40. triton.language.extra.cann.libdevice.fma_ru

OP概述

向上舍入模式下的融合乘加操作。

原型:

triton.language.extra.cann.libdevice.fma_ru(x, y, z, _builder=None)

返回值: tl.tensor, 返回融合乘加的结果。

支持类型:float32

41. triton.language.extra.cann.libdevice.fma_rz

OP概述

向零舍入模式下的融合乘加操作。

原型:

triton.language.extra.cann.libdevice.fma_rz(x, y, z, _builder=None)

返回值: tl.tensor, 返回融合乘加的结果。

支持类型:float32

42. triton.language.extra.cann.libdevice.fmod

OP概述

浮点数取模,计算 x / y 的余数,结果与 x 同号。

原型:

triton.language.extra.cann.libdevice.fmod(x, y, _builder=None)

返回值: tl.tensor, 返回浮点数取模的结果。

支持类型:float32

43. triton.language.extra.cann.libdevice.hadd

OP概述

计算 x 和 y 的平均值。

原型:

triton.language.extra.cann.libdevice.hadd(x, y, _builder=None)

返回值: tl.tensor, 返回 x 和 y 的平均值。

支持类型:float32

44. triton.language.extra.cann.libdevice.hypot

OP概述

计算 x 和 y 之间的欧几里得距离。

原型:

triton.language.extra.cann.libdevice.hypot(x, y, _builder=None)

返回值: tl.tensor, 返回 x 和 y 之间的欧几里得距离。

支持类型:float32

45. triton.language.extra.cann.libdevice.lgamma

OP概述

计算输入为 x 的伽马函数绝对值的自然对数。

原型:

triton.language.extra.cann.libdevice.lgamma(x, _builder=None)

返回值: tl.tensor, 返回输入为 x 的伽马函数绝对值的自然对数。

支持类型:float32

46. triton.language.extra.cann.libdevice.log10

OP概述

计算输入为 x 的以 10 为底的对数。

原型:

triton.language.extra.cann.libdevice.log10(x, _builder=None)

返回值: tl.tensor, 返回输入为 x 的以 10 为底的对数。

支持类型:float32

47. triton.language.extra.cann.libdevice.log2

OP概述

计算输入为 x 的以 2 为底的对数。

原型:

triton.language.extra.cann.libdevice.log2(x, _builder=None)

返回值: tl.tensor, 返回输入为 x 的以 2 为底的对数。

支持类型:float32

48. triton.language.extra.cann.libdevice.log

OP概述

计算输入为 x 的以 e 为底的对数。

原型:

triton.language.extra.cann.libdevice.log(x, _builder=None)

返回值: tl.tensor, 返回输入为 x 的以 e 为底的对数。

支持类型:float32

49. triton.language.extra.cann.libdevice.mul24

OP概述

计算 x 和 y 的低24位乘法结果。

原型:

triton.language.extra.cann.libdevice.mul24(x, y, _builder=None)

返回值: tl.tensor, 返回 x 和 y 的低24位乘法结果。

支持类型:int32

50. triton.language.extra.cann.libdevice.mul_rd

OP概述

向下舍入浮点数乘法。

原型:

triton.language.extra.cann.libdevice.mul_rd(x, y, _builder=None)

返回值: tl.tensor, 返回浮点数乘法的结果。

支持类型:float32

51. triton.language.extra.cann.libdevice.mul_rn

OP概述

最近偶数舍入浮点数乘法。

原型:

triton.language.extra.cann.libdevice.mul_rn(x, y, _builder=None)

返回值: tl.tensor, 返回浮点数乘法的结果。

支持类型:float32

52. triton.language.extra.cann.libdevice.mul_ru

OP概述

向上舍入浮点数乘法。

原型:

triton.language.extra.cann.libdevice.mul_ru(x, y, _builder=None)

返回值: tl.tensor, 返回浮点数乘法的结果。

支持类型:float32

53. triton.language.extra.cann.libdevice.mul_rz

OP概述

向零舍入浮点数乘法。

原型:

triton.language.extra.cann.libdevice.mul_rz(x, y, _builder=None)

返回值: tl.tensor, 返回浮点数乘法的结果。

支持类型:float32

54. triton.language.extra.cann.libdevice.mulhi

OP概述

计算 x 和 y 的乘法结果的高 32 位。

原型:

triton.language.extra.cann.libdevice.mulhi(x, y, _builder=None)

返回值: tl.tensor, 返回 x 和 y 的乘法结果的高 32 位。

支持类型:int32

55. triton.language.extra.cann.libdevice.nearbyint

OP概述

将 x 转换为最近邻整数。

原型:

triton.language.extra.cann.libdevice.nearbyint(x, _builder=None)

返回值: tl.tensor, 返回最近邻整数。

支持类型:float32

56. triton.language.extra.cann.libdevice.nextafter

OP概述

计算从 x 方向朝 y 的下一个可表示浮点数。

原型:

triton.language.extra.cann.libdevice.nextafter(x, y, _builder=None)

返回值: tl.tensor, 返回下一个可表示浮点数。

支持类型:float32

57. triton.language.extra.cann.libdevice.popc

OP概述

计算 x 中置位为 1 的数量。

原型:

triton.language.extra.cann.libdevice.popc(x, _builder=None)

返回值: tl.tensor, 返回 x 中置位为 1 的数量, 取值范围 [0, 32]。

支持类型:int32

58. triton.language.extra.cann.libdevice.pow

OP概述

幂函数,计算 x 的 y 次方。

原型:

triton.language.extra.cann.libdevice.pow(x, y, _builder=None)

返回值: tl.tensor, 返回 x 的 y 次方。

支持类型:float32

59. triton.language.extra.cann.libdevice.rcp_rd

OP概述

向下舍入浮点数倒数运算。

原型:

triton.language.extra.cann.libdevice.rcp_rd(x, _builder=None)

返回值: tl.tensor, 返回 1 / x。

支持类型:float32

60. triton.language.extra.cann.libdevice.rcp_rn

OP概述

最近偶数舍入浮点数倒数运算。

原型:

triton.language.extra.cann.libdevice.rcp_rn(x, _builder=None)

返回值: tl.tensor, 返回 1 / x。

支持类型:float32

61. triton.language.extra.cann.libdevice.rcp_ru

OP概述

向上舍入浮点数倒数运算。

原型:

triton.language.extra.cann.libdevice.rcp_ru(x, _builder=None)

返回值: tl.tensor, 返回 1 / x。

支持类型:float32

62. triton.language.extra.cann.libdevice.rcp_rz

OP概述

向零舍入浮点数倒数运算。

原型:

triton.language.extra.cann.libdevice.rcp_rz(x, _builder=None)

返回值: tl.tensor, 返回 1 / x。

支持类型:float32

63. triton.language.extra.cann.libdevice.remainder

OP概述

计算 x 对 y 的余数,满足 r = x - ny,其中 n 是 x / y 的最近邻整数。

原型:

triton.language.extra.cann.libdevice.remainder(x, y, _builder=None)

返回值: tl.tensor, 返回 x 对 y 的余数。

支持类型:float32

64. triton.language.extra.cann.libdevice.rhadd

OP概述

计算 x 和 y 平均值的取整结果。

原型:

triton.language.extra.cann.libdevice.rhadd(x, y, _builder=None)

返回值: tl.tensor, 返回 x 和 y 平均值的取整结果。

支持类型:float32

65. triton.language.extra.cann.libdevice.rint

OP概述

按最近偶数舍入模式计算 x 的最近邻整数。

原型:

triton.language.extra.cann.libdevice.rint(x, _builder=None)

返回值: tl.tensor, 返回 x 的最近邻整数。

支持类型:float32

66. triton.language.extra.cann.libdevice.round

OP概述

按最近偶数舍入模式计算 x 的最近邻整数。

原型:

triton.language.extra.cann.libdevice.round(x, _builder=None)

返回值: tl.tensor, 返回 x 的最近邻整数。

支持类型:float32

67. triton.language.extra.cann.libdevice.rsqrt

OP概述

计算 x 的平方根倒数。

原型:

triton.language.extra.cann.libdevice.rsqrt(x, _builder=None)

返回值: tl.tensor, 返回 x 的平方根倒数。

支持类型:float32

68. triton.language.extra.cann.libdevice.rsqrt_rn

OP概述

按最近偶数舍入模式计算 x 的平方根倒数。

原型:

triton.language.extra.cann.libdevice.rsqrt_rn(x, _builder=None)

返回值: tl.tensor, 返回 x 的平方根倒数。

支持类型:float32

69. triton.language.extra.cann.libdevice.sad

OP概述

计算 |x-y|+z,其中 x 和 y 是有符号整数,z 是无符号整数。

原型:

triton.language.extra.cann.libdevice.sad(x, y, z, _builder=None)

返回值: tl.tensor, 返回 |x-y|+z。

支持类型:float32

70. triton.language.extra.cann.libdevice.saturatef

OP概述

将 x 限制在 [+0.0, 1.0] 范围内。

原型:

triton.language.extra.cann.libdevice.saturatef(x, _builder=None)

返回值: tl.tensor, 返回 x 的饱和值,取值范围 [+0.0, 1.0]。

支持类型:float32

71. triton.language.extra.cann.libdevice.saturatef

OP概述

获取 x 的符号位。

原型:

triton.language.extra.cann.libdevice.signbit(x, _builder=None)

返回值: tl.tensor, 返回 x 的符号位。

支持类型:float32

72. triton.language.extra.cann.libdevice.sin

OP概述

计算输入参数 x (弧度)的正弦值。

原型:

triton.language.extra.cann.libdevice.sin(x, _builder=None)

返回值: tl.tensor, 返回输入 x 的正弦值。

支持类型:float32

72. triton.language.extra.cann.libdevice.sinh

OP概述

计算输入参数 x 的双曲正弦值。

原型:

triton.language.extra.cann.libdevice.sinh(x, _builder=None)

返回值: tl.tensor, 返回输入 x 的双曲正弦值。

支持类型:float32

74. triton.language.extra.cann.libdevice.sqrt

OP概述

计算 x 的平方根值。

原型:

triton.language.extra.cann.libdevice.sqrt(x, _builder=None)

返回值: tl.tensor, 返回 x 的平方根值。

支持类型:float32

75. triton.language.extra.cann.libdevice.tan

OP概述

计算输入参数 x (弧度)的正切值。

原型:

triton.language.extra.cann.libdevice.tan(x, _builder=None)

返回值: tl.tensor, 返回输入 x 的正切值。

支持类型:float32

75. triton.language.extra.cann.libdevice.tanh

OP概述

计算输入参数 x 的双曲正切值。

原型:

triton.language.extra.cann.libdevice.tanh(x, _builder=None)

返回值: tl.tensor, 返回输入 x 的双曲正切值。

支持类型:float32

77. triton.language.extra.cann.libdevice.trunc

OP概述

截断取整,向零舍入到最近邻整数。

原型:

triton.language.extra.cann.libdevice.trunc(x, _builder=None)

返回值: tl.tensor, 返回取整结果。

支持类型:float32