已合并
add --cce-ftz description for docs #5454
yhkz9211创建于 9 天前
add --cce-ftz description for docs #5454
已合并
yhkz9211创建于 9 天前
55 个文件变更+556-149
@@ -117,6 +117,12 @@ GeGLU是采用GELU作为激活函数的GLU变体。具体计算公式如下:
117- 当前仅支持ND格式的输入,不支持其他格式。117- 当前仅支持ND格式的输入,不支持其他格式。
118- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。118- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
119 119 
120+<!-- npu="950" id9 -->
121+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
122+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
123+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
124+<!-- end id9 -->
125+ 
120## 调用示例126## 调用示例
121 127 
122```128```
@@ -90,6 +90,12 @@
90- 当前仅支持ND格式的输入,不支持其他格式。90- 当前仅支持ND格式的输入,不支持其他格式。
91- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。91- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
92 92 
93+<!-- npu="950" id10 -->
94+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
95+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
96+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
97+<!-- end id10 -->
98+ 
93## 调用示例99## 调用示例
94 100 
95```101```
@@ -86,6 +86,12 @@
86- 当前仅支持ND格式的输入,不支持其他格式。86- 当前仅支持ND格式的输入,不支持其他格式。
87- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。87- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
88 88 
89+<!-- npu="950" id9 -->
90+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
91+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
92+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
93+<!-- end id9 -->
94+ 
89## 调用示例95## 调用示例
90 96 
91```97```
@@ -83,6 +83,12 @@
83- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。83- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
84- 仅支持输入shape为ND格式。84- 仅支持输入shape为ND格式。
85 85 
86+<!-- npu="950" id10 -->
87+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
88+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
89+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
90+<!-- end id10 -->
91+ 
86## 调用示例92## 调用示例
87 93 
88```94```
@@ -118,6 +118,12 @@ struct SoftMaxShapeInfo {
118- 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。118- 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。
119<!-- end id7 -->119<!-- end id7 -->
120 120 
121+<!-- npu="950" id8 -->
122+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
123+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
124+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
125+<!-- end id8 -->
126+ 
121## 调用示例127## 调用示例
122 128 
123```129```
@@ -106,6 +106,12 @@
106- **不支持源操作数与目的操作数地址重叠。**106- **不支持源操作数与目的操作数地址重叠。**
107- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。107- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
108 108 
109+<!-- npu="950" id9 -->
110+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
111+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
112+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
113+<!-- end id9 -->
114+ 
109## 调用示例115## 调用示例
110 116 
111```117```
@@ -71,6 +71,12 @@ __aicore__ inline void Silu(const LocalTensor<T>& dstLocal, const LocalTensor<T>
71- **不支持源操作数与目的操作数地址重叠。**71- **不支持源操作数与目的操作数地址重叠。**
72- 当前仅支持ND格式的输入,不支持其他格式。72- 当前仅支持ND格式的输入,不支持其他格式。
73 73 
74+<!-- npu="950" id9 -->
75+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
76+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
77+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
78+<!-- end id9 -->
79+ 
74## 调用示例80## 调用示例
75 81 
76```82```
@@ -156,6 +156,12 @@ struct SoftMaxShapeInfo {
156 156 
157<!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SimpleSoftMax_res.md#id2 -->157<!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SimpleSoftMax_res.md#id2 -->
158 158 
159+<!-- npu="950" id15 -->
160+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
161+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
162+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
163+<!-- end id15 -->
164+ 
159## 调用示例165## 调用示例
160 166 
161```167```
@@ -197,6 +197,12 @@ struct SoftMaxShapeInfo {
197 197 
198<!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftMax_res.md#id2 -->198<!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftMax_res.md#id2 -->
199 199 
200+<!-- npu="950" id19 -->
201+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
202+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
203+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
204+<!-- end id19 -->
205+ 
200## 调用示例206## 调用示例
201 207 
202```208```
@@ -143,6 +143,12 @@ struct SoftMaxShapeInfo {
143- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。143- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
144- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。144- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
145 145 
146+<!-- npu="950" id9 -->
147+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
148+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
149+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
150+<!-- end id9 -->
151+ 
146## 调用示例152## 调用示例
147 153 
148本样例输入src的Shape大小为\[80,144\],输出Shape大小dst=\[80,144\],输入inExpSumTensor=\[80,16\],输入inMaxTensor=\[80,16\],输出expMaxTensor=\[80,16\],数据类型均为half,update为false。154本样例输入src的Shape大小为\[80,144\],输出Shape大小dst=\[80,144\],输入inExpSumTensor=\[80,16\],输入inMaxTensor=\[80,16\],输出expMaxTensor=\[80,16\],数据类型均为half,update为false。
@@ -245,6 +245,12 @@ struct SoftMaxShapeInfo {
245 245 
246<!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftmaxFlashV2_res.md#id2 -->246<!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftmaxFlashV2_res.md#id2 -->
247 247 
248+<!-- npu="950" id24 -->
249+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
250+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
251+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
252+<!-- end id24 -->
253+ 
248## 调用示例254## 调用示例
249 255 
250- srcK对齐256- srcK对齐
@@ -161,6 +161,12 @@ struct SoftMaxParams {
161- meanTensor、expSumTensor、maxTensor、expMaxTensor、inMeanTensor、inExpSumTensor、inMaxTensor的Tensor空间,last轴长度必须是32字节。161- meanTensor、expSumTensor、maxTensor、expMaxTensor、inMeanTensor、inExpSumTensor、inMaxTensor的Tensor空间,last轴长度必须是32字节。
162- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。162- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
163 163 
164+<!-- npu="950" id7 -->
165+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
166+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
167+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
168+<!-- end id7 -->
169+ 
164## 调用示例170## 调用示例
165 171 
166本样例中输入srcTensor和输出dstTensor的shape大小为\[8, 1024\],输入inMeanTensor、inExpSumTensor、inMaxTensor的shape大小为\[8, 8\],数据类型为float;输出expMaxTensor的shape大小为\[8, 16\],数据类型为half;输入和输出的数据排布格式为ND,srcTensor和dstTensor空间不复用,模板参数isUpdate为true。172本样例中输入srcTensor和输出dstTensor的shape大小为\[8, 1024\],输入inMeanTensor、inExpSumTensor、inMaxTensor的shape大小为\[8, 8\],数据类型为float;输出expMaxTensor的shape大小为\[8, 16\],数据类型为half;输入和输出的数据排布格式为ND,srcTensor和dstTensor空间不复用,模板参数isUpdate为true。
@@ -108,6 +108,12 @@ SwiGLU是采用Swish作为激活函数的GLU变体。具体计算公式如下:
108- 当前仅支持ND格式的输入,不支持其他格式。108- 当前仅支持ND格式的输入,不支持其他格式。
109- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。109- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
110 110 
111+<!-- npu="950" id9 -->
112+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
113+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
114+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
115+<!-- end id9 -->
116+ 
111## 调用示例117## 调用示例
112 118 
113```119```
@@ -66,6 +66,12 @@ __aicore__ inline void Swish(const LocalTensor<T>& dstLocal, const LocalTensor<T
66- **不支持源操作数与目的操作数地址重叠。**66- **不支持源操作数与目的操作数地址重叠。**
67- 当前仅支持ND格式的输入,不支持其他格式。67- 当前仅支持ND格式的输入,不支持其他格式。
68 68 
69+<!-- npu="950" id8 -->
70+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
71+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
72+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
73+<!-- end id8 -->
74+ 
69## 调用示例75## 调用示例
70 76 
71```77```
@@ -105,6 +105,12 @@
105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
107 107 
108+<!-- npu="950" id9 -->
109+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
110+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
111+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
112+<!-- end id9 -->
113+ 
108## 调用示例114## 调用示例
109 115 
110```116```
@@ -105,6 +105,12 @@
105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
107 107 
108+<!-- npu="950" id9 -->
109+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
110+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
111+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
112+<!-- end id9 -->
113+ 
108## 调用示例114## 调用示例
109 115 
110```116```
@@ -116,6 +116,12 @@ struct AtanConfig {
116- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。116- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
117- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。117- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
118 118 
119+<!-- npu="950" id10 -->
120+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
121+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
122+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
123+<!-- end id10 -->
124+ 
119## 调用示例125## 调用示例
120 126 
121```127```
@@ -105,6 +105,12 @@
105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
107 107 
108+<!-- npu="950" id9 -->
109+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
110+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
111+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
112+<!-- end id9 -->
113+ 
108## 调用示例114## 调用示例
109 115 
110```116```
@@ -82,6 +82,12 @@
82- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。82- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
83- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。83- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
84 84 
85+<!-- npu="950" id7 -->
86+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
87+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
吴洋6 天前

这个接口内部的除法是固定的 1ULP_FTZ_TRUE,会影响这里的逻辑吗

likedislike
yhkz9211
6 天前 评论:
88+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
89+<!-- end id7 -->
90+ 
85## 调用示例91## 调用示例
86 92 
87完整的调用样例请参考[更多样例](../more_examples.md)。93完整的调用样例请参考[更多样例](../more_examples.md)。
@@ -116,6 +116,12 @@ struct ErfConfig {
116 116 
117- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。117- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
118 118 
119+<!-- npu="950" id10 -->
120+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
121+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
122+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
123+<!-- end id10 -->
124+ 
119## 调用示例125## 调用示例
120 126 
121完整的调用样例请参考[Erf样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/erf)。127完整的调用样例请参考[Erf样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/erf)。
@@ -115,6 +115,12 @@ S\(z\) = \(\(\(\(z + S1\) \* z + S2\) \* z + S3\) \* z + S4\) \* z + S5是关于
115- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。115- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
116- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。116- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
117 117 
118+<!-- npu="950" id9 -->
119+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
120+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
121+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
122+<!-- end id9 -->
123+ 
118## 调用示例124## 调用示例
119 125 
120```126```
@@ -95,6 +95,12 @@
95- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。95- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
96- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。96- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
97 97 
98+<!-- npu="950" id7 -->
99+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
100+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
101+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
102+<!-- end id7 -->
103+ 
98## 调用示例104## 调用示例
99 105 
100```106```
@@ -125,6 +125,12 @@ struct FmodConfig {
125<!-- end id10 -->125<!-- end id10 -->
126- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。126- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
127 127 
128+<!-- npu="950" id11 -->
129+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
130+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
131+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
132+<!-- end id11 -->
133+ 
128## 调用示例134## 调用示例
129 135 
130完整的调用样例请参考[fmod算子样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/fmod)。136完整的调用样例请参考[fmod算子样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/fmod)。
@@ -84,6 +84,12 @@
84- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。84- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
85- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。85- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
86 86 
87+<!-- npu="950" id8 -->
88+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
89+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
90+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
91+<!-- end id8 -->
92+ 
87## 调用示例93## 调用示例
88 94 
89```95```
@@ -143,6 +143,12 @@
143- **不支持源操作数与目的操作数地址重叠。**143- **不支持源操作数与目的操作数地址重叠。**
144- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。144- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
145 145 
146+<!-- npu="950" id9 -->
147+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
148+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
149+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
150+<!-- end id9 -->
151+ 
146## 调用示例152## 调用示例
147 153 
148完整的调用样例可参考[Log样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/log)。154完整的调用样例可参考[Log样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/log)。
@@ -192,6 +192,12 @@ struct PowerConfig {
192 Atlas 推理系列产品AI Core,支持的数据类型为:half、float、int32\_t。192 Atlas 推理系列产品AI Core,支持的数据类型为:half、float、int32\_t。
193 <!-- end id12 -->193 <!-- end id12 -->
194 194 
195+<!-- npu="950" id13 -->
196+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
197+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
198+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
199+<!-- end id13 -->
200+ 
195## 调用示例201## 调用示例
196 202 
197完整的调用样例请参考[Power样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/power)。203完整的调用样例请参考[Power样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/10_math/power)。
@@ -105,6 +105,12 @@
105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。105- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。106- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
107 107 
108+<!-- npu="950" id9 -->
109+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
110+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
111+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
112+<!-- end id9 -->
113+ 
108## 调用示例114## 调用示例
109 115 
110```116```
@@ -111,6 +111,12 @@ Tan\(x\)的泰勒展开式为:
111 111 
112- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。112- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
113 113 
114+<!-- npu="950" id9 -->
115+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
116+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
117+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
118+<!-- end id9 -->
119+ 
114## 调用示例120## 调用示例
115 121 
116```122```
@@ -116,6 +116,12 @@ struct TanhConfig {
116- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。116- 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。
117- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。117- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。
118 118 
119+<!-- npu="950" id10 -->
120+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
121+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
122+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
123+<!-- end id10 -->
124+ 
119## 调用示例125## 调用示例
120 126 
121```127```
@@ -89,6 +89,12 @@ BatchNorm是对于每一层的输入做规范化处理,使得每一层的分
89- 当前仅支持ND格式的输入,不支持其他格式。89- 当前仅支持ND格式的输入,不支持其他格式。
90- 输入数据的S\*H必须满足32B对齐的要求。90- 输入数据的S\*H必须满足32B对齐的要求。
91 91 
92+<!-- npu="950" id7 -->
93+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
94+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
95+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
96+<!-- end id7 -->
97+ 
92## 调用示例98## 调用示例
93 99 
94```100```
@@ -89,6 +89,12 @@ SubLayer\(X\)通常是指在DeepNorm模型中的一个子层(sub-layer),
89- 仅支持输入shape为ND格式。89- 仅支持输入shape为ND格式。
90- 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。90- 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。
91 91 
92+<!-- npu="950" id7 -->
93+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
94+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
95+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
96+<!-- end id7 -->
97+ 
92## 调用示例98## 调用示例
93 99 
94```100```
@@ -91,6 +91,12 @@
91- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。91- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。
92- 当前仅支持ND格式的输入,不支持其他格式。92- 当前仅支持ND格式的输入,不支持其他格式。
93 93 
94+<!-- npu="950" id7 -->
95+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
96+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
97+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
98+<!-- end id7 -->
99+ 
94## 调用示例100## 调用示例
95 101 
96```102```
@@ -228,6 +228,11 @@
228 <!-- end id12 -->228 <!-- end id12 -->
229 229 
230 230 
231+<!-- npu="950" id13 -->
232+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
233+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
234+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
235+<!-- end id13 -->
231 236 
232## 调用示例237## 调用示例
233 238 
@@ -119,6 +119,12 @@ struct LayerNormGradShapeInfo {
119- 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。119- 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。
120- 不支持对尾轴H轴的切分。120- 不支持对尾轴H轴的切分。
121 121 
122+<!-- npu="950" id7 -->
123+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
124+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
125+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
126+<!-- end id7 -->
127+ 
122## 调用示例128## 调用示例
123 129 
124本样例中,输入inputX和inputDy的shape为\[2, 32, 16\],inputVariance和inputMean的shape为\[2, 32\],inputGamma的shape为\[16\]。输出outputPdX和resForGamma的shape为\[2, 32, 16\]。数据排布均为ND格式,数据类型均为float,不复用源操作数的内存空间。130本样例中,输入inputX和inputDy的shape为\[2, 32, 16\],inputVariance和inputMean的shape为\[2, 32\],inputGamma的shape为\[16\]。输出outputPdX和resForGamma的shape为\[2, 32, 16\]。数据排布均为ND格式,数据类型均为float,不复用源操作数的内存空间。
@@ -131,6 +131,12 @@ struct NormalizePara {
131 Atlas 推理系列产品AI Core,支持的数据类型为: half、float。131 Atlas 推理系列产品AI Core,支持的数据类型为: half、float。
132 <!-- end id11 -->132 <!-- end id11 -->
133 133 
134+<!-- npu="950" id12 -->
135+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
136+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
137+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
138+<!-- end id12 -->
139+ 
134## 调用示例140## 调用示例
135 141 
136```142```
@@ -92,6 +92,12 @@
92- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。92- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。
93- 当srcLocal的原始shape中H轴非32字节对齐时,开发者需要对原始输入在H轴方向补齐数据到32字节对齐,API的计算结果会覆盖dstLocal中对应srcLocal补齐位置的数据。93- 当srcLocal的原始shape中H轴非32字节对齐时,开发者需要对原始输入在H轴方向补齐数据到32字节对齐,API的计算结果会覆盖dstLocal中对应srcLocal补齐位置的数据。
94 94 
95+<!-- npu="950" id9 -->
96+- 针对Ascend 950PR/Ascend 950DT,接口内部计算对Subnormal的处理方式受编译选项`--cce-ftz`控制(默认值为`true`):
97+ - 配置为`false`时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
98+ - 配置为`true`时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
99+<!-- end id9 -->
100+ 
95## 调用示例101## 调用示例
96 102 
97```103```
@@ -150,6 +150,11 @@ $dst_i = |src_i|$
150 - tensor高维切分计算占用8KB UB。150 - tensor高维切分计算占用8KB UB。
151 - tensor前n个数据连续计算不涉及8KB UB的占用。151 - tensor前n个数据连续计算不涉及8KB UB的占用。
152<!-- end id21 -->152<!-- end id21 -->
153+<!-- npu="950" id29 -->
154+- 针对Ascend 950PR/Ascend 950DT,仅complex32和complex64类型的接口内部计算涉及Subnormal,处理方式受编译选项--cce-ftz控制(默认值为true):
155+ - --cce-ftz=false时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
156+ - --cce-ftz=true时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
157+<!-- end id29 -->
153 158 
154## 调用示例<a name="section176061616102911"></a>159## 调用示例<a name="section176061616102911"></a>
155 160 
@@ -134,7 +134,7 @@ $dst_i = src0_i / src1_i$
134|---|---|134|---|---|
135| T | 操作数数据类型。 |135| T | 操作数数据类型。 |
136| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |136| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
137-| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,DivConfig类型,定义如下:<br>enum&nbsp;class&nbsp;DivAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;DIFF_COMPENSATION,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE<br>};<br>struct&nbsp;DivConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;DivAlgo&nbsp;algo&nbsp;=&nbsp;DivAlgo::INTRINSIC;<br>};<br>通过DivConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>&bull; DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果,最大精度误差为1ulp。<br>&bull; DivAlgo::DIFF_COMPENSATIONDivAlgo::PRECISION_0ULP_FTZ_TRUE使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>&bull; DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持Subnormal数据计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>&bull; DivAlgo::PRECISION_1ULP_FTZ_FALSE支持Subnormal数据计算,使用单指令计算得出结果,最大精度误差为1ulp。<br>该参数的默认值DEFAULT_DIV_CONFIG的取值如下:<br>constexpr&nbsp;DivConfig&nbsp;DEFAULT_DIV_CONFIG&nbsp;=&nbsp;{&nbsp;DivAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_DIV_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |137+| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,DivConfig类型,定义如下:<br>enum&nbsp;class&nbsp;DivAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;DIFF_COMPENSATION,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE<br>};<br>struct&nbsp;DivConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;DivAlgo&nbsp;algo&nbsp;=&nbsp;DivAlgo::INTRINSIC;<br>};<br>通过DivConfig结构体的参数algo来选择Div算法并配置Subnormal模式,详细说明请参考[关键特性说明](#div-key-features)<br>algo取值如下:<br>&bull; DivAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; DivAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差为1ulp。<br>&bull; DivAlgo::DIFF_COMPENSATION:使用差值补偿算法,最大精度误差为0ulp。对于float数据类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; DivAlgo::PRECISION_0ULP_FTZ_TRUE使用差值补偿算法,最大精度误差为0ulp,采用FTZ模式。目前,该算法支持float数据类型。<br>&bull; DivAlgo::PRECISION_0ULP_FTZ_FALSE使用差值补偿算法,支持Subnormal数据计算,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>&bull; DivAlgo::PRECISION_1ULP_FTZ_FALSE支持Subnormal数据计算,最大精度误差为1ulp。<br><br>该参数的默认值DEFAULT_DIV_CONFIG的取值如下:<br>constexpr&nbsp;DivConfig&nbsp;DEFAULT_DIV_CONFIG&nbsp;=&nbsp;{&nbsp;DivAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_DIV_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |
138 138 
139**表2** 参数说明139**表2** 参数说明
140 140 
@@ -205,6 +205,35 @@ $dst_i = src0_i / src1_i$
205 - tensor前n个数据连续计算不涉及8KB UB的占用。205 - tensor前n个数据连续计算不涉及8KB UB的占用。
206<!-- end id32 -->206<!-- end id32 -->
207 207 
208+<!-- npu="950" id35 -->
209+## 关键特性<a id="div-key-features"></a>
210+ 
211+针对Ascend 950PR/Ascend 950DT,有如下关键特性:
212+ 
213+### 最大精度误差
214+ 
215+- DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE和DivAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
216+- DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE和DivAlgo::PRECISION_0ULP_FTZ_FALSE的最大精度误差为0ulp。
217+ 
218+### 配置Subnormal模式
219+ 
220+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。
221+ 
222+#### 默认算法
223+ 
224+DivAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值)时采用FTZ模式。
225+ 
226+#### 显式指定的算法
227+ 
228+- DivAlgo::DIFF_COMPENSATION支持float类型,Subnormal处理受--cce-ftz控制。
229+- 名称中包含FTZ_FALSE的算法始终保留Subnormal。
230+- 名称中包含FTZ_TRUE的算法始终采用FTZ模式。
231+ 
232+#### 使用建议
233+ 
234+在--cce-ftz=true(默认值)时,一般场景建议使用性能更优的DivAlgo::INTRINSIC或显式选择DivAlgo::PRECISION_1ULP_FTZ_TRUE、DivAlgo::PRECISION_0ULP_FTZ_TRUE;需要精确输出Subnormal时,使用DivAlgo::PRECISION_0ULP_FTZ_FALSE或DivAlgo::PRECISION_1ULP_FTZ_FALSE。
235+<!-- end id35 -->
236+ 
208## 调用示例<a name="section642mcpsimp"></a>237## 调用示例<a name="section642mcpsimp"></a>
209 238 
210- tensor高维切分计算样例-mask连续模式239- tensor高维切分计算样例-mask连续模式
@@ -239,7 +268,7 @@ $dst_i = src0_i / src1_i$
239 // Div 0ulp.268 // Div 0ulp.
240 static constexpr DivConfig config = { DivAlgo::DIFF_COMPENSATION };269 static constexpr DivConfig config = { DivAlgo::DIFF_COMPENSATION };
241 Div<T, config>(dstLocalX, srcLocalX, srcLocalY, 512);270 Div<T, config>(dstLocalX, srcLocalX, srcLocalY, 512);
242- // Div Subnormal.271+ // Div 0ulp精度及Subnormal模式。
243 static constexpr DivConfig config2 = { DivAlgo::PRECISION_0ULP_FTZ_FALSE };272 static constexpr DivConfig config2 = { DivAlgo::PRECISION_0ULP_FTZ_FALSE };
244 Div<T, config2>(dstLocalX, srcLocalX, srcLocalY, 512);273 Div<T, config2>(dstLocalX, srcLocalX, srcLocalY, 512);
245 ```274 ```
@@ -110,6 +110,9 @@ $dst_i = scalar \div src_i$
110 - tensor高维切分计算占用8KB UB。110 - tensor高维切分计算占用8KB UB。
111 - tensor前n个数据连续计算不涉及8KB UB的占用。111 - tensor前n个数据连续计算不涉及8KB UB的占用。
112- 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。112- 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。
113+- 针对Ascend 950PR/Ascend 950DT,仅half和float类型的计算受Subnormal影响,其处理方式受编译选项--cce-ftz控制(默认值为true):
114+ - --cce-ftz=false时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
115+ - --cce-ftz=true时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
113<!-- end id9 -->116<!-- end id9 -->
114 117 
115## 调用示例<a name="section642mcpsimp"></a>118## 调用示例<a name="section642mcpsimp"></a>
@@ -128,7 +128,7 @@ $dst_i = e^{src_i}$
128|---|---|128|---|---|
129| T | 操作数数据类型。 |129| T | 操作数数据类型。 |
130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
131-| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,ExpConfig类型,定义如下:<br>enum&nbsp;class&nbsp;ExpAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;ExpConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;ExpAlgo&nbsp;algo&nbsp;=&nbsp;ExpAlgo::INTRINSIC;<br>};<br>通过ExpConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>&bull; ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果所有Subnormal被近似0。<br>&bull; ExpAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_EXP_CONFIG的取值如下:<br>constexpr&nbsp;ExpConfig&nbsp;DEFAULT_EXP_CONFIG&nbsp;=&nbsp;{&nbsp;ExpAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_EXP_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |131+| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,ExpConfig类型,定义如下:<br>enum&nbsp;class&nbsp;ExpAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;ExpConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;ExpAlgo&nbsp;algo&nbsp;=&nbsp;ExpAlgo::INTRINSIC;<br>};<br>通过ExpConfig结构体的参数algo来选择Exp算法并配置Subnormal模式,详细说明请参考[关键特性说明](#exp-key-features)<br>algo取值如下:<br>&bull; ExpAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; ExpAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差1ulp。<br>&bull; ExpAlgo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。<br><br>该参数的默认值DEFAULT_EXP_CONFIG的取值如下:<br>constexpr&nbsp;ExpConfig&nbsp;DEFAULT_EXP_CONFIG&nbsp;=&nbsp;{&nbsp;ExpAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_EXP_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |
132 132 
133**表2** 参数说明133**表2** 参数说明
134 134 
@@ -176,22 +176,30 @@ T支持的数据类型为:half、float。
176<!-- end id21 -->176<!-- end id21 -->
177 177 
178<!-- npu="950" id24 -->178<!-- npu="950" id24 -->
179-## 关键特性<a name="section18972943153217"></a>179+## 关键特性<a id="exp-key-features"></a>
180 180 
181针对Ascend 950PR/Ascend 950DT,有如下关键特性:181针对Ascend 950PR/Ascend 950DT,有如下关键特性:
182 182 
183-**最大精度误差**:183+### 最大精度误差
184 184 
185-- ExpAlgo::INTRINSIC、ExpAlgo::PRECISION\_1ULP\_FTZ\_TRUE,最大精度误差为1ulp。185+ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE和ExpAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
186-- ExpAlgo::PRECISION\_1ULP\_FTZ\_FALSE,软仿实现,最大精度误差为1ulp。
187 186 
188-**配置Subnormal模式**:187+### 配置Subnormal模式
189 188 
190-FTZ(Flush To Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。189+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。
191 190 
192-只有将algo设置为ExpAlgo::PRECISION\_1ULP\_FTZ\_false时,Exp接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。191+#### 默认算法
193 192 
194-由于Subnormal的计算行为是通过软件仿真算法实现,一般场景推荐使用性能更好的ExpAlgo::INTRINSIC、ExpAlgo::PRECISION\_1ULP\_FTZ\_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使ExpAlgo::PRECISION\_1ULP\_FTZ\_FALSE193+ExpAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
194+ 
195+#### 显式指定的算法
196+ 
197+- ExpAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
198+- ExpAlgo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
199+ 
200+#### 使用建议
201+ 
202+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的ExpAlgo::INTRINSIC或显式选择ExpAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用ExpAlgo::PRECISION_1ULP_FTZ_FALSE。
195<!-- end id24 -->203<!-- end id24 -->
196 204 
197## 调用示例<a name="section176061616102911"></a>205## 调用示例<a name="section176061616102911"></a>
@@ -128,7 +128,7 @@ $dst_i = \ln(src_i)$
128|---|---|128|---|---|
129| T | 操作数数据类型。 |129| T | 操作数数据类型。 |
130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
131-| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,LnConfig类型,定义如下:<br>enum&nbsp;class&nbsp;LnAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;LnConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;LnAlgo&nbsp;algo&nbsp;=&nbsp;LnAlgo::INTRINSIC;<br>};<br>通过LnConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>&bull; LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果所有Subnormal被近似0。<br>&bull; LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_LN_CONFIG的取值如下:<br>constexpr&nbsp;LnConfig&nbsp;DEFAULT_LN_CONFIG&nbsp;=&nbsp;{&nbsp;LnAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_LN_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |131+| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,LnConfig类型,定义如下:<br>enum&nbsp;class&nbsp;LnAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;LnConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;LnAlgo&nbsp;algo&nbsp;=&nbsp;LnAlgo::INTRINSIC;<br>};<br>通过LnConfig结构体的参数algo来选择Ln算法并配置Subnormal模式,详细说明请参考[关键特性说明](#ln-key-features)<br>algo取值如下:<br>&bull; LnAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; LnAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差1ulp。<br>&bull; LnAlgo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。<br><br>该参数的默认值DEFAULT_LN_CONFIG的取值如下:<br>constexpr&nbsp;LnConfig&nbsp;DEFAULT_LN_CONFIG&nbsp;=&nbsp;{&nbsp;LnAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_LN_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |
132 132 
133**表2** 参数说明133**表2** 参数说明
134 134 
@@ -178,22 +178,30 @@ T支持的数据类型为:half、float。
178<!-- end id21 -->178<!-- end id21 -->
179 179 
180<!-- npu="950" id24 -->180<!-- npu="950" id24 -->
181-## 关键特性<a name="section18972943153217"></a>181+## 关键特性<a id="ln-key-features"></a>
182 182 
183针对Ascend 950PR/Ascend 950DT,有如下关键特性:183针对Ascend 950PR/Ascend 950DT,有如下关键特性:
184 184 
185-**最大精度误差**:185+### 最大精度误差
186 186 
187-- LnAlgo::INTRINSIC、LnAlgo::PRECISION\_1ULP\_FTZ\_TRUE,最大精度误差为1ulp。187+LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE和LnAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
188-- LnAlgo::PRECISION\_1ULP\_FTZ\_FALSE,软仿实现,最大精度误差为1ulp。
189 188 
190-**配置Subnormal模式**:189+### 配置Subnormal模式
191 190 
192-FTZ(Flush To Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。191+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。
193 192 
194-只有将algo设置为LnAlgo::PRECISION\_1ULP\_FTZ\_false时,Ln接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。193+#### 默认算法
195 194 
196-由于Subnormal的计算行为是通过软件仿真算法实现,一般场景推荐使用性能更好的LnAlgo::INTRINSIC、LnAlgo::PRECISION\_1ULP\_FTZ\_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使LnAlgo::PRECISION\_1ULP\_FTZ\_FALSE195+LnAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
196+ 
197+#### 显式指定的算法
198+ 
199+- LnAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
200+- LnAlgo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
201+ 
202+#### 使用建议
203+ 
204+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的LnAlgo::INTRINSIC或显式选择LnAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用LnAlgo::PRECISION_1ULP_FTZ_FALSE。
197<!-- end id24 -->205<!-- end id24 -->
198 206 
199## 调用示例<a name="section176061616102911"></a>207## 调用示例<a name="section176061616102911"></a>
@@ -128,7 +128,7 @@ $dst_i = \frac{1}{src_i}$
128|---|---|128|---|---|
129| T | 操作数数据类型。 |129| T | 操作数数据类型。 |
130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
131-| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,ReciprocalConfig类型,定义如下:<br>enum&nbsp;class&nbsp;ReciprocalAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;ReciprocalConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;ReciprocalAlgo&nbsp;algo&nbsp;=&nbsp;ReciprocalAlgo::INTRINSIC;<br>};<br>通过ReciprocalConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>&bull; ReciprocalAlgo::INTRINSIC、ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果所有Subnormal被近似0。<br>&bull; ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_RECIPROCAL_CONFIG的取值如下:<br>constexpr&nbsp;ReciprocalConfig&nbsp;DEFAULT_RECIPROCAL_CONFIG&nbsp;=&nbsp;{&nbsp;ReciprocalAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RECIPROCAL_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |131+| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,ReciprocalConfig类型,定义如下:<br>enum&nbsp;class&nbsp;ReciprocalAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;ReciprocalConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;ReciprocalAlgo&nbsp;algo&nbsp;=&nbsp;ReciprocalAlgo::INTRINSIC;<br>};<br>通过ReciprocalConfig结构体的参数algo来选择Reciprocal算法并配置Subnormal模式,详细说明请参考[关键特性说明](#reciprocal-key-features)<br>algo取值如下:<br>&bull; ReciprocalAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差1ulp。<br>&bull; ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。<br><br>该参数的默认值DEFAULT_RECIPROCAL_CONFIG的取值如下:<br>constexpr&nbsp;ReciprocalConfig&nbsp;DEFAULT_RECIPROCAL_CONFIG&nbsp;=&nbsp;{&nbsp;ReciprocalAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RECIPROCAL_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |
132 132 
133**表2** 参数说明133**表2** 参数说明
134 134 
@@ -201,6 +201,33 @@ $dst_i = \frac{1}{src_i}$
201- 如果src中的数值为0,可能会产生未知结果。201- 如果src中的数值为0,可能会产生未知结果。
202- 使用Reciprocal时,half的算子结果对比误差不满足双千分之一的要求,float的算子结果对比误差不满足双万分之一的要求,如果需要高精度,建议使用[Div](Div.md)替代实现。202- 使用Reciprocal时,half的算子结果对比误差不满足双千分之一的要求,float的算子结果对比误差不满足双万分之一的要求,如果需要高精度,建议使用[Div](Div.md)替代实现。
203 203 
204+<!-- npu="950" id35 -->
205+## 关键特性<a id="reciprocal-key-features"></a>
206+ 
207+针对Ascend 950PR/Ascend 950DT,有如下关键特性:
208+ 
209+### 最大精度误差
210+ 
211+ReciprocalAlgo::INTRINSIC、ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE和ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差均为1ulp。
212+ 
213+### 配置Subnormal模式
214+ 
215+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。
216+ 
217+#### 默认算法
218+ 
219+ReciprocalAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值)时采用FTZ模式。
220+ 
221+#### 显式指定的算法
222+ 
223+- ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
224+- ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
225+ 
226+#### 使用建议
227+ 
228+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的ReciprocalAlgo::INTRINSIC或显式选择ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE。
229+<!-- end id35 -->
230+ 
204## 调用示例<a name="section176061616102911"></a>231## 调用示例<a name="section176061616102911"></a>
205 232 
206- tensor高维切分计算样例-mask连续模式233- tensor高维切分计算样例-mask连续模式
@@ -128,7 +128,7 @@ $dst_i = \frac{1}{\sqrt{src_i}}$
128|---|---|128|---|---|
129| T | 操作数数据类型。 |129| T | 操作数数据类型。 |
130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
131-| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,RsqrtConfig类型,定义如下:<br>enum&nbsp;class&nbsp;RsqrtAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;FAST_INVERSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;RsqrtConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;RsqrtAlgo&nbsp;algo&nbsp;=&nbsp;RsqrtAlgo::INTRINSIC;<br>};<br>通过RsqrtConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>&bull; RsqrtAlgo::INTRINSIC、RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计得出结果,最大精度误差为1ulp。<br>&bull; RsqrtAlgo::FAST_INVERSERsqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法得出结果。适用于输入值在[0, 85070596800837026223494223584045301760]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为inf。目前,该算法支持float数据类型,并在该模式下支持Subnormal数据计算。<br>&bull; RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE,支持half类型的Subnormal数据计算,此时最大精度误差为1ulp。<br>该参数的默认值DEFAULT_RSQRT_CONFIG的取值如下:<br>constexpr&nbsp;RsqrtConfig&nbsp;DEFAULT_RSQRT_CONFIG&nbsp;=&nbsp;{&nbsp;RsqrtAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RSQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |131+| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,RsqrtConfig类型,定义如下:<br>enum&nbsp;class&nbsp;RsqrtAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;FAST_INVERSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;RsqrtConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;RsqrtAlgo&nbsp;algo&nbsp;=&nbsp;RsqrtAlgo::INTRINSIC;<br>};<br>通过RsqrtConfig结构体的参数algo来选择Rsqrt算法并配置Subnormal模式,详细说明请参考[关键特性说明](#rsqrt-key-features)<br>algo取值如下:<br>&bull; RsqrtAlgo::INTRINSIC:默认,最大精度误差为1ulp。对于half、float类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; RsqrtAlgo::FAST_INVERSERsqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法得出结果。目前,该算法支持float数据类型,并在该模式下支持Subnormal数据计算。<br>&bull; RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE:使用单指令计算,最大精度误差为1ulp。<br>&bull; RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE:最大精度误差为1ulp,支持half类型的Subnormal数据计算。<br><br>该参数的默认值DEFAULT_RSQRT_CONFIG的取值如下:<br>constexpr&nbsp;RsqrtConfig&nbsp;DEFAULT_RSQRT_CONFIG&nbsp;=&nbsp;{&nbsp;RsqrtAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RSQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> |
吴洋6 天前
已过期

原来的这个范围约束不需要了吗

likedislike
yhkz9211
6 天前 评论:
132 132 
133**表2** 参数说明133**表2** 参数说明
134 134 
@@ -178,6 +178,36 @@ T支持的数据类型为:half、float。
178- 如果src中的数值为非正数,可能会产生未知结果。178- 如果src中的数值为非正数,可能会产生未知结果。
179- 使用Rsqrt时,half的算子结果对比误差不满足双千分之一的要求,float的算子结果对比误差不满足双万分之一的要求,如果需要高精度,建议使用[Div](Div.md)和[Sqrt](Sqrt.md)替代实现。179- 使用Rsqrt时,half的算子结果对比误差不满足双千分之一的要求,float的算子结果对比误差不满足双万分之一的要求,如果需要高精度,建议使用[Div](Div.md)和[Sqrt](Sqrt.md)替代实现。
180 180 
181+<!-- npu="950" id35 -->
182+## 关键特性<a id="rsqrt-key-features"></a>
183+ 
184+针对Ascend 950PR/Ascend 950DT,有如下关键特性:
185+ 
186+### 最大精度误差
187+ 
188+- RsqrtAlgo::INTRINSIC和RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE的最大精度误差为1ulp。
189+- RsqrtAlgo::FAST_INVERSE和RsqrtAlgo::PRECISION_0ULP_FTZ_FALSE的最大精度误差为0ulp。
190+- RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
191+ 
192+### 配置Subnormal模式
193+ 
194+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。
195+ 
196+#### 默认算法
197+ 
198+RsqrtAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值)时采用FTZ模式。
199+ 
200+#### 显式指定的算法
201+ 
202+- RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
203+- RsqrtAlgo::FAST_INVERSE和RsqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法,仅支持float类型,并支持Subnormal数据计算。
204+- RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE支持half类型的Subnormal数据计算。
205+ 
206+#### 使用建议
207+ 
208+在--cce-ftz=true(默认值)时,一般场景建议使用默认的RsqrtAlgo::INTRINSIC或显式选择RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用RsqrtAlgo::FAST_INVERSE、RsqrtAlgo::PRECISION_0ULP_FTZ_FALSE或RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE。
209+<!-- end id35 -->
210+ 
181## 调用示例<a name="section642mcpsimp"></a>211## 调用示例<a name="section642mcpsimp"></a>
182 212 
183- tensor高维切分计算样例-mask连续模式213- tensor高维切分计算样例-mask连续模式
@@ -128,7 +128,7 @@ $dst_i = \sqrt{src_i}$
128|---|---|128|---|---|
129| T | 操作数数据类型。 |129| T | 操作数数据类型。 |
130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |130| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
131-| <!-- npu="950" id22 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,SqrtConfig类型,定义如下:<br>enum&nbsp;class&nbsp;SqrtAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;FAST_INVERSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;SqrtConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;SqrtAlgo&nbsp;algo&nbsp;=&nbsp;SqrtAlgo::INTRINSIC;<br>};<br>通过SqrtConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>&bull; SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计得出结果,最大精度误差为1ulp。<br>&bull; SqrtAlgo::FAST_INVERSESqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法得出结果。适用于输入值在[0, 85070596800837026223494223584045301760]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为0。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br>&bull; SqrtAlgo::PRECISION_1ULP_FTZ_FALSE,支持half类型的Subnormal数据计算,此时最大精度误差为1ulp。<br>该参数的默认值DEFAULT_SQRT_CONFIG的取值如下:<br>constexpr&nbsp;SqrtConfig&nbsp;DEFAULT_SQRT_CONFIG&nbsp;=&nbsp;{&nbsp;SqrtAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_SQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id22 --> |131+| <!-- npu="950" id22 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,SqrtConfig类型,定义如下:<br>enum&nbsp;class&nbsp;SqrtAlgo&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;INTRINSIC&nbsp;=&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;FAST_INVERSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_TRUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_0ULP_FTZ_FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct&nbsp;SqrtConfig&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;SqrtAlgo&nbsp;algo&nbsp;=&nbsp;SqrtAlgo::INTRINSIC;<br>};<br>通过SqrtConfig结构体的参数algo来选择Sqrt算法并配置Subnormal模式,详细说明请参考[关键特性说明](#sqrt-key-features)<br>algo取值如下:<br>&bull; SqrtAlgo::INTRINSIC:默认,最大精度误差为1ulp。对于half、float类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&bull; SqrtAlgo::FAST_INVERSESqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法得出结果。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br>&bull; SqrtAlgo::PRECISION_1ULP_FTZ_TRUE:使用单指令计算,最大精度误差为1ulp。<br>&bull; SqrtAlgo::PRECISION_1ULP_FTZ_FALSE:最大精度误差为1ulp,支持half类型的Subnormal数据计算。<br><br>该参数的默认值DEFAULT_SQRT_CONFIG的取值如下:<br>constexpr&nbsp;SqrtConfig&nbsp;DEFAULT_SQRT_CONFIG&nbsp;=&nbsp;{&nbsp;SqrtAlgo::INTRINSIC&nbsp;};<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_SQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id22 --> |
132 132 
133**表2** 参数说明133**表2** 参数说明
134 134 
@@ -178,25 +178,35 @@ T支持的数据类型为:half、float。
178 178 
179- 如果src中的数值为非正数,可能会产生未知结果。179- 如果src中的数值为非正数,可能会产生未知结果。
180 180 
181-<!-- npu="950" id24 -->181+<!-- npu="950" id35 -->
182-## 关键特性<a name="section18972943153217"></a>182+## 关键特性<a id="sqrt-key-features"></a>
183 183 
184针对Ascend 950PR/Ascend 950DT,有如下关键特性:184针对Ascend 950PR/Ascend 950DT,有如下关键特性:
185 185 
186-**最大精度误差**:186+### 最大精度误差
187 187 
188-- SqrtAlgo::INTRINSICSqrtAlgo::PRECISION\_1ULP\_FTZ\_TRUE,最大精度误差为1ulp。188+- SqrtAlgo::INTRINSICSqrtAlgo::PRECISION_1ULP_FTZ_TRUE的最大精度误差为1ulp。
189-- SqrtAlgo::PRECISION\_1ULP\_FTZ\_FALSE,软仿实现,最大精度误差为1ulp189+- SqrtAlgo::FAST_INVERSE和SqrtAlgo::PRECISION_0ULP_FTZ_FALSE的最大精度误差为0ulp
190-- SqrtAlgo::FAST\_INVERSE、SqrtAlgo::PRECISION\_0ULP\_FTZ\_FALSE,软仿实现,最大精度误差为0ulp190+- SqrtAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp
191 191 
192-**配置Subnormal模式**:192+### 配置Subnormal模式
193 193 
194-FTZ(Flush To Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。194+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为[Subnormal](../../data_structures/builtin_data_types.md#p7381131713310)时,将其直接清零(近似为0),而非保留其精确的微小数值。
195 195 
196-只有将algo设置为SqrtAlgo::FAST\_INVERSE、SqrtAlgo::PRECISION\_0ULP\_FTZ\_FALSE、SqrtAlgo::PRECISION\_1ULP\_FTZ\_false时,Sqrt接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。196+#### 默认算法
197 197 
198-由于Subnormal的计算行为是通过软件仿真算法实现,一般场景推荐使用性能更好的SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION\_1ULP\_FTZ\_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使SqrtAlgo::FAST\_INVERSE、SqrtAlgo::PRECISION\_0ULP\_FTZ\_FALSE、SqrtAlgo::PRECISION\_1ULP\_FTZ\_FALSE198+SqrtAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
199-<!-- end id24 -->199+ 
200+#### 显式指定的算法
201+ 
202+- SqrtAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
203+- SqrtAlgo::FAST_INVERSE和SqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法,仅支持float类型,并支持Subnormal数据计算。
204+- SqrtAlgo::PRECISION_1ULP_FTZ_FALSE支持half类型的Subnormal数据计算。
205+ 
206+#### 使用建议
207+ 
208+在--cce-ftz=true(默认值)时,一般场景建议使用默认的SqrtAlgo::INTRINSIC或显式选择SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE或SqrtAlgo::PRECISION_1ULP_FTZ_FALSE。
209+<!-- end id35 -->
200 210 
201## 调用示例<a name="section176061616102911"></a>211## 调用示例<a name="section176061616102911"></a>
202 212 
@@ -105,6 +105,11 @@
105 105 
106- 当目的操作数和源操作数数据类型不一致时,目的操作数和源操作数不可重叠。106- 当目的操作数和源操作数数据类型不一致时,目的操作数和源操作数不可重叠。
107- 整型数据的计算结果如果超出数据类型的表示范围会采取非饱和截断,比如int8_t类型,srcReg为-128,其绝对值128会被截断成-128。107- 整型数据的计算结果如果超出数据类型的表示范围会采取非饱和截断,比如int8_t类型,srcReg为-128,其绝对值128会被截断成-128。
108+<!-- npu="950" id8 -->
109+- 针对Ascend 950PR/Ascend 950DT,仅complex32和complex64类型的接口内部计算涉及Subnormal,处理方式受编译选项--cce-ftz控制(默认值为true):
110+ - --cce-ftz=false时,计算过程中保留Subnormal,并按照其实际数值参与后续计算。
111+ - --cce-ftz=true时,启用FTZ(Flush-To-Zero)模式,计算过程中产生或参与运算的Subnormal将按0处理,可能导致计算结果与保留Subnormal时存在精度差异。
112+<!-- end id8 -->
108 113 
109## 调用示例<a name="section642mcpsimp"></a>114## 调用示例<a name="section642mcpsimp"></a>
110 115 
@@ -143,4 +148,3 @@
143 }148 }
144 }149 }
145 ```150 ```
146- 
@@ -48,10 +48,9 @@ __simd_callee__ inline void Div(U& dstReg, U& srcReg0, U& srcReg1, MaskReg& mask
48| 参数名 | 描述 |48| 参数名 | 描述 |
49| --- | --- |49| --- | --- |
50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
51-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或DivSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置DivSpecificMode<br><code>enum class DivAlgo {<br> INTRINSIC = 0,<br> DIFF_COMPENSATION,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_FALSE,<br> PRECISION_1ULP_FTZ_FALSE<br>};<br>struct DivSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> bool precisionMode = false;<br> DivAlgo algo = DivAlgo::INTRINSIC;<br>};</code><br>precisionMode为true时,使能更高精度Div计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前只针对float数据类型生效。<br>&bull; algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果,最大精度误差为1ulp。<br>&nbsp;&nbsp;&bull; DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float、complex64数据类型。<br>&nbsp;&nbsp;&bull; DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持Subnormal数据计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>&nbsp;&nbsp;&bull; DivAlgo::PRECISION_1ULP_FTZ_FALSE支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 |51+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向DivSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置DivSpecificMode,定义如下:<br><code>enum class DivAlgo {<br> INTRINSIC = 0,<br> DIFF_COMPENSATION,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_FALSE,<br> PRECISION_1ULP_FTZ_FALSE<br>};<br>struct DivSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> bool precisionMode = false;<br> DivAlgo algo = DivAlgo::INTRINSIC;<br>};</code><br>&bull; precisionMode:用于配置高精度Div计算。设置为true时,使用差值补偿算法,最大精度误差为0ulp,支持float、complex64类型。<br>&bull; algo:用于选择Div算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; DivAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; DivAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差为1ulp。<br>&nbsp;&nbsp;&bull; DivAlgo::DIFF_COMPENSATION使用差值补偿算法,最大精度误差为0ulp。对于float、complex64类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; DivAlgo::PRECISION_0ULP_FTZ_TRUE:使用差值补偿算法,最大精度误差为0ulp。<br>&nbsp;&nbsp;&bull; DivAlgo::PRECISION_0ULP_FTZ_FALSE:使用差值补偿算法支持Subnormal数据计算,最大精度误差为0ulp。<br>&nbsp;&nbsp;&bull; DivAlgo::PRECISION_1ULP_FTZ_FALSE支持Subnormal数据计算,最大精度误差为1ulp。 |
52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
53 53 
54- 
55**表 2** 参数说明54**表 2** 参数说明
56 55 
57| 参数名 | 输入/输出 | 描述 |56| 参数名 | 输入/输出 | 描述 |
@@ -64,10 +63,11 @@ __simd_callee__ inline void Div(U& dstReg, U& srcReg0, U& srcReg1, MaskReg& mask
64## 数据类型63## 数据类型
65 64 
66目的操作数与源操作数的数据类型需要保持一致。65目的操作数与源操作数的数据类型需要保持一致。
67-- 当模式为DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE,支持的数据类型为:int16_t、uint16_t、half、int32_t、uint32_t、float、complex32、int64_t、uint64_t、complex64。66+ 
68-- 当模式为DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE,支持的数据类型为:float、complex64。67+- 当模式为DivAlgo::INTRINSIC或DivAlgo::PRECISION_1ULP_FTZ_TRUE时,支持的数据类型为:int16_t、uint16_t、half、int32_t、uint32_t、float、complex32、int64_t、uint64_t、complex64。
69-- 当模式为DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持的数据类型为:float。68+- 当模式为DivAlgo::DIFF_COMPENSATION或DivAlgo::PRECISION_0ULP_FTZ_TRUE时,支持的数据类型为:float、complex64
70-- 当模式为DivAlgo::PRECISION_1ULP_FTZ_FALSE,支持的数据类型为:half、float。69+- 当模式为DivAlgo::PRECISION_0ULP_FTZ_FALSE时,支持的数据类型为:float。
70+- 当模式为DivAlgo::PRECISION_1ULP_FTZ_FALSE时,支持的数据类型为:half、float。
71 71 
72## 返回值说明<a name="section640mcpsimp"></a>72## 返回值说明<a name="section640mcpsimp"></a>
73 73 
@@ -79,20 +79,30 @@ __simd_callee__ inline void Div(U& dstReg, U& srcReg0, U& srcReg1, MaskReg& mask
79 79 
80## 关键特性说明80## 关键特性说明
81 81 
82-**最大精度误差:**82+### 最大精度误差
83 83 
84-- precisionMode为false时,DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE、DivAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp84+- precisionMode设置true时,使用差值补偿算法进行高精度计算,最大精度误差为0ulp
85-- precisionMode为true时,DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUEDivAlgo::PRECISION_0ULP_FTZ_FALSE最大精度误差为0ulp。85+- precisionMode设置false时,DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE和DivAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp;DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUEDivAlgo::PRECISION_0ULP_FTZ_FALSE最大精度误差为0ulp。
86 86 
87-**配置Subnormal模式:**87+### 配置Subnormal模式
88-<br>
89-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
90-<br>
91-只有将algo设置为DivAlgo::PRECISION_0ULP_FTZ_FALSE或者DivAlgo::PRECISION_1ULP_FTZ_FALSE时,Div接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。
92-<br>
93-一般场景推荐使用性能更好的DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE、DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误)使用DivAlgo::PRECISION_0ULP_FTZ_FALSE、DivAlgo::PRECISION_1ULP_FTZ_FALSE。
94 88 
95-**表 8** Div Subnormal示例89+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
90+ 
91+#### 默认算法
92+ 
93+DivAlgo::INTRINSIC支持整数、浮点和复数类型,具体支持范围请参考[数据类型](#数据类型)。对于half和float类型,--cce-ftz=false时保留Subnormal,等效于DivAlgo::PRECISION_1ULP_FTZ_FALSE;--cce-ftz=true(默认值)时采用FTZ模式,等效于DivAlgo::PRECISION_1ULP_FTZ_TRUE。对于整数类型,计算结果不涉及Subnormal,--cce-ftz对其无影响;对于complex32和complex64类型,实部和虚部分别为half和float,Subnormal处理遵循对应元素类型的--cce-ftz配置。
94+ 
95+#### 显式指定的算法
96+ 
97+- DivAlgo::DIFF_COMPENSATION支持float和complex64类型。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值)时采用FTZ模式。
98+- 名称中包含FTZ_FALSE的算法始终保留Subnormal。
99+- 名称中包含FTZ_TRUE的算法始终采用FTZ模式。
100+ 
101+#### 使用建议
102+ 
103+一般场景建议使用性能更优的DivAlgo::PRECISION_1ULP_FTZ_TRUE或DivAlgo::PRECISION_0ULP_FTZ_TRUE;对于需要精确输出Subnormal的场景(如算法对数据精度有特殊要求或需避免除零错误),可将算法配置为DivAlgo::PRECISION_0ULP_FTZ_FALSE或DivAlgo::PRECISION_1ULP_FTZ_FALSE。
104+ 
105+**表 3** Div Subnormal示例
96 106 
97| 被除数输入 | 除数输入 | 输出(配置Subnormal模式) | 输出(不配置Subnormal模式) |107| 被除数输入 | 除数输入 | 输出(配置Subnormal模式) | 输出(不配置Subnormal模式) |
98| --- | --- | --- | --- |108| --- | --- | --- | --- |
@@ -111,8 +121,9 @@ __simd_vf__ inline void DivVF(__ubuf__ T* dstAddr, __ubuf__ T* src0Addr, __ubuf_
111 AscendC::Reg::MaskReg mask;121 AscendC::Reg::MaskReg mask;
112 // 高精度模式122 // 高精度模式
113 // static constexpr AscendC::Reg::DivSpecificMode mode = {AscendC::Reg::MaskMergeMode::ZEROING, true};123 // static constexpr AscendC::Reg::DivSpecificMode mode = {AscendC::Reg::MaskMergeMode::ZEROING, true};
114- // Subnormal模式124+ // 0ulp精度及Subnormal模式
115- // static constexpr AscendC::Reg::DivSpecificMode mode = {AscendC::Reg::MaskMergeMode::ZEROING, true, DivAlgo::PRECISION_0ULP_FTZ_FALSE};125+ // static constexpr AscendC::Reg::DivSpecificMode mode = {
126+ // AscendC::Reg::MaskMergeMode::ZEROING, true, AscendC::DivAlgo::PRECISION_0ULP_FTZ_FALSE};
116 for (uint16_t i = 0; i < repeatTimes; i++) {127 for (uint16_t i = 0; i < repeatTimes; i++) {
117 mask = AscendC::Reg::UpdateMask<T>(count);128 mask = AscendC::Reg::UpdateMask<T>(count);
118 AscendC::Reg::LoadAlign(srcReg0, src0Addr + i * oneRepeatSize);129 AscendC::Reg::LoadAlign(srcReg0, src0Addr + i * oneRepeatSize);
@@ -124,4 +135,3 @@ __simd_vf__ inline void DivVF(__ubuf__ T* dstAddr, __ubuf__ T* src0Addr, __ubuf_
124 }135 }
125}136}
126```137```
127- 
@@ -48,7 +48,7 @@ __simd_callee__ inline void Exp(U& dstReg, U& srcReg, MaskReg& mask)
48| 参数名 | 描述 |48| 参数名 | 描述 |
49| --- | --- |49| --- | --- |
50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
51-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型的枚举或ExpSpecificMode结构体指针。<br>&bull; MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; ExpSpecificMode,定义如下:<br><code>enum class ExpAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct ExpSpecificMode{<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> ExpAlgo algo = ExpAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果所有Subnormal被近似0。<br>&nbsp;&nbsp;&bull; ExpAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 |51+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向ExpSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置ExpSpecificMode,定义如下:<br><code>enum class ExpAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct ExpSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> ExpAlgo algo = ExpAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于选择Exp算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; ExpAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; ExpAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差1ulp。<br>&nbsp;&nbsp;&bull; ExpAlgo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。 |
52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
53 53 
54**表 2** 参数说明54**表 2** 参数说明
@@ -73,18 +73,26 @@ __simd_callee__ inline void Exp(U& dstReg, U& srcReg, MaskReg& mask)
73 73 
74## 关键特性说明74## 关键特性说明
75 75 
76-**最大精度误差**:76+### 最大精度误差
77 77 
78-- ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUEExpAlgo::PRECISION_1ULP_FTZ_FALSE最大精度误差为1ulp。78+ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUEExpAlgo::PRECISION_1ULP_FTZ_FALSE最大精度误差为1ulp。
79-- ExpAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。
80 79 
81-**配置Subnormal模式**:80+### 配置Subnormal模式
82-<br>81+ 
83-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。82+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
84-<br>83+ 
85-只有将algo设置为ExpAlgo::PRECISION_1ULP_FTZ_FALSE时,Exp接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。84+#### 默认算法
86-<br>85+ 
87-一般场景推荐使用性能更好的ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE;需要精确 Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使ExpAlgo::PRECISION_1ULP_FTZ_FALSE86+ExpAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
87+ 
88+#### 显式指定的算法
89+ 
90+- ExpAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
91+- ExpAlgo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
92+ 
93+#### 使用建议
94+ 
95+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的ExpAlgo::INTRINSIC或显式选择ExpAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用ExpAlgo::PRECISION_1ULP_FTZ_FALSE。
88 96 
89**表 3** Exp Subnormal示例97**表 3** Exp Subnormal示例
90 98 
@@ -104,13 +112,14 @@ __simd_vf__ inline void ExpVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_t
104 AscendC::Reg::RegTensor<T> srcReg;112 AscendC::Reg::RegTensor<T> srcReg;
105 AscendC::Reg::RegTensor<T> dstReg;113 AscendC::Reg::RegTensor<T> dstReg;
106 AscendC::Reg::MaskReg mask;114 AscendC::Reg::MaskReg mask;
107- // Subnormal模式115+ // 1ulp精度及Subnormal模式
108- // static constexpr AscendC::Reg::ExpSpecificMode mode = {AscendC::Reg::MaskMergeMode::ZEROING, ExpAlgo::PRECISION_1ULP_FTZ_FALSE};116+ // static constexpr AscendC::Reg::ExpSpecificMode mode = {
117+ // AscendC::Reg::MaskMergeMode::ZEROING, AscendC::ExpAlgo::PRECISION_1ULP_FTZ_FALSE};
109 for (uint16_t i = 0; i < repeatTimes; i++) {118 for (uint16_t i = 0; i < repeatTimes; i++) {
110 mask = AscendC::Reg::UpdateMask<T>(count);119 mask = AscendC::Reg::UpdateMask<T>(count);
111 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);120 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
112 AscendC::Reg::Exp(dstReg, srcReg, mask);121 AscendC::Reg::Exp(dstReg, srcReg, mask);
113- // Subnormal模式122+ // 1ulp精度及Subnormal模式
114 // AscendC::Reg::Exp<T, &mode>(dstReg, srcReg, mask);123 // AscendC::Reg::Exp<T, &mode>(dstReg, srcReg, mask);
115 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);124 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);
116 }125 }
@@ -48,7 +48,7 @@ __simd_callee__ inline void Ln(U& dstReg, U& srcReg, MaskReg& mask)
48| 参数名 | 描述 |48| 参数名 | 描述 |
49| --- | --- |49| --- | --- |
50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
51-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或LnSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置LnSpecificMode,定义如下:<br><code>enum class LnAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct LnSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> LnAlgo algo = LnAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于配置Subnormal模式。<br>&nbsp;&nbsp;&bull; LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果,最大精度误差为1ulp。目前,该算法支持half、float数据类型。<br>&nbsp;&nbsp;&bull; LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 |51+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向LnSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置LnSpecificMode,定义如下:<br><code>enum class LnAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct LnSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> LnAlgo algo = LnAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于选择Ln算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; LnAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; LnAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差为1ulp。<br>&nbsp;&nbsp;&bull; LnAlgo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。 |
52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
53 53 
54**表 2** 参数说明54**表 2** 参数说明
@@ -73,18 +73,26 @@ __simd_callee__ inline void Ln(U& dstReg, U& srcReg, MaskReg& mask)
73 73 
74## 关键特性说明74## 关键特性说明
75 75 
76-**最大精度误差:**76+### 最大精度误差
77 77 
78-- LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE最大精度误差为1ulp。78+LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE和LnAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
79-- LnAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。
80 79 
81-**配置Subnormal模式**:80+### 配置Subnormal模式
82-<br>81+ 
83-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。82+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
84-<br>83+ 
85-只有将algo设置为LnAlgo::PRECISION_1ULP_FTZ_FALSE时,Ln接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。84+#### 默认算法
86-<br>85+ 
87-一般场景推荐使用性能更好的LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使LnAlgo::PRECISION_1ULP_FTZ_FALSE86+LnAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
87+ 
88+#### 显式指定的算法
89+ 
90+- LnAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
91+- LnAlgo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
92+ 
93+#### 使用建议
94+ 
95+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的LnAlgo::INTRINSIC或显式选择LnAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用LnAlgo::PRECISION_1ULP_FTZ_FALSE。
88 96 
89## 调用示例<a name="section642mcpsimp"></a>97## 调用示例<a name="section642mcpsimp"></a>
90 98 
@@ -95,16 +103,16 @@ __simd_vf__ inline void LnVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_t
95 AscendC::Reg::RegTensor<T> srcReg;103 AscendC::Reg::RegTensor<T> srcReg;
96 AscendC::Reg::RegTensor<T> dstReg;104 AscendC::Reg::RegTensor<T> dstReg;
97 AscendC::Reg::MaskReg mask;105 AscendC::Reg::MaskReg mask;
98- // Subnormal模式106+ // 1ulp精度及Subnormal模式
99- // static constexpr AscendC::Reg::LnSpecificMode mode = {MaskMergeMode::ZEROING, LnAlgo::PRECISION_1ULP_FTZ_FALSE};107+ // static constexpr AscendC::Reg::LnSpecificMode mode = {
108+ // AscendC::Reg::MaskMergeMode::ZEROING, AscendC::LnAlgo::PRECISION_1ULP_FTZ_FALSE};
100 for (uint16_t i = 0; i < repeatTimes; i++) {109 for (uint16_t i = 0; i < repeatTimes; i++) {
101 mask = AscendC::Reg::UpdateMask<T>(count);110 mask = AscendC::Reg::UpdateMask<T>(count);
102 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);111 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
103 AscendC::Reg::Ln(dstReg, srcReg, mask);112 AscendC::Reg::Ln(dstReg, srcReg, mask);
104- // Subnormal模式113+ // 1ulp精度及Subnormal模式
105 // AscendC::Reg::Ln<T, &mode>(dstReg, srcReg, mask);114 // AscendC::Reg::Ln<T, &mode>(dstReg, srcReg, mask);
106 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);115 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);
107 }116 }
108}117}
109```118```
110- 
@@ -48,7 +48,7 @@ __simd_callee__ inline void Log(U& dstReg, U& srcReg, MaskReg& mask)
48| 参数名 | 描述 |48| 参数名 | 描述 |
49| --- | --- |49| --- | --- |
50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
51-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或LogSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置LogSpecificMode,定义如下:<br><code>enum class LogAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct LogSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> LogAlgo algo = LogAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于配置Subnormal模式。<br>&nbsp;&nbsp;&bull; LogAlgo::INTRINSIC、LogAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果,最大精度误差为1ulp。目前,该算法支持half、float数据类型。<br>&nbsp;&nbsp;&bull; LogAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 |51+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向LogSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置LogSpecificMode,定义如下:<br><code>enum class LogAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct LogSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> LogAlgo algo = LogAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于选择Log算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; LogAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; LogAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差为1ulp。<br>&nbsp;&nbsp;&bull; LogAlgo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。 |
52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
53 53 
54**表2** 参数说明54**表2** 参数说明
@@ -73,18 +73,26 @@ __simd_callee__ inline void Log(U& dstReg, U& srcReg, MaskReg& mask)
73 73 
74## 关键特性说明74## 关键特性说明
75 75 
76-**最大精度误差**76+### 最大精度误差
77 77 
78-- LogAlgo::INTRINSIC、LogAlgo::PRECISION_1ULP_FTZ_TRUE最大精度误差为1ulp。78+LogAlgo::INTRINSIC、LogAlgo::PRECISION_1ULP_FTZ_TRUE和LogAlgo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
79-- LogAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。
80 79 
81-**配置Subnormal模式**:80+### 配置Subnormal模式
82-<br>81+ 
83-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。82+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
84-<br>83+ 
85-只有将algo设置为LogAlgo::PRECISION_1ULP_FTZ_FALSE时,Log接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。84+#### 默认算法
86-<br>85+ 
87-一般场景推荐使用性能更好的LogAlgo::INTRINSIC、LogAlgo::PRECISION_1ULP_FTZ_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使LogAlgo::PRECISION_1ULP_FTZ_FALSE86+LogAlgo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
87+ 
88+#### 显式指定的算法
89+ 
90+- LogAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
91+- LogAlgo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
92+ 
93+#### 使用建议
94+ 
95+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的LogAlgo::INTRINSIC或显式选择LogAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用LogAlgo::PRECISION_1ULP_FTZ_FALSE。
88 96 
89## 调用示例<a name="section642mcpsimp"></a>97## 调用示例<a name="section642mcpsimp"></a>
90 98 
@@ -95,13 +103,14 @@ __simd_vf__ inline void LogVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_t
95 AscendC::Reg::RegTensor<T> srcReg;103 AscendC::Reg::RegTensor<T> srcReg;
96 AscendC::Reg::RegTensor<T> dstReg;104 AscendC::Reg::RegTensor<T> dstReg;
97 AscendC::Reg::MaskReg mask;105 AscendC::Reg::MaskReg mask;
98- // Subnormal模式106+ // 1ulp精度及Subnormal模式
99- // static constexpr AscendC::Reg::LogSpecificMode mode = {MaskMergeMode::ZEROING, LogAlgo::PRECISION_1ULP_FTZ_FALSE};107+ // static constexpr AscendC::Reg::LogSpecificMode mode = {
108+ // AscendC::Reg::MaskMergeMode::ZEROING, AscendC::LogAlgo::PRECISION_1ULP_FTZ_FALSE};
100 for (uint16_t i = 0; i < repeatTimes; i++) {109 for (uint16_t i = 0; i < repeatTimes; i++) {
101 mask = AscendC::Reg::UpdateMask<T>(count);110 mask = AscendC::Reg::UpdateMask<T>(count);
102 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);111 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
103 AscendC::Reg::Log(dstReg, srcReg, mask);112 AscendC::Reg::Log(dstReg, srcReg, mask);
104- // Subnormal模式113+ // 1ulp精度及Subnormal模式
105 // AscendC::Reg::Log<DTYPE, &mode>(dstReg, srcReg, mask);114 // AscendC::Reg::Log<DTYPE, &mode>(dstReg, srcReg, mask);
106 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);115 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);
107 }116 }
@@ -50,7 +50,7 @@ __simd_callee__ inline void Log10(U& dstReg, U& srcReg, MaskReg& mask)
50| 参数名 | 描述 |50| 参数名 | 描述 |
51| --- | --- |51| --- | --- |
52| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |52| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
53-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或Log10SpecificMode结构体。<br>&bull; 配置MaskMergeMode枚举类型选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; Log10SpecificMode,定义如下:<br><code>enum class Log10Algo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct Log10SpecificMode{<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> Log10Algo algo = Log10Algo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于配置Subnormal模式。<br>&nbsp;&nbsp;&bull; Log10Algo::INTRINSIC、Log10Algo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果所有Subnormal被近似0。<br>&nbsp;&nbsp;&bull; Log10Algo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 |53+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向Log10SpecificMode结构体的指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置Log10SpecificMode,定义如下:<br><code>enum class Log10Algo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct Log10SpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> Log10Algo algo = Log10Algo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于选择Log10算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; Log10Algo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; Log10Algo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差1ulp。<br>&nbsp;&nbsp;&bull; Log10Algo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。 |
54| U | 目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |54| U | 目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
55 55 
56**表2** 参数说明56**表2** 参数说明
@@ -75,22 +75,30 @@ __simd_callee__ inline void Log10(U& dstReg, U& srcReg, MaskReg& mask)
75 75 
76## 关键特性说明76## 关键特性说明
77 77 
78-**精度提升**78+### 精度提升
79 79 
80当源操作数数据类型为half时,将half提升精度到float后进行计算,再将结果转为half后输出。80当源操作数数据类型为half时,将half提升精度到float后进行计算,再将结果转为half后输出。
81 81 
82-**最大精度误差**82+### 最大精度误差
83 83 
84-- Log10Algo::INTRINSIC、Log10Algo::PRECISION_1ULP_FTZ_TRUE最大精度误差为1ulp。84+Log10Algo::INTRINSIC、Log10Algo::PRECISION_1ULP_FTZ_TRUE和Log10Algo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
85-- Log10Algo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。
86 85 
87-**配置Subnormal模式**:86+### 配置Subnormal模式
88-<br>87+ 
89-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。88+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
90-<br>89+ 
91-只有将algo设置为Log10Algo::PRECISION_1ULP_FTZ_FALSE时,Log10接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。90+#### 默认算法
92-<br>91+ 
93-一般场景推荐使用性能更好的Log10Algo::INTRINSIC、Log10Algo::PRECISION_1ULP_FTZ_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使Log10Algo::PRECISION_1ULP_FTZ_FALSE92+Log10Algo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
93+ 
94+#### 显式指定的算法
95+ 
96+- Log10Algo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
97+- Log10Algo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
98+ 
99+#### 使用建议
100+ 
101+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的Log10Algo::INTRINSIC或显式选择Log10Algo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用Log10Algo::PRECISION_1ULP_FTZ_FALSE。
94 102 
95## 调用示例<a name="section642mcpsimp"></a>103## 调用示例<a name="section642mcpsimp"></a>
96 104 
@@ -101,13 +109,14 @@ __simd_vf__ inline void Log10VF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32
101 AscendC::Reg::RegTensor<T> srcReg;109 AscendC::Reg::RegTensor<T> srcReg;
102 AscendC::Reg::RegTensor<T> dstReg;110 AscendC::Reg::RegTensor<T> dstReg;
103 AscendC::Reg::MaskReg mask;111 AscendC::Reg::MaskReg mask;
104- // Subnormal模式112+ // 1ulp精度及Subnormal模式
105- // static constexpr AscendC::Reg::Log10SpecificMode mode = {MaskMergeMode::ZEROING, Log10Algo::PRECISION_1ULP_FTZ_FALSE};113+ // static constexpr AscendC::Reg::Log10SpecificMode mode = {
114+ // AscendC::Reg::MaskMergeMode::ZEROING, AscendC::Log10Algo::PRECISION_1ULP_FTZ_FALSE};
106 for (uint16_t i = 0; i < repeatTimes; i++) {115 for (uint16_t i = 0; i < repeatTimes; i++) {
107 mask = AscendC::Reg::UpdateMask<T>(count);116 mask = AscendC::Reg::UpdateMask<T>(count);
108 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);117 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
109 AscendC::Reg::Log10(dstReg, srcReg, mask);118 AscendC::Reg::Log10(dstReg, srcReg, mask);
110- // Subnormal模式119+ // 1ulp精度及Subnormal模式
111 // AscendC::Reg::Log10<DTYPE, &mode>(dstReg, srcReg, mask);120 // AscendC::Reg::Log10<DTYPE, &mode>(dstReg, srcReg, mask);
112 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);121 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);
113 }122 }
@@ -50,7 +50,7 @@ __simd_callee__ inline void Log2(U& dstReg, U& srcReg, MaskReg& mask)
50| 参数名 | 描述 |50| 参数名 | 描述 |
51| --- | --- |51| --- | --- |
52| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |52| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
53-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或Log2SpecificMode结构体实例。<br>&bull; 配置MaskMergeMode枚举类型选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; Log2SpecificMode,定义如下:<br><code>enum class Log2Algo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct Log2SpecificMode{<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> Log2Algo algo = Log2Algo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于配置Subnormal模式。<br>&nbsp;&nbsp;&bull; Log2Algo::INTRINSIC、Log2Algo::PRECISION_1ULP_FTZ_TRUE,所有Subnormal被近似0。<br>&nbsp;&nbsp;&bull; Log2Algo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 |53+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向Log2SpecificMode结构体的指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置Log2SpecificMode,定义如下:<br><code>enum class Log2Algo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct Log2SpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> Log2Algo algo = Log2Algo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; algo:用于选择Log2算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; Log2Algo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; Log2Algo::PRECISION_1ULP_FTZ_TRUE:使用单指令计算最大精度误差1ulp。<br>&nbsp;&nbsp;&bull; Log2Algo::PRECISION_1ULP_FTZ_FALSE:通过软件仿真实现,支持Subnormal数据计算,最大精度误差为1ulp。 |
54| U | 目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |54| U | 目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
55 55 
56**表2** 参数说明56**表2** 参数说明
@@ -75,22 +75,30 @@ __simd_callee__ inline void Log2(U& dstReg, U& srcReg, MaskReg& mask)
75 75 
76## 关键特性说明76## 关键特性说明
77 77 
78-**精度提升**78+### 精度提升
79 79 
80当源操作数数据类型为half时,将half提升精度到float后进行计算,再将结果转为half后输出。80当源操作数数据类型为half时,将half提升精度到float后进行计算,再将结果转为half后输出。
81 81 
82-**最大精度误差**82+### 最大精度误差
83 83 
84-- Log2Algo::INTRINSIC、Log2Algo::PRECISION_1ULP_FTZ_TRUE最大精度误差为1ulp。84+Log2Algo::INTRINSIC、Log2Algo::PRECISION_1ULP_FTZ_TRUE和Log2Algo::PRECISION_1ULP_FTZ_FALSE的最大精度误差为1ulp。
85-- Log2Algo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。
86 85 
87-**配置Subnormal模式**:86+### 配置Subnormal模式
88-<br>87+ 
89-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。88+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
90-<br>89+ 
91-只有将algo设置为Log2Algo::PRECISION_1ULP_FTZ_FALSE时,Log2接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。90+#### 默认算法
92-<br>91+ 
93-一般场景推荐使用性能更好的Log2Algo::INTRINSIC、Log2Algo::PRECISION_1ULP_FTZ_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使Log2Algo::PRECISION_1ULP_FTZ_FALSE92+Log2Algo::INTRINSIC为默认算法。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
93+ 
94+#### 显式指定的算法
95+ 
96+- Log2Algo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
97+- Log2Algo::PRECISION_1ULP_FTZ_FALSE通过软件仿真实现,支持Subnormal数据计算。
98+ 
99+#### 使用建议
100+ 
101+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的Log2Algo::INTRINSIC或显式选择Log2Algo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用Log2Algo::PRECISION_1ULP_FTZ_FALSE。
94 102 
95## 调用示例<a name="section642mcpsimp"></a>103## 调用示例<a name="section642mcpsimp"></a>
96 104 
@@ -101,13 +109,14 @@ __simd_vf__ inline void Log2VF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_
101 AscendC::Reg::RegTensor<T> srcReg;109 AscendC::Reg::RegTensor<T> srcReg;
102 AscendC::Reg::RegTensor<T> dstReg;110 AscendC::Reg::RegTensor<T> dstReg;
103 AscendC::Reg::MaskReg mask;111 AscendC::Reg::MaskReg mask;
104- // Subnormal模式112+ // 1ulp精度及Subnormal模式
105- // static constexpr AscendC::Reg::Log2SpecificMode mode = {MaskMergeMode::ZEROING, Log2Algo::PRECISION_1ULP_FTZ_FALSE};113+ // static constexpr AscendC::Reg::Log2SpecificMode mode = {
114+ // AscendC::Reg::MaskMergeMode::ZEROING, AscendC::Log2Algo::PRECISION_1ULP_FTZ_FALSE};
106 for (uint16_t i = 0; i < repeatTimes; i++) {115 for (uint16_t i = 0; i < repeatTimes; i++) {
107 mask = AscendC::Reg::UpdateMask<T>(count);116 mask = AscendC::Reg::UpdateMask<T>(count);
108 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);117 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
109 AscendC::Reg::Log2(dstReg, srcReg, mask);118 AscendC::Reg::Log2(dstReg, srcReg, mask);
110- // Subnormal模式119+ // 1ulp精度及Subnormal模式
111 // AscendC::Reg::Log2<T, &mode>(dstReg, srcReg, mask);120 // AscendC::Reg::Log2<T, &mode>(dstReg, srcReg, mask);
112 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);121 AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask);
113 }122 }
@@ -48,7 +48,7 @@ __simd_callee__ inline void Sqrt(U& dstReg, U& srcReg, MaskReg& mask)
48| 参数名 | 描述 |48| 参数名 | 描述 |
49| --- | --- |49| --- | --- |
50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |50| T | 操作数数据类型。支持的数据类型请参考[数据类型](#数据类型)。 |
51-| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型的枚举或SqrtSpecificMode结构体指针。<br>&bull; MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; SqrtSpecificMode,定义如下:<br><code>enum class SqrtAlgo {<br> INTRINSIC = 0,<br> FAST_INVERSE,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_FALSE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct SqrtSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING,<br> bool precisionMode = false;<br> SqrtAlgo algo = SqrtAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; precisionMode:用于配置精度模式。当precisionMode为true时,使能更高精度的Sqrt计算,使用快速求逆算法得出结果。该算法目前只针对float数据类型生效。<br>&bull; algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算得出结果,最大精度误差为1ulp。<br>&nbsp;&nbsp;&bull; SqrtAlgo::FAST_INVERSESqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法得出结果。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br>&nbsp;&nbsp;&bull; SqrtAlgo::PRECISION_1ULP_FTZ_FALSE最大精度误差为1ulp。 |51+| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举指向SqrtSpecificMode结构体指针。<br>&bull; 配置MaskMergeMode选择MERGING模式或ZEROING模式。<br>&nbsp;&nbsp;&bull; ZEROING模式下,mask未筛选的元素在dstReg中置零。<br>&nbsp;&nbsp;&bull; MERGING模式当前不支持。<br>&bull; 配置SqrtSpecificMode,定义如下:<br><code>enum class SqrtAlgo {<br> INTRINSIC = 0,<br> FAST_INVERSE,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_FALSE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct SqrtSpecificMode {<br> MaskMergeMode mrgMode = MaskMergeMode::ZEROING;<br> bool precisionMode = false;<br> SqrtAlgo algo = SqrtAlgo::INTRINSIC;<br>};</code><br>&bull; mrgMode:选择MERGING模式或ZEROING模式。<br>&bull; precisionMode:用于配置精度模式。当precisionMode为true时,使能更高精度的Sqrt计算,使用快速求逆算法得出结果。该算法目前只针对float数据类型生效。<br>&bull; algo:用于选择Sqrt算法及配置Subnormal模式,详细说明请参考[关键特性说明](#关键特性说明)。<br>&nbsp;&nbsp;&bull; SqrtAlgo::INTRINSIC:默认算法,最大精度误差为1ulp。对于halffloat类型,Subnormal处理受编译选项--cce-ftz控制(默认值为true)。<br>&nbsp;&nbsp;&bull; SqrtAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,最大精度误差为1ulp。<br>&nbsp;&nbsp;&bull; SqrtAlgo::FAST_INVERSESqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法得出结果。目前,该算法仅支持float类型,并在该模式下支持Subnormal数据计算。<br>&nbsp;&nbsp;&bull; SqrtAlgo::PRECISION_1ULP_FTZ_FALSE最大精度误差为1ulp,支持half类型的Subnormal数据计算。 |
52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |52| U | 源操作数和目的操作数的RegTensor类型,例如RegTensor&lt;half&gt;,由编译器自动推导,用户不需要填写。 |
53 53 
54**表 2** 参数说明54**表 2** 参数说明
@@ -74,19 +74,30 @@ __simd_callee__ inline void Sqrt(U& dstReg, U& srcReg, MaskReg& mask)
74 74 
75## 关键特性说明75## 关键特性说明
76 76 
77-**最大精度误差:**77+### 最大精度误差
78 78 
79-- SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,最大精度误差为1ulp79+- precisionMode设置为true时使用快速求逆算法进行高精度计算,最大精度误差为0ulp
80-- SqrtAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差1ulp。80+- precisionMode设置false时:
81-- SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE,最大精度误差为0ulp81+ - 最大精度误差为1ulp:SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE和SqrtAlgo::PRECISION_1ULP_FTZ_FALSE
82+ - 最大精度误差为0ulp:SqrtAlgo::FAST_INVERSE和SqrtAlgo::PRECISION_0ULP_FTZ_FALSE。
82 83 
83-**配置Subnormal模式:**84+### 配置Subnormal模式
84-<br>85+ 
85-FTZ(Flush To Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。86+FTZ(Flush-To-Zero):一种浮点运算模式,当结果为Subnormal时,将其直接清零(近似为0),而非保留其精确的微小数值。
86-<br>87+ 
87-只有将algo设置为SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE、SqrtAlgo::PRECISION_1ULP_FTZ_FALSE时,Sqrt接口才会保留并正确输出Subnormal结果;其他模式下Subnormal均被FTZ。88+#### 默认算法
88-<br>89+ 
89-一般场景推荐使用性能更好的SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE;需要精确Subnormal输出的场景(如特定数据精度要求的算法、避免除零错误使SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE、PRECISION_1ULP_FTZ_FALSE90+SqrtAlgo::INTRINSIC为默认算法,支持half和float类型。--cce-ftz=false时保留Subnormal;--cce-ftz=true(默认值时采FTZ模式
91+ 
92+#### 显式指定的算法
93+ 
94+- SqrtAlgo::PRECISION_1ULP_FTZ_TRUE使用单指令计算,始终采用FTZ模式。
95+- SqrtAlgo::FAST_INVERSE和SqrtAlgo::PRECISION_0ULP_FTZ_FALSE使用快速求逆算法,仅支持float类型,并支持Subnormal数据计算。
96+- SqrtAlgo::PRECISION_1ULP_FTZ_FALSE支持half类型的Subnormal数据计算。
97+ 
98+#### 使用建议
99+ 
100+由于保留Subnormal的计算行为通过软件仿真实现,在--cce-ftz=true(默认值)时,一般场景建议使用默认的SqrtAlgo::INTRINSIC或显式选择SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,以获得更好的性能;需要精确输出Subnormal时,使用SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE或SqrtAlgo::PRECISION_1ULP_FTZ_FALSE。
90 101 
91**表 3** Sqrt Subnormal示例102**表 3** Sqrt Subnormal示例
92 103 
@@ -105,9 +116,10 @@ __simd_vf__ inline void SqrtVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_
105 AscendC::Reg::RegTensor<T> dstReg;116 AscendC::Reg::RegTensor<T> dstReg;
106 AscendC::Reg::MaskReg mask;117 AscendC::Reg::MaskReg mask;
107 // 高精度模式118 // 高精度模式
108- // static constexpr AscendC::Reg::SqrtSpecificMode mode = {MaskMergeMode::ZEROING, true};119+ // static constexpr AscendC::Reg::SqrtSpecificMode mode = {AscendC::Reg::MaskMergeMode::ZEROING, true};
109- // Subnormal模式120+ // 0ulp精度及Subnormal模式
110- // static constexpr AscendC::Reg::SqrtSpecificMode mode = {MaskMergeMode::ZEROING, true, SqrtAlgo::PRECISION_0ULP_FTZ_FALSE};121+ // static constexpr AscendC::Reg::SqrtSpecificMode mode = {
122+ // AscendC::Reg::MaskMergeMode::ZEROING, true, AscendC::SqrtAlgo::PRECISION_0ULP_FTZ_FALSE};
111 for (uint16_t i = 0; i < repeatTimes; i++) {123 for (uint16_t i = 0; i < repeatTimes; i++) {
112 mask = AscendC::Reg::UpdateMask<T>(count);124 mask = AscendC::Reg::UpdateMask<T>(count);
113 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);125 AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
@@ -38,7 +38,7 @@
38 | Cube计算单元不支持s4类型。 | 对于int4b_t数据类型的矩阵乘计算,开发者需要先将int4b_t的数据Cast转换为int8_t类型,再进行Cube计算。 | Mmad |38 | Cube计算单元不支持s4类型。 | 对于int4b_t数据类型的矩阵乘计算,开发者需要先将int4b_t的数据Cast转换为int8_t类型,再进行Cube计算。 | Mmad |
39 | Cube计算单元不支持L0A上ZZ到ZN的分形变化。 | L0A切分场景下,矩阵乘需要重新计算左矩阵的L0A地址。 | LoadData/LoadDataWithTranspose |39 | Cube计算单元不支持L0A上ZZ到ZN的分形变化。 | L0A切分场景下,矩阵乘需要重新计算左矩阵的L0A地址。 | LoadData/LoadDataWithTranspose |
40 | Vector Core Membase架构切换到Regbase架构。 | 基础API部分场景性能降低。 | 基础API高维切分模式 |40 | Vector Core Membase架构切换到Regbase架构。 | 基础API部分场景性能降低。 | 基础API高维切分模式 |
41- | 硬件不支持Subnormal功能,当前使用软仿实现Subnormal功能。 | 开发者需要通过设置config模板参数配置Subnormal计算模式,具体请参考[矢量计算](./2201_to_3510_guide/basic_api_migration.md#section7364115741514)。 | Ln/Sqrt/Rsqrt/Div/Reciprocal/Exp |41+ | 硬件不支持Subnormal功能,基础API和部分高阶API通过仿实现Subnormal功能。 | 对于支持config参数的基础API,开发者可以通过设置config模板参数配置Subnormal计算模式;对于调用时未传入config参数的部分基础API和高阶API处理方式受编译选项`--cce-ftz`影响,该选项默认为`true`。具体请参考[矢量计算](./2201_to_3510_guide/basic_api_migration.md#vector-compute)。 | Ln/Sqrt/Rsqrt/Div/Reciprocal/Exp及相关高阶API |
42 | 不支持4:2稀疏矩阵的计算。 | 开发者需要利用Vector Core的能力,进行矩阵稠密转稀疏操作。 | LoadDataWithSparse/MmadWithSparse |42 | 不支持4:2稀疏矩阵的计算。 | 开发者需要利用Vector Core的能力,进行矩阵稠密转稀疏操作。 | LoadDataWithSparse/MmadWithSparse |
43 43 
44- 存储单元<a name="section_2201_to_3510_storage_unit_changes"></a>44- 存储单元<a name="section_2201_to_3510_storage_unit_changes"></a>
@@ -2,13 +2,13 @@
2 2 
3本节针对[NPU架构版本3510](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)的芯片变更对基础API兼容性产生的影响进行说明,并提供基础API的兼容性适配方案。3本节针对[NPU架构版本3510](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)的芯片变更对基础API兼容性产生的影响进行说明,并提供基础API的兼容性适配方案。
4 4 
5-## 矢量计算<a name="section7364115741514"></a>5+## 矢量计算<a id="vector-compute"></a>
6 6 
7- **3510架构默认不支持Subnormal功能。**7- **3510架构默认不支持Subnormal功能。**
8 8 
9- **说明**:SubNormal浮点数指的是指数位全为0、尾数不为0的浮点数,用于表示比最小正常数更小的值,避免“下溢为0”。3510版本默认不支持Subnormal,Subnormal浮点数在计算中被视为0。9+ **说明**:Subnormal浮点数指的是指数位全为0、尾数不为0的浮点数,用于表示比最小正常数更小的值,避免“下溢为0”。3510版本默认不支持Subnormal,Subnormal浮点数在计算中被视为0。
10 10 
11- **兼容方案**:通过设置config模板参数来配置Subnormal计算模式。软件模拟Subnormal的处理,通过精度扩展等处理方式来避免Subnormal浮点数下溢为0。11+ **兼容方案**:对于支持config参数的基础API,可以通过设置config模板参数来配置Subnormal计算模式。对于不传入config参数的部分基础API及高阶API,可通过编译选项`--cce-ftz`配置Subnormal处理方式该选项默认为`true`。`--cce-ftz=false`时保留Subnormal,`--cce-ftz=true`时采用FTZ(Flush-To-Zero)模式。软件模拟通过精度扩展等方式处理Subnormal数据,避免其下溢为0。
12 12 
13 **表1** 涉及Subnormal的API和config参数说明13 **表1** 涉及Subnormal的API和config参数说明
14 14 
@@ -23,7 +23,7 @@
23 </td>23 </td>
24 <td class="cellrowborder" align="left" valign="top" width="73%" headers="mcps1.2.3.1.2 "><p id="p1055013361204"><a name="p1055013361204"></a><a name="p1055013361204"></a>以Ln接口为例来进行说明。</p>24 <td class="cellrowborder" align="left" valign="top" width="73%" headers="mcps1.2.3.1.2 "><p id="p1055013361204"><a name="p1055013361204"></a><a name="p1055013361204"></a>以Ln接口为例来进行说明。</p>
25 <p id="p151399151208"><a name="p151399151208"></a><a name="p151399151208"></a>通过LnConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:</p>25 <p id="p151399151208"><a name="p151399151208"></a><a name="p151399151208"></a>通过LnConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:</p>
26- <a name="ul118851253124216"></a><a name="ul118851253124216"></a><ul id="ul118851253124216"><li>LnAlgo::INTRINSICLnAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。</li><li>LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。</li></ul>26+ <a name="ul118851253124216"></a><a name="ul118851253124216"></a><ul id="ul118851253124216"><li>LnAlgo::INTRINSIC,Subnormal处理方式受编译选项--cce-ftz控制,该选项默认为true。</li><li>LnAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,采用FTZ模式。</li><li>LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。</li></ul>
27 <p id="p9885135319427"><a name="p9885135319427"></a><a name="p9885135319427"></a>该参数默认值DEFAULT_LN_CONFIG的取值如下:</p>27 <p id="p9885135319427"><a name="p9885135319427"></a><a name="p9885135319427"></a>该参数默认值DEFAULT_LN_CONFIG的取值如下:</p>
28 <a name="screen18681133513203"></a><a name="screen18681133513203"></a><pre class="screen" codetype="Cpp" id="screen18681133513203">constexpr LnConfig DEFAULT_LN_CONFIG = { LnAlgo::INTRINSIC };</pre>28 <a name="screen18681133513203"></a><a name="screen18681133513203"></a><pre class="screen" codetype="Cpp" id="screen18681133513203">constexpr LnConfig DEFAULT_LN_CONFIG = { LnAlgo::INTRINSIC };</pre>
29 </td>29 </td>
@@ -72,6 +72,8 @@
72 }72 }
73 ```73 ```
74 74 
75+ 在3510架构下,部分基础API和高阶API在未传入config参数时,其Subnormal处理方式受编译选项`--cce-ftz`影响,该选项默认为`true`。基础API包括Exp、Ln、Reciprocal、Sqrt、Rsqrt和Div;高阶API包括Gelu、Sigmoid、Silu、SoftMax、SoftmaxFlash、SoftmaxFlashV2、SoftmaxFlashV3、Swish、Digamma、Erf、Lgamma、Power、Tanh、BatchNorm和RmsNorm等。关于该编译选项的适用范围及产品限制,请参考[AI-Core算子编译基本用法](../../../programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
76+ 
75## 数据搬运<a name="section7530159122210"></a>77## 数据搬运<a name="section7530159122210"></a>
76 78 
77- **DataCopy接口不支持L1 Buffer-\>GM通路。**79- **DataCopy接口不支持L1 Buffer-\>GM通路。**
@@ -118,7 +118,7 @@ AI Core SIMT的基本编译流程如下:Host代码使用Host编译器编译成
118| --cce-disable-vf-stack-reserved-ubuf | 否 | 禁用SIMD VF栈预留的UB空间。开启后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用。针对 [NPU架构版本2201](../../language_extension/simd_builtin_keywords.md#npu-arch),此编译选项无实际效果;针对 [NPU架构版本3510](../../language_extension/simd_builtin_keywords.md#npu-arch),此编译选项生效,当用户使用此编译选项后,编译器将无法使用预留的UB空间进行寄存器溢出的缓存,需要用户保证寄存器不溢出。 |118| --cce-disable-vf-stack-reserved-ubuf | 否 | 禁用SIMD VF栈预留的UB空间。开启后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用。针对 [NPU架构版本2201](../../language_extension/simd_builtin_keywords.md#npu-arch),此编译选项无实际效果;针对 [NPU架构版本3510](../../language_extension/simd_builtin_keywords.md#npu-arch),此编译选项生效,当用户使用此编译选项后,编译器将无法使用预留的UB空间进行寄存器溢出的缓存,需要用户保证寄存器不溢出。 |
119| --cce-auto-sync | 否 | 开启毕昇编译器自动同步。AI Core内部的执行单元是异步并行的,Tensor的读写可能存在数据依赖,开启后可由毕昇编译器自动插入部分同步。详细内容请参考[关键特性说明](../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/key_features.md)。 |119| --cce-auto-sync | 否 | 开启毕昇编译器自动同步。AI Core内部的执行单元是异步并行的,Tensor的读写可能存在数据依赖,开启后可由毕昇编译器自动插入部分同步。详细内容请参考[关键特性说明](../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/key_features.md)。 |
120| --cce-auto-sync-log=&lt;file&gt; | 否 | 输出毕昇编译器自动同步插入信息到&lt;file&gt;文件中。 |120| --cce-auto-sync-log=&lt;file&gt; | 否 | 输出毕昇编译器自动同步插入信息到&lt;file&gt;文件中。 |
121-| --cce-ftz=false/true | 否 | 控制非规格化数(极小数)的处理方式。 true表示将非规格化数直接刷新为0,可提升性能;false表示保留,精度更高但可能更慢,默认true。当前支持SIMT。 |121+| --cce-ftz=false/true | 否 | 控制非规格化数(极小数)的处理方式。true表示将非规格化数直接刷新为0,可提升性能;false表示保留非规格化数,精度更高但性能可能较低,默认值为true。当前支持SIMD和SIMT,其中SIMD仅支持NPU架构版本3510。 |
122| --cce-prec-div=false/true | 否 | 是否使用精确的除法计算,默认为false。当前只支持SIMT。 |122| --cce-prec-div=false/true | 否 | 是否使用精确的除法计算,默认为false。当前只支持SIMT。 |
123| --cce-prec-sqrt=false/true | 否 | 是否使用精确的平方根函数,默认false。当前只支持SIMT。 |123| --cce-prec-sqrt=false/true | 否 | 是否使用精确的平方根函数,默认false。当前只支持SIMT。 |
124| --cce-use-fast-math=false/true | 否 | 是否开启快速计算模式,开启时相当于--cce-ftz=true --cce-prec-div=false --cce-prec-sqrt=false(若有冲突,以--cce-ftz,--cce-prec-div,--cce-prec-sqrt设置的为准)。当前只支持SIMT。 |124| --cce-use-fast-math=false/true | 否 | 是否开启快速计算模式,开启时相当于--cce-ftz=true --cce-prec-div=false --cce-prec-sqrt=false(若有冲突,以--cce-ftz,--cce-prec-div,--cce-prec-sqrt设置的为准)。当前只支持SIMT。 |