Pdist

产品支持情况

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

功能说明

  • 算子功能:Pdist算子计算行向量两两之间的p-范数距离(pairwise p-norm distances),输出为上三角行优先的一维向量。等价于 torch.nn.functional.pdist。

  • kernel 实现形态:PyPTO DSL(op_kernel/pdist.py),经 enable_pypto_kernel 在 configure 阶段做 codegen 并以 pypto opc 形式交付(MIX 发射,AIC 空转、计算全部位于 Vector 核)。

  • 计算公式:

yidx=∥xi−xj∥p=(∑k=0M−1∣xi,k−xj,k∣p)1/p,idx=i⋅(2N−i−1)2+(j−i−1)y_{idx}=\left\|x_{i}-x_{j}\right\|_{p}=\left(\sum_{k=0}^{M-1}\left|x_{i,k}-x_{j,k}\right|^{p}\right)^{1/p},\quad idx=\frac{i\cdot(2N-i-1)}{2}+(j-i-1)

0≤i<j≤N−10\le i<j\le N-1

p 分支语义:

p 取值 语义
p = 0 统计不相等的维度数(Hamming 距离),NaN 维度计为不相等
p = +inf 最大绝对差(Chebyshev 距离),忽略 NaN 维度
0 < p < +inf 幂和的 1/p 次方(Minkowski 距离),p=2 为欧氏距离、p=1 为曼哈顿距离

NaN 语义(对齐 GPU/CUDA):p=0 时 NaN 维度计为不相等;p=+inf 忽略 NaN 维度(输出非 NaN 维度的最大绝对差,全 NaN 行对输出 0);一般 p(非 0/0.5/1/2)逐对检测 NaN 维度并输出 NaN;p∈{0.5, 1, 2} 通过 IEEE 算术自然传播。

fp16 输入:片上中间累加一律使用 FP32,出口窄化回 FP16。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 输入张量,shape为(N, M),N≥2,M≥1。行i与行j(j>i)组成一个行对参与计算。要求行主序连续。 FLOAT16、FLOAT32 ND
p 属性 范数阶,p≥0或+inf,默认2.0(欧氏距离)。p=0统计不相等维度数,p=+inf取最大绝对差,0 FLOAT -
y 输出 两两距离向量,shape为(N*(N-1)/2,),上三角行优先排列,dtype与x一致。 FLOAT16、FLOAT32 ND

约束说明

  • x必须为二维(N, M)行主序连续张量,y的dtype必须与x一致。
  • y的shape必须为(N*(N-1)/2,)。
  • fp16输入的中间累加使用FP32,出口窄化回FP16。
  • 平台差异:
    • p=+inf且输入含NaN时:Ascend 950PR&950DT系列产品忽略NaN维度(输出非NaN维度的最大绝对差,全NaN行对输出 0),对齐GPU/CUDA语义;其余平台会将NaN传播至输出。
规格项 规格 规格说明
N 2~65535 行数,至少为2(至少一个行对)。
M 1~65535 每行维度数,超过片上内存时自动分块规约。
p [0, +inf) p≥0或+inf;p=0为Hamming距离,p=+inf为Chebyshev距离,p<0或NaN拒绝为参数错误。
dtype FLOAT16/FLOAT32 输入输出同dtype;fp16中间计算使用FP32累加。

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_pdist 通过aclnnPdist接口方式调用pdist算子,覆盖fp32全部p分支、多M分块与fp16。
aclnn调用(Forward) test_aclnn_pdist_forward 通过aclnnPdistForward接口方式调用(标量 p 复合入口)。
GEIR调用 test_geir_pdist 通过GE IR图模式(RunGraph)方式调用pdist算子。