已合并
math仓资料整改 #2265
sunchun创建于 4月16日
math仓资料整改 #2265
已合并
sunchun创建于 4月16日
已删除 :mathtext1合入到cann/ops-mathmaster
3 个文件变更+316-55
@@ -139,7 +139,8 @@ aclnnStatus aclnnLinalgCross(
139 </tr>139 </tr>
140 </tbody></table>140 </tbody></table>
141 141 
142- - <term>Atlas 训练系列产品</term>不支持BFLOAT16。142+ - <term>Atlas 训练系列产品</term>不支持BFLOAT16。
gitee-yanglulu

后面加个空行

likedislike
143+
143- **返回值:**144- **返回值:**
144 145 
145 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。146 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
@@ -13,41 +13,128 @@
13 13 
14## 功能说明14## 功能说明
15 15 
16-- 算子功能:将uint8类型1位Adam拆包为float32或者float16。16+将uint8类型1位Adam拆包为float32或者float16。
gitee-yanglulu
已过期
  • 算子功能: 删除
likedislike
17 17 
18## 函数原型18## 函数原型
19 19 
20-每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用aclnnSignBitsUnpackGetWorkspaceSize接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用aclnnSignBitsUnpack接口执行计算。20+每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用"aclnnSignBitsUnpackGetWorkspaceSize"接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用"aclnnSignBitsUnpack"接口执行计算。
21 21 
22-- `aclnnStatus aclnnSignBitsUnpackGetWorkspaceSize(const aclTensor* self, int64_t size, aclDataType dtype, aclTensor* out, uint64_t* workspaceSize, aclOpExecutor** executor)`22+```Cpp
23-- `aclnnStatus aclnnSignBitsUnpack(void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, aclrtStream stream)`23+aclnnStatus aclnnSignBitsUnpackGetWorkspaceSize(
24+ const aclTensor* self,
25+ int64_t size,
26+ aclDataType dtype,
27+ aclTensor* out,
28+ uint64_t* workspaceSize,
29+ aclOpExecutor** executor)
30+```
31+ 
32+```Cpp
33+aclnnStatus aclnnSignBitsUnpack(
34+ void* workspace,
35+ uint64_t workspaceSize,
36+ aclOpExecutor* executor,
37+ aclrtStream stream)
38+```
24 39 
25## aclnnSignBitsUnpackGetWorkspaceSize40## aclnnSignBitsUnpackGetWorkspaceSize
26 41 
27- **参数说明:**42- **参数说明:**
28 43 
29- - self(aclTensor*, 计算输入):表示用于计算的1D张量,Device侧的aclTensor,支持空tensor场景,数据类型支持UINT8,支持[非连续的Tensor](../../../docs/zh/context/非连续的Tensor.md),[数据格式](../../../docs/zh/context/数据格式.md)支持ND。44+ <table style="undefined;table-layout: fixed; width: 1550px"><colgroup>
30- 45+ <col style="width: 190px">
31- - size(int64_t, 入参):表示维度处理,Host侧的整型,reshape时输出张量的第一个维度,数据类型支持INT64。46+ <col style="width: 120px">
32- 47+ <col style="width: 250px">
33- - dtype(aclDataType, 入参):表示量化输出Tensor的数据类型,支持ACL_FLOAT16、ACL_FLOAT。48+ <col style="width: 320px">
34- 49+ <col style="width: 250px">
35- - out(aclTensor*, 计算输出):Device侧的aclTensor,数据类型支持FLOAT16、FLOAT,由dtype参数决定。[数据格式](../../../docs/zh/context/数据格式.md)支持ND。支持[非连续的Tensor](../../../docs/zh/context/非连续的Tensor.md)。50+ <col style="width: 120px">
36- 51+ <col style="width: 140px">
37- - workspaceSize(uint64_t*, 出参):返回需要在Device侧申请的workspace大小。52+ <col style="width: 160px">
38- 53+ </colgroup>
39- - executor(aclOpExecutor**, 出参):返回op执行器,包含了算子计算流程。54+ <thead>
55+ <tr>
56+ <th>参数名</th>
57+ <th>输入/输出</th>
58+ <th>描述</th>
59+ <th>使用说明</th>
60+ <th>数据类型</th>
61+ <th>数据格式</th>
62+ <th>维度(shape)</th>
63+ <th>非连续Tensor</th>
64+ </tr></thead>
65+ <tbody>
66+ <tr>
67+ <td>self(aclTensor*)</td>
68+ <td>输入</td>
69+ <td>表示用于计算的1D张量。</td>
70+ <td>支持空tensor场景。</td>
71+ <td>UINT8</td>
72+ <td>ND</td>
73+ <td>1</td>
74+ <td>√</td>
75+ </tr>
76+ <tr>
77+ <td>size(int64_t)</td>
78+ <td>输入</td>
79+ <td>表示维度处理,reshape时输出张量的第一个维度。</td>
80+ <td>-</td>
81+ <td>-</td>
82+ <td>-</td>
83+ <td>-</td>
84+ <td>-</td>
85+ </tr>
86+ <tr>
87+ <td>dtype(aclDataType)</td>
88+ <td>输入</td>
89+ <td>表示量化输出Tensor的数据类型。</td>
90+ <td>支持ACL_FLOAT16、ACL_FLOAT。</td>
91+ <td>-</td>
92+ <td>-</td>
93+ <td>-</td>
94+ <td>-</td>
95+ </tr>
96+ <tr>
97+ <td>out(aclTensor*)</td>
98+ <td>输出</td>
99+ <td>输出Tensor。</td>
100+ <td>数据类型由dtype参数决定。</td>
101+ <td>FLOAT16、FLOAT</td>
102+ <td>ND</td>
103+ <td>2</td>
104+ <td>√</td>
105+ </tr>
106+ <tr>
107+ <td>workspaceSize(uint64_t*)</td>
108+ <td>输出</td>
109+ <td>返回需要在Device侧申请的workspace大小。</td>
110+ <td>-</td>
111+ <td>-</td>
112+ <td>-</td>
113+ <td>-</td>
114+ <td>-</td>
115+ </tr>
116+ <tr>
117+ <td>executor(aclOpExecutor**)</td>
118+ <td>输出</td>
119+ <td>返回op执行器,包含了算子计算流程。</td>
120+ <td>-</td>
121+ <td>-</td>
122+ <td>-</td>
123+ <td>-</td>
124+ <td>-</td>
125+ </tr>
126+ </tbody></table>
40 127 
41- **返回值:**128- **返回值:**
42 129 
43- aclnnStatus返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)130+ aclnnStatus: 返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md).
44 131 
45 第一段接口完成入参校验,出现以下场景时报错:132 第一段接口完成入参校验,出现以下场景时报错:
46 133 
47- <table style="undefined;table-layout: fixed; width: 1149px"><colgroup>134+ <table style="undefined;table-layout: fixed; width: 1150px"><colgroup>
48 <col style="width: 300px">135 <col style="width: 300px">
49- <col style="width: 136px">136+ <col style="width: 134px">
50- <col style="width: 713px">137+ <col style="width: 716px">
51 </colgroup>138 </colgroup>
52 <thead>139 <thead>
53 <tr>140 <tr>
@@ -1,6 +1,6 @@
1# aclnnTopk1# aclnnTopk
2 2 
3-[📄 查看源码](https://gitcode.com/cann/ops-math/tree/master/math/topk)3+[📄 查看源码](https://gitcode.com/cann/ops-math/tree/9.0.0/math/topk)
4 4 
5## 产品支持情况5## 产品支持情况
6 6 
@@ -15,57 +15,230 @@
15 15 
16## 功能说明16## 功能说明
17 17 
18-算子功能:返回输入Tensor在指定维度上的k个极值及索引。18+- 算子功能:返回输入Tensor在指定维度上的k个极值及索引。
19 19 
20## 函数原型20## 函数原型
21 21 
22每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnTopkGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnTopk”接口执行计算。22每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnTopkGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnTopk”接口执行计算。
23 23 
24-- `aclnnStatus aclnnTopkGetWorkspaceSize(const aclTensor *self, int64_t k, int64_t dim, bool largest, bool sorted, aclTensor *valuesOut, aclTensor *indicesOut, uint64_t *workspaceSize, aclOpExecutor **executor)`24+每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用"aclnnTopkGetWorkspaceSize"接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用"aclnnTopk"接口执行计算。
25-- `aclnnStatus aclnnTopk(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, const aclrtStream stream)`25+ 
26+```Cpp
27+aclnnStatus aclnnTopkGetWorkspaceSize(
28+ const aclTensor* self,
29+ int64_t k,
30+ int64_t dim,
31+ bool largest,
32+ bool sorted,
33+ aclTensor* valuesOut,
34+ aclTensor* indicesOut,
35+ uint64_t* workspaceSize,
36+ aclOpExecutor** executor)
37+```
38+ 
39+```Cpp
40+aclnnStatus aclnnTopk(
41+ void* workspace,
42+ uint64_t workspaceSize,
43+ aclOpExecutor* executor,
44+ const aclrtStream stream)
45+```
26 46 
27## aclnnTopkGetWorkspaceSize47## aclnnTopkGetWorkspaceSize
28 48 
29-- **参数说明**49+- **参数说明**
30 50 
31- - self(aclTensor\*, 计算输入):Device侧的aclTensor。shape支持1-8维度,支持[非连续的Tensor](../../../docs/zh/context/非连续的Tensor.md), [数据格式](../../../docs/zh/context/数据格式.md)支持ND。51+ <table style="undefined;table-layout: fixed; width: 1550px"><colgroup>
32- - <term>Atlas 推理系列产品</term>、<term>Atlas 训练系列产品</term>:数据类型支持INT8、UINT8、INT16、INT32、INT64、FLOAT16、FLOAT32、DOUBLE。52+ <col style="width: 190px">
33- - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>、<term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:数据类型支持INT8、UINT8、INT16、INT32、INT64、FLOAT16、FLOAT32、DOUBLE、BFLOAT16。53+ <col style="width: 120px">
34- - <term>Ascend 950PR/Ascend 950DT</term>:数据类型支持BFLOAT16、FLOAT16、FLOAT32、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64、DOUBLE。54+ <col style="width: 250px">
35- - k(int64_t, 计算输入):Host侧的整型。表示计算维度上输出的极值个数。取值范围为[0, self.size(dim)]。55+ <col style="width: 320px">
36- - dim(int64_t, 计算输入):Host侧的整型。表示计算维度。取值范围为[-self.dim(), self.dim())。56+ <col style="width: 250px">
37- - largest(bool, 计算输入):Host侧的布尔型。True表示计算维度上的结果应由大到小输出,False表示计算维度上的结果由小到大输出。57+ <col style="width: 120px">
38- - sorted(bool, 计算输入):Host侧的布尔型。True表示输出结果排序(若largest为True则结果从大到小排序,否则结果从小到大排序),False表示输出结果不排序,按输入时的数据顺序输出。注意:当前该参数仅支持取True,暂不支持取False。58+ <col style="width: 140px">
39- - valuesOut(aclTensor\*, 计算输出):Device侧的aclTensor,数据类型与self保持一致。支持[非连续的Tensor](../../../docs/zh/context/非连续的Tensor.md), [数据格式](../../../docs/zh/context/数据格式.md)支持ND。shape排序轴与k一致,非排序轴与self一致。59+ <col style="width: 160px">
40- - <term>Atlas 推理系列产品</term>、<term>Atlas 训练系列产品</term>:数据类型支持INT8、UINT8、INT16、INT32、INT64、FLOAT16、FLOAT32、DOUBLE。60+ </colgroup>
41- - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>、<term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:数据类型支持INT8、UINT8、INT16、INT32、INT64、FLOAT16、FLOAT32、DOUBLE、BFLOAT16。61+ <thead>
42- - <term>Ascend 950PR/Ascend 950DT</term>:数据类型支持BFLOAT16、FLOAT16、FLOAT32、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64、DOUBLE。62+ <tr>
43- - indicesOut(aclTensor\*, 计算输出):Device侧的aclTensor,据类型支持INT64。支持[非连续的Tensor](../../../docs/zh/context/非连续的Tensor.md), [数据格式](../../../docs/zh/context/数据格式.md)支持ND。shape排序轴与k一致,非排序轴与self一致。63+ <th>参名</th>
44- - workspaceSize(uint64_t\*, 参):返回需要在Device侧申请的workspace大小。64+ <th>输入/输</th>
45- - executor(aclOpExecutor\**, 出参):返回op执行器,包含了算子计算流程。65+ <th>描述</th>
66+ <th>使用说明</th>
67+ <th>数据类型</th>
68+ <th>数据格式</th>
69+ <th>维度(shape)</th>
70+ <th>非连续Tensor</th>
71+ </tr></thead>
72+ <tbody>
73+ <tr>
74+ <td>self(aclTensor*)</td>
75+ <td>输入</td>
76+ <td>输入Tensor。</td>
77+ <td>支持空Tensor。</td>
78+ <td>INT8、UINT8、INT16、INT32、INT64、FLOAT16、FLOAT32、DOUBLE、BFLOAT16、UINT16、UINT32、UINT64</td>
79+ <td>ND</td>
80+ <td>1-8</td>
81+ <td>√</td>
82+ </tr>
83+ <tr>
84+ <td>k(int64_t)</td>
85+ <td>输入</td>
86+ <td>表示计算维度上输出的极值个数。</td>
87+ <td>取值范围[0, self.size(dim)]。</td>
88+ <td>-</td>
89+ <td>-</td>
90+ <td>-</td>
91+ <td>-</td>
92+ </tr>
93+ <tr>
94+ <td>dim(int64_t)</td>
95+ <td>输入</td>
96+ <td>表示计算维度。</td>
97+ <td>取值范围[-self.dim(), self.dim())。</td>
98+ <td>-</td>
99+ <td>-</td>
100+ <td>-</td>
101+ <td>-</td>
102+ </tr>
103+ <tr>
104+ <td>largest(bool)</td>
105+ <td>输入</td>
106+ <td>表示计算维度上的结果排序方式。</td>
107+ <td>True表示结果由大到小输出,False表示结果由小到大输出。</td>
108+ <td>-</td>
109+ <td>-</td>
110+ <td>-</td>
111+ <td>-</td>
112+ </tr>
113+ <tr>
114+ <td>sorted(bool)</td>
115+ <td>输入</td>
116+ <td>表示输出结果是否排序。</td>
117+ <td>True表示输出结果排序,False表示输出结果不排序。注意:当前该参数仅支持取True。</td>
118+ <td>-</td>
119+ <td>-</td>
120+ <td>-</td>
121+ <td>-</td>
122+ </tr>
123+ <tr>
124+ <td>valuesOut(aclTensor*)</td>
125+ <td>输出</td>
126+ <td>输出Tensor,包含极值。</td>
127+ <td>数据类型与self保持一致。</td>
128+ <td>INT8、UINT8、INT16、INT32、INT64、FLOAT16、FLOAT32、DOUBLE、BFLOAT16、UINT16、UINT32、UINT64</td>
129+ <td>ND</td>
130+ <td>1-8</td>
131+ <td>√</td>
132+ </tr>
133+ <tr>
134+ <td>indicesOut(aclTensor*)</td>
135+ <td>输出</td>
136+ <td>输出Tensor,包含索引。</td>
137+ <td>数据类型支持INT64。</td>
138+ <td>INT64</td>
139+ <td>ND</td>
140+ <td>1-8</td>
141+ <td>√</td>
142+ </tr>
143+ <tr>
144+ <td>workspaceSize(uint64_t*)</td>
145+ <td>输出</td>
146+ <td>返回需要在Device侧申请的workspace大小。</td>
147+ <td>-</td>
148+ <td>-</td>
149+ <td>-</td>
150+ <td>-</td>
151+ <td>-</td>
152+ </tr>
153+ <tr>
154+ <td>executor(aclOpExecutor**)</td>
155+ <td>输出</td>
156+ <td>返回op执行器,包含了算子计算流程。</td>
157+ <td>-</td>
158+ <td>-</td>
159+ <td>-</td>
160+ <td>-</td>
161+ <td>-</td>
162+ </tr>
163+ </tbody></table>
46 164 
47-- **返回值**165+- **返回值**
48 166 
49- aclnnStatus返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。167+ aclnnStatus: 返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
50 168 
51- ```
52 第一段接口完成入参校验,出现以下场景时报错:169 第一段接口完成入参校验,出现以下场景时报错:
53- 返回161001(ACLNN_ERR_PARAM_NULLPTR): 1. 传入的self、valuesOut或indicesOut是空指针。170+ 
54- 返回161002(ACLNN_ERR_PARAM_INVALID): 1. self、valuesOut或indicesOut的数据类型和数据格式不在支持的范围之内。171+ <table style="undefined;table-layout: fixed; width: 1150px"><colgroup>
55- 2. dim不在输入self的合理维度范围内。172+ <col style="width: 300px">
56- 3. k小于0或者k大于输入self在dim维度上的size大小。173+ <col style="width: 134px">
57- ```174+ <col style="width: 716px">
175+ </colgroup>
176+ <thead>
177+ <tr>
178+ <th>返回值</th>
179+ <th>错误码</th>
180+ <th>描述</th>
181+ </tr></thead>
182+ <tbody>
183+ <tr>
184+ <td>ACLNN_ERR_PARAM_NULLPTR</td>
185+ <td>161001</td>
186+ <td>传入的self、valuesOut或indicesOut是空指针。</td>
187+ </tr>
188+ <tr>
189+ <td rowspan="3">ACLNN_ERR_PARAM_INVALID</td>
190+ <td rowspan="3">161002</td>
191+ <td>self、valuesOut或indicesOut的数据类型和数据格式不在支持的范围之内。</td>
192+ </tr>
193+ <tr>
194+ <td>dim不在输入self的合理维度范围内。</td>
195+ </tr>
196+ <tr>
197+ <td>k小于0或者k大于输入self在dim维度上的size大小。</td>
198+ </tr>
199+ </tbody>
200+ </table>
58 201 
59## aclnnTopk202## aclnnTopk
60 203 
61-- **参数说明**204+- **参数说明**
62 205 
63- - workspace(void\*, 入参):在Device侧申请的workspace内存地址。206+ <table style="undefined;table-layout: fixed; width: 1149px"><colgroup>
64- - workspaceSize(uint64_t, 入参):在Device侧申请的workspace大小,由第一段接口aclnnTopkGetWorkspaceSize获取。207+ <col style="width: 167px">
65- - executor(aclOpExecutor\*, 入参):op执行器,包含了算子计算流程。208+ <col style="width: 134px">
66- - stream(aclrtStream, 入参):指定执行任务的Stream。209+ <col style="width: 848px">
210+ </colgroup>
211+ <thead>
212+ <tr>
213+ <th>参数名</th>
214+ <th>输入/输出</th>
215+ <th>描述</th>
216+ </tr></thead>
217+ <tbody>
218+ <tr>
219+ <td>workspace</td>
220+ <td>输入</td>
221+ <td>在Device侧申请的workspace内存地址。</td>
222+ </tr>
223+ <tr>
224+ <td>workspaceSize</td>
225+ <td>输入</td>
226+ <td>在Device侧申请的workspace大小,由第一段接口aclnnTopkGetWorkspaceSize获取。</td>
227+ </tr>
228+ <tr>
229+ <td>executor</td>
230+ <td>输入</td>
231+ <td>op执行器,包含了算子计算流程。</td>
232+ </tr>
233+ <tr>
234+ <td>stream</td>
235+ <td>输入</td>
236+ <td>指定执行任务的Stream。</td>
237+ </tr>
238+ </tbody>
239+ </table>
67 240 
68-- **返回值**241+- **返回值**
69 242 
70 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。243 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
71 244 
@@ -105,7 +278,7 @@ int64_t GetShapeSize(const std::vector<int64_t>& shape) {
105}278}
106 279 
107int Init(int32_t deviceId, aclrtStream* stream) {280int Init(int32_t deviceId, aclrtStream* stream) {
108- // 固定写法,资源初始化281+ // 固定写法,资源初始化
109 auto ret = aclInit(nullptr);282 auto ret = aclInit(nullptr);
110 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclInit failed. ERROR: %d\n", ret); return ret);283 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclInit failed. ERROR: %d\n", ret); return ret);
111 ret = aclrtSetDevice(deviceId);284 ret = aclrtSetDevice(deviceId);