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.1353,res_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_p0:y≈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_p12:x=−2lnpx=\sqrt{-2\ln p},y≈−(x−lnx/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_p12:x=−2ln(1−p)x=\sqrt{-2\ln(1-p)},y≈+(x−lnx/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 < 0 或 p>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 | 参见算子调用完成算子编译和验证。 |