已合并
refactor(op_fallback): 删除废弃的 EXEC_OPAPI_CMD 转发宏并补充接口文档 #737
refactor(op_fallback): 删除废弃的 EXEC_OPAPI_CMD 转发宏并补充接口文档 #737
已合并
yuyuanfeng创建于 6 天前
8 个文件变更+152-3
Mdocs/zh/api/op_common/0_op_common_list.md+4-0
@@ -77,4 +77,8 @@
77 - [InferShape4Elewise](infershape/InferShape4Elewise.md)77 - [InferShape4Elewise](infershape/InferShape4Elewise.md)
78 - [InferShape4Reduce](infershape/InferShape4Reduce.md)78 - [InferShape4Reduce](infershape/InferShape4Reduce.md)
79 79 
80+- [op_graph](op_graph/op_graph.md)
81+ - [CANN\_OPS\_OPB\_SYN\_EXEC\_ACLNN](op_graph/CANN_OPS_OPB_SYN_EXEC_ACLNN.md)
82+ - [CANN\_OPS\_OPB\_ASYN\_EXEC\_ACLNN](op_graph/CANN_OPS_OPB_ASYN_EXEC_ACLNN.md)
83+ 
80- [预留接口](reserved_interface_op_common.md)84- [预留接口](reserved_interface_op_common.md)
Mdocs/zh/api/op_common/op_common.md+2-0
@@ -9,3 +9,5 @@
9- **[platform](platform/platform.md)** 9- **[platform](platform/platform.md)**
10 10 
11- **[infershape](infershape/infershape.md)** 11- **[infershape](infershape/infershape.md)**
12+ 
13+- **[op\_graph](op_graph/op_graph.md)**
Mdocs/zh/api/op_common/op_common_api_introduction.md+10-0
@@ -307,6 +307,16 @@
307 <td>reduce类算子的infershape方法。</td>307 <td>reduce类算子的infershape方法。</td>
308 <td rowspan="1">op_common/op_host/infershape_reduce_util.h</td>308 <td rowspan="1">op_common/op_host/infershape_reduce_util.h</td>
309 </tr>309 </tr>
310+ <tr>
311+ <td rowspan="2">op_graph</td>
312+ <td><a href='op_graph/CANN_OPS_OPB_SYN_EXEC_ACLNN.md'>CANN_OPS_OPB_SYN_EXEC_ACLNN</a></td>
313+ <td>Aclnn接口在图场景的通用执行接口(同步接口),内部串行调用两阶段执行。</td>
314+ <td rowspan="2">op_common/op_graph/op_fallback.h</td>
315+ </tr>
316+ <tr>
317+ <td><a href='op_graph/CANN_OPS_OPB_ASYN_EXEC_ACLNN.md'>CANN_OPS_OPB_ASYN_EXEC_ACLNN</a></td>
318+ <td>Aclnn接口在图场景的通用执行接口(异步接口),内部调用了一阶段接口,并把二阶段注册给了GE的context</td>
319+ </tr>
310 <tr>320 <tr>
311 <td><a href='reserved_interface_op_common.md'>预留接口</a></td>321 <td><a href='reserved_interface_op_common.md'>预留接口</a></td>
312 <td>-</td>322 <td>-</td>
Adocs/zh/api/op_common/op_graph/CANN_OPS_OPB_ASYN_EXEC_ACLNN.md+38-0
@@ -0,0 +1,38 @@
1+# CANN\_OPS\_OPB\_ASYN\_EXEC\_ACLNN
2+ 
3+## 功能说明
4+ 
5+Aclnn接口在图场景的通用执行接口(异步接口),内部调用了一阶段接口,并把二阶段注册给了GE的context
6+ 
7+## 函数原型
8+ 
9+```cpp
10+CANN_OPS_OPB_ASYN_EXEC_ACLNN(ctx, aclnnApi, ...)
11+```
12+ 
13+## 参数说明
14+ 
15+| 参数名 | 输入/输出 | 说明 |
16+| --- | --- | --- |
17+| ctx | 输入 | 算子执行上下文(OpExecuteContext),用于托管算子参数并设置Workspace大小。 |
18+| aclnnApi | 输入 | 待回调执行的ACLNN算子API名称,如aclnnScatterList。 |
19+| ... | 输入 | 算子输入、输出及属性参数,支持gert::Tensor、gert::Tensor列表、标量、属性等类型。 |
20+ 
21+## 返回值说明
22+ 
23+返回int类型,GRAPH_SUCCESS表示Prepare阶段准备成功,GRAPH_FAILED表示执行失败。
24+ 
25+## 约束说明
26+ 
27+
28+ 
29+## 调用示例
30+ 
31+关键代码示例如下,仅供参考,不支持直接拷贝运行。
32+ 
33+```cpp
34+auto apiRet = CANN_OPS_OPB_ASYN_EXEC_ACLNN(hostApiCtx, aclnnScatterList, geTenserListVar, indices, update, mask,
35+ reduce, *axis);
36+OP_CHECK_IF(apiRet != GRAPH_SUCCESS, OP_LOGE(hostApiCtx->GetNodeName(), "apiRet faild:%d", apiRet),
37+ return GRAPH_FAILED);
38+```
Adocs/zh/api/op_common/op_graph/CANN_OPS_OPB_SYN_EXEC_ACLNN.md+38-0
@@ -0,0 +1,38 @@
1+# CANN\_OPS\_OPB\_SYN\_EXEC\_ACLNN
2+ 
3+## 功能说明
4+ 
5+Aclnn接口在图场景的通用执行接口(同步接口),内部串行调用两阶段执行。
6+ 
7+## 函数原型
8+ 
9+```cpp
10+CANN_OPS_OPB_SYN_EXEC_ACLNN(ctx, aclnnApi, ...)
11+```
12+ 
13+## 参数说明
14+ 
15+| 参数名 | 输入/输出 | 说明 |
16+| --- | --- | --- |
17+| ctx | 输入 | 算子执行上下文(OpExecuteContext),用于分配Workspace和获取Stream。 |
18+| aclnnApi | 输入 | 待回调执行的ACLNN算子API名称,如aclnnScatterList。 |
19+| ... | 输入 | 算子输入、输出及属性参数,支持gert::Tensor、gert::Tensor列表、标量、属性等类型。 |
20+ 
21+## 返回值说明
22+ 
23+返回int类型,GRAPH_SUCCESS表示执行成功,GRAPH_FAILED表示执行失败。
24+ 
25+## 约束说明
26+ 
27+
28+ 
29+## 调用示例
30+ 
31+关键代码示例如下,仅供参考,不支持直接拷贝运行。
32+ 
33+```cpp
34+auto apiRet = CANN_OPS_OPB_SYN_EXEC_ACLNN(hostApiCtx, aclnnScatterList, geTenserListVar, indices, update, mask,
35+ reduce, *axis);
36+OP_CHECK_IF(apiRet != GRAPH_SUCCESS, OP_LOGE(hostApiCtx->GetNodeName(), "apiRet faild:%d", apiRet),
37+ return GRAPH_FAILED);
38+```
Adocs/zh/api/op_common/op_graph/op_graph.md+5-0
@@ -0,0 +1,5 @@
1+# op\_graph
2+ 
3+- **[CANN\_OPS\_OPB\_SYN\_EXEC\_ACLNN](CANN_OPS_OPB_SYN_EXEC_ACLNN.md)**
4+ 
5+- **[CANN\_OPS\_OPB\_ASYN\_EXEC\_ACLNN](CANN_OPS_OPB_ASYN_EXEC_ACLNN.md)**
Mdocs/zh/api/op_common/reserved_interface_op_common.md+55-0
@@ -84,3 +84,58 @@
84| FloorAlign\<T\>(T a, T b) | kernel侧向下对齐。 |84| FloorAlign\<T\>(T a, T b) | kernel侧向下对齐。 |
85| GetUbBlockSize() | kernel侧获取UB block单元大小(32bytes)。 |85| GetUbBlockSize() | kernel侧获取UB block单元大小(32bytes)。 |
86| GetVRegSize() | kernel侧获取向量寄存器大小。 |86| GetVRegSize() | kernel侧获取向量寄存器大小。 |
87+| aclOpExecutor | acl算子执行器结构体类型。 |
88+| aclTensor | acl张量结构体类型。 |
89+| aclScalar | acl标量结构体类型。 |
90+| aclTensorList | acl张量列表结构体类型。 |
91+| \_aclCreateTensor | aclCreateTensor接口的函数指针类型。 |
92+| \_aclCreateScalar | aclCreateScalar接口的函数指针类型。 |
93+| \_aclCreateIntArray | aclCreateIntArray接口的函数指针类型。 |
94+| \_aclCreateFloatArray | aclCreateFloatArray接口的函数指针类型。 |
95+| \_aclCreateBoolArray | aclCreateBoolArray接口的函数指针类型。 |
96+| \_aclCreateTensorList | aclCreateTensorList接口的函数指针类型。 |
97+| \_aclDestroyTensor | aclDestroyTensor接口的函数指针类型。 |
98+| \_aclDestroyScalar | aclDestroyScalar接口的函数指针类型。 |
99+| \_aclDestroyIntArray | aclDestroyIntArray接口的函数指针类型。 |
100+| \_aclDestroyFloatArray | aclDestroyFloatArray接口的函数指针类型。 |
101+| \_aclDestroyBoolArray | aclDestroyBoolArray接口的函数指针类型。 |
102+| \_aclDestroyTensorList | aclDestroyTensorList接口的函数指针类型。 |
103+| ResetCacheThreadLocal | ResetCacheThreadLocal接口的函数指针类型。 |
104+| GET\_OP\_API\_FUNC(apiName) | 获取指定acl算子API的函数地址,并转换为对应的函数指针类型。 |
105+| index\_sequence\<Is...\> | 编译期索引序列结构体模板。 |
106+| make\_index\_sequence\_helper\<N, Is...\> | 编译期索引序列生成辅助结构体模板。 |
107+| make\_index\_sequence\<N\> | 生成编译期索引序列的别名模板。 |
108+| GetOpApiLibName() | 获取内置opapi算子库名称。 |
109+| GetCustOpApiLibName() | 获取自定义算子opapi库名称。 |
110+| GetOpApiFuncAddrInLib(void \*handler, const char \*libName, const char \*apiName) | 从指定动态库中按符号名查找函数地址。 |
111+| GetOpApiLibHandler(const char \*libName) | 加载指定动态库并返回句柄。 |
112+| GetAclnnAddrByApiName(const char \*apiName) | 遍历opapi领域库查找函数地址。 |
113+| GetOpApiFuncAddr(const char \*apiName) | 依次从cust\_opapi库、opapi库、领域库中查找函数地址。 |
114+| GetConvertType(const gert::Tensor \*ge\_tensor) | 将ge数据类型转换为acl数据类型。 |
115+| ConvertType(const gert::Tensor \*ge\_tensor) | 将ge Tensor转换为acl Tensor。 |
116+| ConvertType(std::vector\<const gert::Tensor \*\>\& ge\_tensorList) | 将ge Tensor列表转换为acl TensorList。 |
117+| ConvertType(T value) | 通用类型转换模板,非Tensor类型原样返回。 |
118+| ConvertScalarType(T value) | 将标量转换为acl Scalar。 |
119+| Release(aclTensor \*p) | 释放acl Tensor。 |
120+| Release(aclScalar \*p) | 释放acl Scalar。 |
121+| Release(aclTensorList \*p) | 释放acl TensorList。 |
122+| Release(T value) | 通用类型释放模板,非acl类型不做处理。 |
123+| CallRelease(Tuple t, index\_sequence) | 展开tuple并逐个调用Release释放资源。 |
124+| ReleaseConvertTypes(Tuple \&t) | 释放tuple中所有转换结果。 |
125+| ConvertTypes(Ts\&... args) | 将多个ge类型参数转换为acl类型并打包为tuple。 |
126+| call(Function f, Tuple t, index\_sequence) | 展开tuple参数并调用目标函数。 |
127+| call(Function f, Tuple t) | 展开tuple参数并调用目标函数。 |
128+| ConvertToOpApiFunc(params, opApiAddr, index\_sequence) | 将函数地址转换为与参数类型匹配的函数指针。 |
129+| ConvertToOpApiFunc(params, opApiAddr) | 将函数地址转换为与参数类型匹配的函数指针。 |
130+| OpApiAnyValueDeleter | 通用参数资源销毁函数指针类型。 |
131+| OpApiAnyValue | 通用参数容器结构体,保存参数指针及其销毁器。 |
132+| OpApiFunc2Stage | 两阶段Launch函数指针类型。 |
133+| OpApiParams | 两阶段执行参数结构体,封装转换后的参数列表、算子执行器与Launch函数。 |
134+| Collect(aclTensor \*p, std::vector\<OpApiAnyValue\>\& params) | 收集acl Tensor参数及其销毁器到参数列表。 |
135+| Collect(aclScalar \*p, std::vector\<OpApiAnyValue\>\& params) | 收集acl Scalar参数及其销毁器到参数列表。 |
136+| Collect(aclIntArray \*p, std::vector\<OpApiAnyValue\>\& params) | 收集acl IntArray参数及其销毁器到参数列表。 |
137+| Collect(aclBoolArray \*p, std::vector\<OpApiAnyValue\>\& params) | 收集acl BoolArray参数及其销毁器到参数列表。 |
138+| Collect(aclTensorList \*p, std::vector\<OpApiAnyValue\>\& params) | 收集acl TensorList参数及其销毁器到参数列表。 |
139+| Collect(T value, std::vector\<OpApiAnyValue\>\& params) | 通用参数收集模板,非acl类型不做处理。 |
140+| CallCollect(Tuple t, index\_sequence, std::vector\<OpApiAnyValue\>\& params) | 展开tuple并逐个调用Collect收集参数。 |
141+| CollectConvertedTypes(Tuple \&t, std::vector\<OpApiAnyValue\>\& params) | 收集tuple中所有转换后的参数及其销毁器。 |
Minclude/op_common/op_graph/op_fallback.h+0-3
@@ -77,8 +77,6 @@ namespace fallback {
77 (ret); \77 (ret); \
78 })78 })
79 79 
80-#define EXEC_OPAPI_CMD(aclnn_api, ...) CANN_OPS_OPB_SYN_EXEC_ACLNN(host_api_ctx, aclnn_api, ##__VA_ARGS__)
81- 
82#define CANN_OPS_OPB_ASYN_EXEC_ACLNN(ctx, aclnn_api, ...) \80#define CANN_OPS_OPB_ASYN_EXEC_ACLNN(ctx, aclnn_api, ...) \
83 ({ \81 ({ \
84 static auto ret = GRAPH_SUCCESS; \82 static auto ret = GRAPH_SUCCESS; \
@@ -120,7 +118,6 @@ namespace fallback {
120 } while (false); \118 } while (false); \
121 (ret); \119 (ret); \
122 })120 })
123- 
124} // namespace fallback121} // namespace fallback
125 122 
126#endif // INC_OP_GRAPH_OP_FALLBACK_H_123#endif // INC_OP_GRAPH_OP_FALLBACK_H_