Merged
修复资料问题,更新文档检查skill #3668
修复资料问题,更新文档检查skill #3668
Merged
GRJ_XIDUOAdd on Jun 26
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、9030122- [ ] 支持的芯片类型: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>&bull; **triggerPipe**:指定哪个管道用于"发送触发信号"。<br>&bull; **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>&bull; **triggerPipe**:指定哪个管道用于"发送触发信号"。<br>&bull; **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- 
3Ascend 950PR/Ascend 950DT2Ascend 950PR/Ascend 950DT
3+<!-- end id1 -->
4 4 
5-</cann-filter>5+<!-- npu="A3" id2 -->
6- 
7-<cann-filter npu-type="A3">
8- 
9Atlas A3 训练系列产品/Atlas A3 推理系列产品6Atlas A3 训练系列产品/Atlas A3 推理系列产品
7+<!-- end id2 -->
10 8 
11-</cann-filter>9+<!-- npu="910b" id3 -->
12- 
13-<cann-filter npu-type="910b">
14- 
15Atlas A2 训练系列产品/Atlas A2 推理系列产品10Atlas A2 训练系列产品/Atlas A2 推理系列产品
11+<!-- end id3 -->
16 12 
17-</cann-filter>13+<!-- npu="910" id4 -->
18- 
19-<cann-filter npu-type="910">
20- 
21Atlas 训练系列产品14Atlas 训练系列产品
15+<!-- end id4 -->
22 16 
23-</cann-filter>17+<!-- npu="310p" id5 -->
24- 
25-<cann-filter npu-type="310p">
26- 
27Atlas 推理系列产品AI Core18Atlas 推理系列产品AI Core
19+<!-- end id5 -->
28 20 
29-</cann-filter>21+<!-- npu="310p" id6 -->
30- 
31-<cann-filter npu-type="310p">
32- 
33Atlas 推理系列产品Vector Core22Atlas 推理系列产品Vector Core
23+<!-- end id6 -->
34 24 
35-</cann-filter>25+<!-- npu="310b" id7 -->
36- 
37-<cann-filter npu-type="310b">
38- 
39Atlas 200I/500 A2 推理产品26Atlas 200I/500 A2 推理产品
27+<!-- end id7 -->
40 28 
41-</cann-filter>29+<!-- npu="x90" id8 -->
42- 
43-<cann-filter npu-type="x90">
44- 
45Kirin X9030Kirin X90
31+<!-- end id8 -->
46 32 
47-</cann-filter>33+<!-- npu="9030" id9 -->
48- 
49-<cann-filter npu-type="9030">
50- 
51Kirin 903034Kirin 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```