您好,感谢反馈!明确逻辑元素与 NZ 存储位置的对应关系、补齐区域语义及示例,确实有助于独立校验输出。按公开版本 584b2ea6 核对,需要先区分已有说明与仍待补充的内容。
已有规则与参考映射
NpuFormatCast 的 A2/A3 功能说明已经给出 C0 = 32B / sizeof(additionalDtype),参数表也说明 additionalDtype=-1 默认使用源类型。因此,本单 FP16、additionalDtype=-1 或 FP16 的 ND→NZ 场景中,C0=16。目前资料主要缺少的是完整的元素索引映射及边界区域承诺,不能概括为完全没有 C0 说明。
以逻辑矩阵 [..., M, N] 表示输入,形状计算源码返回的 NZ 存储形状为:
[..., ceil(N/C0), ceil(M/16), 16, C0]
仓内测试参考实现通过补齐、reshape 和 transpose 给出下列有效元素映射,前导批次索引保持不变:
NZ[..., n1, m1, m0, n0] = ND[..., 16*m1 + m0, C0*n1 + n0]
这也说明两个内层轴分别是固定的 16 和 C0,不能对所有类型都写成两个 C0。上述 FP16 条件下,4×4 对应 [1,1,16,16],17×17 对应 [2,2,16,16];16×16 是单块,按该参考映射展平后顺序保持不变。因此,报告中的“顺序打散”仍需结合实际参数、存储元数据和读回方式复核,当前不能仅凭值集合不变判定转换正确,也不能据此确认设备输出有误。
资料补充方向
建议在两接口资料中补充适用平台、类型及格式条件下的映射公式、逻辑 shape 与 storage shape 示例,并明确哪些补齐位置可被校验。参考代码使用零补齐,但它属于测试参考,尚不足以单独承诺 A2 所有设备转换路径的补齐字节均为零,本次也未新增 NPU 复测。
TransMatmulWeight 还需要说明与权重大小计算接口配套分配容量,以及转换后存储形状/格式元数据的更新。有效元素可按索引逐一校验,也可配合已支持的 NZ→ND 回转检查逻辑数据;这些比仅比较值集合更有辨识力。后续将继续核对 A2 实际转换和补齐区域行为,跟踪两份资料的映射说明与示例一致性。


aclnnTransMatmulWeight / aclnnNpuFormatCast 资料未给出 NZ 存储排布,无法判断输出是否正确
1. 环境
Ascend 910B2(A2)单卡;CANN 9.2.0;npu-smi 26.1.1;aclnn 单算子直调。
2. 问题
aclnnTransMatmulWeight(trans_data/docs/aclnnTransMatmulWeight.md)与aclnnNpuFormatCast(npu_format_cast/docs/aclnnNpuFormatCast.md)的输出都是私有格式(FRACTAL_NZ)的存储序:
格式根据亲和性进行 ND 或私有格式的转换」——没有说转换后的元素排布;
dstFormat/additionalDtype/actualFormat的枚举取值表,同样没有给
dstTensor的元素排布公式。结果是:调用方(以及算子的自测)拿到输出后,没有任何资料依据能判断它是否正确,
只能靠「值集合不变」这类弱不变量,或者干脆不做数值校验。
实测(fp16、src = 16x16、值 0..255 唯一):
这一业界约定去反推;对 C0 的取值(16 / 32)与实际 itemsize 的关系也无说明。
3. 复现
4. 期望
在两份资料的「功能说明」里补:
aclnnNpuFormatCastCalculateSizeAndFormat已有组合表,但缺排布)。5. 实际
两份资料都只描述「转成亲和格式」,不给排布;因此这类接口的数值正确性
在资料层面不可判定,只能靠实现自查。