Merged
修复资料问题,更新文档检查skill #3668
GRJ_XIDUOAdd on Jun 26
修复资料问题,更新文档检查skill #3668
Merged
Total: 5 files changed+82-72
| @@ -120,7 +120,14 @@ description: | | |||
| 120 | ### 8. 芯片过滤标签(多芯片差异内容) | 120 | ### 8. 芯片过滤标签(多芯片差异内容) |
| 121 | - [ ] “Atlas A2/A3”是错误的描述,一旦出现务必告警!,正确的做法是将描述拆分为两个版本分别描述,即使这段描述对于两个版本都相同。 | 121 | - [ ] “Atlas A2/A3”是错误的描述,一旦出现务必告警!,正确的做法是将描述拆分为两个版本分别描述,即使这段描述对于两个版本都相同。 |
| 122 | - [ ] 支持的芯片类型:950、910b、A3、910、310p、310b、x90、9030 | 122 | - [ ] 支持的芯片类型:950、910b、A3、910、310p、310b、x90、9030 |
| 123 | -- [ ] 标签内需显式说明芯片型号 | 123 | +- [ ] 标签采用 HTML 注释格式,使用 `<!-- npu="xxx" idN -->` 标记开始,`<!-- end idN -->` 标记结束 |
| 124 | +- [ ] 同一文档内,`idN` 必须从 `id1` 开始,且不能重复(即 id1、id2、id3、... 递增) | ||
| 125 | +- [ ] 开始和结束标签之间的内容使用无序列表(`-`),格式为: | ||
| 126 | + ``` | ||
| 127 | + <!-- npu="芯片型号" idN --> | ||
| 128 | + - 产品名称:支持(备注。) | ||
| 129 | + <!-- end idN --> | ||
| 130 | + ``` | ||
| 124 | - [ ] `npu-type` 的值与标签内描述的芯片产品名称必须一致,参照以下映射关系(来源:`references/芯片与标签映射关系.md`): | 131 | - [ ] `npu-type` 的值与标签内描述的芯片产品名称必须一致,参照以下映射关系(来源:`references/芯片与标签映射关系.md`): |
| 125 | 132 | ||
| 126 | | `npu-type` | 对应的芯片产品名称 | | 133 | | `npu-type` | 对应的芯片产品名称 | |
| @@ -137,43 +144,64 @@ description: | | |||
| 137 | 144 | ||
| 138 | **错误示例**(标签值与描述不匹配): | 145 | **错误示例**(标签值与描述不匹配): |
| 139 | ``` | 146 | ``` |
| 140 | - <cann-filter npu-type="310b"> | 147 | + <!-- npu="310b" id1 --> |
| 141 | - Atlas 推理系列产品 ← ❌ 310b 对应的应是 "Atlas 200I/500 A2 推理产品" | 148 | + - Atlas 推理系列产品:支持(该接口生效。) ← ❌ 310b 对应的应是 "Atlas 200I/500 A2 推理产品" |
| 142 | - </cann-filter> | 149 | + <!-- end id1 --> |
| 143 | ``` | 150 | ``` |
| 144 | 151 | ||
| 145 | -- [ ] 产品支持情况表格中,芯片的排列顺序应按照 950 → A3 → 910b → 310b → 310p → 910 的顺序排列(即支持的产品优先排列,不支持的产品排列在最后,同类产品中位宽越大越靠前)。当存在多个 `<cann-filter>` 块罗列时,块之间的顺序也应遵循此规则。 | 152 | + **错误示例**(id 重复): |
| 153 | + ``` | ||
| 154 | + <!-- npu="950" id1 --> | ||
| 155 | + - Ascend 950PR/Ascend 950DT:支持(该接口生效。) | ||
| 156 | + <!-- end id1 --> | ||
| 157 | + ... | ||
| 158 | + <!-- npu="A3" id1 --> ← ❌ id1 已被使用,应为 id2 | ||
| 159 | + - Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持(该接口生效。) | ||
| 160 | + <!-- end id1 --> | ||
| 161 | + ``` | ||
| 146 | 162 | ||
| 147 | - **正确示例(芯片顺序):** | 163 | +- [ ] 同一标签组内(如产品支持情况、功能说明、数据类型等描述同一特性的标签集合),出现的芯片/产品标签应按照 [芯片与标签映射关系.md](./references/芯片与标签映射关系.md) 中定义的顺序保持相对先后关系,即:950 → A3 → 910b → 910 → 310p → 310b → x90 → 9030。不要求组内必须包含所有芯片,只需出现的产品按此相对顺序排列即可。此规则仅约束**同一标签组内部**的顺序,不同标签组之间的顺序不受约束。例如,文档前一个标签组末尾出现 310p,后一个标签组开头出现 950,这是允许的,不需要全局排序。 |
| 148 | - ``` | ||
| 149 | - | 产品 | 是否支持 | | ||
| 150 | - |------|----------| | ||
| 151 | - | <cann-filter npu-type="950">... | √</cann-filter> | | ||
| 152 | - | <cann-filter npu-type="A3">... | √</cann-filter> | | ||
| 153 | - | <cann-filter npu-type="910b">... | √</cann-filter> | | ||
| 154 | - | <cann-filter npu-type="310b">... | x</cann-filter> | | ||
| 155 | - | <cann-filter npu-type="310p">... | x</cann-filter> | | ||
| 156 | - | <cann-filter npu-type="910">... | x</cann-filter> | | ||
| 157 | - ``` | ||
| 158 | 164 | ||
| 159 | **错误示例(芯片顺序混乱):** | 165 | **错误示例(芯片顺序混乱):** |
| 160 | ``` | 166 | ``` |
| 161 | - | 产品 | 是否支持 | | 167 | + 各个产品支持的数据类型情况如下: |
| 162 | - |------|----------| | 168 | + <!-- npu="910b" id1 --> ← ❌ 应为950在前 |
| 163 | - | <cann-filter npu-type="910b">... | √</cann-filter> | ← ❌ 应为950在前 | 169 | + - ... |
| 164 | - | <cann-filter npu-type="A3">... | √</cann-filter> | | 170 | + <!-- end id1 --> |
| 165 | - | <cann-filter npu-type="950">... | √</cann-filter> | ← ❌ 950应排在910b之前 | 171 | + <!-- npu="A3" id2 --> |
| 166 | - | <cann-filter npu-type="910">... | x</cann-filter> | | 172 | + - ... |
| 167 | - | <cann-filter npu-type="310b">... | x</cann-filter> | | 173 | + <!-- end id2 --> |
| 168 | - | <cann-filter npu-type="310p">... | x</cann-filter> | | 174 | + <!-- npu="950" id3 --> ← ❌ 950应排在910b之前 |
| 175 | + - ... | ||
| 176 | + <!-- end id3 --> | ||
| 169 | ``` | 177 | ``` |
| 170 | 178 | ||
| 171 | -- [ ] 如果文本中出现了以上这些芯片产品名称,但是这部分文本并没有被相应的 `<cann-filter>` 标签包裹,需要添加该标签。 | 179 | + **正确示例(芯片顺序符合规范):** |
| 172 | - **正确示例:**参数config只有Ascend 950PR/Ascend 950DT支持,需要加上标签 | 180 | + ``` |
| 173 | -| <cann-filter npu-type="950"> config | 该参数仅支持如下型号:Ascend 950PR/Ascend 950DT。<br>控制SyncAll函数的行为,在多个AI Core之间进行流水线同步时,指定哪些管道(pipe)用于触发和等待。<br>• **triggerPipe**:指定哪个管道用于"发送触发信号"。<br>• **waitPipe**:指定哪个管道用于"接收等待信号"。<br>默认为SyncAllConfig DEFAULT_SYNC_ALL_CONFIG= {PIPE_ALL, PIPE_ALL},使用全部管道来进行触发和等待行为。</cann-filter> | | 181 | + 各个产品支持的数据类型情况如下: |
| 182 | + <!-- npu="950" id1 --> ← ✅ 950 在参考顺序中最靠前,排第一 | ||
| 183 | + - ... | ||
| 184 | + <!-- end id1 --> | ||
| 185 | + <!-- npu="A3" id2 --> ← ✅ A3 在参考顺序中紧跟 950 | ||
| 186 | + - ... | ||
| 187 | + <!-- end id2 --> | ||
| 188 | + <!-- npu="910b" id3 --> ← ✅ 910b 在参考顺序中紧跟 A3 | ||
| 189 | + - ... | ||
| 190 | + <!-- end id3 --> | ||
| 191 | + ``` | ||
| 174 | 192 | ||
| 175 | - **错误示例:**只有文本中出现了Ascend 950PR/Ascend 950DT产品,但是没有被相应的 `<cann-filter>` 标签包裹,需要添加该标签 | 193 | +- [ ] 如果文本中出现了以上这些芯片产品名称,但是这部分文本并没有被相应的 `<!-- npu="xxx" idN -->` 和 `<!-- end idN -->` 标签包裹,需要添加该标签。 |
| 176 | -| config | 该参数仅支持如下型号:Ascend 950PR/Ascend 950DT。<br>控制SyncAll函数的行为,在多个AI Core之间进行流水线同步时,指定哪些管道(pipe)用于触发和等待。<br>• **triggerPipe**:指定哪个管道用于"发送触发信号"。<br>• **waitPipe**:指定哪个管道用于"接收等待信号"。<br>默认为SyncAllConfig DEFAULT_SYNC_ALL_CONFIG= {PIPE_ALL, PIPE_ALL},使用全部管道来进行触发和等待行为。| | 194 | + **正确示例:**参数config只有Ascend 950PR/Ascend 950DT支持,需要加上标签 |
| 195 | + ``` | ||
| 196 | + <!-- npu="950" id1 --> | ||
| 197 | + - config:支持(该参数仅支持如下型号:Ascend 950PR/Ascend 950DT。<br>控制SyncAll函数的行为...) | ||
| 198 | + <!-- end id1 --> | ||
| 199 | + ``` | ||
| 200 | + | ||
| 201 | + **错误示例:**只有文本中出现了Ascend 950PR/Ascend 950DT产品,但是没有被相应的标签包裹,需要添加标签 | ||
| 202 | + ``` | ||
| 203 | + - config:支持(该参数仅支持如下型号:Ascend 950PR/Ascend 950DT。<br>控制SyncAll函数的行为...) ← ❌ 缺少标签 | ||
| 204 | + ``` | ||
| 177 | 205 | ||
| 178 | ### 9. 数据类型规范 | 206 | ### 9. 数据类型规范 |
| 179 | - [ ] 数据类型的写法与代码中保持一致,必须使用标准类型名(如 `int8_t`),不能简写或变体(如 ❌ `Int8` / `int8` / `S8`) | 207 | - [ ] 数据类型的写法与代码中保持一致,必须使用标准类型名(如 `int8_t`),不能简写或变体(如 ❌ `Int8` / `int8` / `S8`) |
| @@ -1,53 +1,35 @@ | |||
| 1 | -<cann-filter npu-type="950"> | 1 | +<!-- npu="950" id1 --> |
| 2 | - | ||
| 3 | Ascend 950PR/Ascend 950DT | 2 | Ascend 950PR/Ascend 950DT |
| 3 | +<!-- end id1 --> | ||
| 4 | 4 | ||
| 5 | -</cann-filter> | 5 | +<!-- npu="A3" id2 --> |
| 6 | - | ||
| 7 | -<cann-filter npu-type="A3"> | ||
| 8 | - | ||
| 9 | Atlas A3 训练系列产品/Atlas A3 推理系列产品 | 6 | Atlas A3 训练系列产品/Atlas A3 推理系列产品 |
| 7 | +<!-- end id2 --> | ||
| 10 | 8 | ||
| 11 | -</cann-filter> | 9 | +<!-- npu="910b" id3 --> |
| 12 | - | ||
| 13 | -<cann-filter npu-type="910b"> | ||
| 14 | - | ||
| 15 | Atlas A2 训练系列产品/Atlas A2 推理系列产品 | 10 | Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| 11 | +<!-- end id3 --> | ||
| 16 | 12 | ||
| 17 | -</cann-filter> | 13 | +<!-- npu="910" id4 --> |
| 18 | - | ||
| 19 | -<cann-filter npu-type="910"> | ||
| 20 | - | ||
| 21 | Atlas 训练系列产品 | 14 | Atlas 训练系列产品 |
| 15 | +<!-- end id4 --> | ||
| 22 | 16 | ||
| 23 | -</cann-filter> | 17 | +<!-- npu="310p" id5 --> |
| 24 | - | ||
| 25 | -<cann-filter npu-type="310p"> | ||
| 26 | - | ||
| 27 | Atlas 推理系列产品AI Core | 18 | Atlas 推理系列产品AI Core |
| 19 | +<!-- end id5 --> | ||
| 28 | 20 | ||
| 29 | -</cann-filter> | 21 | +<!-- npu="310p" id6 --> |
| 30 | - | ||
| 31 | -<cann-filter npu-type="310p"> | ||
| 32 | - | ||
| 33 | Atlas 推理系列产品Vector Core | 22 | Atlas 推理系列产品Vector Core |
| 23 | +<!-- end id6 --> | ||
| 34 | 24 | ||
| 35 | -</cann-filter> | 25 | +<!-- npu="310b" id7 --> |
| 36 | - | ||
| 37 | -<cann-filter npu-type="310b"> | ||
| 38 | - | ||
| 39 | Atlas 200I/500 A2 推理产品 | 26 | Atlas 200I/500 A2 推理产品 |
| 27 | +<!-- end id7 --> | ||
| 40 | 28 | ||
| 41 | -</cann-filter> | 29 | +<!-- npu="x90" id8 --> |
| 42 | - | ||
| 43 | -<cann-filter npu-type="x90"> | ||
| 44 | - | ||
| 45 | Kirin X90 | 30 | Kirin X90 |
| 31 | +<!-- end id8 --> | ||
| 46 | 32 | ||
| 47 | -</cann-filter> | 33 | +<!-- npu="9030" id9 --> |
| 48 | - | ||
| 49 | -<cann-filter npu-type="9030"> | ||
| 50 | - | ||
| 51 | Kirin 9030 | 34 | Kirin 9030 |
| 52 | - | 35 | +<!-- end id9 --> |
| 53 | -</cann-filter> | ||
| @@ -106,7 +106,7 @@ __aicore__ inline void CrossCoreSetFlag(uint16_t flagId) | |||
| 106 | 106 | ||
| 107 | ## 约束说明<a name="section633mcpsimp"></a> | 107 | ## 约束说明<a name="section633mcpsimp"></a> |
| 108 | 108 | ||
| 109 | -- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/设置Kernel类型.md)或[函数修饰符](https://gitcode.com/cann/asc-devkit/blob/master/docs/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的情况如不: | 109 | +- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/设置Kernel类型.md)或[函数修饰符](https://gitcode.com/cann/asc-devkit/blob/master/docs/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的情况如下: |
| 110 | - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。 | 110 | - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。 |
| 111 | - 对于Vector和Cube混合场景(模式2),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。 | 111 | - 对于Vector和Cube混合场景(模式2),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。 |
| 112 | 112 | ||
| @@ -93,7 +93,7 @@ __aicore__ inline void CrossCoreWaitFlag(uint16_t flagId) | |||
| 93 | - Atlas A2 训练系列产品/Atlas A2 推理系列产品,硬件不支持配置核间同步模式和流水类型,传入该接口的模板参数modeId和pipe不生效。 | 93 | - Atlas A2 训练系列产品/Atlas A2 推理系列产品,硬件不支持配置核间同步模式和流水类型,传入该接口的模板参数modeId和pipe不生效。 |
| 94 | </cann-filter> | 94 | </cann-filter> |
| 95 | 95 | ||
| 96 | -- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或 KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/设置Kernel类型.md)或[函数修饰符](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的情况如不: | 96 | +- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或 KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/设置Kernel类型.md)或[函数修饰符](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的情况如下: |
| 97 | - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。 | 97 | - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。 |
| 98 | - 对于Vector和Cube混合场景(模式2),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。 | 98 | - 对于Vector和Cube混合场景(模式2),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。 |
| 99 | 99 | ||
| @@ -8,8 +8,8 @@ | |||
| 8 | | <cann-filter npu-type="A3">Atlas A3 训练系列产品/Atlas A3 推理系列产品 | x </cann-filter>| | 8 | | <cann-filter npu-type="A3">Atlas A3 训练系列产品/Atlas A3 推理系列产品 | x </cann-filter>| |
| 9 | | <cann-filter npu-type="910b">Atlas A2 训练系列产品/Atlas A2 推理系列产品 | x </cann-filter>| | 9 | | <cann-filter npu-type="910b">Atlas A2 训练系列产品/Atlas A2 推理系列产品 | x </cann-filter>| |
| 10 | | <cann-filter npu-type="310b">Atlas 200I/500 A2 推理产品 | x </cann-filter>| | 10 | | <cann-filter npu-type="310b">Atlas 200I/500 A2 推理产品 | x </cann-filter>| |
| 11 | -| <cann-filter npu-type="310p">Atlas 推理系列产品 AI Core | x </cann-filter>| | 11 | +| <cann-filter npu-type="310p">Atlas 推理系列产品AI Core | x </cann-filter>| |
| 12 | -| <cann-filter npu-type="310p">Atlas 推理系列产品 Vector Core | x </cann-filter>| | 12 | +| <cann-filter npu-type="310p">Atlas 推理系列产品Vector Core | x </cann-filter>| |
| 13 | | <cann-filter npu-type="910">Atlas 训练系列产品 | x </cann-filter>| | 13 | | <cann-filter npu-type="910">Atlas 训练系列产品 | x </cann-filter>| |
| 14 | 14 | ||
| 15 | ## 功能说明 | 15 | ## 功能说明 |
| @@ -24,7 +24,7 @@ __aicore__ constexpr inline int32_t CeilDivision(int32_t num1, int32_t num2) | |||
| 24 | 24 | ||
| 25 | ## 参数说明 | 25 | ## 参数说明 |
| 26 | 26 | ||
| 27 | -**表 1** 模板参数说明 | 27 | +**表1** 参数说明 |
| 28 | 28 | ||
| 29 | | 参数名 | 描述 | | 29 | | 参数名 | 描述 | |
| 30 | | --- | --- | | 30 | | --- | --- | |
| @@ -56,11 +56,11 @@ __aicore__ inline void AddCustomImpl(__local_mem__ T *dst, __local_mem__ T *src0 | |||
| 56 | constexpr uint32_t oneRepeatSize = AscendC::GetVecLen() / sizeof(T); | 56 | constexpr uint32_t oneRepeatSize = AscendC::GetVecLen() / sizeof(T); |
| 57 | uint16_t repeatTime = AscendC::CeilDivision(count, oneRepeatSize); | 57 | uint16_t repeatTime = AscendC::CeilDivision(count, oneRepeatSize); |
| 58 | for (uint16_t i = 0; i < repeatTime; ++i) { | 58 | for (uint16_t i = 0; i < repeatTime; ++i) { |
| 59 | - mask = AscendC::Reg::UpdateMask<T>(calCount); | 59 | + mask = AscendC::Reg::UpdateMask<T>(count); |
| 60 | AscendC::Reg::LoadAlign(srcReg0, src0 + i * oneRepeatSize ); | 60 | AscendC::Reg::LoadAlign(srcReg0, src0 + i * oneRepeatSize ); |
| 61 | AscendC::Reg::LoadAlign(srcReg1, src1 + i * oneRepeatSize ); | 61 | AscendC::Reg::LoadAlign(srcReg1, src1 + i * oneRepeatSize ); |
| 62 | AscendC::Reg::Add(dstReg, srcReg0, srcReg1, mask); | 62 | AscendC::Reg::Add(dstReg, srcReg0, srcReg1, mask); |
| 63 | - AscendC::Reg::StoreAlign(dst + i * repeatElm, reg2, mask); | 63 | + AscendC::Reg::StoreAlign(dst + i * oneRepeatSize, dstReg, mask); |
| 64 | } | 64 | } |
| 65 | } | 65 | } |
| 66 | ``` | 66 | ``` |