已合并
feat(knowledge): 新增 MMAD 与矢量/掩码接口边界值输入验收 Runbook #181
feat(knowledge): 新增 MMAD 与矢量/掩码接口边界值输入验收 Runbook #181
已合并
bianque创建于 10 天前
共 4 个文件变更+237-0
@@ -214,3 +214,6 @@
214- [分核 partial 的初始化、参与者集合与最终归并](inter_core_reduction_contract.md):用普通 UnsortedSegmentSum 的 int64 两阶段实现说明分片布局、空核和初始化顺序;按源码观察给出采用检查,不冒充修复轨迹或设备归因结果。214- [分核 partial 的初始化、参与者集合与最终归并](inter_core_reduction_contract.md):用普通 UnsortedSegmentSum 的 int64 两阶段实现说明分片布局、空核和初始化顺序;按源码观察给出采用检查,不冒充修复轨迹或设备归因结果。
215- [直接 DFT 的向量化轴、FP32 入口与缓冲预算](rfft_dft_vectorization_axes_and_buffer_budget.md):从两份完整实现比较按输入位置归约与按频率 Lane 累加的依赖,并核对真实 FP32 入口、对齐长度和 InitBuffer 请求边界。215- [直接 DFT 的向量化轴、FP32 入口与缓冲预算](rfft_dft_vectorization_axes_and_buffer_budget.md):从两份完整实现比较按输入位置归约与按频率 Lane 累加的依赖,并核对真实 FP32 入口、对齐长度和 InitBuffer 请求边界。
216- [重复索引更新的目标行所有权](target_row_ownership_for_duplicate_indices.md):在 dense 唯一 AIV 编号前提下,用目标行取模归属保证同一目标的更新由同一 owner 按输入顺序处理。216- [重复索引更新的目标行所有权](target_row_ownership_for_duplicate_indices.md):在 dense 唯一 AIV 编号前提下,用目标行取模归属保证同一目标的更新由同一 owner 按输入顺序处理。
217+ 
218+- [Mmad 与 MmadMx 边界值输入验收与失败归类](mmad_boundary_value_input_acceptance.md):Mmad/MmadMx 在 inf、nan、dtype 极值、零维与量化类型入参下的期望输出口径不同:两族加法阶段的正负 inf 相加结果相反,量化类型会在入参侧折叠 inf/nan。本卡给出按接口族与饱和模式分列的判定步骤、双 oracle 校验法与四类失败归因顺序;来源限定 Mmad 为 950/A3/A2、MmadMx 为 950。
219+- [Memory/Reg 矢量接口边界值输入验收(含原子操作与掩码)](vector_interface_boundary_value_acceptance.md):Memory 与 Reg 矢量接口、原子操作、Mask 四份边界值来源的平台范围与表列口径各不相同:Memory/Reg 与原子按「INF/NAN 模式 / 饱和模式」双列,Mask 则只给 isSetMask 支持矩阵。本卡给出逐族取期望的判定步骤、按产品、模式和具体接口表取期望的校验法、Normal 连续/逐比特与 Counter 模式的区分,以及「先小数组后真实 shape」的验收顺序。
@@ -0,0 +1,91 @@
1+---
2+type: Runbook
3+title: Mmad 与 MmadMx 边界值输入验收与失败归类
4+description: Mmad/MmadMx 在 inf、nan、dtype 极值、零维与量化类型入参下的期望输出口径不同:两族加法阶段的正负 inf 相加结果相反,量化类型会在入参侧折叠 inf/nan。本卡给出按接口族与饱和模式分列的判定步骤、双 oracle 校验法与四类失败归因顺序;来源限定 Mmad 为 950/A3/A2、MmadMx 为 950。
5+tags:
6+- task.testing
7+- topic.precision
8+- topic.programming_model.execution_unit.cube
9+status: stable
10+sources:
11+- resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/mmad_interface_boundary_value_summary.md
12+ role: primary
13+- resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/mmad_mx_interface_boundary_value_summary.md
14+ role: primary
15+created_at: '2026-10-28T08:00:00Z'
16+updated_at: '2026-10-28T08:00:00Z'
17+platforms:
18+- '950'
19+- a3
20+- a2
21+---
22+ 
23+# Mmad 与 MmadMx 边界值输入验收与失败归类
24+ 
25+## 适用范围
26+ 
27+- **接口族与平台不是同一集合**:`Mmad` 边界值汇总声明对 Ascend 950PR&950DT、Atlas A3、Atlas A2 生效;`MmadMx` 汇总只声明 Ascend 950PR&950DT。把 MmadMx 的条目用到 A2/A3,或反过来,都是越界推断。
28+- 适用任务:为 MMAD 类矩阵乘接口补特殊值用例、判定一次边界值失败是"输入越界/模式没开对"还是"实现缺陷"。
29+- **本卡来源只有两份 appendix 汇总**(见 `sources`)。接口约束、地址对齐、尺寸语义来自相邻接口卡,正文中按链接逐条标注,不并入本卡断言;对齐类条款不在本卡来源范围内。
30+ 
31+## 第一个变量是"饱和模式",不是"接口"
32+ 
33+两份汇总的表列口径并不相同,混读会直接算错期望值:
34+ 
35+- **Mmad 汇总只给 INF/NAN 模式(非饱和模式)一张表**,表注写明"INF/NAN 模式(非饱和模式)下……"。该表**没有**饱和模式列,饱和模式的输出不能从这张表推。
36+- **MmadMx 汇总同时给两张**:INF/NAN 模式边界值表,以及独立的「饱和模式边界值汇总」段落(先饱和再按数值计算)。
37+- 饱和开关属于控制寄存器/接口配置,不在本卡表格内;取值与默认值见 [SetSaturationFlag](../../apis/simd_api/basic_api/special_register_access/set_saturation_flag_isasi.md) 与 [Mmad](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad.md) 的「特殊值/边界值约束说明」。验收时必须先记录本次用例跑的是哪种模式。
38+ 
39+## 两族最容易互套错的一条:加法阶段的正负 inf
40+ 
41+| 场景(加法阶段) | Mmad 期望 dst | MmadMx 期望 dst |
42+|---|---|---|
43+| A=+inf,B=-inf | **nan** | **-inf** |
44+| A=-inf,B=+inf | **nan** | **+inf** |
45+ 
46+两族在乘法阶段的口径一致(inf×非零→±inf、inf×0→nan、含 nan→nan、溢出按正负给 ±inf),**差异只在加法阶段**。因此跨接口复用期望值时,乘法点可以复用,加法点必须逐族重取。MmadMx 的这条与 IEEE 754 的"inf + (−inf) = nan"也不一致,不能用 IEEE 754 反推。
47+ 
48+## 量化类型:inf/nan 在"入参侧"就被折叠
49+ 
50+MmadMx 支持的低精度量化类型没有完整的 inf/nan 表示,边界值会先被换成有限数值,再去计算:
51+ 
52+- `fp4x2_e1m2_t` / `fp4x2_e2m1_t` 无 ±inf/nan 定义:+inf → `1.75` / `6`,−inf → `-1.75` / `-6`,nan → `0.0`。
53+- `fp8_e4m3fn_t` 只有 nan 定义、无 ±inf 定义:+inf / −inf 都被转换为 nan。
54+ 
55+验收含义:如果用例在**入参侧**注入 inf 并期望输出 ±inf,量化类型下该期望本来就错——注入点先折叠,实际参与运算的是有限值。这类用例应按"入参折叠后"重新计算期望,而不是记为失败。
56+ 
57+## 来源内部存在张力的一处:nan 输入
58+ 
59+MmadMx 汇总的边界值表给出"nan 输入 → nan 输出",但同一份来源的「边界值说明」又写"MmadMx 计算应避免 nan 输入,否则可能会产生执行报错"。二者不能同时当作无条件结论。验收取更严口径:**nan 输入不写成"必须正常输出 nan"的正向用例**;确需覆盖时按"允许报错"单独登记,并记录报错信息,不计入功能失败。
60+ 
61+## 判定步骤(按序执行)
62+ 
63+1. **先判是不是 NOP**:按 [Mmad](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad.md) 与 [MmadMx](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad_mx.md) 的约束说明,M、K、N 任一为 0 时指令不执行(空操作)。K=0/N=0 用例的期望是"输出保持原值/不被改写",不是"输出 0";若 dst 被清零,先查是不是用例自己的预置或清零步骤造成的。
64+2. **再判模式**:确认饱和开关的实际状态,并与所用表列对齐。用 Mmad 表去核对饱和模式结果,或用 MmadMx 饱和段去核对 INF/NAN 模式结果,都会得到假失败。
65+3. **再判量化折叠**:确认 A/B 的实际 dtype。若为 `fp4x2_*` 或 `fp8_e4m3fn_t`,先把注入的 inf/nan 按上节折叠,再重算期望。
66+4. **再判尺寸/分形边界**:M/K/N 非 16 的倍数时,无效数据会占满分形空间但不参与计算(见 [Mmad](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad.md) 约束说明)。期望值只按有效形状算;把无效区数值纳入比对会产生假失败。
67+5. **最后才判实现缺陷**:以上四项都排除后,才把"逐元素与表列期望不符"记为实现问题,并附上模式、dtype、M/K/N、注入点和期望来源条目。
68+ 
69+## 验证方式
70+ 
71+- **双 oracle**:期望值有两条独立来源——IEEE 754 与来源表列。两者冲突时以**表列为准**并按族记录(加法阶段正负 inf 即典型冲突点)。两族都一致的点,才可用 IEEE 754 批量生成期望。
72+- **单元素优先**:先在最小形状(能覆盖一个 16×16 分形的最低维度)上单点注入特殊值,确认该点行为后再放大。放大后若失败,差异必然来自 shape/分形/循环边界而非特殊值语义。
73+- **一模式一跑**:非饱和与饱和模式各跑一轮同一用例集,两轮结果分开归档;不要把两轮混在同一份通过率里。
74+- **对齐前置不在本卡**:地址对齐(dst L0C 1024B、A/B 512B、bias 64B)与 K 方向对齐开关 `kDirectionAlign`(仅 float 相关,`ceil(K/8)*8` 或 `ceil(K/16)*16`)见 [Mmad](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad.md) 与 [K方向对齐约束](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute_key_features/k_direction_alignment_constraint.md)。本卡只判定"边界值输入",不判定对齐违规。
75+ 
76+## 与相邻卡的分工
77+ 
78+- 原文镜像:[Mmad 接口边界值汇总](../../apis/appendix/mmad_interface_boundary_value_summary.md)、[MmadMx 接口边界值汇总](../../apis/appendix/mmad_mx_interface_boundary_value_summary.md)(type=API,逐表原文)。本卡是判定流程与失败归因,不复制全部行。
79+- 尺寸/对齐/同步等接口约束在 [Mmad](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad.md)、[MmadMx](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute/mmad_mx.md) 与 [K方向对齐约束](../../apis/simd_api/basic_api/cube_compute_isasi/mmad_compute_key_features/k_direction_alignment_constraint.md);本卡不重复其参数表。
80+- 饱和开关语义见 [SetSaturationFlag](../../apis/simd_api/basic_api/special_register_access/set_saturation_flag_isasi.md);本卡只用它区分模式,不展开各 `SaturationMode` 的适用范围。
81+- 用例构造侧限制:[TTK 取值域仅整张量语义,单元素NaN/Inf注入用例壳不物化](ttk_value_range_no_single_element_nan_inf_injection.md) 说明单元素注入在 TTK 下不物化。本卡的"单元素优先"需走 `manual_input_binaries` 或 C++ ST。
82+- 参考值生成本身会溢出:[case_gen 极端量级分布产 overflow/underflow 参考值](case_gen_extreme_magnitude_distributions_overflow_refs.md) 是 golden 侧问题;本卡是接口侧期望口径。
83+- 实现侧 inf 传播陷阱(算法引入 inf−inf)见 [Two-Product split 遇 inf 产 NaN 破坏 inf 传播](../precision/two_product_split_inf_nan_pollution.md),与本卡的接口期望判定互补。
84+ 
85+## 失效边界
86+ 
87+- 本卡所有期望值来自固定提交中的两份 appendix 汇总,**本卡未做硬件实测**;表值是**文档值**,不是实测上限。
88+- Mmad 的饱和模式输出**不在本卡来源内**(该汇总只给 INF/NAN 模式表):饱和模式验收必须回到接口卡与 `SetSaturationFlag`,不能引用本卡表格。
89+- 上述例外(inf×0、inf+(−inf))与"溢出按正负取 ±inf"是该两份汇总的声明;接口若另有备注,以接口卡为准。
90+- 平台范围按族限定:Mmad 为 950/A3/A2,MmadMx 仅 950。MmadMx 条目不可外推到 A2/A3。
91+- 本卡不覆盖 dtype 转换(Cast)过程中的边界值行为,也不覆盖 Fixpipe 搬出阶段的量化饱和。
@@ -0,0 +1,115 @@
1+---
2+type: Runbook
3+title: Memory/Reg 矢量接口边界值输入验收(含原子操作与掩码)
4+description: Memory 与 Reg 矢量接口、原子操作、Mask 四份边界值来源的平台范围与表列口径各不相同:Memory/Reg 与原子按「INF/NAN 模式 / 饱和模式」双列,Mask 则只给 isSetMask 支持矩阵。本卡给出逐族取期望的判定步骤、按产品、模式和具体接口表取期望的校验法、Normal 连续/逐比特与 Counter 模式的区分,以及「先小数组后真实 shape」的验收顺序。
5+tags:
6+- task.testing
7+- topic.implementation.masking
8+- topic.alignment
9+- topic.precision
10+status: stable
11+sources:
12+- resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/memory_vector_compute_interface_boundary_value_summary.md
13+ role: primary
14+- resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/reg_vector_compute_interface_boundary_value_summary.md
15+ role: primary
16+- resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/atomic_operations_interface_boundary_value_summary.md
17+ role: supporting
18+- resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/Mask_interface_summary.md
19+ role: supporting
20+created_at: '2026-10-28T08:00:00Z'
21+updated_at: '2026-10-28T08:00:00Z'
22+platforms:
23+- '950'
24+- a3
25+- a2
26+---
27+ 
28+# Memory/Reg 矢量接口边界值输入验收(含原子操作与掩码)
29+ 
30+## 适用范围
31+ 
32+四份来源的平台声明不是同一个集合,**不能把任一份的行套到另一份的平台上**:
33+ 
34+| 来源 | 声明生效平台 | 覆盖内容 |
35+|---|---|---|
36+| Memory 矢量边界值汇总 | Atlas A3、Atlas A2 | 各类 Memory 矢量接口的双模式边界值表,另含一张"输出 inf/nan 场景总结" |
37+| Reg 矢量边界值汇总 | Ascend 950PR&950DT | 各类 Reg 矢量接口的双模式边界值表,**无**汇总场景表,直接按接口族分节 |
38+| 原子操作边界值汇总 | Atlas A3、Atlas A2 | SetAtomicAdd / SetAtomicMax / SetAtomicMin 三张双模式表 |
39+| Mask 接口汇总 | Atlas A3、Atlas A2 | 各接口 `isSetMask` 模板参数支持情况矩阵 |
40+ 
41+本卡判定"边界值输入下的期望输出与验收顺序";精度档位、denormal、ulp 与软仿差异另有专卡(见分工)。**source 未涉及 denormal/subnormal**,本卡不写该口径。
42+ 
43+## 第一步:先确定跑的是哪种模式
44+ 
45+Memory 矢量、Reg 矢量、原子操作三份来源都按同一套二分给出结果,但列名和覆盖程度不同:
46+ 
47+- **INF/NAN 模式(非饱和模式)**:计算结果为 inf / -inf / nan 时按原样输出;**输出为整数时**,有限的超范围数值按目标类型位数截断、保留低位。
48+- **饱和模式**:inf 和 -inf 被饱和为 MAX 和 MIN 输出,nan 被饱和为 0 输出;输出为整数时,超范围有限值被饱和为目标类型的最大值/最小值。
49+- 饱和模式按数据类型分类设置(`SaturationMode::FLOAT` / `INT` / `CAST` / `FLOAT8` 等),各模式影响的类型与默认开关不同,见 [SetSaturationFlag](../../apis/simd_api/basic_api/special_register_access/set_saturation_flag_isasi.md)。Memory 与 Reg 汇总对此只写"按数据类型分类设置,请参考该接口";原子操作汇总则直接给出 INF/NAN 与饱和两列。
50+- 来源明确声明:**绝大部分场景下 INF/NAN 模式输出与 IEEE 754 一致,不一致会在对应接口处备注**。该说明须在对应来源和接口范围内使用,不为其他族提供统一 oracle。
51+ 
52+## 第二步:oracle 用三步法,不要单靠 IEEE 754
53+ 
54+1. **先定位产品、接口族、dtype 与模式的来源条目**。仅当对应来源明确声明时,才用 IEEE 754 生成非饱和浮点期望;不能对所有 Reg 接口设置统一默认。
55+2. **核对该族的汇总表与具体接口表**。Memory 汇总有一张"浮点数计算输出 inf/nan 的场景"表,列出的例外包括:`exp(-inf)=0`;`inf * 0 = nan`;`inf + (-inf) = nan`;非 nan 且非 0 的值除以 0(如 Div / Sqrt / Reciprocal 一类)得到 inf;`ln(0.0) = -inf`、`ln(-0.0) = -inf`;`rsqrt(0.0) = inf`、`rsqrt(-0.0) = -inf`;`(-inf) - (-inf) = nan`。另注:nan 不区分正负,inf 区分正负。
56+3. **再逐接口查备注**:来源把"与 IEEE 754 不一致"的披露责任放在具体接口条目上。只按 1、2 两步批量套,遇到有备注的接口会得到假失败。
57+ 
58+注意 Reg 汇总**没有**这张汇总例外表——它的例外只能在各接口族的表内逐条看到。把 Memory 的例外表当成两族共用,会漏掉 Reg 侧接口级差异。
59+ 
60+## 第三步:把"掩码"拆成三层再判
61+ 
62+**(a) 接口形态**:`isSetMask` 的支持矩阵按「Tensor 前 n 个数计算」与「Tensor 高维切分计算」两种形态分列,同一接口在两种形态下可能一个是"有 isSetMask"、另一个是"无 isSetMask"。表中 `-` 表示**不存在该类型接口**,既不是"不支持"也不是"未声明"。该矩阵只对 Atlas A3/A2 声明。
63+ 
64+**(b) 设置方式**:分为接口内已设置 Mask(内部调用 SetMaskCount / SetVectorMask / SetMaskNorm / ResetMask)、由模板参数控制(`isSetMask=true` 接口内设置;`false` 由调用方在接口外设置)、以及接口不支持或无需设置 Mask 三类。逐接口归属见 [Mask 接口汇总](../../apis/appendix/mask_interface_summary.md)。
65+ 
66+**(c) 两个易错点**:
67+- **"有 isSetMask 但不起作用"**:Compare 与 Select 的高维切分形态即属此类。这类接口不能靠外部 `SetVectorMask` 改变参与计算的元素;Select 要在外部设掩码,须改用不传 mask 参数的重载。
68+- **全 1 与全 0 不对称**:`ResetMask` 把 mask 恢复为默认值**全 1**,语义是"每次迭代内所有元素都参与运算"(见 [ResetMask](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/reset_mask.md))。全 0 掩码的专门行为在四份来源中**均无条款**,本卡不给出期望值,需按目标接口文档另行确认。
69+ 
70+## 第四步:区分"元素数"与"逐比特"
71+ 
72+这不是同一个参数的两种叫法,而是**先选模式、再选含义**:
73+ 
74+- **Counter 模式**([SetMaskCount](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/set_mask_count.md)):mask 表示**整个矢量计算参与计算的元素个数**;此模式不需要开发者感知迭代次数、也不需要处理非对齐尾块,迭代次数由 Vector 单元自动推断。
75+- **Normal 模式**([SetMaskNorm](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/set_mask_norm.md)):系统默认模式,支持开发者配置迭代次数。该模式下 mask 有**两种含义**([SetVectorMask](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/set_vector_mask.md)):
76+ - **连续模式**:前面连续多少个元素参与计算。取值范围随操作数位宽变化:16 位 `[0,128]`、32 位 `[0,64]`、64 位 `[0,32]`。
77+ - **逐比特模式**:按位控制,bit=1 参与。16 位时 maskHigh/maskLow ∈ `[0,2^64-1]` 且不同时为 0;32 位时 maskHigh=0、maskLow ∈ `[0,2^64-1]`;64 位时 maskHigh=0、maskLow ∈ `[0,2^32-1]`。
78+ 
79+验收含义:**来源推荐使用 Counter 模式处理长度非对齐与尾块**(把元素总数直接传入,由硬件推断迭代),并非所有接口的强制要求。手动管理须先确认目标重载允许 `isSetMask=false`,计算后恢复 Normal 模式。若实现选了 Normal 模式,尾块边界就变成实现责任,必须单独构造尾块用例。
80+ 
81+## 第五步:原子操作先预置 dst 再判定
82+ 
83+- 三张表分别对应 SetAtomicAdd / SetAtomicMax / SetAtomicMin,各给 INF/NAN 模式与饱和模式两列;表注写明**INF/NAN 模式列结果与 IEEE 754 理论结果一致**。
84+- 饱和模式的折叠是:inf → MAX、-inf → MIN、nan → 0,其中 MAX/MIN 是该数据类型的最大值/最小值(表中 half 为 `65504.0` / `-65504.0`;例如 `-inf + inf` 在非饱和模式为 nan、在饱和模式为 `0.0`)。
85+- **来源三张表的 src/dst 数据类型全部是 half**。因此本卡可断言的边界值口径仅限 half;float、整数等类型不在来源范围,不得据此外推。
86+- 原子语义是"新值与 dst 已有值合成",所以用例**必须先把 dst 预置成已知边界值并在执行后读回**;否则"预置写错"与"原子计算错"在同一次失败里无法区分。跨块累加还要固定块划分,保证每次读回的 dst 只受一个累加序列影响。
87+ 
88+## 验收顺序(先小后大,逐级锁定变量)
89+ 
90+1. **最小 shape + 全有限已知值**:锁定 strides、offset、起始地址与读写范围。
91+2. **最小 shape + 单点特殊值,非饱和模式**:按对应族、dtype、模式和具体接口表取期望(第二步),不能将 Memory 汇总表套到 Reg。此级只应有"表格口径"这一类期望。
92+3. **同用例开饱和模式重跑**:期望改为 ±MAX / 0 折叠,结果与第 2 级分开归档,不合并通过率。
93+4. **放大到真实 shape**:此时失败应归因到 shape/分形/循环,而非特殊值语义;尾块按 Counter 模式或显式尾块路径单独覆盖。
94+5. **跨块原子累加**:预置 dst → 执行 → 读回,仅改变块划分重复一轮,确认结果与块顺序无关(或与来源声明的顺序要求一致)。
95+6. **掩码矩阵抽检**:全 1(ResetMask 默认)、连续 n、逐比特组合各一条;对"有 isSetMask 但不起作用"的接口单独登记,不记为失败。
96+ 
97+## 与相邻卡的分工
98+ 
99+- 原文镜像:[Memory 矢量边界值汇总](../../apis/appendix/memory_vector_compute_interface_boundary_value_summary.md)、[Reg 矢量边界值汇总](../../apis/appendix/reg_vector_compute_interface_boundary_value_summary.md)、[原子操作边界值汇总](../../apis/appendix/atomic_operations_interface_boundary_value_summary.md)、[Mask 接口汇总](../../apis/appendix/mask_interface_summary.md)(type=API,逐表原文)。本卡是判定流程,不复制数据表。
100+- [Reg 矢量接口硬件精度与软仿精度差异](../precision/reg_vector_hardware_vs_soft_simulation_precision.md):那张卡解**精度档位 / denormal / ulp / 软仿路径**;本卡解**特殊值输入下的输出口径**。前者的 denormal 结论不能替代本卡的 inf/nan 判定,反之亦然。
101+- 掩码 API 语义在 [SetVectorMask](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/set_vector_mask.md)、[SetMaskCount](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/set_mask_count.md)、[SetMaskNorm](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/set_mask_norm.md)、[ResetMask](../../apis/simd_api/basic_api/memory_vector_compute/mask_operations/reset_mask.md);本卡只用它们解释 mask 含义,不重复参数表。
102+- 饱和开关的取值、默认值与数据类型归类见 [SetSaturationFlag](../../apis/simd_api/basic_api/special_register_access/set_saturation_flag_isasi.md);原子接口本身见 [SetAtomicAdd](../../apis/simd_api/basic_api/atomic_operations/set_atomic_add.md)、[SetAtomicMax](../../apis/simd_api/basic_api/atomic_operations/set_atomic_max_isasi.md)、[SetAtomicMin](../../apis/simd_api/basic_api/atomic_operations/set_atomic_min_isasi.md)。
103+- 尾块与对齐的搬运侧口径:[完整块与安全尾块分开选搬运路径](aligned_tile_copy_safe_tail.md);本卡的尾块判据是 Counter 模式的元素数语义,两者互补。
104+- 单元素特殊值注入的框架限制:[TTK 取值域仅整张量语义](ttk_value_range_no_single_element_nan_inf_injection.md) 说明该注入在 TTK 下不物化;本卡第 2 级需改用 `manual_input_binaries` 或 C++ ST。
105+- 掩码参数掩盖真实错误码:[aclnn ST 掩盖 execute 错误码](aclnn_st_masks_execute_error_code_probe.md);本卡判期望值,那张卡判错误码可见性。
106+- 大累加项数的精度越阈:[fp16 大累加项数跨实现 MERE 越阈边界](../precision/fp16_large_term_accumulation_cross_golden_boundary.md);本卡只判边界值输出,不判跨实现精度阈值。
107+ 
108+## 失效边界
109+ 
110+- 本卡所有期望值来自固定提交中的四份 appendix 汇总,**本卡未做硬件实测**;表值是**文档值**。
111+- 平台范围按来源逐族限定(Memory、原子、Mask 为 A3/A2;Reg 为 950)。跨族搬用条目即越界。
112+- **denormal / subnormal 与地址对齐在四份来源中均无条款**:本卡不写这两类口径。对齐类问题应查接口卡;尾块口径来自 `SetMaskCount` 的 Counter 模式说明,不是来自边界值汇总。
113+- 原子表仅覆盖 half;float 与整数类型的边界值期望不在本卡来源内。
114+- 全 0 掩码无来源条款,本卡不给期望值。
115+- 饱和模式的默认开关因 `SaturationMode` 与数据类型而异,若用例未显式设置,实际模式可能与假设不同;每次判定都要先记录实际开关状态。
@@ -28,6 +28,34 @@ SIMT 理论值的单位是“单个 Vector Core 每 cycle 元素数”,且只
28- 导航:按 `knowledge_ingest.py sync-indexes` 同步各级 `index.md`。28- 导航:按 `knowledge_ingest.py sync-indexes` 同步各级 `index.md`。
29- 检查:`bash check.sh`(全库 Lint、索引同步、检索门禁、单测、Ruff、Shell 语法)。29- 检查:`bash check.sh`(全库 Lint、索引同步、检索门禁、单测、Ruff、Shell 语法)。
30 30 
31+## [15:40] knowledge | 新增 Mmad 与 MmadMx 边界值输入验收与失败归类
32+ 
33+### Summary
34+ 
35+Mmad/MmadMx 在 inf、nan、dtype 极值、零维与量化类型入参下的期望输出口径不同:两族加法阶段的正负 inf 相加结果相反,量化类型会在入参侧折叠 inf/nan。本卡给出按接口族与饱和模式分列的判定步骤、双 oracle 校验法与四类失败归因顺序;来源限定 Mmad 为 950/A3/A2、MmadMx 为 950。
36+ 
37+### Details
38+ 
39+- 处理决定:create。写卡前已检索同主题,确认无重复入口。
40+- 路径:`knowledge/ops/ascendc/runbooks/validations/mmad_boundary_value_input_acceptance.md`(Runbook)。
41+- 来源:`resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/mmad_interface_boundary_value_summary.md`;`role: primary`;`resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/mmad_mx_interface_boundary_value_summary.md`;`role: primary`
42+- 导航:按 `knowledge_ingest.py sync-indexes` 同步各级 `index.md`。
43+- 检查:`bash check.sh`(全库 Lint、索引同步、检索门禁、单测、Ruff、Shell 语法)。
44+ 
45+## [15:40] knowledge | 新增 Memory/Reg 矢量接口边界值输入验收(含原子操作与掩码)
46+ 
47+### Summary
48+ 
49+Memory 与 Reg 矢量接口、原子操作、Mask 四份边界值来源的平台范围与表列口径各不相同:Memory/Reg 与原子按「INF/NAN 模式 / 饱和模式」双列,Mask 则只给 isSetMask 支持矩阵。本卡给出逐族取期望的判定步骤、按产品、模式和具体接口表取期望的校验法、Normal 连续/逐比特与 Counter 模式的区分,以及「先小数组后真实 shape」的验收顺序。
50+ 
51+### Details
52+ 
53+- 处理决定:create。写卡前已检索同主题,确认无重复入口。
54+- 路径:`knowledge/ops/ascendc/runbooks/validations/vector_interface_boundary_value_acceptance.md`(Runbook)。
55+- 来源:`resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/memory_vector_compute_interface_boundary_value_summary.md`;`role: primary`;`resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/reg_vector_compute_interface_boundary_value_summary.md`;`role: primary`;`resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/atomic_operations_interface_boundary_value_summary.md`;`role: supporting`;`resource: cann-docs-raw/asc-devkit/docs/zh/api/appendix/Mask_interface_summary.md`;`role: supporting`
56+- 导航:按 `knowledge_ingest.py sync-indexes` 同步各级 `index.md`。
57+- 检查:`bash check.sh`(全库 Lint、索引同步、检索门禁、单测、Ruff、Shell 语法)。
58+ 
31## [14:38] validate | 完成 PR143 检视修订与最新目标的提交前验证59## [14:38] validate | 完成 PR143 检视修订与最新目标的提交前验证
32 60 
33### Summary61### Summary