已关闭
[Requirement|需求建议]: 新增 besseli1e算子 #2216
kangjiaming创建于 7月10日关闭于 7月13日
7月10日 修改了issue 的描述
7月10日 关联了pull request:besseli1e算子开发
陈思
7月12日 评论:
7月12日 评论:
/assign @kangjiaming


7月12日 将 kangjiaming 设为负责人
7月13日 关闭了 issue
7月13日 添加了label:resolved
/assign @kangjiaming


[Requirement|需求建议]: 新增 besseli1e算子 #2216
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
一、背景信息 (必填)
BesselI1e 算子用于计算指数缩放的第一阶修正贝塞尔函数(Exponentially Scaled Modified Bessel Function of the First Kind, Order 1)。
计算公式:
outi=e−∣inputi∣⋅I1(inputi)
其中 I1(x) 是第一阶修正贝塞尔函数,指数缩放因子 e−∣x∣ 使得函数在大参数值时数值稳定,避免普通贝塞尔函数在参数较大时出现的数值溢出问题。
该算子在物理学(热传导、波动问题)、信号处理、统计学(von Mises 分布)等领域有广泛应用。TensorFlow 和 SciPy 均已提供该算子的实现(
tf.math.bessel_i1e/scipy.special.i1e)。二、价值/作用 (必填)
tf.math.bessel_i1e算子,提升 Ascend 平台对主流框架模型的兼容性。三、设计方案 (必填)
3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
当前仅支持图模式调用,通过 GE 算子 IR(
bessel_i1e_proto.h)构图方式使用。3.2 总体设计
BesselI1e 为 Elementwise 算子,对输入 Tensor 逐元素计算 e−∣x∣⋅I1(x)。
整体实现分为三层:
bessel_i1e_proto.h),定义算子输入输出及属性。bessel_i1e_def.cpp)、形状推导(bessel_i1e_infershape.cpp)、Tiling 参数计算(按架构分目录arch32/、arch35/)。bessel_i1e_apt.cpp),采用分段多项式逼近算法。3.2.1 算子支持的数据类型
输入与输出的数据类型和形状必须一致。
3.2.2 host侧设计
算子定义(bessel_i1e_def.cpp):
BesselI1e,定义 1 个输入x和 1 个输出y。DynamicCompileStaticFlag(true)、DynamicRankSupportFlag(true)、DynamicShapeSupportFlag(true)、PrecisionReduceFlag(true)。ascend910b、ascend910_93、ascend950。形状推导(bessel_i1e_infershape.cpp):
*output_shape = *input_shape。Tiling 参数计算(arch35/bessel_i1e_tiling_arch35.cpp):
3.2.3 kernel侧设计
核函数入口(bessel_i1e_apt.cpp):
bessel_i1e,采用 AIV_ONLY 模式(纯向量计算,无需 Cube 单元)。REGISTER_TILING_DEFAULT注册 Tiling 数据结构,从 GM 地址读取 Tiling 参数。计算实现(arch35/bessel_i1e.h):
SEGMENT_POINT = 3.75,将计算区间分为 ∣x∣≤3.75 和 ∣x∣>3.75 两段。3.3 支持硬件
对应硬件配置标识:
ascend910b、ascend910_93、ascend950。3.4 算子约束限制
💡 备注(选填)
tf.math.bessel_i1e。scipy.special.i1e。math/bessel_i1e/目录。