已合并
modified md files(for readability improvement) #655
gitee-duhuiping创建于 3月31日
modified md files(for readability improvement) #655
已合并
gitee-duhuiping创建于 3月31日
11 个文件变更+58-65
@@ -12,10 +12,11 @@ aclnnStatus aclxxXxx(void *workspace, uint64_t workspaceSize, aclOpExecutor *exe
12其中“aclxx”表示算子接口前缀,如aclnn;而“Xxx”表示对应的算子类型,如Add算子。12其中“aclxx”表示算子接口前缀,如aclnn;而“Xxx”表示对应的算子类型,如Add算子。
13 13 
14> 说明:14> 说明:
15->- workspace是指除输入/输出外,API在AI处理器上完成计算所需要的临时内存。15+>
16->- 第二段接口aclxxXxx(...)不能重复调用,如下调用方式会现异常:16+> - workspace是指除输入/输外,API在AI处理器上完成计算所需要的临时内存。
17- ``` 17+> - 第二段接口aclxxXxx(...)不能重复调用,如下调用方式会出现异常:
18- aclxxXxxGetWorkspaceSize(...) 18+> ```Cpp
19- aclxxXxx(...) 19+> aclxxXxxGetWorkspaceSize(...)
20- aclxxXxx(...)20+> aclxxXxx(...)
21- ```21+> aclxxXxx(...)
22+> ```
@@ -13,6 +13,7 @@ aclTensor支持的数据类型参见[数据类型](数据类型.md),其中部
13>- 表中叉号(×)表示这两种类型不能进行推导计算。13>- 表中叉号(×)表示这两种类型不能进行推导计算。
14 14 
15**表 1** 数据类型推导关系15**表 1** 数据类型推导关系
16+ 
16| 数据类型 | f32 | f16 | f64 | bf16 | s8 | u8 | s16 | u16 | s32 | u32 | s64 | u64 | bool | c32 | c64 | c128 |17| 数据类型 | f32 | f16 | f64 | bf16 | s8 | u8 | s16 | u16 | s32 | u32 | s64 | u64 | bool | c32 | c64 | c128 |
17| :------: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |18| :------: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
18| **f32** | f32 | f32 | f64 | f32 | f32 | f32 | f32 | × | f32 | × | f32 | × | f32 | c64 | c64 | c128 |19| **f32** | f32 | f32 | f64 | f32 | f32 | f32 | f32 | × | f32 | × | f32 | × | f32 | c64 | c64 | c128 |
@@ -118,7 +118,7 @@ endif()
118Tiling一共需要三个交付件:```${op_name}_tiling.cpp``` ```${op_name}_tiling_key.h``` ```${op_name}_tiling_data.h```118Tiling一共需要三个交付件:```${op_name}_tiling.cpp``` ```${op_name}_tiling_key.h``` ```${op_name}_tiling_data.h```
119 119 
120> 说明:120> 说明:
121- 121+>
122> 1. `${op_name}_tiling.cpp`放在`${op_name}/op_host`目录下;122> 1. `${op_name}_tiling.cpp`放在`${op_name}/op_host`目录下;
123> 2. `${op_name}_tiling_key.h`和`${op_name}_tiling_data.h`放在`${op_name}/op_kernel`目录下;123> 2. `${op_name}_tiling_key.h`和`${op_name}_tiling_data.h`放在`${op_name}/op_kernel`目录下;
124> 3. 如果`${op_name}_tiling.cpp`中需要引用`${op_name}_tiling_data.h`,请使用相对路径的方式,例如:`#incldue "../op_kernel/${op_name}_tiling_data.h"`。124> 3. 如果`${op_name}_tiling.cpp`中需要引用`${op_name}_tiling_data.h`,请使用相对路径的方式,例如:`#incldue "../op_kernel/${op_name}_tiling_data.h"`。
@@ -130,6 +130,7 @@ Tiling主要切分逻辑。
130如需查看详细实现,请参考[add_example_tiling.cpp](../../../examples/add_example/op_host/add_example_tiling.cpp)。130如需查看详细实现,请参考[add_example_tiling.cpp](../../../examples/add_example/op_host/add_example_tiling.cpp)。
131 131 
132> **样例中函数空实现说明:**132> **样例中函数空实现说明:**
133+>
133> 1. **TilingParse**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。134> 1. **TilingParse**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。
134> 2. **CompileInfo**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。135> 2. **CompileInfo**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。
135 136 
@@ -260,7 +261,7 @@ graph LR
260Kernel一共需要两个交付件:```${op_name}.cpp``` ```${op_name}.h```261Kernel一共需要两个交付件:```${op_name}.cpp``` ```${op_name}.h```
261 262 
262> 说明:263> 说明:
263- 264+>
264> 1. `${op_name}.cpp`为kernel的入口函数只能放在`${op_name}/op_kernel`目录下;265> 1. `${op_name}.cpp`为kernel的入口函数只能放在`${op_name}/op_kernel`目录下;
265> 2. `${op_name}.h`文件可以按照不同SoC或模板放在对应目录下,例如:`${op_name}/op_kernel/arch32`、`${op_name}/op_kernel/arch35`或`${op_name}/op_kernel/impl`等目录下;266> 2. `${op_name}.h`文件可以按照不同SoC或模板放在对应目录下,例如:`${op_name}/op_kernel/arch32`、`${op_name}/op_kernel/arch35`或`${op_name}/op_kernel/impl`等目录下;
266 267 
@@ -1,15 +1,17 @@
1-# 算子多平台适配1+# 平台迁移
2 2 
3本指南介绍算子在多平台间迁移的适配要点与方案。以算子从Atlas A2系列迁移至Ascend 950系列为例,对比硬件架构差异项及所涉适配点,并提供相关算子适配样例。3本指南介绍算子在多平台间迁移的适配要点与方案。以算子从Atlas A2系列迁移至Ascend 950系列为例,对比硬件架构差异项及所涉适配点,并提供相关算子适配样例。
4 4 
5- 
6## 一、硬件架构及规格参数对比5## 一、硬件架构及规格参数对比
6+ 
7### Atlas A2 系列硬件架构7### Atlas A2 系列硬件架构
8+ 
8<div align="center">9<div align="center">
9 <img src="../figures/Atlas A2硬件架构.png" width="900" alt="Atlas A2硬件架构" />10 <img src="../figures/Atlas A2硬件架构.png" width="900" alt="Atlas A2硬件架构" />
10</div>11</div>
11 12 
12### Ascend 950 系列硬件架构13### Ascend 950 系列硬件架构
14+ 
13<div align="center">15<div align="center">
14 <img src="../figures/Ascend 950硬件架构.png" width="900" alt="Ascend 950硬件架构" />16 <img src="../figures/Ascend 950硬件架构.png" width="900" alt="Ascend 950硬件架构" />
15</div>17</div>
@@ -45,27 +47,7 @@
45 <td>23.5T</td>47 <td>23.5T</td>
46 <td>54T</td>48 <td>54T</td>
47 </tr>49 </tr>
48- <tr>50+
49- <td rowspan="4">SOC</td>
50- <td>L2 容量(MB)</td>
51- <td>192</td>
52- <td>128</td>
53- </tr>
54- <tr>
55- <td>L2 带宽(read)</td>
56- <td>4.4TB/s</td>
57- <td>5.28TB/s</td>
58- </tr>
59- <tr>
60- <td>跨Die带宽(单向有效带宽)</td>
61- <td>180GB/s(1981)</td>
62- <td>1.44TB/s(2Die)</td>
63- </tr>
64- <tr>
65- <td>AICPU</td>
66- <td>Linx910M 2GHz, 8C8T</td>
67- <td>Linx816 1.5GHz, 8C16T</td>
68- </tr>
69 <tr>51 <tr>
70 <td rowspan="2">Memory</td>52 <td rowspan="2">Memory</td>
71 <td>Memory 容量(GB)</td>53 <td>Memory 容量(GB)</td>
@@ -79,7 +61,6 @@
79 </tr>61 </tr>
80</table>62</table>
81 63 
82- 
83## 二、硬件能力变更引入适配点64## 二、硬件能力变更引入适配点
84 65 
85<table>66<table>
@@ -98,11 +79,11 @@
98 <td>GM→L0A/L0B直连不再可用,需通过GM→L1→L0A/L0B完成;L1切块策略和MTE1/2流水需重构</td>79 <td>GM→L0A/L0B直连不再可用,需通过GM→L1→L0A/L0B完成;L1切块策略和MTE1/2流水需重构</td>
99 </tr>80 </tr>
100 <tr>81 <tr>
101- <td>ND DMA灵活数据搬运,支持随路ND->NZ转换</td>82+ <td>ND DMA灵活数据搬运,支持随路ND-&gt;NZ转换</td>
102 <td>可用ND2NZ/DN2NZ在MTE2阶段完成格式转换,减少中间buffer和格式转换开销;需关注步长、对齐与NZ形状映射</td>83 <td>可用ND2NZ/DN2NZ在MTE2阶段完成格式转换,减少中间buffer和格式转换开销;需关注步长、对齐与NZ形状映射</td>
103 </tr>84 </tr>
104 <tr>85 <tr>
105- <td>支持Cube->Vector高效内部 数据通路:L1<->UB、L0C->UB、FIXP->UB</td>86+ <td>支持Cube-&gt;Vector高效内部 数据通路:L1&lt;-&gt;UB、L0C-&gt;UB、FIXP-&gt;UB</td>
106 <td>可在UB侧做中间累加/激活/融合(如切K累加、后处理),减少GM往返;对应同步与管线切分需调整</td>87 <td>可在UB侧做中间累加/激活/融合(如切K累加、后处理),减少GM往返;对应同步与管线切分需调整</td>
107 </tr>88 </tr>
108 <tr>89 <tr>
@@ -138,10 +119,10 @@
138 </tr>119 </tr>
139</table>120</table>
140 121 
141- 
142## 三、推荐迁移步骤122## 三、推荐迁移步骤
123+ 
1431. 确认算子涉及的计算单元(Cube/Vector)和对应单元支持的数据类型是否在平台间存在差异。1241. 确认算子涉及的计算单元(Cube/Vector)和对应单元支持的数据类型是否在平台间存在差异。
144-2. 确认涉及的数据搬运单元(ND->NZ、GM<->Lx、集合通信等)是否在平台间存在差异。125+2. 确认涉及的数据搬运单元(ND-&gt;NZ、GM&lt;-&gt;Lx、集合通信等)是否在平台间存在差异。
1453. 按硬件能力变更点逐项对照修改(Vector架构、Cube支持数据类型、L1/L0/UB大小、CCU通信等)。1263. 按硬件能力变更点逐项对照修改(Vector架构、Cube支持数据类型、L1/L0/UB大小、CCU通信等)。
1464. 参考算子迁移样例调整/补齐 Atlas A2/Ascend 950 分支逻辑。1274. 参考算子迁移样例调整/补齐 Atlas A2/Ascend 950 分支逻辑。
147 128 
@@ -158,11 +139,13 @@ Ascend 950硬件新增同地址请求并行处理特性,不需要在各种分
158</div>139</div>
159 140 
160#### Tile尺寸大小调整141#### Tile尺寸大小调整
142+ 
161Atlas A2上L0C大小为128KB,Ascend 950提升到256KB,意味着单次可承载更大的累加结果块。迁移时可优先增大Tile块切分粒度或提高K方向单轮处理深度,以减少切块与切K轮次,降低循环控制和搬运开销。同时需要重新平衡L1/L0/UB容量预算,避免L0C放大后挤压A/B/scale缓冲导致流水断点。143Atlas A2上L0C大小为128KB,Ascend 950提升到256KB,意味着单次可承载更大的累加结果块。迁移时可优先增大Tile块切分粒度或提高K方向单轮处理深度,以减少切块与切K轮次,降低循环控制和搬运开销。同时需要重新平衡L1/L0/UB容量预算,避免L0C放大后挤压A/B/scale缓冲导致流水断点。
162 144 
163- 
164### Vector向量计算类算子145### Vector向量计算类算子
146+ 
165#### SIMT147#### SIMT
148+ 
166Ascend 950系列新增了SIMT单元。SIMT在处理非规整离散访问方面相比SIMD有较大优势,适合地址不连续、访存跨度变化大、分支路径不一致的场景(如scatter/gather、索引重排、稀疏更新等)。149Ascend 950系列新增了SIMT单元。SIMT在处理非规整离散访问方面相比SIMD有较大优势,适合地址不连续、访存跨度变化大、分支路径不一致的场景(如scatter/gather、索引重排、稀疏更新等)。
167 150 
168迁移时建议优先识别"访存主导"且"向量化效率低"的算子子流程:若原有SIMD实现存在大量掩码分支、无效lane占比高、或需要复杂地址拼装,可将该部分改写为SIMT路径,通常可降低控制开销并提升有效访存吞吐。151迁移时建议优先识别"访存主导"且"向量化效率低"的算子子流程:若原有SIMD实现存在大量掩码分支、无效lane占比高、或需要复杂地址拼装,可将该部分改写为SIMT路径,通常可降低控制开销并提升有效访存吞吐。
@@ -176,7 +159,8 @@ gather_v2算子根据合轴后的尾轴为单位进行gather,因此模板选
176**1. 编程模型差异**159**1. 编程模型差异**
177 160 
178SIMD实现采用传统的向量化编程模型,需显式管理UB缓冲区和流水队列:161SIMD实现采用传统的向量化编程模型,需显式管理UB缓冲区和流水队列:
179-```cpp162+ 
163+```Cpp
180// SIMD: 使用队列机制管理数据缓冲164// SIMD: 使用队列机制管理数据缓冲
181TQueBind<QuePosition::VECIN, QuePosition::VECOUT, BUFFER_NUM> inQueue_;165TQueBind<QuePosition::VECIN, QuePosition::VECOUT, BUFFER_NUM> inQueue_;
182TBuf<QuePosition::VECCALC> indexBuf_;166TBuf<QuePosition::VECCALC> indexBuf_;
@@ -191,7 +175,8 @@ inQueue_.EnQue<int8_t>(xLocal); // 入队等待输出
191```175```
192 176 
193SIMT采用线程级并行模型,每个线程独立处理元素:177SIMT采用线程级并行模型,每个线程独立处理元素:
194-```cpp178+ 
179+```Cpp
195// SIMT: 使用线程级并行,无需显式buffer管理180// SIMT: 使用线程级并行,无需显式buffer管理
196__simt_vf__ LAUNCH_BOUND(2048) void GatherSimt(...) {181__simt_vf__ LAUNCH_BOUND(2048) void GatherSimt(...) {
197 for (INDEX_SIZE_T index = Simt::GetThreadIdx(); 182 for (INDEX_SIZE_T index = Simt::GetThreadIdx();
@@ -217,10 +202,10 @@ __simt_vf__ LAUNCH_BOUND(2048) void GatherSimt(...) {
217 202 
218SIMD适合连续访问大块地址的场景,通过向量化指令高效处理连续数据;203SIMD适合连续访问大块地址的场景,通过向量化指令高效处理连续数据;
219 204 
220-SIMT适合离散访存,线程并行处理; 205+SIMT适合离散访存,线程并行处理;
221- 
222 206 
223#### Regbase207#### Regbase
208+ 
224Ascend 950系列引入了Regbase编程范式,相比传统的Membase(Vector API)编程,Regbase更接近底层硬件的寄存器操作,提供更精细的向量化控制能力。209Ascend 950系列引入了Regbase编程范式,相比传统的Membase(Vector API)编程,Regbase更接近底层硬件的寄存器操作,提供更精细的向量化控制能力。
225 210 
226**特点**211**特点**
@@ -338,7 +323,9 @@ __VEC_SCOPE_
3383. 混合使用:可在同一算子中结合两种范式,用Regbase处理核心计算逻辑,用Membase管理数据搬运3233. 混合使用:可在同一算子中结合两种范式,用Regbase处理核心计算逻辑,用Membase管理数据搬运
339 324 
340### Cube-Vector融合类算子325### Cube-Vector融合类算子
326+ 
341#### MTE数据搬运路径变化327#### MTE数据搬运路径变化
328+ 
342Ascend 950新架构引入UB2L1 & L0C2UB间的直连通路,实现矩阵计算数据的快速搬移,旨在简化CV融合算子开发并提升性能。329Ascend 950新架构引入UB2L1 & L0C2UB间的直连通路,实现矩阵计算数据的快速搬移,旨在简化CV融合算子开发并提升性能。
343<div align="center">330<div align="center">
344 <img src="../figures/Ascend950新增CV直连通路.png" width="700" alt="Ascend950新增CV直连通路" />331 <img src="../figures/Ascend950新增CV直连通路.png" width="700" alt="Ascend950新增CV直连通路" />
@@ -353,7 +340,8 @@ Ascend 950新架构引入UB2L1 & L0C2UB间的直连通路,实现矩阵计算
353启用L0C至UB(L0C2UB)直连通路,通过DataCopy接口,支持融合算子的矩阵计算结果直接搬入UB进行后续向量计算。 340启用L0C至UB(L0C2UB)直连通路,通过DataCopy接口,支持融合算子的矩阵计算结果直接搬入UB进行后续向量计算。
354 341 
355对于切K或多阶段融合场景,可将"L0C搬回GM再读回UB"改为"L0C直达UB累加/后处理",降低GM往返带宽压力和时延。迁移时建议把中间结果归并、激活/量化前处理放到UB侧完成,并显式梳理MTE1/MTE2/MTE3与计算单元的事件同步顺序,确保跨单元流水连续,避免由于新增通路引入数据可见性或同步时序问题。关键使能接口定义可参考:342对于切K或多阶段融合场景,可将"L0C搬回GM再读回UB"改为"L0C直达UB累加/后处理",降低GM往返带宽压力和时延。迁移时建议把中间结果归并、激活/量化前处理放到UB侧完成,并显式梳理MTE1/MTE2/MTE3与计算单元的事件同步顺序,确保跨单元流水连续,避免由于新增通路引入数据可见性或同步时序问题。关键使能接口定义可参考:
356-```cpp343+ 
344+```Cpp
357// 1. 新增: 搬入接口增加UB2L1的Nd2Nz搬入,支持Src&Dst都是LocalTensor的形式345// 1. 新增: 搬入接口增加UB2L1的Nd2Nz搬入,支持Src&Dst都是LocalTensor的形式
358template <typename T> 346template <typename T>
359__aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const Nd2NzParams& intriParams);347__aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const Nd2NzParams& intriParams);
@@ -375,6 +363,7 @@ __aicore__ inline void CrossCoreWaitFlag(uint16_t flagId)
375```363```
376 364 
377#### 核间同步信号量匹配365#### 核间同步信号量匹配
366+ 
378`CrossCoreSetFlag``CrossCoreWaitFlag` 是核间同步信号量接口,广泛用于多核间的数据依赖与协同控制。本质上以"信号量"的方式实现不同AICore之间的数据处理阶段解耦与有序推进,常用于流水线控制、双缓冲切换、跨核协作等场景。367`CrossCoreSetFlag``CrossCoreWaitFlag` 是核间同步信号量接口,广泛用于多核间的数据依赖与协同控制。本质上以"信号量"的方式实现不同AICore之间的数据处理阶段解耦与有序推进,常用于流水线控制、双缓冲切换、跨核协作等场景。
379 368 
380- `CrossCoreSetFlag`:当前核(或线程)在完成某个阶段的数据处理后,主动设置指定的flag信号,告知依赖方(一般是其它核或下游流水线阶段)本阶段已完成,可以继续执行后续流程。369- `CrossCoreSetFlag`:当前核(或线程)在完成某个阶段的数据处理后,主动设置指定的flag信号,告知依赖方(一般是其它核或下游流水线阶段)本阶段已完成,可以继续执行后续流程。
@@ -382,7 +371,6 @@ __aicore__ inline void CrossCoreWaitFlag(uint16_t flagId)
382 371 
383这套信号量的本质是保证多线程/多流水阶段间一致的同步序列,防止因资源未就绪或依赖没完成而发生数据竞争或死锁等硬件异常。详细的接口说明可参考官方文档:[CrossCoreSetFlag与CrossCoreWaitFlag核间同步接口详解](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/900beta1/API/ascendcopapi/atlasascendc_api_07_0273.html)。372这套信号量的本质是保证多线程/多流水阶段间一致的同步序列,防止因资源未就绪或依赖没完成而发生数据竞争或死锁等硬件异常。详细的接口说明可参考官方文档:[CrossCoreSetFlag与CrossCoreWaitFlag核间同步接口详解](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/900beta1/API/ascendcopapi/atlasascendc_api_07_0273.html)。
384 373 
385- 
386在Ascend 950上`CrossCoreWaitFlag``CrossCoreSetFlag`数量必须严格匹配,且建议在同一同步语义域内按"先生产后消费"的顺序成对设计。Atlas A2上算子与算子间若存在多余`CrossCoreSetFlag`信号量,HWTS会进行特殊处理清零计数器,Ascend 950系列为减少硬件开销,不再依赖该类兜底机制,要求单算子内核间同步信号量一一匹配,否则会出现必现卡死。374在Ascend 950上`CrossCoreWaitFlag``CrossCoreSetFlag`数量必须严格匹配,且建议在同一同步语义域内按"先生产后消费"的顺序成对设计。Atlas A2上算子与算子间若存在多余`CrossCoreSetFlag`信号量,HWTS会进行特殊处理清零计数器,Ascend 950系列为减少硬件开销,不再依赖该类兜底机制,要求单算子内核间同步信号量一一匹配,否则会出现必现卡死。
387 375 
388迁移时请重点排查以下问题:其一,异常分支提前返回导致只执行`Set`未执行对应`Wait`(或反之);其二,多stage流水复用同一`flagId`但生命周期重叠,造成"跨阶段串扰";其三,循环内条件触发同步但循环边界未对齐,导致迭代次数不一致。以上问题在Atlas A2上可能被掩盖,在Ascend 950上会直接暴露为阻塞超时或死锁。对跨核流水较复杂的算子,可先构建最小数据集进行单stage验证,再逐步叠加双缓冲和多stage,以降低定位同步问题的复杂度。376迁移时请重点排查以下问题:其一,异常分支提前返回导致只执行`Set`未执行对应`Wait`(或反之);其二,多stage流水复用同一`flagId`但生命周期重叠,造成"跨阶段串扰";其三,循环内条件触发同步但循环边界未对齐,导致迭代次数不一致。以上问题在Atlas A2上可能被掩盖,在Ascend 950上会直接暴露为阻塞超时或死锁。对跨核流水较复杂的算子,可先构建最小数据集进行单stage验证,再逐步叠加双缓冲和多stage,以降低定位同步问题的复杂度。
@@ -397,6 +385,7 @@ Ascend 950引入集合通信加速器CCU1.0,降低了访存需求,减少了
397 385 
398以[MatmulAllReduce](https://gitcode.com/cann/ops-transformer/tree/master/mc2/matmul_all_reduce)算子迁移适配为例:386以[MatmulAllReduce](https://gitcode.com/cann/ops-transformer/tree/master/mc2/matmul_all_reduce)算子迁移适配为例:
399设置NnopbaseSetHcclServerType枚举值,A2为NNOPBASE_HCCL_SERVER_AICPU,950为NNOPBASE_HCCL_SERVER_TYPE_CCU。387设置NnopbaseSetHcclServerType枚举值,A2为NNOPBASE_HCCL_SERVER_AICPU,950为NNOPBASE_HCCL_SERVER_TYPE_CCU。
388+ 
400```CPP389```CPP
401// ...390// ...
402aclnnStatus aclnnMatmulAllReduce(391aclnnStatus aclnnMatmulAllReduce(
@@ -419,6 +408,7 @@ aclnnStatus aclnnMatmulAllReduce(
4192. 用于设置主流/附属流上自定义任务、参数定制的GenerateTask回调接口中,区分两套GE的KernelLaunch接口,分别调用AICPU通信或CCU通信的创建及定制流程。4082. 用于设置主流/附属流上自定义任务、参数定制的GenerateTask回调接口中,区分两套GE的KernelLaunch接口,分别调用AICPU通信或CCU通信的创建及定制流程。
420 409 
421静态图GE侧创建通信task的任务类型,A2为aicpu kfc server + kfc_stream;950为ccu server + ccu_stream。涉及代码文件:[matmul_all_reduce_gen_task.cpp](https://gitcode.com/cann/ops-transformer/blob/master/mc2/matmul_all_reduce/op_graph/matmul_all_reduce_gen_task.cpp)410静态图GE侧创建通信task的任务类型,A2为aicpu kfc server + kfc_stream;950为ccu server + ccu_stream。涉及代码文件:[matmul_all_reduce_gen_task.cpp](https://gitcode.com/cann/ops-transformer/blob/master/mc2/matmul_all_reduce/op_graph/matmul_all_reduce_gen_task.cpp)
411+ 
422```CPP412```CPP
423// ...413// ...
424ge::Status MatmulAllReduceCalcParamFunc(gert::ExeResGenerationContext *context)414ge::Status MatmulAllReduceCalcParamFunc(gert::ExeResGenerationContext *context)
@@ -434,6 +424,7 @@ ge::Status MatmulAllReduceCalcParamFunc(gert::ExeResGenerationContext *context)
434```424```
435 425 
436静态图GenTask调用接口有区别,流程有差异。涉及代码文件:[matmul_all_reduce_gen_task.cpp](https://gitcode.com/cann/ops-transformer/blob/master/mc2/matmul_all_reduce/op_graph/matmul_all_reduce_gen_task.cpp)426静态图GenTask调用接口有区别,流程有差异。涉及代码文件:[matmul_all_reduce_gen_task.cpp](https://gitcode.com/cann/ops-transformer/blob/master/mc2/matmul_all_reduce/op_graph/matmul_all_reduce_gen_task.cpp)
427+ 
437```CPP428```CPP
438// ...429// ...
439// A2430// A2
@@ -467,7 +458,6 @@ ge::Status MatmulAllReduceGenTaskFunc(const gert::ExeResGenerationContext *conte
467// ...458// ...
468```459```
469 460 
470- 
471## 五、常见问题与性能调优建议(FAQ/性能小贴士)461## 五、常见问题与性能调优建议(FAQ/性能小贴士)
472 462 
473若算子在Ascend 950上性能不升反降时,可优先排查:463若算子在Ascend 950上性能不升反降时,可优先排查:
@@ -121,7 +121,7 @@ pip3 install -r requirements.txt
121 2. **安装CANN包**121 2. **安装CANN包**
122 122 
123 请单击[下载链接](https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/master/),选择最新时间版本,并根据产品型号和环境架构下载对应包。安装命令如下,更多指导参考《[CANN软件安装指南](https://www.hiascend.com/document/redirect/CannCommunityInstWizard)》。123 请单击[下载链接](https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/master/),选择最新时间版本,并根据产品型号和环境架构下载对应包。安装命令如下,更多指导参考《[CANN软件安装指南](https://www.hiascend.com/document/redirect/CannCommunityInstWizard)》。
124- 124+ 
125 - 安装CANN toolkit包125 - 安装CANN toolkit包
126 126 
127 ```bash127 ```bash
@@ -148,10 +148,10 @@ pip3 install -r requirements.txt
148 - \$\{install\_path\}:表示指定安装路径,ops包需与toolkit包安装在相同路径,root 用户默认安装在`/usr/local/Ascend`目录。148 - \$\{install\_path\}:表示指定安装路径,ops包需与toolkit包安装在相同路径,root 用户默认安装在`/usr/local/Ascend`目录。
149 149 
150 - **场景2:体验已发布版本能力或基于已发布版本进行开发**150 - **场景2:体验已发布版本能力或基于已发布版本进行开发**
151-
152- 请访问[CANN官网下载中心](https://www.hiascend.com/cann/download),选择发布版本(仅支持CANN 8.5.0及后续版本),并根据产品型号和环境架构下载对应包,最后参考网页提供的命令完成安装。
153 151 
154-## 环境验 证152+ 请访问[CANN官网下载中心](https://www.hiascend.com/cann/download),选择发布版本(仅支持CANN 8.5.0及后续版本),并根据产品型号和环境架构下载对应包,最后参考网页提供的命令完成安装。
153+ 
154+## 环境验证
155 155 
156安装完CANN包后,需验证环境和驱动是否正常。156安装完CANN包后,需验证环境和驱动是否正常。
157 157 
@@ -1,10 +1,10 @@
1# 算子列表1# 算子列表
2 2 
3> 说明:3> 说明:
4- 4+>
5-> - **算子目录**:目录名为算子名小写下划线形式,每个目录承载该算子所有交付件,包括代码实现、examples、文档等,目录介绍参见[项目目录](./install/dir_structure.md)。5+>- **算子目录**:目录名为算子名小写下划线形式,每个目录承载该算子所有交付件,包括代码实现、examples、文档等,目录介绍参见[项目目录](./install/dir_structure.md)。
6-> - **算子执行硬件单元**:大部分算子运行在AI Core,少部分算子运行在AI CPU。默认情况下,项目中提到的算子一般指AI Core算子。关于AI Core和AI CPU详细介绍参见[《Ascend C算子开发》](https://hiascend.com/document/redirect/CannCommunityOpdevAscendC)中“概念原理和术语 > 硬件架构与数据处理原理”。6+>- **算子执行硬件单元**:大部分算子运行在AI Core,少部分算子运行在AI CPU。默认情况下,项目中提到的算子一般指AI Core算子。关于AI Core和AI CPU详细介绍参见[《Ascend C算子开发》](https://hiascend.com/document/redirect/CannCommunityOpdevAscendC)中“概念原理和术语 > 硬件架构与数据处理原理”。
7-> - **算子接口列表**:为方便调用算子,CANN提供一套C API执行算子,一般以aclnn为前缀,全量接口参见[aclnn列表](op_api_list.md)。7+>- **算子接口列表**:为方便调用算子,CANN提供一套C API执行算子,一般以aclnn为前缀,全量接口参见[aclnn列表](op_api_list.md)。
8 8 
9项目提供的所有算子分类和算子列表如下:9项目提供的所有算子分类和算子列表如下:
10 10 
@@ -1,9 +1,9 @@
1# 简介1# 简介
2 2 
3> 说明:3> 说明:
4- 4+>
5-> - 目前算子库中大部分算子运行在AI Core上,少部分算子运行在AI CPU上。默认情况下,项目中提到的算子指AI Core算子。5+>- 目前算子库中大部分算子运行在AI Core上,少部分算子运行在AI CPU上。默认情况下,项目中提到的算子指AI Core算子。
6-> - 关于AI Core和AI CPU的介绍请参见[《Ascend C算子开发》](https://hiascend.com/document/redirect/CannCommunityOpdevAscendC)中“概念原理和术语 > 硬件架构与数据处理原理”。6+>- 关于AI Core和AI CPU的介绍请参见[《Ascend C算子开发》](https://hiascend.com/document/redirect/CannCommunityOpdevAscendC)中“概念原理和术语 > 硬件架构与数据处理原理”。
7 7 
8本项目提供了AI Core算子和AI CPU算子的开发和调用样例,请开发者根据实际情况参考对应实现。8本项目提供了AI Core算子和AI CPU算子的开发和调用样例,请开发者根据实际情况参考对应实现。
9 9 
@@ -142,7 +142,7 @@
142 - 输入和输出的数据类型仅支持FLOAT32。142 - 输入和输出的数据类型仅支持FLOAT32。
143 - 属性`interpolation_mode`需要设置为`bilinear`143 - 属性`interpolation_mode`需要设置为`bilinear`
144 - 属性`padding_mode`设置为`zeros`144 - 属性`padding_mode`设置为`zeros`
145- - 输入`x`的C轴的值为32或者(C轴的大小 * H轴的大小 * W轴的大小) < 20k。145+ - 输入`x`的C轴的值为32或者$(C轴的大小 * H轴的大小 * W轴的大小 < 20k$
146 - 不支持3D场景。146 - 不支持3D场景。
147 147 
148- <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>:2D场景下,数据类型不支持BFLOAT16。148- <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>:2D场景下,数据类型不支持BFLOAT16。
@@ -152,11 +152,11 @@
152 152 
153- 3D场景下153- 3D场景下
154 - 属性`interpolation_mode`不支持配置为"bicubic"。154 - 属性`interpolation_mode`不支持配置为"bicubic"。
155- - 输入`x`的(D轴的大小 * H轴的大小 * W轴的大小) < INT32的最大值。155+ - 输入`x`的$(D轴的大小 * H轴的大小 * W轴的大小) < INT32的最大值$
156-- 2D场景下,输入`x`的(H轴的大小 * W轴的大小) < INT32的最大值。156+- 2D场景下,输入`x`的$(H轴的大小 * W轴的大小) < INT32的最大值$
157- `x``grid`的shape,所有维度都必须大于0。157- `x``grid`的shape,所有维度都必须大于0。
158-- 输入`x`的(D轴的大小 * H轴的大小 * W轴的大小) < INT32的最大值。158+- 输入`x`的$(D轴的大小 * H轴的大小 * W轴的大小) < INT32的最大值$
159-- grid的输入值*图片(长或宽)大于24位的二进制数(16777216),采样点可能存在误差,精度可能产生偏差。159+- grid的$输入值 * 图片(长或宽)> 24位的二进制数(16777216)$,采样点可能存在误差,精度可能产生偏差。
160- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:如果grid存在超出[-1, 1]范围的数据,使用bicubic插值时,小值域数据计算可能存在误差,精度可能产生偏差。160- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:如果grid存在超出[-1, 1]范围的数据,使用bicubic插值时,小值域数据计算可能存在误差,精度可能产生偏差。
161 161 
162## 调用说明162## 调用说明
@@ -257,7 +257,7 @@ aclnnStatus aclnnGridSampler3D(
257 257 
258## 约束说明258## 约束说明
259 259 
260-- 输入`input`的(D轴的大小 * H轴的大小 * W轴的大小 < INT32的最大值。260+- 输入`input`的$(D轴的大小 * H轴的大小 * W轴的大小 < INT32的最大值$
261- 确定性计算:261- 确定性计算:
262 - aclnnGridSampler3D默认确定性实现。262 - aclnnGridSampler3D默认确定性实现。
263 263 
@@ -70,4 +70,4 @@
70 70 
71| 调用方式 | 样例代码 | 说明 |71| 调用方式 | 样例代码 | 说明 |
72| -------------- | --------------------------- |-------------------------------------------------------------------------|72| -------------- | --------------------------- |-------------------------------------------------------------------------|
73-| aclnn | [test_aclnn_upsample_nearest2d.cpp](examples/test_aclnn_upsample_nearest2d.cpp) | 通过[aclnnUpsampleNearest2d](docs/aclnnUpsampleNearest2d.md)接口方式调用ResizeNearestNeighborV2算子。 |73+| aclnn | [test_aclnn_upsample_nearest2d.cpp](examples/test_aclnn_upsample_nearest2d.cpp) | 通过[aclnnUpsampleNearest2d](docs/aclnnUpsampleNearest2d.md)接口方式调用ResizeNearestNeighborV2算子。 |
@@ -49,7 +49,6 @@ aclnnStatus aclnnThreeInterpolateBackward(
49 49 
50- **参数说明**50- **参数说明**
51 51 
52- </style>
53 <table class="tg" style="undefined;table-layout: fixed; width: 1556px"><colgroup>52 <table class="tg" style="undefined;table-layout: fixed; width: 1556px"><colgroup>
54 <col style="width: 171px">53 <col style="width: 171px">
55 <col style="width: 121px">54 <col style="width: 121px">
@@ -148,7 +147,8 @@ aclnnStatus aclnnThreeInterpolateBackward(
148 147 
149 aclnnStatus: 返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。148 aclnnStatus: 返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
150 149 
151- </style>150+ 第一段接口完成入参校验,出现以下场景时报错:
151+ 
152 <table class="tg" style="undefined;table-layout: fixed; width: 859px"><colgroup>152 <table class="tg" style="undefined;table-layout: fixed; width: 859px"><colgroup>
153 <col style="width: 302px">153 <col style="width: 302px">
154 <col style="width: 142px">154 <col style="width: 142px">