CANN逐元操作指南 逐元操作【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills1. 概述HFusion 方言的逐元操作基于 Linalg 结构化操作范式通过 OpDSLYAML声明式定义。每个操作包含一个 Region描述逐元计算的标量逻辑。操作支持类型转换cast和多种函数选择。源码参考HFusionNamedStructuredOps.yaml2. 操作列表2.1 load从输入张量逐元加载数据到输出张量不执行数值类型转换。操作数类型角色Iinput_tensor (type_var: T1)输入Ooutput_tensor (type_var: U)输出赋值O I2.2 store将输入张量逐元存储到输出张量支持原子操作语义。操作数类型角色Iinput_tensor (type_var: T1)输入Ooutput_tensor (type_var: U)输出atomic_kindatomic_kind_attr (默认: NONE)原子操作类型赋值O atomic_kind(I)2.3 elemwise_unary对输入张量逐元应用一元函数。操作数类型角色Iinput_tensor (type_var: T1)输入Ooutput_tensor (type_var: U)输出fununary_fn_attr (默认: sqrt)一元函数选择casttype_fn_attr (默认: cast_signed)类型转换方式赋值O fun(cast(I))支持的unary_fn值函数名说明reluReLU 激活sqrt平方根rsqrt平方根倒数rec倒数vnot按位取反tanh双曲正切sin正弦cos余弦atan反正切tan正切absi绝对值erf误差函数log2以 2 为底对数log10以 10 为底对数log1plog(1x)exp22^xexpm1e^x - 1ilogb指数部分2.4 elemwise_binary对两个输入张量逐元应用二元函数。操作数类型角色lhsinput_tensor (type_var: T1)左操作数rhsinput_tensor (type_var: T2)右操作数Ooutput_tensor (type_var: U)输出funbinary_fn_attr (默认: vand)二元函数选择casttype_fn_attr (默认: cast_signed)类型转换方式赋值O fun(cast(lhs), cast(rhs))支持的binary_fn值函数名说明vor按位或vand按位与vxor按位异或minf浮点最小值maxf浮点最大值powf浮点幂mod取模shli左移shrsi算术右移shrui逻辑右移ldexpldexpceildivsi有符号向上取整除法ceildivui无符号向上取整除法floordivsi有符号向下取整除法powi整数幂minnumfIEEE 浮点最小值maxnumfIEEE 浮点最大值modui无符号取模divfhp高精度除法2.5 compare对两个输入张量逐元执行比较操作。操作数类型角色lhsinput_tensor (type_var: T1)左操作数rhsinput_tensor (type_var: T1)右操作数Ooutput_tensor (type_var: U)输出compare_fncompare_fn_attr (默认: veq)比较函数选择赋值O compare_fn(lhs, rhs)支持的compare_fn值函数名说明veq等于vne不等于vle有符号小于等于vlt有符号小于vge有符号大于等于vgt有符号大于vule无符号小于等于vuge无符号大于等于vugt无符号大于vult无符号小于2.6 select根据条件张量逐元选择值。操作数类型角色condinput_tensor (type_var: U)条件lhsinput_tensor (type_var: T1)真值rhsinput_tensor (type_var: T1)假值Ooutput_tensor (type_var: T1)输出赋值O select(cond, lhs, rhs)2.7 cast逐元类型转换支持舍入模式控制。操作数类型角色Iinput_tensor (type_var: T1)输入Ooutput_tensor (type_var: U)输出round_moderound_mode_attr (默认: RINT)舍入模式enable_overflowenable_overflow_attr (默认: true)溢出检测enable_saturateenable_saturate_attr (默认: false)饱和截断casttype_fn_attr (默认: cast_signed)类型转换方式unsigned_modeunsigned_mode_attr (默认: SI2SI)无符号转换模式赋值O round(cast(I), round_mode, unsigned_mode)2.8 bitcast逐元位转换不改变底层位模式。操作数类型角色Iinput_tensor (type_var: T1)输入Ooutput_tensor (type_var: U)输出赋值O bitcast(I)3. MLIR 示例3.1 逐元一元操作%result hfusion.elemwise_unary ins(%input : tensor128x256xf16) outs(%init : tensor128x256xf32) unary_fn sqrt cast cast_signed3.2 逐元二元操作%result hfusion.elemwise_binary ins(%lhs, %rhs : tensor128x256xf16, tensor128x256xf16) outs(%init : tensor128x256xf16) binary_fn vadd cast cast_signed3.3 比较操作%result hfusion.compare ins(%lhs, %rhs : tensor128x256xf32, tensor128x256xf32) outs(%init : tensor128x256xi1) compare_fn vgt3.4 类型转换%result hfusion.cast ins(%input : tensor128x256xf32) outs(%init : tensor128x256xi8) round_mode FLOOR cast cast_signed【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考