文件最后提交记录最后更新时间
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
[CANNBot]Ndtri算子AscendC实现适配Ascend950 Co-authored-by: Coder_Nerd<shishuai5@huawei.com> # message auto-generated for no-merge-commit merge: !2469 merge master into master [CANNBot]Ndtri算子AscendC实现适配Ascend950 Created-by: Coder_Nerd Commit-by: Coder_Nerd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Ndtri算子AscendC实现适配Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1376 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24691 个月前
README.md

Ndtri

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品 ×
Atlas A2 训练系列产品/Atlas A2 推理系列产品 ×
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×
Kirin xxx ×

功能说明

  • 算子功能:逐元素计算标准正态分布累积分布函数(CDF)的反函数(又称 probit / 分位数函数),将概率张量映射为对应的标准正态分位点。

  • 计算公式:

    y=ndtri(p)=Φ−1(p)=2⋅erf−1(2p−1),p∈(0,1)y = \mathrm{ndtri}(p) = \Phi^{-1}(p) = \sqrt{2} \cdot \mathrm{erf}^{-1}(2p - 1), \quad p \in (0, 1)

    其中 Φ\Phi 为标准正态分布的累积分布函数,erf−1\mathrm{erf}^{-1} 为逆误差函数。

  • 计算策略:基于 Cephes 数学库的分区间有理逼近实现。设 val_sub=e−2≈0.1353\mathrm{val\_sub} = e^{-2} \approx 0.1353res_exp=1−e−2≈0.8647\mathrm{res\_exp} = 1 - e^{-2} \approx 0.8647,按下表选择计算路径:

    区间 条件 计算方法
    中心区 e−2≤p≤1−e−2e^{-2} \le p \le 1 - e^{-2} cal_p0y≈2π⋅((p−0.5)+(p−0.5)2⋅P0/Q0)y \approx \sqrt{2\pi}\cdot((p-0.5) + (p-0.5)^2 \cdot P_0/Q_0)
    左尾 p<e−2p < e^{-2} cal_sub + cal_p12x=−2ln⁡px=\sqrt{-2\ln p}y≈−(x−ln⁡x/x−P1/2/Q1/2)y \approx -(x - \ln x / x - P_{1/2}/Q_{1/2})
    右尾 p>1−e−2p > 1 - e^{-2} cal_sub + cal_p12x=−2ln⁡(1−p)x=\sqrt{-2\ln(1-p)}y≈+(x−ln⁡x/x−P1/2/Q1/2)y \approx +(x - \ln x / x - P_{1/2}/Q_{1/2})
  • 特殊值处理(对齐 PyTorch torch.special.ndtri / Cephes):

    输入 p 输出 y
    0 −∞-\infty
    1 +∞+\infty
    p<0p < 0p>1p > 1 NaN\mathrm{NaN}
    NaN\mathrm{NaN} / ±∞\pm\infty NaN\mathrm{NaN}

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
self 输入 公式中的输入概率张量 p,期望元素取值范围 p ∈ (0, 1),越界或非法值按特殊值规则处理。支持 0-8 维,支持空 Tensor。 FLOAT、FLOAT16、BFLOAT16 ND
out 输出 公式中的输出 y,标准正态分位点。shape 与 dtype 均与 self 一致。 FLOAT、FLOAT16、BFLOAT16 ND

约束说明

  • out 与 self 必须同 shape、同 dtype、同 format。

  • 支持维度范围 0 ~ 8;支持空 Tensor(numel=0 时 short-circuit 返回)。

  • 非连续 Tensor 由 aclnn L2 层通过 Contiguous 兜底处理,Kernel 仅处理连续内存。

  • fp16 / bf16 输入在 Kernel 内部统一 Cast 到 fp32 参与多项式计算,结果再 Cast 回原 dtype。

  • 精度标准(浮点计算类社区标准,并发判定 MERE < Threshold 且 MARE < 10×Threshold):

    数据类型 Threshold
    FLOAT32 2-13
    FLOAT16 2-10
    BFLOAT16 2-7

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_ndtri 参见算子调用完成算子编译和验证。

参考资源