已合并
fix: 删除 img 标签 /> 前的多余空格&修改通用说明和约束文件名为英文&删除简易表格中的<pre>标签&补齐index.md中遗漏的md文件 #5104
munanhw创建于 15 天前
fix: 删除 img 标签 /> 前的多余空格&修改通用说明和约束文件名为英文&删除简易表格中的<pre>标签&补齐index.md中遗漏的md文件 #5104
已合并
共 272 个文件变更+477-477
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | - [Ascend C API列表](api_list.md) | 3 | - [Ascend C API列表](api_list.md) |
| 4 | - [SIMD API](SIMD-API/SIMD-API.md) | 4 | - [SIMD API](SIMD-API/SIMD-API.md) |
| 5 | - - [通用说明和约束](SIMD-API/通用说明和约束.md) | 5 | + - [通用说明和约束](SIMD-API/general_description_and_constraints.md) |
| 6 | - [基础API](SIMD-API/basic_api/basic_api.md) | 6 | - [基础API](SIMD-API/basic_api/basic_api.md) |
| 7 | - [基础API列表](SIMD-API/basic_api/basic_api_list.md) | 7 | - [基础API列表](SIMD-API/basic_api/basic_api_list.md) |
| 8 | - [数据结构](SIMD-API/basic_api/data_structures/data_structures.md) | 8 | - [数据结构](SIMD-API/basic_api/data_structures/data_structures.md) |
| @@ -1,6 +1,6 @@ | |||
| 1 | # SIMD API | 1 | # SIMD API |
| 2 | 2 | ||
| 3 | -- **[通用说明和约束](通用说明和约束.md)** | 3 | +- **[通用说明和约束](general_description_and_constraints.md)** |
| 4 | 4 | ||
| 5 | - **[基础API](basic_api/basic_api.md)** | 5 | - **[基础API](basic_api/basic_api.md)** |
| 6 | 6 | ||
| @@ -111,7 +111,7 @@ GeGLU是采用GELU作为激活函数的GLU变体。具体计算公式如下: | |||
| 111 | 111 | ||
| 112 | ## 约束说明 | 112 | ## 约束说明 |
| 113 | 113 | ||
| 114 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 114 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 115 | - **不支持源操作数与目的操作数地址重叠。** | 115 | - **不支持源操作数与目的操作数地址重叠。** |
| 116 | - 当前仅支持ND格式的输入,不支持其他格式。 | 116 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 117 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 117 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -85,7 +85,7 @@ | |||
| 85 | ## 约束说明 | 85 | ## 约束说明 |
| 86 | 86 | ||
| 87 | - 源操作数和目的操作数的Tensor空间可以复用。 | 87 | - 源操作数和目的操作数的Tensor空间可以复用。 |
| 88 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 88 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 89 | - 当前仅支持ND格式的输入,不支持其他格式。 | 89 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 90 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 90 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 91 | 91 | ||
| @@ -81,7 +81,7 @@ | |||
| 81 | ## 约束说明 | 81 | ## 约束说明 |
| 82 | 82 | ||
| 83 | - 源操作数和目的操作数的Tensor空间可以复用。 | 83 | - 源操作数和目的操作数的Tensor空间可以复用。 |
| 84 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 84 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 85 | - 当前仅支持ND格式的输入,不支持其他格式。 | 85 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 86 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 86 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 87 | 87 | ||
| @@ -79,7 +79,7 @@ | |||
| 79 | 79 | ||
| 80 | - 源操作数和目的操作数的Tensor空间可以复用。 | 80 | - 源操作数和目的操作数的Tensor空间可以复用。 |
| 81 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 81 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 82 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 82 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 83 | - 仅支持输入shape为ND格式。 | 83 | - 仅支持输入shape为ND格式。 |
| 84 | 84 | ||
| 85 | ## 调用示例 | 85 | ## 调用示例 |
| @@ -112,7 +112,7 @@ struct SoftMaxShapeInfo { | |||
| 112 | - 输入源数据需保持值域在\[-2147483647.0, 2147483647.0\]。若输入不在范围内,输出结果无效。 | 112 | - 输入源数据需保持值域在\[-2147483647.0, 2147483647.0\]。若输入不在范围内,输出结果无效。 |
| 113 | - **不支持源操作数与目的操作数地址重叠。** | 113 | - **不支持源操作数与目的操作数地址重叠。** |
| 114 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 114 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 116 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 116 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 117 | 117 | ||
| 118 | ## 调用示例 | 118 | ## 调用示例 |
| @@ -86,7 +86,7 @@ ReGlu是一种GLU变体,使用Relu作为激活函数,计算公式如下: | |||
| 86 | 86 | ||
| 87 | ## 约束说明 | 87 | ## 约束说明 |
| 88 | 88 | ||
| 89 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 89 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 90 | - **不支持源操作数与目的操作数地址重叠。** | 90 | - **不支持源操作数与目的操作数地址重叠。** |
| 91 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 91 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 92 | - 当前仅支持ND格式的输入,不支持其他格式。 | 92 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| @@ -100,7 +100,7 @@ | |||
| 100 | 100 | ||
| 101 | ## 约束说明 | 101 | ## 约束说明 |
| 102 | 102 | ||
| 103 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 103 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 104 | 104 | ||
| 105 | - **不支持源操作数与目的操作数地址重叠。** | 105 | - **不支持源操作数与目的操作数地址重叠。** |
| 106 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 106 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -66,7 +66,7 @@ __aicore__ inline void Silu(const LocalTensor<T>& dstLocal, const LocalTensor<T> | |||
| 66 | 66 | ||
| 67 | ## 约束说明 | 67 | ## 约束说明 |
| 68 | 68 | ||
| 69 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 69 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 70 | - **不支持源操作数与目的操作数地址重叠。** | 70 | - **不支持源操作数与目的操作数地址重叠。** |
| 71 | - 当前仅支持ND格式的输入,不支持其他格式。 | 71 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 72 | 72 | ||
| @@ -86,7 +86,7 @@ bool类型,当返回true时,表示maxTensor中存在需要判断的值,若 | |||
| 86 | 86 | ||
| 87 | ## 约束说明 | 87 | ## 约束说明 |
| 88 | 88 | ||
| 89 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 89 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 90 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 90 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 91 | 91 | ||
| 92 | ## 调用示例 | 92 | ## 调用示例 |
| @@ -147,7 +147,7 @@ struct SoftMaxShapeInfo { | |||
| 147 | - srcTensor和dstTensor的Tensor空间可以复用。 | 147 | - srcTensor和dstTensor的Tensor空间可以复用。 |
| 148 | - inSumTensor和inMaxTensor为输入,并且last轴长度必须固定32Byte。 | 148 | - inSumTensor和inMaxTensor为输入,并且last轴长度必须固定32Byte。 |
| 149 | - inSumTensor和inMaxTensor的数据类型需要保持一致。 | 149 | - inSumTensor和inMaxTensor的数据类型需要保持一致。 |
| 150 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 150 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 151 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 151 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 152 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 152 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 153 | 153 | ||
| @@ -189,7 +189,7 @@ struct SoftMaxShapeInfo { | |||
| 189 | - sumTensor和maxTensor为输出,并且last轴长度必须固定32Byte,非last轴大小需要和src以及dst保持一致。 | 189 | - sumTensor和maxTensor为输出,并且last轴长度必须固定32Byte,非last轴大小需要和src以及dst保持一致。 |
| 190 | - sumTensor和maxTensor的数据类型需要保持一致。 | 190 | - sumTensor和maxTensor的数据类型需要保持一致。 |
| 191 | 191 | ||
| 192 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 192 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 193 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 193 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 194 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 194 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 195 | 195 | ||
| @@ -139,7 +139,7 @@ struct SoftMaxShapeInfo { | |||
| 139 | 139 | ||
| 140 | - srcTensor和dstTensor的空间可以复用,maxTensor和inMaxTensor的空间可以复用,sumTensor和inSumTensor的空间可以复用。 | 140 | - srcTensor和dstTensor的空间可以复用,maxTensor和inMaxTensor的空间可以复用,sumTensor和inSumTensor的空间可以复用。 |
| 141 | - sumTensor、maxTensor、expMaxTensor、inSumTensor、inMaxTensor的Tensor空间,last轴长度必须固定32Byte。 | 141 | - sumTensor、maxTensor、expMaxTensor、inSumTensor、inMaxTensor的Tensor空间,last轴长度必须固定32Byte。 |
| 142 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 142 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 143 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 143 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 144 | 144 | ||
| 145 | ## 调用示例 | 145 | ## 调用示例 |
| @@ -236,7 +236,7 @@ struct SoftMaxShapeInfo { | |||
| 236 | - 模板参数isUpdate为false时,outReduceMax不输出; | 236 | - 模板参数isUpdate为false时,outReduceMax不输出; |
| 237 | - 除outReduceMax外,其余每个输出的计算结果与[不输出ReduceMax的接口](#section620mcpsimp)相同。 | 237 | - 除outReduceMax外,其余每个输出的计算结果与[不输出ReduceMax的接口](#section620mcpsimp)相同。 |
| 238 | 238 | ||
| 239 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 239 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 240 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 240 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 241 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 241 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 242 | 242 | ||
| @@ -154,7 +154,7 @@ struct SoftMaxParams { | |||
| 154 | 154 | ||
| 155 | ## 约束说明 | 155 | ## 约束说明 |
| 156 | 156 | ||
| 157 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 157 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 158 | - 对于输入srcTensor需要满足:尾轴长度n大于等于512,同时n是64的倍数;非尾轴长度的乘积m为8的倍数。 | 158 | - 对于输入srcTensor需要满足:尾轴长度n大于等于512,同时n是64的倍数;非尾轴长度的乘积m为8的倍数。 |
| 159 | - srcTensor和dstTensor的Tensor的空间可以复用,meanTensor和inMeanTensor的空间可以复用,maxTensor和inMaxTensor的空间可以复用,expSumTensor和inExpSumTensor的空间可以复用。 | 159 | - srcTensor和dstTensor的Tensor的空间可以复用,meanTensor和inMeanTensor的空间可以复用,maxTensor和inMaxTensor的空间可以复用,expSumTensor和inExpSumTensor的空间可以复用。 |
| 160 | - meanTensor、expSumTensor、maxTensor、expMaxTensor、inMeanTensor、inExpSumTensor、inMaxTensor的Tensor空间,last轴长度必须是32字节。 | 160 | - meanTensor、expSumTensor、maxTensor、expMaxTensor、inMeanTensor、inExpSumTensor、inMaxTensor的Tensor空间,last轴长度必须是32字节。 |
| @@ -121,7 +121,7 @@ struct SoftMaxShapeInfo { | |||
| 121 | ## 约束说明 | 121 | ## 约束说明 |
| 122 | 122 | ||
| 123 | - srcTensor和dstTensor的Tensor空间可以复用。 | 123 | - srcTensor和dstTensor的Tensor空间可以复用。 |
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 125 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 125 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 126 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 126 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 127 | 127 | ||
| @@ -116,7 +116,7 @@ struct SoftMaxShapeInfo { | |||
| 116 | 116 | ||
| 117 | ## 约束说明 | 117 | ## 约束说明 |
| 118 | 118 | ||
| 119 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 119 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 120 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 120 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 121 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 | 121 | - 当参数softmaxShapeInfo中srcM != oriSrcM或者srcK != oriSrcK时,开发者需要对GM上的原始输入\(oriSrcM, oriSrcK\)在M或K方向补齐数据到\(srcM, srcK\),补齐的数据会参与部分运算,在输入输出复用的场景下,API的计算结果会覆盖srcTensor中补齐的原始数据,在输入输出不复用的场景下,API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。 |
| 122 | 122 | ||
| @@ -102,7 +102,7 @@ SwiGLU是采用Swish作为激活函数的GLU变体。具体计算公式如下: | |||
| 102 | 102 | ||
| 103 | ## 约束说明 | 103 | ## 约束说明 |
| 104 | 104 | ||
| 105 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 105 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 106 | - **不支持源操作数与目的操作数地址重叠。** | 106 | - **不支持源操作数与目的操作数地址重叠。** |
| 107 | - 当前仅支持ND格式的输入,不支持其他格式。 | 107 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 108 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 108 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -61,7 +61,7 @@ __aicore__ inline void Swish(const LocalTensor<T>& dstLocal, const LocalTensor<T | |||
| 61 | 61 | ||
| 62 | ## 约束说明 | 62 | ## 约束说明 |
| 63 | 63 | ||
| 64 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 64 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 65 | - **不支持源操作数与目的操作数地址重叠。** | 65 | - **不支持源操作数与目的操作数地址重叠。** |
| 66 | - 当前仅支持ND格式的输入,不支持其他格式。 | 66 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 67 | 67 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Tiling/SetGradOutputType.md+1-1
| @@ -16,7 +16,7 @@ void SetGradOutputType(ConvCommonApi::TPosition pos, ConvCommonApi::ConvFormat f | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| pos | 输入 | GradOutput在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 19 | +| pos | 输入 | GradOutput在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 20 | | format | 输入 | GradOutput的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | | 20 | | format | 输入 | GradOutput的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | |
| 21 | | dtype | 输入 | GradOutput的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 21 | | dtype | 输入 | GradOutput的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 22 | 22 | ||
| @@ -16,7 +16,7 @@ void SetInputType(ConvCommonApi::TPosition pos, ConvCommonApi::ConvFormat format | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| pos | 输入 | Input在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 19 | +| pos | 输入 | Input在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 20 | | format | 输入 | Input的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | | 20 | | format | 输入 | Input的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | |
| 21 | | dtype | 输入 | Input的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 21 | | dtype | 输入 | Input的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 22 | 22 | ||
| @@ -16,7 +16,7 @@ void SetWeightType(ConvCommonApi::TPosition pos, ConvCommonApi::ConvFormat forma | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| pos | 输入 | Weight在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 19 | +| pos | 输入 | Weight在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 20 | | format | 输入 | Weight的数据格式。当前仅支持ConvFormat::FRACTAL_Z_3D。 | | 20 | | format | 输入 | Weight的数据格式。当前仅支持ConvFormat::FRACTAL_Z_3D。 | |
| 21 | | dtype | 输入 | Weight的数据类型。当前仅支持ConvDtype::FLOAT32。 | | 21 | | dtype | 输入 | Weight的数据类型。当前仅支持ConvDtype::FLOAT32。 | |
| 22 | 22 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/SetGradOutputType.md+1-1
| @@ -16,7 +16,7 @@ void SetGradOutputType(ConvCommonApi::TPosition pos, ConvCommonApi::ConvFormat f | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| pos | 输入 | GradOutput在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 19 | +| pos | 输入 | GradOutput在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 20 | | format | 输入 | GradOutput的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | | 20 | | format | 输入 | GradOutput的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | |
| 21 | | dtype | 输入 | GradOutput的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 21 | | dtype | 输入 | GradOutput的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 22 | 22 | ||
| @@ -16,7 +16,7 @@ void SetInputType(ConvCommonApi::TPosition pos, ConvCommonApi::ConvFormat format | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| pos | 输入 | Input在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 19 | +| pos | 输入 | Input在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 20 | | format | 输入 | Input的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | | 20 | | format | 输入 | Input的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | |
| 21 | | dtype | 输入 | Input的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 21 | | dtype | 输入 | Input的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 22 | 22 | ||
| @@ -16,7 +16,7 @@ void SetWeightType(ConvCommonApi::TPosition pos, ConvCommonApi::ConvFormat forma | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| pos | 输入 | Weight在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 19 | +| pos | 输入 | Weight在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 20 | | format | 输入 | Weight的数据格式。当前仅支持ConvFormat::FRACTAL_Z_3D。 | | 20 | | format | 输入 | Weight的数据格式。当前仅支持ConvFormat::FRACTAL_Z_3D。 | |
| 21 | | dtype | 输入 | Weight的数据类型。当前仅支持ConvDtype::FLOAT16或者ConvDtype::BF16。 | | 21 | | dtype | 输入 | Weight的数据类型。当前仅支持ConvDtype::FLOAT16或者ConvDtype::BF16。 | |
| 22 | 22 | ||
| @@ -14,7 +14,7 @@ void SetBiasType(const ConvCommonApi::TPosition pos, const ConvCommonApi::ConvFo | |||
| 14 | 14 | ||
| 15 | | 参数名 | 输入/输出 | 描述 | | 15 | | 参数名 | 输入/输出 | 描述 | |
| 16 | | --- | --- | --- | | 16 | | --- | --- | --- | |
| 17 | -| pos | 输入 | Bias在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 17 | +| pos | 输入 | Bias在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 18 | | format | 输入 | Bias的数据格式。当前仅支持ConvFormat::ND。 | | 18 | | format | 输入 | Bias的数据格式。当前仅支持ConvFormat::ND。 | |
| 19 | | dtype | 输入 | Bias的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::FLOAT。 | | 19 | | dtype | 输入 | Bias的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::FLOAT。 | |
| 20 | 20 | ||
| @@ -14,7 +14,7 @@ void SetInputType(const ConvCommonApi::TPosition pos, const ConvCommonApi::ConvF | |||
| 14 | 14 | ||
| 15 | | 参数名 | 输入/输出 | 描述 | | 15 | | 参数名 | 输入/输出 | 描述 | |
| 16 | | --- | --- | --- | | 16 | | --- | --- | --- | |
| 17 | -| pos | 输入 | Input在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 17 | +| pos | 输入 | Input在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 18 | | format | 输入 | Input的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | | 18 | | format | 输入 | Input的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | |
| 19 | | dtype | 输入 | Input的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 19 | | dtype | 输入 | Input的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 20 | 20 | ||
| @@ -14,7 +14,7 @@ void SetOutputType(const ConvCommonApi::TPosition pos, const ConvCommonApi::Conv | |||
| 14 | 14 | ||
| 15 | | 参数名 | 输入/输出 | 描述 | | 15 | | 参数名 | 输入/输出 | 描述 | |
| 16 | | --- | --- | --- | | 16 | | --- | --- | --- | |
| 17 | -| pos | 输入 | Output在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::CO1。 | | 17 | +| pos | 输入 | Output在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::CO1。 | |
| 18 | | format | 输入 | Output的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | | 18 | | format | 输入 | Output的数据格式。当前仅支持ConvFormat::NDC1HWC0。 | |
| 19 | | dtype | 输入 | Output的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 19 | | dtype | 输入 | Output的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 20 | 20 | ||
| @@ -14,7 +14,7 @@ void SetWeightType(const ConvCommonApi::TPosition pos, const ConvCommonApi::Conv | |||
| 14 | 14 | ||
| 15 | | 参数名 | 输入/输出 | 描述 | | 15 | | 参数名 | 输入/输出 | 描述 | |
| 16 | | --- | --- | --- | | 16 | | --- | --- | --- | |
| 17 | -| pos | 输入 | Weight在内存上的[位置](../../../通用说明和约束.md#table07372185712)。当前仅支持TPosition::GM。 | | 17 | +| pos | 输入 | Weight在内存上的[位置](../../../general_description_and_constraints.md#table07372185712)。当前仅支持TPosition::GM。 | |
| 18 | | format | 输入 | Weight的数据格式。当前仅支持ConvFormat::FRACTAL_Z_3D。 | | 18 | | format | 输入 | Weight的数据格式。当前仅支持ConvFormat::FRACTAL_Z_3D。 | |
| 19 | | dtype | 输入 | Weight的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | | 19 | | dtype | 输入 | Weight的数据类型。当前仅支持ConvDtype::FLOAT16、ConvDtype::BF16。 | |
| 20 | 20 | ||
| @@ -140,7 +140,7 @@ struct DropOutShapeInfo { | |||
| 140 | ## 约束说明 | 140 | ## 约束说明 |
| 141 | 141 | ||
| 142 | - srcTensor和dstTensor的Tensor空间可以复用。 | 142 | - srcTensor和dstTensor的Tensor空间可以复用。 |
| 143 | -- srcLocal和dstLocal地址对齐要求请见:[通用说明和约束](../../通用说明和约束.md)。 | 143 | +- srcLocal和dstLocal地址对齐要求请见:[通用说明和约束](../../general_description_and_constraints.md)。 |
| 144 | - 仅支持输入shape为ND格式。 | 144 | - 仅支持输入shape为ND格式。 |
| 145 | - maskLocal含有脏数据的场景,要求info.maskLastAxis中有效数值的个数,应为2的整数倍。 | 145 | - maskLocal含有脏数据的场景,要求info.maskLastAxis中有效数值的个数,应为2的整数倍。 |
| 146 | - maskLocal含有脏数据的场景,maskLocal中的数据可能会被修改,脏数据可能会被舍弃。 | 146 | - maskLocal含有脏数据的场景,maskLocal中的数据可能会被修改,脏数据可能会被舍弃。 |
| @@ -112,7 +112,7 @@ struct SelectWithBytesMaskShapeInfo { | |||
| 112 | ## 约束说明 | 112 | ## 约束说明 |
| 113 | 113 | ||
| 114 | - 源操作数与目的操作数可以复用。 | 114 | - 源操作数与目的操作数可以复用。 |
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 116 | - maskTensor尾轴元素个数和源操作数尾轴元素个数不同的情况下, maskTensor的数据有可能被接口改写。 | 116 | - maskTensor尾轴元素个数和源操作数尾轴元素个数不同的情况下, maskTensor的数据有可能被接口改写。 |
| 117 | 117 | ||
| 118 | ## 调用示例 | 118 | ## 调用示例 |
| @@ -102,7 +102,7 @@ | |||
| 102 | - 输入源数据需保持值域在\[-1, 1\]。若输入不在范围内,输出结果无效。 | 102 | - 输入源数据需保持值域在\[-1, 1\]。若输入不在范围内,输出结果无效。 |
| 103 | - **不支持源操作数与目的操作数地址重叠。** | 103 | - **不支持源操作数与目的操作数地址重叠。** |
| 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 105 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 105 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 106 | 106 | ||
| 107 | ## 调用示例 | 107 | ## 调用示例 |
| 108 | 108 | ||
| @@ -96,7 +96,7 @@ | |||
| 96 | - 输入源数据需保持值域在\[1, 65504\]。若输入不在范围内,输出结果无效。 | 96 | - 输入源数据需保持值域在\[1, 65504\]。若输入不在范围内,输出结果无效。 |
| 97 | - **不支持源操作数与目的操作数地址重叠。** | 97 | - **不支持源操作数与目的操作数地址重叠。** |
| 98 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 98 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 99 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 99 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 100 | 100 | ||
| 101 | ## 调用示例 | 101 | ## 调用示例 |
| 102 | 102 | ||
| @@ -102,7 +102,7 @@ | |||
| 102 | - 输入源数据需保持值域在\[-1, 1\]。若输入不在范围内,输出结果无效。 | 102 | - 输入源数据需保持值域在\[-1, 1\]。若输入不在范围内,输出结果无效。 |
| 103 | - **不支持源操作数与目的操作数地址重叠。** | 103 | - **不支持源操作数与目的操作数地址重叠。** |
| 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 105 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 105 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 106 | 106 | ||
| 107 | ## 调用示例 | 107 | ## 调用示例 |
| 108 | 108 | ||
| @@ -96,7 +96,7 @@ | |||
| 96 | - 输入源数据需保持值域在\[-65504, 65504\]。若输入不在范围内,输出结果无效。 | 96 | - 输入源数据需保持值域在\[-65504, 65504\]。若输入不在范围内,输出结果无效。 |
| 97 | - **不支持源操作数与目的操作数地址重叠。** | 97 | - **不支持源操作数与目的操作数地址重叠。** |
| 98 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 98 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 99 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 99 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 100 | 100 | ||
| 101 | ## 调用示例 | 101 | ## 调用示例 |
| 102 | 102 | ||
| @@ -113,7 +113,7 @@ struct AtanConfig { | |||
| 113 | 113 | ||
| 114 | - **不支持源操作数与目的操作数地址重叠。** | 114 | - **不支持源操作数与目的操作数地址重叠。** |
| 115 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 115 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 116 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 116 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 117 | 117 | ||
| 118 | ## 调用示例 | 118 | ## 调用示例 |
| 119 | 119 | ||
| @@ -96,7 +96,7 @@ | |||
| 96 | - 输入源数据需保持值域在\(-0.99,-0.001\)或者\(0.001, 0.99\)区间内。若输入不在范围内,输出结果无效。 | 96 | - 输入源数据需保持值域在\(-0.99,-0.001\)或者\(0.001, 0.99\)区间内。若输入不在范围内,输出结果无效。 |
| 97 | - **不支持源操作数与目的操作数地址重叠。** | 97 | - **不支持源操作数与目的操作数地址重叠。** |
| 98 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 98 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 99 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 99 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 100 | 100 | ||
| 101 | ## 调用示例 | 101 | ## 调用示例 |
| 102 | 102 | ||
| @@ -67,7 +67,7 @@ __aicore__ inline void Axpy(const LocalTensor<T>& dstTensor, const LocalTensor<U | |||
| 67 | 67 | ||
| 68 | - **不支持源操作数与目的操作数地址重叠。** | 68 | - **不支持源操作数与目的操作数地址重叠。** |
| 69 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 69 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 70 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 70 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 71 | - 该接口支持的精度组合如下: | 71 | - 该接口支持的精度组合如下: |
| 72 | - half精度组合:srcLocal数据类型=half;scalar数据类型=half;dstLocal数据类型=half;PAR=128 | 72 | - half精度组合:srcLocal数据类型=half;scalar数据类型=half;dstLocal数据类型=half;PAR=128 |
| 73 | - float精度组合:srcLocal数据类型=float;scalar数据类型=float;dstLocal数据类型=float;PAR=64 | 73 | - float精度组合:srcLocal数据类型=float;scalar数据类型=float;dstLocal数据类型=float;PAR=64 |
| @@ -65,7 +65,7 @@ struct BitwiseAndConfig { | |||
| 65 | ## 约束说明 | 65 | ## 约束说明 |
| 66 | 66 | ||
| 67 | - **不支持源操作数与目的操作数地址重叠。** | 67 | - **不支持源操作数与目的操作数地址重叠。** |
| 68 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 68 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 69 | 69 | ||
| 70 | ## 调用示例 | 70 | ## 调用示例 |
| 71 | 71 | ||
| @@ -65,7 +65,7 @@ struct BitwiseNotConfig { | |||
| 65 | ## 约束说明 | 65 | ## 约束说明 |
| 66 | 66 | ||
| 67 | - **不支持源操作数与目的操作数地址重叠。** | 67 | - **不支持源操作数与目的操作数地址重叠。** |
| 68 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 68 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 69 | 69 | ||
| 70 | ## 调用示例 | 70 | ## 调用示例 |
| 71 | 71 | ||
| @@ -65,7 +65,7 @@ struct BitwiseOrConfig { | |||
| 65 | ## 约束说明 | 65 | ## 约束说明 |
| 66 | 66 | ||
| 67 | - **不支持源操作数与目的操作数地址重叠。** | 67 | - **不支持源操作数与目的操作数地址重叠。** |
| 68 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 68 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 69 | 69 | ||
| 70 | ## 调用示例 | 70 | ## 调用示例 |
| 71 | 71 | ||
| @@ -65,7 +65,7 @@ struct BitwiseXorConfig { | |||
| 65 | ## 约束说明 | 65 | ## 约束说明 |
| 66 | 66 | ||
| 67 | - **不支持源操作数与目的操作数地址重叠。** | 67 | - **不支持源操作数与目的操作数地址重叠。** |
| 68 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 68 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 69 | 69 | ||
| 70 | ## 调用示例 | 70 | ## 调用示例 |
| 71 | 71 | ||
| @@ -86,7 +86,7 @@ Ceil \(-3.9\) = -3.0 | |||
| 86 | <!-- end id7 --> | 86 | <!-- end id7 --> |
| 87 | - **不支持源操作数与目的操作数地址重叠。** | 87 | - **不支持源操作数与目的操作数地址重叠。** |
| 88 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 88 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 89 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 89 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 90 | 90 | ||
| 91 | ## 调用示例 | 91 | ## 调用示例 |
| 92 | 92 | ||
| @@ -71,7 +71,7 @@ struct ClampConfig { | |||
| 71 | ## 约束说明 | 71 | ## 约束说明 |
| 72 | 72 | ||
| 73 | - **不支持源操作数与目的操作数地址重叠。** | 73 | - **不支持源操作数与目的操作数地址重叠。** |
| 74 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 74 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 75 | 75 | ||
| 76 | ## 调用示例 | 76 | ## 调用示例 |
| 77 | 77 | ||
| @@ -80,7 +80,7 @@ | |||
| 80 | 80 | ||
| 81 | - **不支持源操作数与目的操作数地址重叠。** | 81 | - **不支持源操作数与目的操作数地址重叠。** |
| 82 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 82 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 83 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 83 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 84 | 84 | ||
| 85 | ## 调用示例 | 85 | ## 调用示例 |
| 86 | 86 | ||
| @@ -80,7 +80,7 @@ | |||
| 80 | 80 | ||
| 81 | - **不支持源操作数与目的操作数地址重叠。** | 81 | - **不支持源操作数与目的操作数地址重叠。** |
| 82 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 82 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 83 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 83 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 84 | 84 | ||
| 85 | ## 调用示例 | 85 | ## 调用示例 |
| 86 | 86 | ||
| @@ -128,7 +128,7 @@ enum class CosAlgo { | |||
| 128 | 128 | ||
| 129 | - **不支持源操作数与目的操作数地址重叠。** | 129 | - **不支持源操作数与目的操作数地址重叠。** |
| 130 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 130 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 131 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 131 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 132 | 132 | ||
| 133 | ## 调用示例 | 133 | ## 调用示例 |
| 134 | 134 | ||
| @@ -102,7 +102,7 @@ | |||
| 102 | 102 | ||
| 103 | - **不支持源操作数与目的操作数地址重叠。** | 103 | - **不支持源操作数与目的操作数地址重叠。** |
| 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 105 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 105 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 106 | 106 | ||
| 107 | ## 调用示例 | 107 | ## 调用示例 |
| 108 | 108 | ||
| @@ -121,7 +121,7 @@ struct CumSumInfo { | |||
| 121 | 121 | ||
| 122 | ## 约束说明 | 122 | ## 约束说明 |
| 123 | 123 | ||
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 125 | - 输入input只支持二维结构。 | 125 | - 输入input只支持二维结构。 |
| 126 | - cumSumInfo.inner \* sizeof\(T\)必须是32字节的整数倍。 | 126 | - cumSumInfo.inner \* sizeof\(T\)必须是32字节的整数倍。 |
| 127 | 127 | ||
| @@ -32,7 +32,7 @@ void GetCumSumMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 32 | 32 | ||
| 33 | ## 约束说明 | 33 | ## 约束说明 |
| 34 | 34 | ||
| 35 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 35 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 36 | - 输入input只支持二维结构。 | 36 | - 输入input只支持二维结构。 |
| 37 | 37 | ||
| 38 | ## 调用示例 | 38 | ## 调用示例 |
| @@ -79,7 +79,7 @@ | |||
| 79 | 79 | ||
| 80 | - **不支持源操作数与目的操作数地址重叠。** | 80 | - **不支持源操作数与目的操作数地址重叠。** |
| 81 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 81 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 82 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 82 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 83 | 83 | ||
| 84 | ## 调用示例 | 84 | ## 调用示例 |
| 85 | 85 | ||
| @@ -113,7 +113,7 @@ struct ErfConfig { | |||
| 113 | 113 | ||
| 114 | - **不支持源操作数与目的操作数地址重叠。** | 114 | - **不支持源操作数与目的操作数地址重叠。** |
| 115 | 115 | ||
| 116 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 116 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 117 | 117 | ||
| 118 | ## 调用示例 | 118 | ## 调用示例 |
| 119 | 119 | ||
| @@ -112,7 +112,7 @@ S\(z\) = \(\(\(\(z + S1\) \* z + S2\) \* z + S3\) \* z + S4\) \* z + S5是关于 | |||
| 112 | - 输入源数据需保持值域在\[-inf, inf\]。若输入不在范围内,输出结果无效。 | 112 | - 输入源数据需保持值域在\[-inf, inf\]。若输入不在范围内,输出结果无效。 |
| 113 | - **不支持源操作数与目的操作数地址重叠。** | 113 | - **不支持源操作数与目的操作数地址重叠。** |
| 114 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 114 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 116 | 116 | ||
| 117 | ## 调用示例 | 117 | ## 调用示例 |
| 118 | 118 | ||
| @@ -92,7 +92,7 @@ | |||
| 92 | 92 | ||
| 93 | - **不支持源操作数与目的操作数地址重叠。** | 93 | - **不支持源操作数与目的操作数地址重叠。** |
| 94 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 94 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 95 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 95 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 96 | 96 | ||
| 97 | ## 调用示例 | 97 | ## 调用示例 |
| 98 | 98 | ||
| @@ -92,7 +92,7 @@ Floor\(-3.9\) = -4.0 | |||
| 92 | <!-- end id9 --> | 92 | <!-- end id9 --> |
| 93 | - **不支持源操作数与目的操作数地址重叠。** | 93 | - **不支持源操作数与目的操作数地址重叠。** |
| 94 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 94 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 95 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 95 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 96 | 96 | ||
| 97 | ## 调用示例 | 97 | ## 调用示例 |
| 98 | 98 | ||
| @@ -85,7 +85,7 @@ struct FmaConfig { | |||
| 85 | 85 | ||
| 86 | - **不支持源操作数与目的操作数地址重叠。** | 86 | - **不支持源操作数与目的操作数地址重叠。** |
| 87 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 87 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 88 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 88 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 89 | 89 | ||
| 90 | ## 调用示例 | 90 | ## 调用示例 |
| 91 | 91 | ||
| @@ -122,7 +122,7 @@ struct FmodConfig { | |||
| 122 | <!-- npu="950" id10 --> | 122 | <!-- npu="950" id10 --> |
| 123 | - 对于Ascend 950PR/Ascend 950DT,模板参数config中的algo为ITERATION\_COMPENSATION迭代补偿模式下,操作数的数据类型仅支持float。 | 123 | - 对于Ascend 950PR/Ascend 950DT,模板参数config中的algo为ITERATION\_COMPENSATION迭代补偿模式下,操作数的数据类型仅支持float。 |
| 124 | <!-- end id10 --> | 124 | <!-- end id10 --> |
| 125 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 125 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 126 | 126 | ||
| 127 | ## 调用示例 | 127 | ## 调用示例 |
| 128 | 128 | ||
| @@ -104,7 +104,7 @@ Frac\(5592.625\) = 0.625 | |||
| 104 | - 针对Atlas 推理系列产品AI Core,输入数据限制在\[-2147483647.0, 2147483647.0\]范围内。 | 104 | - 针对Atlas 推理系列产品AI Core,输入数据限制在\[-2147483647.0, 2147483647.0\]范围内。 |
| 105 | <!-- end id8 --> | 105 | <!-- end id8 --> |
| 106 | - **不支持源操作数与目的操作数地址重叠。** | 106 | - **不支持源操作数与目的操作数地址重叠。** |
| 107 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 107 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 108 | 108 | ||
| 109 | ## 调用示例 | 109 | ## 调用示例 |
| 110 | 110 | ||
| @@ -100,7 +100,7 @@ Hypot\(3.0, 4.0\) = 5.0 | |||
| 100 | - 源操作数src0Tensor与src1Tensor的数据长度必须保持一致。 | 100 | - 源操作数src0Tensor与src1Tensor的数据长度必须保持一致。 |
| 101 | - **不支持源操作数与目的操作数地址重叠。** | 101 | - **不支持源操作数与目的操作数地址重叠。** |
| 102 | - 不支持sharedTmpBuffer与源操作数、目的操作数地址重叠。 | 102 | - 不支持sharedTmpBuffer与源操作数、目的操作数地址重叠。 |
| 103 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 103 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 104 | - 当源操作数src0Tensor与src1Tensor的输入数据中任意一个或多个为inf,对应位置的目的操作数输出为inf。 | 104 | - 当源操作数src0Tensor与src1Tensor的输入数据中任意一个或多个为inf,对应位置的目的操作数输出为inf。 |
| 105 | - 当源操作数src0Tensor与src1Tensor的输入数据中任意一个或多个为nan,且该位置上的输入都不是inf,对应位置的目的操作数输出为nan。 | 105 | - 当源操作数src0Tensor与src1Tensor的输入数据中任意一个或多个为nan,且该位置上的输入都不是inf,对应位置的目的操作数输出为nan。 |
| 106 | 106 | ||
| @@ -80,7 +80,7 @@ __aicore__ inline void IsFinite(const LocalTensor<U>& dst, const LocalTensor<T>& | |||
| 80 | ## 约束说明 | 80 | ## 约束说明 |
| 81 | 81 | ||
| 82 | - **不支持源操作数与目的操作数地址重叠。** | 82 | - **不支持源操作数与目的操作数地址重叠。** |
| 83 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 83 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 84 | 84 | ||
| 85 | ## 调用示例 | 85 | ## 调用示例 |
| 86 | 86 | ||
| @@ -102,7 +102,7 @@ struct IsInfConfig { | |||
| 102 | ## 约束说明 | 102 | ## 约束说明 |
| 103 | 103 | ||
| 104 | - **不支持源操作数与目的操作数地址重叠。** | 104 | - **不支持源操作数与目的操作数地址重叠。** |
| 105 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 105 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 106 | 106 | ||
| 107 | ## 调用示例 | 107 | ## 调用示例 |
| 108 | 108 | ||
| @@ -102,7 +102,7 @@ struct IsNanConfig { | |||
| 102 | ## 约束说明 | 102 | ## 约束说明 |
| 103 | 103 | ||
| 104 | - **不支持源操作数与目的操作数地址重叠。** | 104 | - **不支持源操作数与目的操作数地址重叠。** |
| 105 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 105 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 106 | 106 | ||
| 107 | ## 调用示例 | 107 | ## 调用示例 |
| 108 | 108 | ||
| @@ -81,7 +81,7 @@ | |||
| 81 | 81 | ||
| 82 | - **不支持源操作数与目的操作数地址重叠。** | 82 | - **不支持源操作数与目的操作数地址重叠。** |
| 83 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 83 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 84 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 84 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 85 | 85 | ||
| 86 | ## 调用示例 | 86 | ## 调用示例 |
| 87 | 87 | ||
| @@ -140,7 +140,7 @@ | |||
| 140 | ## 约束说明 | 140 | ## 约束说明 |
| 141 | 141 | ||
| 142 | - **不支持源操作数与目的操作数地址重叠。** | 142 | - **不支持源操作数与目的操作数地址重叠。** |
| 143 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 143 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 144 | 144 | ||
| 145 | ## 调用示例 | 145 | ## 调用示例 |
| 146 | 146 | ||
| @@ -66,7 +66,7 @@ struct LogicalAndConfig { | |||
| 66 | ## 约束说明 | 66 | ## 约束说明 |
| 67 | 67 | ||
| 68 | - **不支持源操作数与目的操作数地址重叠。** | 68 | - **不支持源操作数与目的操作数地址重叠。** |
| 69 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 69 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 70 | 70 | ||
| 71 | ## 调用示例 | 71 | ## 调用示例 |
| 72 | 72 | ||
| @@ -73,7 +73,7 @@ struct LogicalAndsConfig { | |||
| 73 | - 当传入LocalTensor的单点数据作为标量时,scalarTensorIndex参数需要传入编译期已知的常量,如果传入变量,则需要将该变量声明为constexpr。 | 73 | - 当传入LocalTensor的单点数据作为标量时,scalarTensorIndex参数需要传入编译期已知的常量,如果传入变量,则需要将该变量声明为constexpr。 |
| 74 | 74 | ||
| 75 | - **不支持源操作数与目的操作数地址重叠。** | 75 | - **不支持源操作数与目的操作数地址重叠。** |
| 76 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 76 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 77 | 77 | ||
| 78 | ## 调用示例 | 78 | ## 调用示例 |
| 79 | 79 | ||
| @@ -68,7 +68,7 @@ struct LogicalNotConfig { | |||
| 68 | ## 约束说明 | 68 | ## 约束说明 |
| 69 | 69 | ||
| 70 | - **不支持源操作数与目的操作数地址重叠。** | 70 | - **不支持源操作数与目的操作数地址重叠。** |
| 71 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 71 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 72 | 72 | ||
| 73 | ## 调用示例 | 73 | ## 调用示例 |
| 74 | 74 | ||
| @@ -66,7 +66,7 @@ struct LogicalOrConfig { | |||
| 66 | ## 约束说明 | 66 | ## 约束说明 |
| 67 | 67 | ||
| 68 | - **不支持源操作数与目的操作数地址重叠。** | 68 | - **不支持源操作数与目的操作数地址重叠。** |
| 69 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 69 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 70 | 70 | ||
| 71 | ## 调用示例 | 71 | ## 调用示例 |
| 72 | 72 | ||
| @@ -73,7 +73,7 @@ struct LogicalOrsConfig { | |||
| 73 | - 当传入LocalTensor的单点数据作为标量时,scalarTensorIndex参数需要传入编译期已知的常量,如果传入变量,则需要将该变量声明为constexpr。 | 73 | - 当传入LocalTensor的单点数据作为标量时,scalarTensorIndex参数需要传入编译期已知的常量,如果传入变量,则需要将该变量声明为constexpr。 |
| 74 | 74 | ||
| 75 | - **不支持源操作数与目的操作数地址重叠。** | 75 | - **不支持源操作数与目的操作数地址重叠。** |
| 76 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 76 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 77 | 77 | ||
| 78 | ## 调用示例 | 78 | ## 调用示例 |
| 79 | 79 | ||
| @@ -66,7 +66,7 @@ struct LogicalXorConfig { | |||
| 66 | ## 约束说明 | 66 | ## 约束说明 |
| 67 | 67 | ||
| 68 | - **不支持源操作数与目的操作数地址重叠。** | 68 | - **不支持源操作数与目的操作数地址重叠。** |
| 69 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 69 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 70 | 70 | ||
| 71 | ## 调用示例 | 71 | ## 调用示例 |
| 72 | 72 | ||
| @@ -175,7 +175,7 @@ struct PowerConfig { | |||
| 175 | <!-- npu="310p" id8 --> | 175 | <!-- npu="310p" id8 --> |
| 176 | - 对于Atlas 推理系列产品AI Core,幂运算的指数必须小于2<sup>31</sup>-1。 | 176 | - 对于Atlas 推理系列产品AI Core,幂运算的指数必须小于2<sup>31</sup>-1。 |
| 177 | <!-- end id8 --> | 177 | <!-- end id8 --> |
| 178 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 178 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 179 | - 支持的数据类型<a id="li559613463410"></a> | 179 | - 支持的数据类型<a id="li559613463410"></a> |
| 180 | 180 | ||
| 181 | <!-- npu="950" id9 --> | 181 | <!-- npu="950" id9 --> |
| @@ -91,7 +91,7 @@ struct RintConfig { | |||
| 91 | 91 | ||
| 92 | - **不支持源操作数与目的操作数地址重叠。** | 92 | - **不支持源操作数与目的操作数地址重叠。** |
| 93 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 93 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 94 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 94 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 95 | 95 | ||
| 96 | ## 调用示例 | 96 | ## 调用示例 |
| 97 | 97 | ||
| @@ -83,7 +83,7 @@ Round\(-3.4\) = -3.0 | |||
| 83 | 83 | ||
| 84 | - 只支持四舍五入到整数,不支持四舍五入到小数。如果该数恰好在两个整数中间,即小数部分为0.5,则“向偶数舍入”。 | 84 | - 只支持四舍五入到整数,不支持四舍五入到小数。如果该数恰好在两个整数中间,即小数部分为0.5,则“向偶数舍入”。 |
| 85 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 85 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | 87 | ||
| 88 | ## 调用示例 | 88 | ## 调用示例 |
| 89 | 89 | ||
| @@ -101,7 +101,7 @@ | |||
| 101 | 101 | ||
| 102 | - **不支持源操作数与目的操作数地址重叠。** | 102 | - **不支持源操作数与目的操作数地址重叠。** |
| 103 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 103 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 104 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 104 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 105 | - 支持的数据类型<a id="li11479111011360"></a> | 105 | - 支持的数据类型<a id="li11479111011360"></a> |
| 106 | 106 | ||
| 107 | <!-- npu="950" id9 --> | 107 | <!-- npu="950" id9 --> |
| @@ -85,7 +85,7 @@ struct SinCosConfig { | |||
| 85 | 85 | ||
| 86 | - **不支持源操作数与目的操作数地址重叠。** | 86 | - **不支持源操作数与目的操作数地址重叠。** |
| 87 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 87 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 88 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 88 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 89 | 89 | ||
| 90 | ## 调用示例 | 90 | ## 调用示例 |
| 91 | 91 | ||
| @@ -128,7 +128,7 @@ enum class SinAlgo { POLYNOMIAL_APPROXIMATION = 0, RADIAN_REDUCTION }; | |||
| 128 | 128 | ||
| 129 | - **不支持源操作数与目的操作数地址重叠。** | 129 | - **不支持源操作数与目的操作数地址重叠。** |
| 130 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 130 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 131 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 131 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 132 | 132 | ||
| 133 | ## 调用示例 | 133 | ## 调用示例 |
| 134 | 134 | ||
| @@ -102,7 +102,7 @@ | |||
| 102 | 102 | ||
| 103 | - **不支持源操作数与目的操作数地址重叠。** | 103 | - **不支持源操作数与目的操作数地址重叠。** |
| 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 105 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 105 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 106 | 106 | ||
| 107 | ## 调用示例 | 107 | ## 调用示例 |
| 108 | 108 | ||
| @@ -108,7 +108,7 @@ Tan\(x\)的泰勒展开式为: | |||
| 108 | - **不支持源操作数与目的操作数地址重叠。** | 108 | - **不支持源操作数与目的操作数地址重叠。** |
| 109 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 109 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 110 | 110 | ||
| 111 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 111 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 112 | 112 | ||
| 113 | ## 调用示例 | 113 | ## 调用示例 |
| 114 | 114 | ||
| @@ -113,7 +113,7 @@ struct TanhConfig { | |||
| 113 | 113 | ||
| 114 | - **不支持源操作数与目的操作数地址重叠。** | 114 | - **不支持源操作数与目的操作数地址重叠。** |
| 115 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 115 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 116 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 116 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 117 | 117 | ||
| 118 | ## 调用示例 | 118 | ## 调用示例 |
| 119 | 119 | ||
| @@ -103,7 +103,7 @@ Trunc\(-3.9\) = -3 | |||
| 103 | <!-- end id7 --> | 103 | <!-- end id7 --> |
| 104 | - 支持源操作数与目的操作数地址重叠。 | 104 | - 支持源操作数与目的操作数地址重叠。 |
| 105 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 105 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 106 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 106 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 107 | 107 | ||
| 108 | ## 调用示例 | 108 | ## 调用示例 |
| 109 | 109 | ||
| @@ -62,7 +62,7 @@ __aicore__ inline void Where(const LocalTensor<T>& dst, const U& src0, const S& | |||
| 62 | ## 约束说明 | 62 | ## 约束说明 |
| 63 | 63 | ||
| 64 | - **不支持源操作数与目的操作数地址重叠。** | 64 | - **不支持源操作数与目的操作数地址重叠。** |
| 65 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../通用说明和约束.md)。 | 65 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../../general_description_and_constraints.md)。 |
| 66 | 66 | ||
| 67 | ## 调用示例 | 67 | ## 调用示例 |
| 68 | 68 | ||
| @@ -108,7 +108,7 @@ | |||
| 108 | - calCount需要保证小于或等于src0Tensor和src1Tensor和dstTensor存储的元素范围。 | 108 | - calCount需要保证小于或等于src0Tensor和src1Tensor和dstTensor存储的元素范围。 |
| 109 | - 对于不带calCount参数的接口,需要保证src0Tensor和src1Tensor的shape大小相等。 | 109 | - 对于不带calCount参数的接口,需要保证src0Tensor和src1Tensor的shape大小相等。 |
| 110 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 110 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 111 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 111 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 112 | 112 | ||
| 113 | ## 调用示例 | 113 | ## 调用示例 |
| 114 | 114 | ||
| @@ -84,7 +84,7 @@ BatchNorm是对于每一层的输入做规范化处理,使得每一层的分 | |||
| 84 | 84 | ||
| 85 | ## 约束说明 | 85 | ## 约束说明 |
| 86 | 86 | ||
| 87 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 87 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 88 | - 当前仅支持ND格式的输入,不支持其他格式。 | 88 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 89 | - 输入数据的S\*H必须满足32B对齐的要求。 | 89 | - 输入数据的S\*H必须满足32B对齐的要求。 |
| 90 | 90 | ||
| @@ -82,7 +82,7 @@ SubLayer\(X\)通常是指在DeepNorm模型中的一个子层(sub-layer), | |||
| 82 | 82 | ||
| 83 | ## 约束说明 | 83 | ## 约束说明 |
| 84 | 84 | ||
| 85 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 85 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 86 | 86 | ||
| 87 | - isReuseSrc模板参数为false时,srcLocal和dstLocal的Tensor空间不支持复用。 | 87 | - isReuseSrc模板参数为false时,srcLocal和dstLocal的Tensor空间不支持复用。 |
| 88 | - 仅支持输入shape为ND格式。 | 88 | - 仅支持输入shape为ND格式。 |
| @@ -87,7 +87,7 @@ | |||
| 87 | 87 | ||
| 88 | ## 约束说明 | 88 | ## 约束说明 |
| 89 | 89 | ||
| 90 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 90 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 91 | - 当前仅支持ND格式的输入,不支持其他格式。 | 91 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 92 | 92 | ||
| 93 | ## 调用示例 | 93 | ## 调用示例 |
| @@ -196,7 +196,7 @@ | |||
| 196 | 196 | ||
| 197 | ## 约束说明 | 197 | ## 约束说明 |
| 198 | 198 | ||
| 199 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 199 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 200 | - 对shape为\[B,S,H\]的输入数据,输出归一化结果、均值和方差的接口: | 200 | - 对shape为\[B,S,H\]的输入数据,输出归一化结果、均值和方差的接口: |
| 201 | - output和inputX的空间可以复用。其他输出与输入的空间不可复用。 | 201 | - output和inputX的空间可以复用。其他输出与输入的空间不可复用。 |
| 202 | - 输入数据中尾轴H不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。 | 202 | - 输入数据中尾轴H不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。 |
| @@ -112,7 +112,7 @@ struct LayerNormGradShapeInfo { | |||
| 112 | 112 | ||
| 113 | ## 约束说明 | 113 | ## 约束说明 |
| 114 | 114 | ||
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 116 | - 源操作数和目的操作数的Tensor空间可以复用。 | 116 | - 源操作数和目的操作数的Tensor空间可以复用。 |
| 117 | - 仅支持输入shape为ND格式。 | 117 | - 仅支持输入shape为ND格式。 |
| 118 | - 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。 | 118 | - 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。 |
| @@ -82,7 +82,7 @@ LayerNormGradBeta接口用于获取反向beta/gamma的数值,和LayerNormGrad | |||
| 82 | 82 | ||
| 83 | ## 约束说明 | 83 | ## 约束说明 |
| 84 | 84 | ||
| 85 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 85 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 86 | - 源操作数和目的操作数的Tensor空间可以复用。 | 86 | - 源操作数和目的操作数的Tensor空间可以复用。 |
| 87 | - 仅支持输入shape为ND格式。 | 87 | - 仅支持输入shape为ND格式。 |
| 88 | - 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。 | 88 | - 输入数据不满足对齐要求时,开发者需要进行补齐,补齐的数据应设置为0,防止出现异常值从而影响网络计算。 |
| @@ -107,7 +107,7 @@ struct NormalizePara { | |||
| 107 | 107 | ||
| 108 | ## 约束说明 | 108 | ## 约束说明 |
| 109 | 109 | ||
| 110 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 110 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 111 | - 缩放系数gamma和平移系数beta的数据类型精度必须不低于源操作数inputX的数据类型精度。比如,inputX的数据类型是half,gamma、beta的数据类型可以是half或者float,精度不低于inputX。比如,inputX的数据类型是bfloat16\_t,gamma、beta的数据类型可以是bfloat16\_t或者float,精度不低于inputX。 | 111 | - 缩放系数gamma和平移系数beta的数据类型精度必须不低于源操作数inputX的数据类型精度。比如,inputX的数据类型是half,gamma、beta的数据类型可以是half或者float,精度不低于inputX。比如,inputX的数据类型是bfloat16\_t,gamma、beta的数据类型可以是bfloat16\_t或者float,精度不低于inputX。 |
| 112 | - src和dst的Tensor空间不可以复用。 | 112 | - src和dst的Tensor空间不可以复用。 |
| 113 | - 输入仅支持ND格式。 | 113 | - 输入仅支持ND格式。 |
| @@ -88,7 +88,7 @@ | |||
| 88 | 88 | ||
| 89 | - dstLocal和gammaLocal的Tensor空间不允许复用。 | 89 | - dstLocal和gammaLocal的Tensor空间不允许复用。 |
| 90 | - 当前仅支持ND格式的输入,不支持其他格式。 | 90 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 91 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 91 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 92 | - 当srcLocal的原始shape中H轴非32字节对齐时,开发者需要对原始输入在H轴方向补齐数据到32字节对齐,API的计算结果会覆盖dstLocal中对应srcLocal补齐位置的数据。 | 92 | - 当srcLocal的原始shape中H轴非32字节对齐时,开发者需要对原始输入在H轴方向补齐数据到32字节对齐,API的计算结果会覆盖dstLocal中对应srcLocal补齐位置的数据。 |
| 93 | 93 | ||
| 94 | ## 调用示例 | 94 | ## 调用示例 |
| @@ -131,8 +131,8 @@ constexpr WelfordFinalizeConfig WFFINALIZE_DEFAULT_CFG = { false }; | |||
| 131 | 131 | ||
| 132 | | 参数名 | 输入/输出 | 描述 | | 132 | | 参数名 | 输入/输出 | 描述 | |
| 133 | | --- | --- | --- | | 133 | | --- | --- | --- | |
| 134 | -| outputMean | 输出 | 均值目的操作数,数据类型为float。输出的均值为1个数,需要sizeof(float)大小的空间进行保存,根据[存储单元的对齐要求](../../通用说明和约束.md#table16278354141117),开发者实际需要为outputMean分配32字节对齐的内存空间。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | | 134 | +| outputMean | 输出 | 均值目的操作数,数据类型为float。输出的均值为1个数,需要sizeof(float)大小的空间进行保存,根据[存储单元的对齐要求](../../general_description_and_constraints.md#table16278354141117),开发者实际需要为outputMean分配32字节对齐的内存空间。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | |
| 135 | -| outputVariance | 输出 | 方差目的操作数,数据类型为float。输出的方差为1个数,需要sizeof(float)大小的空间进行保存,根据[存储单元的对齐要求](../../通用说明和约束.md#table16278354141117),开发者实际需要为outputVariance分配32字节对齐的内存空间。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | | 135 | +| outputVariance | 输出 | 方差目的操作数,数据类型为float。输出的方差为1个数,需要sizeof(float)大小的空间进行保存,根据[存储单元的对齐要求](../../general_description_and_constraints.md#table16278354141117),开发者实际需要为outputVariance分配32字节对齐的内存空间。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | |
| 136 | | inputMean | 输入 | 均值源操作数,数据类型为float。shape为[abLength]。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | | 136 | | inputMean | 输入 | 均值源操作数,数据类型为float。shape为[abLength]。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | |
| 137 | | inputVariance | 输入 | 方差源操作数,数据类型为float。shape为[abLength]。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | | 137 | | inputVariance | 输入 | 方差源操作数,数据类型为float。shape为[abLength]。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | |
| 138 | | counts | 输入 | 源操作数,数据类型为int32_t。shape为[abLength]。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | | 138 | | counts | 输入 | 源操作数,数据类型为int32_t。shape为[abLength]。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | |
| @@ -172,7 +172,7 @@ struct AntiQuantizeParams { | |||
| 172 | ## 约束说明 | 172 | ## 约束说明 |
| 173 | 173 | ||
| 174 | - **不支持源操作数与目的操作数地址重叠。** | 174 | - **不支持源操作数与目的操作数地址重叠。** |
| 175 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 175 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 176 | - 输入输出操作数参与计算的数据长度要求32字节对齐。 | 176 | - 输入输出操作数参与计算的数据长度要求32字节对齐。 |
| 177 | - 连续计算方向(即n方向)的数据量要求32字节对齐。 | 177 | - 连续计算方向(即n方向)的数据量要求32字节对齐。 |
| 178 | - PER\_GROUP量化的float4场景不支持offset,该场景下模板参数config中的hasOffset参数必须配置为false。 | 178 | - PER\_GROUP量化的float4场景不支持offset,该场景下模板参数config中的hasOffset参数必须配置为false。 |
| @@ -323,7 +323,7 @@ struct AscendAntiQuantParam { | |||
| 323 | ## 约束说明 | 323 | ## 约束说明 |
| 324 | 324 | ||
| 325 | - **不支持源操作数与目的操作数地址重叠。** | 325 | - **不支持源操作数与目的操作数地址重叠。** |
| 326 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 326 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 327 | - 输入输出操作数参与计算的数据长度要求32B对齐。 | 327 | - 输入输出操作数参与计算的数据长度要求32B对齐。 |
| 328 | - 输入带转置场景,k需要32B对齐。 | 328 | - 输入带转置场景,k需要32B对齐。 |
| 329 | - 调用接口前,确保输入数据的size正确,offset和scale的size和shape正确。 | 329 | - 调用接口前,确保输入数据的size正确,offset和scale的size和shape正确。 |
| @@ -286,7 +286,7 @@ struct AscendDeQuantParam { | |||
| 286 | ## 约束说明 | 286 | ## 约束说明 |
| 287 | 287 | ||
| 288 | - **不支持源操作数与目的操作数地址重叠。** | 288 | - **不支持源操作数与目的操作数地址重叠。** |
| 289 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 289 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 290 | - PER\_TOKEN/PER\_GROUP量化场景支持情况如下: | 290 | - PER\_TOKEN/PER\_GROUP量化场景支持情况如下: |
| 291 | 291 | ||
| 292 | <!-- npu="950" id22 --> | 292 | <!-- npu="950" id22 --> |
| @@ -433,7 +433,7 @@ struct AscendQuantParam { | |||
| 433 | ## 约束说明 | 433 | ## 约束说明 |
| 434 | 434 | ||
| 435 | - 源操作数与目的操作数可以复用。 | 435 | - 源操作数与目的操作数可以复用。 |
| 436 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 436 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 437 | - 输入输出操作数参与计算的数据长度要求32B对齐。 | 437 | - 输入输出操作数参与计算的数据长度要求32B对齐。 |
| 438 | - 当Scale为float类型时,其取值范围仍为half类型的取值范围。 | 438 | - 当Scale为float类型时,其取值范围仍为half类型的取值范围。 |
| 439 | - dstTensor非固定数据类型的函数原型支持情况如下: | 439 | - dstTensor非固定数据类型的函数原型支持情况如下: |
| @@ -146,7 +146,7 @@ struct DequantizeParams { | |||
| 146 | ## 约束说明 | 146 | ## 约束说明 |
| 147 | 147 | ||
| 148 | - **不支持源操作数与目的操作数地址重叠。** | 148 | - **不支持源操作数与目的操作数地址重叠。** |
| 149 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 149 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 150 | - 连续计算方向(即n方向)的数据量要求32字节对齐。 | 150 | - 连续计算方向(即n方向)的数据量要求32字节对齐。 |
| 151 | 151 | ||
| 152 | ## 调用示例 | 152 | ## 调用示例 |
| @@ -174,7 +174,7 @@ struct QuantizeParams { | |||
| 174 | ## 约束说明 | 174 | ## 约束说明 |
| 175 | 175 | ||
| 176 | - **不支持源操作数与目的操作数地址重叠。** | 176 | - **不支持源操作数与目的操作数地址重叠。** |
| 177 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 177 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 178 | - 输入输出操作数参与计算的数据长度要求32字节对齐。 | 178 | - 输入输出操作数参与计算的数据长度要求32字节对齐。 |
| 179 | - 连续计算方向(即n方向)的数据量要求32字节对齐。 | 179 | - 连续计算方向(即n方向)的数据量要求32字节对齐。 |
| 180 | - PER\_GROUP量化的float4场景不支持offset,该场景下模板参数config中的hasOffset参数必须配置为false。 | 180 | - PER\_GROUP量化的float4场景不支持offset,该场景下模板参数config中的hasOffset参数必须配置为false。 |
| @@ -94,7 +94,7 @@ struct MeanParams { | |||
| 94 | 94 | ||
| 95 | ## 约束说明 | 95 | ## 约束说明 |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 98 | - **不支持源操作数与目的操作数地址重叠。** | 98 | - **不支持源操作数与目的操作数地址重叠。** |
| 99 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 99 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 100 | - 当前仅支持ND格式的输入,不支持其他格式。 | 100 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | - 源操作数srcTensor的输入数据只能为0或1。 | 87 | - 源操作数srcTensor的输入数据只能为0或1。 |
| 88 | 88 | ||
| 89 | - **不支持源操作数与目的操作数地址重叠。** | 89 | - **不支持源操作数与目的操作数地址重叠。** |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | - 源操作数srcTensor的输入数据只能为0或1。 | 87 | - 源操作数srcTensor的输入数据只能为0或1。 |
| 88 | 88 | ||
| 89 | - **不支持源操作数与目的操作数地址重叠。** | 89 | - **不支持源操作数与目的操作数地址重叠。** |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | - 当srcInnerPad为True时,输入向量的内轴必须为32字节的整数倍。当原始向量的内轴长度n占据的字节长度不是32的整数倍时,需要开发者将其向上补齐到32的整数倍。开发者自行padding补齐后的内轴大小为inner = \(n \* sizeof\(T\) + 32 - 1\) / 32 \* 32 / sizeof\(T\)。 | 87 | - 当srcInnerPad为True时,输入向量的内轴必须为32字节的整数倍。当原始向量的内轴长度n占据的字节长度不是32的整数倍时,需要开发者将其向上补齐到32的整数倍。开发者自行padding补齐后的内轴大小为inner = \(n \* sizeof\(T\) + 32 - 1\) / 32 \* 32 / sizeof\(T\)。 |
| 88 | 88 | ||
| 89 | - **不支持源操作数与目的操作数地址重叠。** | 89 | - **不支持源操作数与目的操作数地址重叠。** |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | - **不支持源操作数与目的操作数地址重叠。** | 87 | - **不支持源操作数与目的操作数地址重叠。** |
| 88 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 88 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 89 | - 内部算法不处理累加计算时的数据溢出,溢出场景不保证接口精度。 | 89 | - 内部算法不处理累加计算时的数据溢出,溢出场景不保证接口精度。 |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | 87 | ||
| 88 | - **不支持源操作数与目的操作数地址重叠。** | 88 | - **不支持源操作数与目的操作数地址重叠。** |
| 89 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 89 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | - 内部算法不处理累乘计算时的数据溢出,溢出场景不保证接口精度。 | 87 | - 内部算法不处理累乘计算时的数据溢出,溢出场景不保证接口精度。 |
| 88 | - **不支持源操作数与目的操作数地址重叠。** | 88 | - **不支持源操作数与目的操作数地址重叠。** |
| 89 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 89 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -83,7 +83,7 @@ | |||
| 83 | 83 | ||
| 84 | ## 约束说明 | 84 | ## 约束说明 |
| 85 | 85 | ||
| 86 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 86 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 87 | 87 | ||
| 88 | - **不支持源操作数与目的操作数地址重叠。** | 88 | - **不支持源操作数与目的操作数地址重叠。** |
| 89 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 89 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -77,7 +77,7 @@ | |||
| 77 | 77 | ||
| 78 | ## 约束说明 | 78 | ## 约束说明 |
| 79 | 79 | ||
| 80 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 80 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 81 | 81 | ||
| 82 | - **不支持源操作数与目的操作数地址重叠。** | 82 | - **不支持源操作数与目的操作数地址重叠。** |
| 83 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 83 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| @@ -99,7 +99,7 @@ struct SumParams { | |||
| 99 | 99 | ||
| 100 | ## 约束说明 | 100 | ## 约束说明 |
| 101 | 101 | ||
| 102 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 102 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 103 | - **不支持源操作数与目的操作数地址重叠。** | 103 | - **不支持源操作数与目的操作数地址重叠。** |
| 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 104 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 105 | - 当前仅支持ND格式的输入,不支持其他格式。 | 105 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| @@ -56,7 +56,7 @@ __aicore__ inline void Concat(LocalTensor<T>& concat, const LocalTensor<T>& src, | |||
| 56 | 56 | ||
| 57 | ## 约束说明 | 57 | ## 约束说明 |
| 58 | 58 | ||
| 59 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 59 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 60 | 60 | ||
| 61 | ## 调用示例 | 61 | ## 调用示例 |
| 62 | 62 | ||
| @@ -56,7 +56,7 @@ __aicore__ inline void Extract(const LocalTensor<T>& dstValue, const LocalTensor | |||
| 56 | 56 | ||
| 57 | ## 约束说明 | 57 | ## 约束说明 |
| 58 | 58 | ||
| 59 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 59 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 60 | 60 | ||
| 61 | ## 调用示例 | 61 | ## 调用示例 |
| 62 | 62 | ||
| @@ -112,7 +112,7 @@ struct MrgSortSrcList { | |||
| 112 | 112 | ||
| 113 | - 当存在score\[i\]与score\[j\]相同时,如果i\>j,则score\[j\]将首先被选出来,排在前面,即index的顺序与输入顺序一致。 | 113 | - 当存在score\[i\]与score\[j\]相同时,如果i\>j,则score\[j\]将首先被选出来,排在前面,即index的顺序与输入顺序一致。 |
| 114 | - 每次迭代内的数据会进行排序,不同迭代间的数据不会进行排序。 | 114 | - 每次迭代内的数据会进行排序,不同迭代间的数据不会进行排序。 |
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 116 | 116 | ||
| 117 | ## 调用示例<a name="section642mcpsimp"></a> | 117 | ## 调用示例<a name="section642mcpsimp"></a> |
| 118 | 118 | ||
| @@ -232,7 +232,7 @@ | |||
| 232 | 232 | ||
| 233 | ## 约束说明 | 233 | ## 约束说明 |
| 234 | 234 | ||
| 235 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 235 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 236 | - 不带SortConfig的接口: | 236 | - 不带SortConfig的接口: |
| 237 | - 当存在score\[i\]与score\[j\]相同时,如果i\>j,则score\[j\]将首先被选出来,排在前面,即index的顺序与输入顺序一致。 | 237 | - 当存在score\[i\]与score\[j\]相同时,如果i\>j,则score\[j\]将首先被选出来,排在前面,即index的顺序与输入顺序一致。 |
| 238 | - 非全排序模式下,每次迭代内的数据会进行排序,不同迭代间的数据不会进行排序。 | 238 | - 非全排序模式下,每次迭代内的数据会进行排序,不同迭代间的数据不会进行排序。 |
| @@ -289,7 +289,7 @@ struct TopKInfo { | |||
| 289 | 289 | ||
| 290 | ## 约束说明 | 290 | ## 约束说明 |
| 291 | 291 | ||
| 292 | -- 操作数地址偏移对齐要求请参见[通用说明和约束](../../通用说明和约束.md)。 | 292 | +- 操作数地址偏移对齐要求请参见[通用说明和约束](../../general_description_and_constraints.md)。 |
| 293 | - **不支持源操作数与目的操作数地址重叠。** | 293 | - **不支持源操作数与目的操作数地址重叠。** |
| 294 | - 当存在srcLocal\[i\]与srcLocal\[j\]相同时,如果i\>j,则srcLocal\[j\]将首先被选出来,排在前面。 | 294 | - 当存在srcLocal\[i\]与srcLocal\[j\]相同时,如果i\>j,则srcLocal\[j\]将首先被选出来,排在前面。 |
| 295 | - inf在Topk中被认为是极大值。 | 295 | - inf在Topk中被认为是极大值。 |
| @@ -161,7 +161,7 @@ | |||
| 161 | 161 | ||
| 162 | ## 约束说明 | 162 | ## 约束说明 |
| 163 | 163 | ||
| 164 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 164 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 165 | - **不支持源操作数与目的操作数地址重叠。** | 165 | - **不支持源操作数与目的操作数地址重叠。** |
| 166 | - 当前仅支持ND格式的输入,不支持其他格式。 | 166 | - 当前仅支持ND格式的输入,不支持其他格式。 |
| 167 | - dim目前仅支持1或者2, axis目前仅支持0或者1。 | 167 | - dim目前仅支持1或者2, axis目前仅支持0或者1。 |
| @@ -95,7 +95,7 @@ struct PadParams { | |||
| 95 | - pad之后的总width不超过原width向最近32B对齐后的宽度。 | 95 | - pad之后的总width不超过原width向最近32B对齐后的宽度。 |
| 96 | - 源操作数的数据量必须32B对齐。 | 96 | - 源操作数的数据量必须32B对齐。 |
| 97 | 97 | ||
| 98 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 98 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 99 | 99 | ||
| 100 | ## 调用示例 | 100 | ## 调用示例 |
| 101 | 101 | ||
| @@ -142,7 +142,7 @@ params = {ncdhwLayout, fractalzLayout}; | |||
| 142 | 142 | ||
| 143 | ## 约束说明 | 143 | ## 约束说明 |
| 144 | 144 | ||
| 145 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 145 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 146 | - 不支持源操作数与目的操作数地址重叠。 | 146 | - 不支持源操作数与目的操作数地址重叠。 |
| 147 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 | 147 | - 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。 |
| 148 | - 对于NCDHW格式的输入,如果H轴和W轴合并后的轴不是32字节对齐,则在调用此接口前,用户需要在合并后的轴上填充数据,使其达到32字节对齐。调用此接口时,在指定Shape信息的参数处,应传入原始Shape,即合轴前的Shape。例如,如果输入的原始Shape是\[1, 16, 2, 3, 5\],则用户需要将输入数据填充至Shape \[1, 16, 2, 16\],填充的数据为无效数据。 | 148 | - 对于NCDHW格式的输入,如果H轴和W轴合并后的轴不是32字节对齐,则在调用此接口前,用户需要在合并后的轴上填充数据,使其达到32字节对齐。调用此接口时,在指定Shape信息的参数处,应传入原始Shape,即合轴前的Shape。例如,如果输入的原始Shape是\[1, 16, 2, 3, 5\],则用户需要将输入数据填充至Shape \[1, 16, 2, 16\],填充的数据为无效数据。 |
| @@ -276,7 +276,7 @@ enum class TransposeType : uint8_t { | |||
| 276 | 276 | ||
| 277 | ## 约束说明 | 277 | ## 约束说明 |
| 278 | 278 | ||
| 279 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 279 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 280 | <!-- npu="950" id7 --> | 280 | <!-- npu="950" id7 --> |
| 281 | - 场景13到场景16仅在Ascend 950PR/Ascend 950DT上支持。 | 281 | - 场景13到场景16仅在Ascend 950PR/Ascend 950DT上支持。 |
| 282 | - Ascend 950PR/Ascend 950DT,场景13到场景16不支持dst和src空间复用。 | 282 | - Ascend 950PR/Ascend 950DT,场景13到场景16不支持dst和src空间复用。 |
| @@ -81,7 +81,7 @@ struct UnPadParams { | |||
| 81 | 81 | ||
| 82 | ## 约束说明 | 82 | ## 约束说明 |
| 83 | 83 | ||
| 84 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../通用说明和约束.md#section796754519912)。 | 84 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../general_description_and_constraints.md#section796754519912)。 |
| 85 | 85 | ||
| 86 | ## 调用示例 | 86 | ## 调用示例 |
| 87 | 87 | ||
| @@ -43,8 +43,8 @@ __aicore__ inline void SetStoreAtomicConfig() | |||
| 43 | 43 | ||
| 44 | | 参数名 | 输入/输出 | 描述 | | 44 | | 参数名 | 输入/输出 | 描述 | |
| 45 | |--------|-----------|------| | 45 | |--------|-----------|------| |
| 46 | -| type | 输入 | 原子操作开启位,AtomicDtype枚举类的定义如下:<br><pre>enum class AtomicDtype {<br> ATOMIC_NONE = 0, // 无原子操作<br> ATOMIC_F32, // 开启原子操作,进行原子操作的数据类型为float<br> ATOMIC_F16, // 开启原子操作,进行原子操作的数据类型为half<br> ATOMIC_S16, // 开启原子操作,进行原子操作的数据类型为int16_t<br> ATOMIC_S32, // 开启原子操作,进行原子操作的数据类型为int32_t<br> ATOMIC_S8, // 开启原子操作,进行原子操作的数据类型为int8_t<br> ATOMIC_BF16 // 开启原子操作,进行原子操作的数据类型为bfloat16_t<br>};</pre> | | 46 | +| type | 输入 | 原子操作开启位,AtomicDtype枚举类的定义如下:<br>enum class AtomicDtype {<br> ATOMIC_NONE = 0, // 无原子操作<br> ATOMIC_F32, // 开启原子操作,进行原子操作的数据类型为float<br> ATOMIC_F16, // 开启原子操作,进行原子操作的数据类型为half<br> ATOMIC_S16, // 开启原子操作,进行原子操作的数据类型为int16_t<br> ATOMIC_S32, // 开启原子操作,进行原子操作的数据类型为int32_t<br> ATOMIC_S8, // 开启原子操作,进行原子操作的数据类型为int8_t<br> ATOMIC_BF16 // 开启原子操作,进行原子操作的数据类型为bfloat16_t<br>}; | |
| 47 | -| op | 输入 | 原子操作类型,仅当开启原子操作时有效(即"type"为非"ATOMIC_NONE"的场景),当前仅支持求和操作。<br><pre>enum class AtomicOp {<br> ATOMIC_SUM = 0 // 求和操作<br>};</pre> | | 47 | +| op | 输入 | 原子操作类型,仅当开启原子操作时有效(即"type"为非"ATOMIC_NONE"的场景),当前仅支持求和操作。<br>enum class AtomicOp {<br> ATOMIC_SUM = 0 // 求和操作<br>}; | |
| 48 | 48 | ||
| 49 | ## 数据类型 | 49 | ## 数据类型 |
| 50 | 50 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # TPosition<a name="ZH-CN_TOPIC_0000001712887453"></a> | 1 | # TPosition<a name="ZH-CN_TOPIC_0000001712887453"></a> |
| 2 | 2 | ||
| 3 | -Ascend C管理不同层级的物理内存时,用一种抽象的逻辑位置(TPosition)来表达各级别的存储,代替了片上物理存储的概念,达到隐藏硬件架构的目的。主要的TPosition类型包括:VECIN、VECOUT、VECCALC、A1、A2、B1、B2、C1、C2、CO1、CO2,其中VECIN、VECCALC、VECOUT主要用于矢量编程,A1、A2、B1、B2、C1、C2、CO1、CO2用于矩阵编程。您可以通过[表1](../../通用说明和约束.md#table07372185712)了解TPosition和物理存储的映射关系。 | 3 | +Ascend C管理不同层级的物理内存时,用一种抽象的逻辑位置(TPosition)来表达各级别的存储,代替了片上物理存储的概念,达到隐藏硬件架构的目的。主要的TPosition类型包括:VECIN、VECOUT、VECCALC、A1、A2、B1、B2、C1、C2、CO1、CO2,其中VECIN、VECCALC、VECOUT主要用于矢量编程,A1、A2、B1、B2、C1、C2、CO1、CO2用于矩阵编程。您可以通过[表1](../../general_description_and_constraints.md#table07372185712)了解TPosition和物理存储的映射关系。 |
| 4 | 4 | ||
| 5 | TPosition定义如下: | 5 | TPosition定义如下: |
| 6 | 6 | ||
| @@ -65,7 +65,7 @@ Atlas 推理系列产品AI Core,支持的数据类型为:half、int32_t、fl | |||
| 65 | 65 | ||
| 66 | ## 约束说明<a name="section633mcpsimp"></a> | 66 | ## 约束说明<a name="section633mcpsimp"></a> |
| 67 | 67 | ||
| 68 | -操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 68 | +操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 69 | 69 | ||
| 70 | ## 调用示例<a name="section642mcpsimp"></a> | 70 | ## 调用示例<a name="section642mcpsimp"></a> |
| 71 | 71 | ||
| @@ -46,7 +46,7 @@ __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const GlobalTensor | |||
| 46 | | 参数名 | 描述 | | 46 | | 参数名 | 描述 | |
| 47 | | --- | --- | | 47 | | --- | --- | |
| 48 | | T | 操作数以及paddingValue(待填充数据值)的数据类型。 | | 48 | | T | 操作数以及paddingValue(待填充数据值)的数据类型。 | |
| 49 | -| mode | 配置数据搬运模式。PaddingMode类型,定义如下:<br><pre>enum class PaddingMode : uint8_t {<br> Normal = 0, // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐<br> Compact, // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐<br>};</pre> | | 49 | +| mode | 配置数据搬运模式。PaddingMode类型,定义如下:<br>enum class PaddingMode : uint8_t {<br> Normal = 0, // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐<br> Compact, // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐<br>}; | |
| 50 | 50 | ||
| 51 | **表 2** 接口参数说明 | 51 | **表 2** 接口参数说明 |
| 52 | 52 | ||
| @@ -52,7 +52,7 @@ __aicore__ inline void LoadDataWithStride(const LocalTensor<T>& dst, const Local | |||
| 52 | | 参数名称 | 含义 | | 52 | | 参数名称 | 含义 | |
| 53 | | -------- | ---- | | 53 | | -------- | ---- | |
| 54 | | T | 源操作数和目的操作数的数据类型。支持的数据类型请参考[数据类型](#section4219135304818)。 | | 54 | | T | 源操作数和目的操作数的数据类型。支持的数据类型请参考[数据类型](#section4219135304818)。 | |
| 55 | -| defaultConfig | 控制是否在接口内部设置相关属性。 IsResetLoad3dConfig类型。IsResetLoad3dConfig结构定义如下:<br><pre>struct IsResetLoad3dConfig {<br> bool isSetFMatrix = true;<br> bool isSetPadding = true;<br>};</pre>isSetFMatrix配置为true,表示在接口内部设置FeatureMap的属性描述(包括l1H、l1W、padList,参数介绍参考[表3](#table193501032193419));设置为false,表示该接口传入的FeatureMap的属性描述不生效,开发者需要通过[SetFmatrix](../cube_load_aux_config/SetFmatrix.md)进行设置。<br>isSetPadding配置为true,表示在接口内部设置Pad属性描述(即padValue参数,参数介绍参考[表3](#table193501032193419));设置为false,表示该接口传入的Pad属性不生效,开发者需要通过[SetLoadDataPaddingValue](../cube_load_aux_config/SetLoadDataPaddingValue.md)进行设置。<br>该参数的默认值如下:<br><pre>constexpr IsResetLoad3dConfig IS_RESER_LOAD3D_DEFAULT_CONFIG = {true, true};</pre>特性细节可参考:[Feature Map、Pad属性描述寄存器设置](./LoadData_3D.md#zh-cn_topic_0000002512171652_section1881795134015)。 | | 55 | +| defaultConfig | 控制是否在接口内部设置相关属性。 IsResetLoad3dConfig类型。IsResetLoad3dConfig结构定义如下:<br>struct IsResetLoad3dConfig {<br> bool isSetFMatrix = true;<br> bool isSetPadding = true;<br>};<br>isSetFMatrix配置为true,表示在接口内部设置FeatureMap的属性描述(包括l1H、l1W、padList,参数介绍参考[表3](#table193501032193419));设置为false,表示该接口传入的FeatureMap的属性描述不生效,开发者需要通过[SetFmatrix](../cube_load_aux_config/SetFmatrix.md)进行设置。<br>isSetPadding配置为true,表示在接口内部设置Pad属性描述(即padValue参数,参数介绍参考[表3](#table193501032193419));设置为false,表示该接口传入的Pad属性不生效,开发者需要通过[SetLoadDataPaddingValue](../cube_load_aux_config/SetLoadDataPaddingValue.md)进行设置。<br>该参数的默认值如下:<br>constexpr IsResetLoad3dConfig IS_RESER_LOAD3D_DEFAULT_CONFIG = {true, true};<br>特性细节可参考:[Feature Map、Pad属性描述寄存器设置](./LoadData_3D.md#zh-cn_topic_0000002512171652_section1881795134015)。 | |
| 56 | | U | LoadData3DParamsV2中padValue的数据类型。<br>当dst、src使用基础数据类型时,U和dst、src的数据类型T需保持一致,否则编译失败。<br>最后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 56 | | U | LoadData3DParamsV2中padValue的数据类型。<br>当dst、src使用基础数据类型时,U和dst、src的数据类型T需保持一致,否则编译失败。<br>最后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 57 | 57 | ||
| 58 | **表2** 通用参数说明 | 58 | **表2** 通用参数说明 |
| @@ -145,7 +145,7 @@ Load2DBitModeConfig1结构体参数的含义与LoadData2DParamsV2结构体中的 | |||
| 145 | 145 | ||
| 146 | ## 约束说明<a id="section633mcpsimp"></a> | 146 | ## 约束说明<a id="section633mcpsimp"></a> |
| 147 | 147 | ||
| 148 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 148 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 149 | <!-- npu="950" id10 --> | 149 | <!-- npu="950" id10 --> |
| 150 | - 针对Ascend 950PR/Ascend 950DT,仅支持L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer数据通路。 | 150 | - 针对Ascend 950PR/Ascend 950DT,仅支持L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer数据通路。 |
| 151 | <!-- end id10 --> | 151 | <!-- end id10 --> |
| @@ -113,7 +113,7 @@ __aicore__ inline void LoadData(const LocalTensor<U>& dst, const LocalTensor<T>& | |||
| 113 | 113 | ||
| 114 | ## 约束说明<a id="section633mcpsimp"></a> | 114 | ## 约束说明<a id="section633mcpsimp"></a> |
| 115 | 115 | ||
| 116 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 116 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 117 | 117 | ||
| 118 | ## 关键特性说明 | 118 | ## 关键特性说明 |
| 119 | 119 | ||
| @@ -108,7 +108,7 @@ __aicore__ inline void LoadData(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 108 | | 参数名称 | 含义 | | 108 | | 参数名称 | 含义 | |
| 109 | | ---------- | ------ | | 109 | | ---------- | ------ | |
| 110 | | T | 源操作数和目的操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002512171652_section4219135304818)。 | | 110 | | T | 源操作数和目的操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002512171652_section4219135304818)。 | |
| 111 | -| defaultConfig | 控制是否在LoadData(卷积数据搬运) v1/LoadData(卷积数据搬运) v2接口内部设置相关属性。IsResetLoad3dConfig类型。IsResetLoad3dConfig结构定义如下:<pre>struct IsResetLoad3dConfig {<br> bool isSetFMatrix = true;<br> bool isSetPadding = true;<br>};</pre>isSetFMatrix配置为true,表示在接口内部设置FeatureMap的属性描述(包括l1H、l1W、padList,参数介绍参考[表3](#zh-cn_topic_0000002512171652_table679014222918)、[表4](#zh-cn_topic_0000002512171652_table193501032193419));设置为false,表示该接口传入的FeatureMap的属性描述不生效,开发者需要通过SetFmatrix进行设置。<br>isSetPadding配置为true,表示在接口内部设置Pad属性描述(即padValue参数,参数介绍参考[表3](#zh-cn_topic_0000002512171652_table679014222918)、[表4](#zh-cn_topic_0000002512171652_table193501032193419));设置为false,表示该接口传入的Pad属性不生效,开发者需要通过SetLoadDataPaddingValue进行设置。可参考样例SetFmatrix调用示例。<br>该参数的默认值如下:<pre>constexpr IsResetLoad3dConfig IS_RESER_LOAD3D_DEFAULT_CONFIG = {true, true};</pre>特性细节可参考:[Feature Map、Pad属性描述寄存器设置](#zh-cn_topic_0000002512171652_section1881795134015)。 | | 111 | +| defaultConfig | 控制是否在LoadData(卷积数据搬运) v1/LoadData(卷积数据搬运) v2接口内部设置相关属性。IsResetLoad3dConfig类型。IsResetLoad3dConfig结构定义如下:<br>struct IsResetLoad3dConfig {<br> bool isSetFMatrix = true;<br> bool isSetPadding = true;<br>};<br>isSetFMatrix配置为true,表示在接口内部设置FeatureMap的属性描述(包括l1H、l1W、padList,参数介绍参考[表3](#zh-cn_topic_0000002512171652_table679014222918)、[表4](#zh-cn_topic_0000002512171652_table193501032193419));设置为false,表示该接口传入的FeatureMap的属性描述不生效,开发者需要通过SetFmatrix进行设置。<br>isSetPadding配置为true,表示在接口内部设置Pad属性描述(即padValue参数,参数介绍参考[表3](#zh-cn_topic_0000002512171652_table679014222918)、[表4](#zh-cn_topic_0000002512171652_table193501032193419));设置为false,表示该接口传入的Pad属性不生效,开发者需要通过SetLoadDataPaddingValue进行设置。可参考样例SetFmatrix调用示例。<br>该参数的默认值如下:<br>constexpr IsResetLoad3dConfig IS_RESER_LOAD3D_DEFAULT_CONFIG = {true, true};<br>特性细节可参考:[Feature Map、Pad属性描述寄存器设置](#zh-cn_topic_0000002512171652_section1881795134015)。 | |
| 112 | | U | LoadData3DParamsV1/LoadData3DParamsV2中padValue的数据类型。<br> •当dst、src使用基础数据类型时,U和dst、src的数据类型T需保持一致,否则编译失败。<br> •当dst、src使用TensorTrait类型时,U和dst、src的数据类型T的LiteType需保持一致,否则编译失败。<br>最后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 112 | | U | LoadData3DParamsV1/LoadData3DParamsV2中padValue的数据类型。<br> •当dst、src使用基础数据类型时,U和dst、src的数据类型T需保持一致,否则编译失败。<br> •当dst、src使用TensorTrait类型时,U和dst、src的数据类型T的LiteType需保持一致,否则编译失败。<br>最后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 113 | 113 | ||
| 114 | **表2** 通用参数说明 | 114 | **表2** 通用参数说明 |
| @@ -180,8 +180,8 @@ __aicore__ inline void LoadData(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 180 | | filterSizeW | 是否在filterW的基础上将卷积核width增加256个元素。true,增加;false,不增加。 | | 180 | | filterSizeW | 是否在filterW的基础上将卷积核width增加256个元素。true,增加;false,不增加。 | |
| 181 | | filterSizeH | 是否在filterH的基础上将卷积核height增加256个元素。true,增加;false,不增加。 | | 181 | | filterSizeH | 是否在filterH的基础上将卷积核height增加256个元素。true,增加;false,不增加。 | |
| 182 | | fMatrixCtrl | 表示LoadData(卷积数据搬运) v2指令从左矩阵还是右矩阵获取FeatureMap的属性描述,与SetFmatrix配合使用,当前只支持设置为false,默认值为false。<br> • true:从右矩阵中获取FeatureMap的属性描述;<br> • false:从左矩阵中获取FeatureMap的属性描述。 | | 182 | | fMatrixCtrl | 表示LoadData(卷积数据搬运) v2指令从左矩阵还是右矩阵获取FeatureMap的属性描述,与SetFmatrix配合使用,当前只支持设置为false,默认值为false。<br> • true:从右矩阵中获取FeatureMap的属性描述;<br> • false:从左矩阵中获取FeatureMap的属性描述。 | |
| 183 | -| extConfig | 组合参数(uint64_t类型),默认值为0;<br><pre>extConfig = ((uint64_t)mStartPt << 48)<br> | ((uint64_t)kStartPt << 32)<br> | ((uint64_t)mExtension << 16)<br> | (uint64_t)kExtension;</pre> | | 183 | +| extConfig | 组合参数(uint64_t类型),默认值为0;<br>extConfig = ((uint64_t)mStartPt << 48)<br> | ((uint64_t)kStartPt << 32)<br> | ((uint64_t)mExtension << 16)<br> | (uint64_t)kExtension; | |
| 184 | -| filterConfig | 组合参数(uint64_t类型),默认值为0X10101010101;<br><pre>filterConfig = ((uint64_t)dilationFilterH << 40)<br> | ((uint64_t)dilationFilterW << 32)<br> | ((uint64_t)filterH << 24)<br> | ((uint64_t)filterW << 16)<br> | ((uint64_t)strideH << 8)<br> | (uint64_t)strideW;</pre> | | 184 | +| filterConfig | 组合参数(uint64_t类型),默认值为0X10101010101;<br>filterConfig = ((uint64_t)dilationFilterH << 40)<br> | ((uint64_t)dilationFilterW << 32)<br> | ((uint64_t)filterH << 24)<br> | ((uint64_t)filterW << 16)<br> | ((uint64_t)strideH << 8)<br> | (uint64_t)strideW; | |
| 185 | 185 | ||
| 186 | ## 数据类型<a id="zh-cn_topic_0000002512171652_section4219135304818"></a> | 186 | ## 数据类型<a id="zh-cn_topic_0000002512171652_section4219135304818"></a> |
| 187 | 187 | ||
| @@ -124,7 +124,7 @@ __aicore__ inline Load3DBitModeParam(const LoadData3DParamsV2<T> &loadData3DPara | |||
| 124 | 124 | ||
| 125 | ## 约束说明<a id="section633mcpsimp"></a> | 125 | ## 约束说明<a id="section633mcpsimp"></a> |
| 126 | 126 | ||
| 127 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 127 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 128 | 128 | ||
| 129 | ## 调用示例<a id="section6461234123118"></a> | 129 | ## 调用示例<a id="section6461234123118"></a> |
| 130 | 130 | ||
| @@ -105,7 +105,7 @@ __aicore__ inline void LoadData(const LocalTensor<T>& dst, const GlobalTensor<T> | |||
| 105 | 105 | ||
| 106 | ## 约束说明<a id="zh-cn_topic_0000002567745223_section2045914466492"></a> | 106 | ## 约束说明<a id="zh-cn_topic_0000002567745223_section2045914466492"></a> |
| 107 | 107 | ||
| 108 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 108 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 109 | - 本通路搬运过程中不支持转置。 | 109 | - 本通路搬运过程中不支持转置。 |
| 110 | - 目的地址必须32字节对齐。源地址必须1字节对齐,指令执行占用的流水为PIPE_MTE2。 | 110 | - 目的地址必须32字节对齐。源地址必须1字节对齐,指令执行占用的流水为PIPE_MTE2。 |
| 111 | - 当srcStride=0时,表示连续的repeat之间读取的源操作数中的同一块数据分形。 | 111 | - 当srcStride=0时,表示连续的repeat之间读取的源操作数中的同一块数据分形。 |
| @@ -97,7 +97,7 @@ LoadData2DParamsV2结构体在不启用转置时,示意图如下,参数设 | |||
| 97 | 97 | ||
| 98 | ## 约束说明<a id="section633mcpsimp"></a> | 98 | ## 约束说明<a id="section633mcpsimp"></a> |
| 99 | 99 | ||
| 100 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 100 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 101 | - 本通路场景下不支持转置。 | 101 | - 本通路场景下不支持转置。 |
| 102 | 102 | ||
| 103 | ## 调用示例<a id="section6461234123118"></a> | 103 | ## 调用示例<a id="section6461234123118"></a> |
| @@ -92,7 +92,7 @@ DataCopy矩阵搬出接口支持多种随路能力的组合,需要设置不同 | |||
| 92 | | unitFlag | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag。<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位。<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 92 | | unitFlag | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag。<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位。<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 93 | | clipReluPre | <!-- npu="950,A3,910b" id13 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id13 --><!-- npu="310b" id14 -->用于配置是否开启ClipReLU操作,参数类型为uint8_t,取值如下:0,不开启ClipReLU;1,开启ClipReLU,此时需要调用[SetFixPipeClipRelu](../cube_store_aux_config/SetFixPipeClipRelu.md)来设置ClipReLU的最大值。<br> • 该操作在随路量化后进行,quantPre配置后才能使用,当前支持的量化模式有F322F16/DEQF16/VDEQF16/QF322B8_PRE/VQF322B8_PRE/REQ8/VREQ8。<br><!-- end id14 --> | | 93 | | clipReluPre | <!-- npu="950,A3,910b" id13 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id13 --><!-- npu="310b" id14 -->用于配置是否开启ClipReLU操作,参数类型为uint8_t,取值如下:0,不开启ClipReLU;1,开启ClipReLU,此时需要调用[SetFixPipeClipRelu](../cube_store_aux_config/SetFixPipeClipRelu.md)来设置ClipReLU的最大值。<br> • 该操作在随路量化后进行,quantPre配置后才能使用,当前支持的量化模式有F322F16/DEQF16/VDEQF16/QF322B8_PRE/VQF322B8_PRE/REQ8/VREQ8。<br><!-- end id14 --> | |
| 94 | | eltWiseOp | <!-- npu="950,A3,910b" id15 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id15 --><!-- npu="310b" id16 -->用于配置是否开启Elementwise操作及操作模式。Elementwise操作是指进行随路量化后,可以逐个元素加/减一个LocalTensor,大小为mSize * nSize,具体LocalTensor地址相关参数需要调用[SetFixPipeAddr](../cube_store_aux_config/SetFixPipeAddr.md)来设置。<br>eltWiseOp参数类型为uint8_t,取值如下:<br> • 0:不开启Elementwise;<br> • 1:Elementwise Addition;<br> • 2:Elementwise Subtraction。<br><!-- end id16 --> | | 94 | | eltWiseOp | <!-- npu="950,A3,910b" id15 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id15 --><!-- npu="310b" id16 -->用于配置是否开启Elementwise操作及操作模式。Elementwise操作是指进行随路量化后,可以逐个元素加/减一个LocalTensor,大小为mSize * nSize,具体LocalTensor地址相关参数需要调用[SetFixPipeAddr](../cube_store_aux_config/SetFixPipeAddr.md)来设置。<br>eltWiseOp参数类型为uint8_t,取值如下:<br> • 0:不开启Elementwise;<br> • 1:Elementwise Addition;<br> • 2:Elementwise Subtraction。<br><!-- end id16 --> | |
| 95 | -| quantPre | 用于控制量化模式,QuantMode_t类型,具体定义如下:<br> • float/int32_t输出此需配置为QuantMode_t::NoQuant。<br> • half/bfloat16_t输出,此参数需配置为QuantMode_t::F322F16/QuantMode_t::F322BF16。<br> • 配置为scalar量化时,需要调用[SetFixpipePreQuantFlag](../cube_store_aux_config/SetFixpipePreQuantFlag.md)接口来设置scalar量化参数。<br> • 配置为tensor量化时,需要调用[SetFixPipeConfig](../cube_store_aux_config/SetFixPipeConfig.md)来设置tensor量化参数,其中tensor量化参数需要通过DataCopy从L1 Buffer搬运至Fixpipe Buffer。<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>};</pre> | | 95 | +| quantPre | 用于控制量化模式,QuantMode_t类型,具体定义如下:<br> • float/int32_t输出此需配置为QuantMode_t::NoQuant。<br> • half/bfloat16_t输出,此参数需配置为QuantMode_t::F322F16/QuantMode_t::F322BF16。<br> • 配置为scalar量化时,需要调用[SetFixpipePreQuantFlag](../cube_store_aux_config/SetFixpipePreQuantFlag.md)接口来设置scalar量化参数。<br> • 配置为tensor量化时,需要调用[SetFixPipeConfig](../cube_store_aux_config/SetFixPipeConfig.md)来设置tensor量化参数,其中tensor量化参数需要通过DataCopy从L1 Buffer搬运至Fixpipe Buffer。<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>}; | |
| 96 | | reluPre | 用于配置ReLU操作的模式,类型为uint8_t,取值如下:<br> • 0:不开启ReLU;<br> • 1:Normal ReLU。 | | 96 | | reluPre | 用于配置ReLU操作的模式,类型为uint8_t,取值如下:<br> • 0:不开启ReLU;<br> • 1:Normal ReLU。 | |
| 97 | | channelSplit | 类型为bool,配置是否开启通道切分功能,仅在NZ格式float类型输出时生效。<br> • false:不开启;<br> • true:开启。 | | 97 | | channelSplit | 类型为bool,配置是否开启通道切分功能,仅在NZ格式float类型输出时生效。<br> • false:不开启;<br> • true:开启。 | |
| 98 | | nz2ndEn | 类型为bool,配置是否开启NZ2ND的格式转换。<br>如果要开启NZ2ND的功能需要同步调用[SetFixpipeNz2ndFlag](../cube_store_aux_config/SetFixpipeNz2ndFlag.md)来设置格式转换的相关配置信息。<br> • false:不开启;<br> • true:开启。 | | 98 | | nz2ndEn | 类型为bool,配置是否开启NZ2ND的格式转换。<br>如果要开启NZ2ND的功能需要同步调用[SetFixpipeNz2ndFlag](../cube_store_aux_config/SetFixpipeNz2ndFlag.md)来设置格式转换的相关配置信息。<br> • false:不开启;<br> • true:开启。 | |
| @@ -100,7 +100,7 @@ DataCopy矩阵搬出接口支持多种随路能力的组合,需要设置不同 | |||
| 100 | | unitFlag | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag。<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位。<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 100 | | unitFlag | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag。<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位。<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 101 | | clipReluPre | <!-- npu="950,A3,910b" id13 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id13 --><!-- npu="310b" id14 -->用于配置是否开启ClipReLU操作,参数类型为uint8_t,取值如下:0,不开启ClipReLU;1,开启ClipReLU,此时需要调用[SetFixPipeClipRelu](../cube_store_aux_config/SetFixPipeClipRelu.md)来设置ClipReLU的最大值。<br> •该操作在随路量化后进行,quantPre配置后才能使用,当前支持的量化模式有F322F16/DEQF16/VDEQF16/QF322B8_PRE/VQF322B8_PRE/REQ8/VREQ8。<br><!-- end id14 --> | | 101 | | clipReluPre | <!-- npu="950,A3,910b" id13 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id13 --><!-- npu="310b" id14 -->用于配置是否开启ClipReLU操作,参数类型为uint8_t,取值如下:0,不开启ClipReLU;1,开启ClipReLU,此时需要调用[SetFixPipeClipRelu](../cube_store_aux_config/SetFixPipeClipRelu.md)来设置ClipReLU的最大值。<br> •该操作在随路量化后进行,quantPre配置后才能使用,当前支持的量化模式有F322F16/DEQF16/VDEQF16/QF322B8_PRE/VQF322B8_PRE/REQ8/VREQ8。<br><!-- end id14 --> | |
| 102 | | eltWiseOp | <!-- npu="950,A3,910b" id15 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id15 --><!-- npu="310b" id16 -->用于配置是否开启Elementwise操作及操作模式。Elementwise操作是指进行随路量化后,可以逐个元素加/减一个LocalTensor,大小为mSize * nSize,具体LocalTensor地址相关参数需要调用[SetFixPipeAddr](../cube_store_aux_config/SetFixPipeAddr.md)来设置。<br>eltWiseOp参数类型为uint8_t,取值如下:<br> • 0:不开启Elementwise;<br> • 1:Elementwise Addition;<br> • 2:Elementwise Subtraction。<br><!-- end id16 --> | | 102 | | eltWiseOp | <!-- npu="950,A3,910b" id15 -->该参数仅在Atlas 200I/500 A2 推理产品支持。<br><!-- end id15 --><!-- npu="310b" id16 -->用于配置是否开启Elementwise操作及操作模式。Elementwise操作是指进行随路量化后,可以逐个元素加/减一个LocalTensor,大小为mSize * nSize,具体LocalTensor地址相关参数需要调用[SetFixPipeAddr](../cube_store_aux_config/SetFixPipeAddr.md)来设置。<br>eltWiseOp参数类型为uint8_t,取值如下:<br> • 0:不开启Elementwise;<br> • 1:Elementwise Addition;<br> • 2:Elementwise Subtraction。<br><!-- end id16 --> | |
| 103 | -| quantPre | 用于控制量化模式,QuantMode_t类型,具体定义如下:<br> • half/bfloat16_t输出,此参数需配置为QuantMode_t::F322F16/QuantMode_t::F322BF16。<br> •配置为scalar量化时,需要调用[SetFixpipePreQuantFlag](../cube_store_aux_config/SetFixpipePreQuantFlag.md)接口来设置scalar量化参数。<br> •配置为tensor量化时,需要调用[SetFixPipeConfig](../cube_store_aux_config/SetFixPipeConfig.md)来设置tensor量化参数,其中tensor量化参数需要通过DataCopy从L1 Buffer搬运至Fixpipe Buffer。<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。此通路不支持NoQuant模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能,此通路不支持<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>};</pre> | | 103 | +| quantPre | 用于控制量化模式,QuantMode_t类型,具体定义如下:<br> • half/bfloat16_t输出,此参数需配置为QuantMode_t::F322F16/QuantMode_t::F322BF16。<br> •配置为scalar量化时,需要调用[SetFixpipePreQuantFlag](../cube_store_aux_config/SetFixpipePreQuantFlag.md)接口来设置scalar量化参数。<br> •配置为tensor量化时,需要调用[SetFixPipeConfig](../cube_store_aux_config/SetFixPipeConfig.md)来设置tensor量化参数,其中tensor量化参数需要通过DataCopy从L1 Buffer搬运至Fixpipe Buffer。<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。此通路不支持NoQuant模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能,此通路不支持<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>}; | |
| 104 | | reluPre | 用于配置ReLU操作的模式,类型为uint8_t,取值如下:<br> • 0:不开启ReLU<br> • 1:Normal ReLU | | 104 | | reluPre | 用于配置ReLU操作的模式,类型为uint8_t,取值如下:<br> • 0:不开启ReLU<br> • 1:Normal ReLU | |
| 105 | | channelSplit | <!-- npu="950" id27 -->**该参数仅在Ascend 950PR/Ascend 950DT上生效**,仅在NZ格式float类型输出时生效,类型为bool,配置是否开启通道切分功能。<br> • false:不开启;<br> • true:开启。<br><!-- end id27 --><!-- npu="A3,910b,310b" id29 -->针对如下产品型号,此通路上该参数不生效,设置为false即可。<br><!-- npu="A3" id30 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id30 --><!-- npu="910b" id31 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<br><!-- end id31 --><!-- npu="310b" id32 -->Atlas 200I/500 A2 推理产品<!-- end id32 --><!-- end id29 --> | | 105 | | channelSplit | <!-- npu="950" id27 -->**该参数仅在Ascend 950PR/Ascend 950DT上生效**,仅在NZ格式float类型输出时生效,类型为bool,配置是否开启通道切分功能。<br> • false:不开启;<br> • true:开启。<br><!-- end id27 --><!-- npu="A3,910b,310b" id29 -->针对如下产品型号,此通路上该参数不生效,设置为false即可。<br><!-- npu="A3" id30 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id30 --><!-- npu="910b" id31 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<br><!-- end id31 --><!-- npu="310b" id32 -->Atlas 200I/500 A2 推理产品<!-- end id32 --><!-- end id29 --> | |
| 106 | | nz2ndEn | <!-- npu="950" id28 -->**该参数仅在Ascend 950PR/Ascend 950DT上生效**,类型为bool,配置是否开启NZ2ND的格式转换。<br>如果要开启NZ2ND的功能需要同步调用[SetFixpipeNz2ndFlag](../cube_store_aux_config/SetFixpipeNz2ndFlag.md)来设置格式转换的相关配置信息。<br> • false:不开启;<br> • true:开启。<br><!-- end id28 --><!-- npu="A3,910b,310b" id33 -->针对如下产品型号,此通路上该参数不生效,设置为false即可。<br><!-- npu="A3" id34 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id34 --><!-- npu="910b" id35 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<br><!-- end id35 --><!-- npu="310b" id36 -->Atlas 200I/500 A2 推理产品<!-- end id36 --><!-- end id33 --> | | 106 | | nz2ndEn | <!-- npu="950" id28 -->**该参数仅在Ascend 950PR/Ascend 950DT上生效**,类型为bool,配置是否开启NZ2ND的格式转换。<br>如果要开启NZ2ND的功能需要同步调用[SetFixpipeNz2ndFlag](../cube_store_aux_config/SetFixpipeNz2ndFlag.md)来设置格式转换的相关配置信息。<br> • false:不开启;<br> • true:开启。<br><!-- end id28 --><!-- npu="A3,910b,310b" id33 -->针对如下产品型号,此通路上该参数不生效,设置为false即可。<br><!-- npu="A3" id34 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id34 --><!-- npu="910b" id35 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<br><!-- end id35 --><!-- npu="310b" id36 -->Atlas 200I/500 A2 推理产品<!-- end id36 --><!-- end id33 --> | |
| @@ -112,7 +112,7 @@ | |||
| 112 | | 参数名 | 描述 | | 112 | | 参数名 | 描述 | |
| 113 | | ---------- | ---------- | | 113 | | ---------- | ---------- | |
| 114 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002542828493_section4219135304818)。 | | 114 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002542828493_section4219135304818)。 | |
| 115 | -| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br><!-- npu="950" id14 --> • CFG_COLUMN_MAJOR:针对Ascend 950PR/Ascend 950DT,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id14 --><pre>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --></pre> | | 115 | +| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br><!-- npu="950" id14 --> • CFG_COLUMN_MAJOR:针对Ascend 950PR/Ascend 950DT,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id14 --><br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --> | |
| 116 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> • 当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> • 当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 116 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> • 当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> • 当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 117 | 117 | ||
| 118 | **表2** Fixpipe参数说明 | 118 | **表2** Fixpipe参数说明 |
| @@ -132,11 +132,11 @@ | |||
| 132 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小,取值范围为mSize∈[0, 65535]。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | | 132 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小,取值范围为mSize∈[0, 65535]。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | |
| 133 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | | 133 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | |
| 134 | | dstStride | 必选输入 | • 不开启NZ2ND/NZ2DN功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为element。(与Fixpipe搬运参数(FixpipeParamsV220)中的dstStride相比,二者的单位发生了变化,FixpipeParamsV220中dstStride的单位为datablock(32字节),而FixpipeParamsArch3510中dstStride的单位为element。)<br> • 开启[NZ2ND](../cube_store_key_features/NZ2ND.md)/[NZ2DN](../cube_store_key_features/NZ2DN.md)功能:目的ND/DN矩阵每一行中的元素个数,取值不为0,单位为element。 | | 134 | | dstStride | 必选输入 | • 不开启NZ2ND/NZ2DN功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为element。(与Fixpipe搬运参数(FixpipeParamsV220)中的dstStride相比,二者的单位发生了变化,FixpipeParamsV220中dstStride的单位为datablock(32字节),而FixpipeParamsArch3510中dstStride的单位为element。)<br> • 开启[NZ2ND](../cube_store_key_features/NZ2ND.md)/[NZ2DN](../cube_store_key_features/NZ2DN.md)功能:目的ND/DN矩阵每一行中的元素个数,取值不为0,单位为element。 | |
| 135 | -| [quantPre](../cube_store_key_features/accompanying_quantization.md) | 可选输入 |用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16: float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16 :float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16: int32_t量化成half, scalar量化<br> VDEQF16, // Vector_DeQuant_Float16: int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8: float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8: float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8: int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8: int32_t量化成int8_t/uint8_t,tensor量化<br> QF322FP8_PRE, // Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,scalar量化<br> VQF322FP8_PRE, // Vector_Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,tensor量化<br> QF322HIF8_PRE, // Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),scalar量化<br> VQF322HIF8_PRE, // Vector_Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),tensor量化<br> QF322HIF8_PRE_HYBRID, // Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),scalar量化<br> VQF322HIF8_PRE_HYBRID, // Vector_Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),tensor量化<br> QS322BF16_PRE, // Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,scalar量化<br> VQS322BF16_PRE, // Vector_Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,tensor量化<br> QF322F16_PRE, // Quant_Float32_2_Float16: float量化成half,scalar量化<br> VQF322F16_PRE, // Vector_Quant_Float32_2_Float16: float量化成half,tensor量化<br> QF322BF16_PRE, // Quant_Float32_2_BFloat16: float量化成bfloat16_t,scalar量化<br> VQF322BF16_PRE, // Vector_Quant_Float32_2_BFloat16: float量化成bfloat16_t,tensor量化<br> QF322F32_PRE, // Quant_Float32_2_Float32: float量化成float,scalar量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br> VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,tensor量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br>};</pre> | | 135 | +| [quantPre](../cube_store_key_features/accompanying_quantization.md) | 可选输入 |用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16: float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16 :float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16: int32_t量化成half, scalar量化<br> VDEQF16, // Vector_DeQuant_Float16: int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8: float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8: float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8: int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8: int32_t量化成int8_t/uint8_t,tensor量化<br> QF322FP8_PRE, // Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,scalar量化<br> VQF322FP8_PRE, // Vector_Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,tensor量化<br> QF322HIF8_PRE, // Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),scalar量化<br> VQF322HIF8_PRE, // Vector_Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),tensor量化<br> QF322HIF8_PRE_HYBRID, // Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),scalar量化<br> VQF322HIF8_PRE_HYBRID, // Vector_Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),tensor量化<br> QS322BF16_PRE, // Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,scalar量化<br> VQS322BF16_PRE, // Vector_Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,tensor量化<br> QF322F16_PRE, // Quant_Float32_2_Float16: float量化成half,scalar量化<br> VQF322F16_PRE, // Vector_Quant_Float32_2_Float16: float量化成half,tensor量化<br> QF322BF16_PRE, // Quant_Float32_2_BFloat16: float量化成bfloat16_t,scalar量化<br> VQF322BF16_PRE, // Vector_Quant_Float32_2_BFloat16: float量化成bfloat16_t,tensor量化<br> QF322F32_PRE, // Quant_Float32_2_Float32: float量化成float,scalar量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br> VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,tensor量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br>}; | |
| 136 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | | 136 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | |
| 137 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | | 137 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 138 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 138 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 139 | -| params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br><pre>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};</pre><br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br><pre>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};</pre> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br><pre>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};</pre> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | | 139 | +| params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | |
| 140 | | dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 140 | | dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | |
| 141 | | subBlockId | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 141 | | subBlockId | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | |
| 142 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 是否开启通道拆分的功能。默认为false,不开启该功能。仅在src和dst都为float时才能开启通道拆分,且不能同时开启ChannelSplit和NZ2ND/NZ2DN功能。 | | 142 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 是否开启通道拆分的功能。默认为false,不开启该功能。仅在src和dst都为float时才能开启通道拆分,且不能同时开启ChannelSplit和NZ2ND/NZ2DN功能。 | |
| @@ -149,7 +149,7 @@ | |||
| 149 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小。<br> •不开启随路NZ2ND功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)),取值范围为mSize∈[0, 65535]。<br> •开启随路[NZ2ND](../cube_store_key_features/NZ2ND.md)功能,取值范围为mSize∈[0, 8192]。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | | 149 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小。<br> •不开启随路NZ2ND功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)),取值范围为mSize∈[0, 65535]。<br> •开启随路[NZ2ND](../cube_store_key_features/NZ2ND.md)功能,取值范围为mSize∈[0, 8192]。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | |
| 150 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | | 150 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | |
| 151 | | dstStride | 必选输入 | • 不开启NZ2ND功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为datablock(32字节)。<br> • 开启随路[NZ2ND](../cube_store_key_features/NZ2ND.md)功能:目的ND矩阵每一行中的元素个数,取值不为0,单位为element。 | | 151 | | dstStride | 必选输入 | • 不开启NZ2ND功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为datablock(32字节)。<br> • 开启随路[NZ2ND](../cube_store_key_features/NZ2ND.md)功能:目的ND矩阵每一行中的元素个数,取值不为0,单位为element。 | |
| 152 | -| [quantPre](../../cube_compute_TensorAPI/cube_store_key_features/quant_pre.md) | 可选输入 | 用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br> • float/int32_t输出此需配置为`QuantMode_t::NoQuant`;<br> • half/bfloat16_t输出,此参数需配置为`QuantMode_t::F322F16`/`QuantMode_t::F322BF16`;<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>};</pre> | | 152 | +| [quantPre](../../cube_compute_TensorAPI/cube_store_key_features/quant_pre.md) | 可选输入 | 用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br> • float/int32_t输出此需配置为`QuantMode_t::NoQuant`;<br> • half/bfloat16_t输出,此参数需配置为`QuantMode_t::F322F16`/`QuantMode_t::F322BF16`;<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>}; | |
| 153 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | | 153 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | |
| 154 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能,默认为`false`;<br> • `true`:开启NormReLU功能。 | | 154 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能,默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 155 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 155 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| @@ -96,7 +96,7 @@ | |||
| 96 | | 参数名 | 描述 | | 96 | | 参数名 | 描述 | |
| 97 | | ---------- | ---------- | | 97 | | ---------- | ---------- | |
| 98 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002511188540_section4219135304818)。 | | 98 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002511188540_section4219135304818)。 | |
| 99 | -| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<!-- npu="A3,910b" id17 -->针对<!-- npu="A3" id18 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品,<!-- end id18 --><!-- npu="910b" id19 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品,<!-- end id19 -->在L0C Buffer -> L1 Buffer通路下不生效。<!-- end id17 --><br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br><!-- npu="950" id14 --> • CFG_COLUMN_MAJOR:针对Ascend 950PR/Ascend 950DT,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id14 --><pre>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --></pre> | | 99 | +| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<!-- npu="A3,910b" id17 -->针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,Atlas A2 训练系列产品/Atlas A2 推理系列产品,在L0C Buffer -> L1 Buffer通路下不生效。<!-- end id17 --><br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br> • CFG_COLUMN_MAJOR:开启NZ2DN,输出数据格式为DN格式。仅支持Ascend 950PR/Ascend 950DT,不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品。<br><br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br> COLUMN_MAJOR, // 开启NZ2DN,输出数据格式为DN格式。<br>};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; | |
| 100 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> •当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> •当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 100 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> •当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> •当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 101 | 101 | ||
| 102 | **表2** Fixpipe参数说明 | 102 | **表2** Fixpipe参数说明 |
| @@ -116,11 +116,11 @@ | |||
| 116 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小,取值范围为mSize∈[0, 65535]。若开启NZ2DN,mSize*sizeof(T)必须为32的倍数。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | | 116 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小,取值范围为mSize∈[0, 65535]。若开启NZ2DN,mSize*sizeof(T)必须为32的倍数。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | |
| 117 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | | 117 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | |
| 118 | | dstStride | 必选输入 | • 不开启NZ2ND/NZ2DN功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为element。(与Fixpipe搬运参数(FixpipeParamsV220)中的dstStride相比,二者的单位发生了变化,FixpipeParamsV220中dstStride的单位为datablock(32字节),而FixpipeParamsArch3510中dstStride的单位为element。)<br>• 开启[NZ2ND](../cube_store_key_features/NZ2ND.md)/[NZ2DN](../cube_store_key_features/NZ2DN.md)功能:目的ND/DN矩阵每一行中的元素个数,取值不为0,单位为element。 | | 118 | | dstStride | 必选输入 | • 不开启NZ2ND/NZ2DN功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为element。(与Fixpipe搬运参数(FixpipeParamsV220)中的dstStride相比,二者的单位发生了变化,FixpipeParamsV220中dstStride的单位为datablock(32字节),而FixpipeParamsArch3510中dstStride的单位为element。)<br>• 开启[NZ2ND](../cube_store_key_features/NZ2ND.md)/[NZ2DN](../cube_store_key_features/NZ2DN.md)功能:目的ND/DN矩阵每一行中的元素个数,取值不为0,单位为element。 | |
| 119 | -| [quantPre](../cube_store_key_features/accompanying_quantization.md) | 可选输入 |用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16: float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16 :float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16: int32_t量化成half, scalar量化<br> VDEQF16, // Vector_DeQuant_Float16: int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8: float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8: float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8: int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8: int32_t量化成int8_t/uint8_t,tensor量化<br> QF322FP8_PRE, // Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,scalar量化<br> VQF322FP8_PRE, // Vector_Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,tensor量化<br> QF322HIF8_PRE, // Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),scalar量化<br> VQF322HIF8_PRE, // Vector_Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),tensor量化<br> QF322HIF8_PRE_HYBRID, // Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),scalar量化<br> VQF322HIF8_PRE_HYBRID, // Vector_Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),tensor量化<br> QS322BF16_PRE, // Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,scalar量化<br> VQS322BF16_PRE, // Vector_Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,tensor量化<br> QF322F16_PRE, // Quant_Float32_2_Float16: float量化成half,scalar量化<br> VQF322F16_PRE, // Vector_Quant_Float32_2_Float16: float量化成half,tensor量化<br> QF322BF16_PRE, // Quant_Float32_2_BFloat16: float量化成bfloat16_t,scalar量化<br> VQF322BF16_PRE, // Vector_Quant_Float32_2_BFloat16: float量化成bfloat16_t,tensor量化<br> QF322F32_PRE, // Quant_Float32_2_Float32: float量化成float,scalar量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br> VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,tensor量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br>};</pre> | | 119 | +| [quantPre](../cube_store_key_features/accompanying_quantization.md) | 可选输入 |用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16: float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16 :float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16: int32_t量化成half, scalar量化<br> VDEQF16, // Vector_DeQuant_Float16: int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8: float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8: float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8: int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8: int32_t量化成int8_t/uint8_t,tensor量化<br> QF322FP8_PRE, // Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,scalar量化<br> VQF322FP8_PRE, // Vector_Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,tensor量化<br> QF322HIF8_PRE, // Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),scalar量化<br> VQF322HIF8_PRE, // Vector_Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),tensor量化<br> QF322HIF8_PRE_HYBRID, // Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),scalar量化<br> VQF322HIF8_PRE_HYBRID, // Vector_Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),tensor量化<br> QS322BF16_PRE, // Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,scalar量化<br> VQS322BF16_PRE, // Vector_Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,tensor量化<br> QF322F16_PRE, // Quant_Float32_2_Float16: float量化成half,scalar量化<br> VQF322F16_PRE, // Vector_Quant_Float32_2_Float16: float量化成half,tensor量化<br> QF322BF16_PRE, // Quant_Float32_2_BFloat16: float量化成bfloat16_t,scalar量化<br> VQF322BF16_PRE, // Vector_Quant_Float32_2_BFloat16: float量化成bfloat16_t,tensor量化<br> QF322F32_PRE, // Quant_Float32_2_Float32: float量化成float,scalar量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br> VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,tensor量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br>}; | |
| 120 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | | 120 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | |
| 121 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | | 121 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 122 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 122 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 123 | -| params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br><pre>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};</pre><br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br><pre>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};</pre> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br><pre>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};</pre> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | | 123 | +| params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | |
| 124 | | dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 124 | | dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | |
| 125 | | subBlockId | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 125 | | subBlockId | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | |
| 126 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 此参数仅在L0C Buffer到Global Memory通路下有效。 | | 126 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 此参数仅在L0C Buffer到Global Memory通路下有效。 | |
| @@ -133,7 +133,7 @@ | |||
| 133 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小。取值范围为mSize∈[0, 65535]。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | | 133 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小。取值范围为mSize∈[0, 65535]。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | |
| 134 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | | 134 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | |
| 135 | | dstStride | 必选输入 | 目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为datablock(32字节)。 | | 135 | | dstStride | 必选输入 | 目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为datablock(32字节)。 | |
| 136 | -| [quantPre](../../cube_compute_TensorAPI/cube_store_key_features/quant_pre.md) | 可选输入 | 用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br> • half/bfloat16_t输出,此参数需配置为`QuantMode_t::F322F16`/`QuantMode_t::F322BF16`。<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。此通路不支持NoQuant模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能,此通路不支持<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>};</pre> | | 136 | +| [quantPre](../../cube_compute_TensorAPI/cube_store_key_features/quant_pre.md) | 可选输入 | 用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br> • half/bfloat16_t输出,此参数需配置为`QuantMode_t::F322F16`/`QuantMode_t::F322BF16`。<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。此通路不支持NoQuant模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能,此通路不支持<br> F322F16, // Float32_2_Float16:float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16:float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16:int32_t量化成half,scalar量化<br> VDEQF16, // Vector_DeQuant_Float16:int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8:float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8:float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8:int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8:int32_t量化成int8_t/uint8_t,tensor量化<br>}; | |
| 137 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | | 137 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | |
| 138 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能,默认为`false`;<br> • `true`:开启NormReLU功能。 | | 138 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能,默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 139 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 139 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| @@ -95,7 +95,7 @@ L0C Buffer到UB数据搬运提供矩阵搬出的组合接口Fixpipe,接口内 | |||
| 95 | | 参数名 | 描述 | | 95 | | 参数名 | 描述 | |
| 96 | | ---------- | ---------- | | 96 | | ---------- | ---------- | |
| 97 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002549846732_section4219135304818)。 | | 97 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002549846732_section4219135304818)。 | |
| 98 | -| config | Fixpipe相关配置参数,类型为FixpipeConfig,需要显式构造`isToUB = true`的配置,表示目的物理地址为UB,构造示例如下:<br>开启NZ2ND,输出数据格式为ND格式:<pre>constexpr AscendC::FixpipeConfig CFG_ROW_MAJOR_UB = {AscendC::CO2Layout::ROW_MAJOR, true};</pre>NZ2NZ,输出数据格式为NZ格式:<pre>constexpr AscendC::FixpipeConfig CFG_NZ_UB = {AscendC::CO2Layout::NZ, true};</pre>开启NZ2DN,输出数据格式为DN格式:<pre>constexpr AscendC::FixpipeConfig CFG_COLUMN_MAJOR_UB = {AscendC::CO2Layout::COLUMN_MAJOR, true};</pre>FixpipeConfig结构体定义如下:<br><pre>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --></pre> | | 98 | +| config | Fixpipe相关配置参数,类型为FixpipeConfig,需要显式构造`isToUB = true`的配置,表示目的物理地址为UB,构造示例如下:<br>开启NZ2ND,输出数据格式为ND格式:<br>constexpr AscendC::FixpipeConfig CFG_ROW_MAJOR_UB = {AscendC::CO2Layout::ROW_MAJOR, true};<br>NZ2NZ,输出数据格式为NZ格式:<br>constexpr AscendC::FixpipeConfig CFG_NZ_UB = {AscendC::CO2Layout::NZ, true};<br>开启NZ2DN,输出数据格式为DN格式:<br>constexpr AscendC::FixpipeConfig CFG_COLUMN_MAJOR_UB = {AscendC::CO2Layout::COLUMN_MAJOR, true};<br>FixpipeConfig结构体定义如下:<br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --> | |
| 99 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> •当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> •当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 99 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> •当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> •当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 100 | 100 | ||
| 101 | **表2** Fixpipe参数说明 | 101 | **表2** Fixpipe参数说明 |
| @@ -115,11 +115,11 @@ L0C Buffer到UB数据搬运提供矩阵搬出的组合接口Fixpipe,接口内 | |||
| 115 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小,取值范围为mSize∈[0, 65535]。若开启NZ2DN,mSize*sizeof(T)必须为32的倍数。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | | 115 | | mSize | 必选输入 | 源NZ矩阵在M方向上的大小,取值范围为mSize∈[0, 65535]。若开启NZ2DN,mSize*sizeof(T)必须为32的倍数。<br>**注:mSize=0表示不执行搬运,该接口将被视为NOP(空操作)。** | |
| 116 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | | 116 | | srcStride | 必选输入 | 源NZ矩阵中相邻Z排布的起始地址偏移,取值范围为srcStride∈[0, 65535],单位为C0_Size(16*sizeof(T)),T为src的数据类型,其值应填成mSize对16向上取整。 | |
| 117 | | dstStride | 必选输入 | • 不开启NZ2ND/NZ2DN功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为element。(与Fixpipe搬运参数(FixpipeParamsV220)中的dstStride相比,二者的单位发生了变化,FixpipeParamsV220中dstStride的单位为datablock(32字节),而FixpipeParamsArch3510中dstStride的单位为element。)<br>• 开启[NZ2ND](../cube_store_key_features/NZ2ND.md)/[NZ2DN](../cube_store_key_features/NZ2DN.md)功能:目的ND/DN矩阵每一行中的元素个数,取值不为0,单位为element。 | | 117 | | dstStride | 必选输入 | • 不开启NZ2ND/NZ2DN功能([NZ2NZ搬运](../cube_store_key_features/NZ2NZ.md)):目的NZ矩阵中相邻Z排布的起始地址偏移,取值不为0,单位为element。(与Fixpipe搬运参数(FixpipeParamsV220)中的dstStride相比,二者的单位发生了变化,FixpipeParamsV220中dstStride的单位为datablock(32字节),而FixpipeParamsArch3510中dstStride的单位为element。)<br>• 开启[NZ2ND](../cube_store_key_features/NZ2ND.md)/[NZ2DN](../cube_store_key_features/NZ2DN.md)功能:目的ND/DN矩阵每一行中的元素个数,取值不为0,单位为element。 | |
| 118 | -| [quantPre](../cube_store_key_features/accompanying_quantization.md) | 可选输入 |用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br><pre>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16: float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16 :float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16: int32_t量化成half, scalar量化<br> VDEQF16, // Vector_DeQuant_Float16: int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8: float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8: float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8: int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8: int32_t量化成int8_t/uint8_t,tensor量化<br> QF322FP8_PRE, // Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,scalar量化<br> VQF322FP8_PRE, // Vector_Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,tensor量化<br> QF322HIF8_PRE, // Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),scalar量化<br> VQF322HIF8_PRE, // Vector_Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),tensor量化<br> QF322HIF8_PRE_HYBRID, // Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),scalar量化<br> VQF322HIF8_PRE_HYBRID, // Vector_Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),tensor量化<br> QS322BF16_PRE, // Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,scalar量化<br> VQS322BF16_PRE, // Vector_Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,tensor量化<br> QF322F16_PRE, // Quant_Float32_2_Float16: float量化成half,scalar量化<br> VQF322F16_PRE, // Vector_Quant_Float32_2_Float16: float量化成half,tensor量化<br> QF322BF16_PRE, // Quant_Float32_2_BFloat16: float量化成bfloat16_t,scalar量化<br> VQF322BF16_PRE, // Vector_Quant_Float32_2_BFloat16: float量化成bfloat16_t,tensor量化<br> QF322F32_PRE, // Quant_Float32_2_Float32: float量化成float,scalar量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br> VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,tensor量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br>};</pre> | | 118 | +| [quantPre](../cube_store_key_features/accompanying_quantization.md) | 可选输入 |用于控制量化模式,QuantMode_t类型,默认值为`QuantMode_t::NoQuant`,具体定义如下:<br>注:此参数需要用户手动配置,不会自动推导配置对应量化模式。<br>enum QuantMode_t<br>{<br> NoQuant, // 不开启量化功能<br> F322F16, // Float32_2_Float16: float cast成half,cast mode为CAST_RINT模式<br> F322BF16, // Float32_2_BFloat16 :float cast成bfloat16_t,cast mode为CAST_RINT模式<br> DEQF16, // DeQuant_Float16: int32_t量化成half, scalar量化<br> VDEQF16, // Vector_DeQuant_Float16: int32_t量化成half,tensor量化<br> QF322B8_PRE, // Quant_Float32_2_B8: float量化成int8_t/uint8_t,scalar量化<br> VQF322B8_PRE, // Vector_Quant_Float32_2_B8: float量化成int8_t/uint8_t,tensor量化<br> REQ8, // ReQuant_int8: int32_t量化成int8_t/uint8_t,scalar量化<br> VREQ8, // Vector_ReQuant_int8: int32_t量化成int8_t/uint8_t,tensor量化<br> QF322FP8_PRE, // Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,scalar量化<br> VQF322FP8_PRE, // Vector_Quant_Float32_2_FP8: float量化成fp8_e4m3fn_t,tensor量化<br> QF322HIF8_PRE, // Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),scalar量化<br> VQF322HIF8_PRE, // Vector_Quant_Float32_2_HIF8: float量化成hifloat8_t(Half to Away Round),tensor量化<br> QF322HIF8_PRE_HYBRID, // Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),scalar量化<br> VQF322HIF8_PRE_HYBRID, // Vector_Quant_Float32_2_HIF8_Hybrid: float量化成hifloat8_t(Hybrid Round),tensor量化<br> QS322BF16_PRE, // Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,scalar量化<br> VQS322BF16_PRE, // Vector_Quant_Int32_2_BFloat16: int32_t量化成bfloat16_t,tensor量化<br> QF322F16_PRE, // Quant_Float32_2_Float16: float量化成half,scalar量化<br> VQF322F16_PRE, // Vector_Quant_Float32_2_Float16: float量化成half,tensor量化<br> QF322BF16_PRE, // Quant_Float32_2_BFloat16: float量化成bfloat16_t,scalar量化<br> VQF322BF16_PRE, // Vector_Quant_Float32_2_BFloat16: float量化成bfloat16_t,tensor量化<br> QF322F32_PRE, // Quant_Float32_2_Float32: float量化成float,scalar量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br> VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,tensor量化,精度可以达到双千分之一,无法达到双万分之一。如果有双万分之一的精度要求,建议使用[AscendDeQuant](../../../adv_api/quantization/AscendDequant.md)高阶API。<br>}; | |
| 119 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | | 119 | | deqScalar | 可选输入 | scalar量化参数,表示单个scale值,quantPre量化模式为[随路量化](../cube_store_key_features/accompanying_quantization.md)时需要设置该参数。支持的数据类型为`uint64_t`。 | |
| 120 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | | 120 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 121 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 121 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 122 | -| params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br><pre>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};</pre><br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br><pre>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};</pre> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br><pre>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};</pre> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | | 122 | +| params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | |
| 123 | | dualDstCtrl | 可选输入 | 双目标模式控制参数。对于Ascend 950PR/Ascend 950DT,同一AI Core内有一个Cube Core和两个Vector Core,当启用双目标模式控制时,L0C Buffer中的M×N矩阵将被分成两半,并同时分别写入两个Vector Core各自的UB中,其中前半部分写入SUB BLOCK0,后半部分写入SUB BLOCK1。<br> • 2'b00:单目标模式,将整个矩阵写入通过subBlockId参数配置的目标UB。<br> • 2'b01:双目标模式,按M维度拆分成形状为M / 2 \* N的两个矩阵,分别写入两个UB, M必须为2的倍数。<br> • 2'b10:双目标模式,按N维度拆分成形状为M \* N / 2的两个矩阵,分别写入两个UB, N须为32的倍数。<br> • 2'b11:保留值。<br>dualDstCtrl仅支持在普通搬运模式(NZ2NZ)或NZ2ND搬运场景下使用,不支持随路功能场景。<br>参数设置方案和特性细节可参考:[L0C到UB双目标模式](../cube_store_key_features/L0C_to_UB_dual_target_mode.md) | | 123 | | dualDstCtrl | 可选输入 | 双目标模式控制参数。对于Ascend 950PR/Ascend 950DT,同一AI Core内有一个Cube Core和两个Vector Core,当启用双目标模式控制时,L0C Buffer中的M×N矩阵将被分成两半,并同时分别写入两个Vector Core各自的UB中,其中前半部分写入SUB BLOCK0,后半部分写入SUB BLOCK1。<br> • 2'b00:单目标模式,将整个矩阵写入通过subBlockId参数配置的目标UB。<br> • 2'b01:双目标模式,按M维度拆分成形状为M / 2 \* N的两个矩阵,分别写入两个UB, M必须为2的倍数。<br> • 2'b10:双目标模式,按N维度拆分成形状为M \* N / 2的两个矩阵,分别写入两个UB, N须为32的倍数。<br> • 2'b11:保留值。<br>dualDstCtrl仅支持在普通搬运模式(NZ2NZ)或NZ2ND搬运场景下使用,不支持随路功能场景。<br>参数设置方案和特性细节可参考:[L0C到UB双目标模式](../cube_store_key_features/L0C_to_UB_dual_target_mode.md) | |
| 124 | | subBlockId | 可选输入 | 启用单目标模式时用于指示目标UB的SUB BLOCK ID。取值为0或1,取值为0时写入SUB BLOCK0,为1时写入SUB BLOCK1,默认为0。 | | 124 | | subBlockId | 可选输入 | 启用单目标模式时用于指示目标UB的SUB BLOCK ID。取值为0或1,取值为0时写入SUB BLOCK0,为1时写入SUB BLOCK1,默认为0。 | |
| 125 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 此参数仅在L0C Buffer到Global Memory通路下有效。 | | 125 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 此参数仅在L0C Buffer到Global Memory通路下有效。 | |
| @@ -96,7 +96,7 @@ __aicore__ inline void Fill(const LocalTensor<T>& dst, const InitConstValueParam | |||
| 96 | 96 | ||
| 97 | ## 约束说明<a name="section633mcpsimp"></a> | 97 | ## 约束说明<a name="section633mcpsimp"></a> |
| 98 | 98 | ||
| 99 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 99 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 100 | - 当目的操作数位于L0A Buffer/L0B Buffer时,指令执行占用的流水为PIPE\_MTE1,目的操作数地址需要512Byte对齐。当目的操作数位于L1 Buffer时,指令执行占用的流水为PIPE\_MTE2,目的地址需要32Byte对齐。 | 100 | - 当目的操作数位于L0A Buffer/L0B Buffer时,指令执行占用的流水为PIPE\_MTE1,目的操作数地址需要512Byte对齐。当目的操作数位于L1 Buffer时,指令执行占用的流水为PIPE\_MTE2,目的地址需要32Byte对齐。 |
| 101 | - 当repeatTimes为0或者blockNum为0时,指令不会进行任何操作。 | 101 | - 当repeatTimes为0或者blockNum为0时,指令不会进行任何操作。 |
| 102 | - 不同的型号在设置InitConstValueParams参数时,支持配置参数的不同。 | 102 | - 不同的型号在设置InitConstValueParams参数时,支持配置参数的不同。 |
| @@ -54,7 +54,7 @@ __aicore__ inline void LoadDataUnzip(const LocalTensor<T>& dst, const GlobalTens | |||
| 54 | 54 | ||
| 55 | ## 约束说明<a name="section633mcpsimp"></a> | 55 | ## 约束说明<a name="section633mcpsimp"></a> |
| 56 | 56 | ||
| 57 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 57 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 58 | 58 | ||
| 59 | ## 调用示例<a name="section6461234123118"></a> | 59 | ## 调用示例<a name="section6461234123118"></a> |
| 60 | 60 | ||
| @@ -74,7 +74,7 @@ __aicore__ inline void LoadImageToLocal(const LocalTensor<T>& dst, const LoadIma | |||
| 74 | 74 | ||
| 75 | ## 约束说明<a name="section633mcpsimp"></a> | 75 | ## 约束说明<a name="section633mcpsimp"></a> |
| 76 | 76 | ||
| 77 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 77 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 78 | - 加载到dst的图片的大小加padding的大小必须小于等于所在存储空间的大小。 | 78 | - 加载到dst的图片的大小加padding的大小必须小于等于所在存储空间的大小。 |
| 79 | - 当通过[SetAippFunctions](SetAippFunctions.md)配置padding模式为块填充模式或者镜像块填充模式时,因为padding的数据来自于抠出的图片,左右padding的长度(leftPadSize、rightPadSize)必须小于或等于抠图的水平长度(horizSize),上下padding的长度(topPadSize、botPadSize)必须小于或等于抠图的垂直的长度(vertSize)。 | 79 | - 当通过[SetAippFunctions](SetAippFunctions.md)配置padding模式为块填充模式或者镜像块填充模式时,因为padding的数据来自于抠出的图片,左右padding的长度(leftPadSize、rightPadSize)必须小于或等于抠图的水平长度(horizSize),上下padding的长度(topPadSize、botPadSize)必须小于或等于抠图的垂直的长度(vertSize)。 |
| 80 | - 支持的物理存储位置为:L1 Buffer(TPosition: A1/B1)。 | 80 | - 支持的物理存储位置为:L1 Buffer(TPosition: A1/B1)。 |
| @@ -60,7 +60,7 @@ __aicore__ inline void LoadUnzipIndex(const GlobalTensor<T>& src, uint32_t numOf | |||
| 60 | 60 | ||
| 61 | ## 约束说明<a name="section633mcpsimp"></a> | 61 | ## 约束说明<a name="section633mcpsimp"></a> |
| 62 | 62 | ||
| 63 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 63 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 64 | - LoadUnzipIndex必须在任何LoadDataUnzip指令之前执行。 | 64 | - LoadUnzipIndex必须在任何LoadDataUnzip指令之前执行。 |
| 65 | - LoadUnzipIndex加载的索引表个数必须大于或等于LoadDataUnzip指令执行的次数。 | 65 | - LoadUnzipIndex加载的索引表个数必须大于或等于LoadDataUnzip指令执行的次数。 |
| 66 | 66 | ||
| @@ -120,8 +120,8 @@ | |||
| 120 | | --- | --- | --- | | 120 | | --- | --- | --- | |
| 121 | | src0 | 输入 | 源图片在Global Memory上的矩阵。<br>源图片格式为YUV420SP时,表示Y维度在Global Memory上的矩阵。 | | 121 | | src0 | 输入 | 源图片在Global Memory上的矩阵。<br>源图片格式为YUV420SP时,表示Y维度在Global Memory上的矩阵。 | |
| 122 | | src1 | 输入 | 源图片格式为YUV420SP时,表示UV维度在Global Memory上的矩阵。<br>源图片格式为其他格式时,该参数无效。 | | 122 | | src1 | 输入 | 源图片格式为YUV420SP时,表示UV维度在Global Memory上的矩阵。<br>源图片格式为其他格式时,该参数无效。 | |
| 123 | -| format | 输入 | 源图片的图片格式。AippInputFormat为枚举类型,取值为:<br>AippInputFormat::YUV420SP_U8:图片格式为YUV420 Semi-Planar,数据类型为uint8_t<br>AippInputFormat::XRGB8888_U8:图片格式为XRGB8888,数据类型为uint8_t<br>AippInputFormat::RGB888_U8:图片格式为RGB888,数据类型为uint8_t<br>AippInputFormat::YUV400_U8:图片格式为YUV400,数据类型为uint8_t<br><pre>enum class AippInputFormat : uint8_t {<br> YUV420SP_U8 = 0,<br> XRGB8888_U8 = 1,<br> RGB888_U8 = 4,<br> YUV400_U8 = 9,<br>};</pre> | | 123 | +| format | 输入 | 源图片的图片格式。AippInputFormat为枚举类型,取值为:<br>AippInputFormat::YUV420SP_U8:图片格式为YUV420 Semi-Planar,数据类型为uint8_t<br>AippInputFormat::XRGB8888_U8:图片格式为XRGB8888,数据类型为uint8_t<br>AippInputFormat::RGB888_U8:图片格式为RGB888,数据类型为uint8_t<br>AippInputFormat::YUV400_U8:图片格式为YUV400,数据类型为uint8_t<br>enum class AippInputFormat : uint8_t {<br> YUV420SP_U8 = 0,<br> XRGB8888_U8 = 1,<br> RGB888_U8 = 4,<br> YUV400_U8 = 9,<br>}; | |
| 124 | -| config | 输入 | 图片预处理的相关参数,类型为AippParams,结构体具体定义为:<br><pre>template \<typename T\><br>struct AippParams {<br> AippPaddingParams\<T\> paddingParams;<br> AippSwapParams swapParams;<br> AippSingleLineParams singleLineParams;<br> AippDataTypeConvParams dtcParams;<br> AippChannelPaddingParams\<T\> cPaddingParams;<br> AippColorSpaceConvParams cscParams;<br>};</pre><br>AippParams结构体内各子结构体定义如下:<br> •数据填充功能相关参数,说明见表3。<br><pre>template \<typename T\><br>struct AippPaddingParams {<br> uint32_t paddingMode;<br> T paddingValueCh0;<br> T paddingValueCh1;<br> T paddingValueCh2;<br> T paddingValueCh3;<br>};</pre><br> •通道交换功能相关参数,说明见表4。<br><pre>struct AippSwapParams {<br> bool isSwapRB;<br> bool isSwapUV;<br> bool isSwapAX;<br>};</pre><br> •单行读取功能相关参数,说明见表5。<br><pre>struct AippSingleLineParams {<br> bool isSingleLineCopy;<br>};</pre><br> •数据类型转换功能相关参数,说明见表6。<br><pre>struct AippDataTypeConvParams {<br> uint8_t dtcMeanCh0{ 0 };<br> uint8_t dtcMeanCh1{ 0 };<br> uint8_t dtcMeanCh2{ 0 };<br> half dtcMinCh0{ 0 };<br> half dtcMinCh1{ 0 };<br> half dtcMinCh2{ 0 };<br> half dtcVarCh0{ 1.0 };<br> half dtcVarCh1{ 1.0 };<br> half dtcVarCh2{ 1.0 };<br> uint32_t dtcRoundMode{ 0 };<br>};</pre><br> •通道填充功能相关参数,说明见表7。<br><pre>template \<typename T\><br>struct AippChannelPaddingParams {<br> uint32_t cPaddingMode;<br> T cPaddingValue;<br>};</pre><br> •色域转换功能相关参数,说明见表8。<br><pre>struct AippColorSpaceConvParams {<br> bool isEnableCsc;<br> int16_t cscMatrixR0C0;<br> int16_t cscMatrixR0C1;<br> int16_t cscMatrixR0C2;<br> int16_t cscMatrixR1C0;<br> int16_t cscMatrixR1C1;<br> int16_t cscMatrixR1C2;<br> int16_t cscMatrixR2C0;<br> int16_t cscMatrixR2C1;<br> int16_t cscMatrixR2C2;<br> uint8_t cscBiasIn0;<br> uint8_t cscBiasIn1;<br> uint8_t cscBiasIn2;<br> uint8_t cscBiasOut0;<br> uint8_t cscBiasOut1;<br> uint8_t cscBiasOut2;<br>};</pre> | | 124 | +| config | 输入 | 图片预处理的相关参数,类型为AippParams,结构体具体定义为:<br>template \<typename T\><br>struct AippParams {<br> AippPaddingParams\<T\> paddingParams;<br> AippSwapParams swapParams;<br> AippSingleLineParams singleLineParams;<br> AippDataTypeConvParams dtcParams;<br> AippChannelPaddingParams\<T\> cPaddingParams;<br> AippColorSpaceConvParams cscParams;<br>};<br>AippParams结构体内各子结构体定义如下:<br> •数据填充功能相关参数,说明见表3。<br>template \<typename T\><br>struct AippPaddingParams {<br> uint32_t paddingMode;<br> T paddingValueCh0;<br> T paddingValueCh1;<br> T paddingValueCh2;<br> T paddingValueCh3;<br>};<br> •通道交换功能相关参数,说明见表4。<br>struct AippSwapParams {<br> bool isSwapRB;<br> bool isSwapUV;<br> bool isSwapAX;<br>};<br> •单行读取功能相关参数,说明见表5。<br>struct AippSingleLineParams {<br> bool isSingleLineCopy;<br>};<br> •数据类型转换功能相关参数,说明见表6。<br>struct AippDataTypeConvParams {<br> uint8_t dtcMeanCh0{ 0 };<br> uint8_t dtcMeanCh1{ 0 };<br> uint8_t dtcMeanCh2{ 0 };<br> half dtcMinCh0{ 0 };<br> half dtcMinCh1{ 0 };<br> half dtcMinCh2{ 0 };<br> half dtcVarCh0{ 1.0 };<br> half dtcVarCh1{ 1.0 };<br> half dtcVarCh2{ 1.0 };<br> uint32_t dtcRoundMode{ 0 };<br>};<br> •通道填充功能相关参数,说明见表7。<br>template \<typename T\><br>struct AippChannelPaddingParams {<br> uint32_t cPaddingMode;<br> T cPaddingValue;<br>};<br> •色域转换功能相关参数,说明见表8。<br>struct AippColorSpaceConvParams {<br> bool isEnableCsc;<br> int16_t cscMatrixR0C0;<br> int16_t cscMatrixR0C1;<br> int16_t cscMatrixR0C2;<br> int16_t cscMatrixR1C0;<br> int16_t cscMatrixR1C1;<br> int16_t cscMatrixR1C2;<br> int16_t cscMatrixR2C0;<br> int16_t cscMatrixR2C1;<br> int16_t cscMatrixR2C2;<br> uint8_t cscBiasIn0;<br> uint8_t cscBiasIn1;<br> uint8_t cscBiasIn2;<br> uint8_t cscBiasOut0;<br> uint8_t cscBiasOut1;<br> uint8_t cscBiasOut2;<br>}; | |
| 125 | 125 | ||
| 126 | **表3** AippPaddingParams结构体内参数说明<a name="table8955841508"></a> | 126 | **表3** AippPaddingParams结构体内参数说明<a name="table8955841508"></a> |
| 127 | 127 | ||
| @@ -52,7 +52,7 @@ __aicore__ inline void SetFmatrix(uint16_t l1H, uint16_t l1W, const uint8_t padL | |||
| 52 | | l1H | 输入 | 源操作数height,取值范围:l1H∈[1, 32767]。 | | 52 | | l1H | 输入 | 源操作数height,取值范围:l1H∈[1, 32767]。 | |
| 53 | | l1W | 输入 | 源操作数width,取值范围:l1W∈[1, 32767]。 | | 53 | | l1W | 输入 | 源操作数width,取值范围:l1W∈[1, 32767]。 | |
| 54 | | padList | 输入 | padding列表 [padding\_left, padding\_right, padding\_top, padding\_bottom],每个元素取值范围:[0,255]。默认为{0, 0, 0, 0}。 | | 54 | | padList | 输入 | padding列表 [padding\_left, padding\_right, padding\_top, padding\_bottom],每个元素取值范围:[0,255]。默认为{0, 0, 0, 0}。 | |
| 55 | -| fmatrixMode | 输入 | 用于控制LoadData指令从left还是right寄存器获取信息。FmatrixMode类型,定义如下。当前只支持FMATRIX\_LEFT,左右矩阵均使用该配置。<br><pre>enum class FmatrixMode : uint8_t {<br> FMATRIX_LEFT = 0,<br> FMATRIX_RIGHT = 1,<br>};</pre> | | 55 | +| fmatrixMode | 输入 | 用于控制LoadData指令从left还是right寄存器获取信息。FmatrixMode类型,定义如下。当前只支持FMATRIX\_LEFT,左右矩阵均使用该配置。<br>enum class FmatrixMode : uint8_t {<br> FMATRIX_LEFT = 0,<br> FMATRIX_RIGHT = 1,<br>}; | |
| 56 | 56 | ||
| 57 | ## 返回值说明 | 57 | ## 返回值说明 |
| 58 | 58 | ||
| @@ -61,7 +61,7 @@ __aicore__ inline void SetFmatrix(uint16_t l1H, uint16_t l1W, const uint8_t padL | |||
| 61 | ## 约束说明<a name="section633mcpsimp"></a> | 61 | ## 约束说明<a name="section633mcpsimp"></a> |
| 62 | 62 | ||
| 63 | - 该接口需要配合[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口一起使用,需要在[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口之前调用,其中fmatrixMode参数需要和LoadData(卷积数据搬运)接口参数中的fMatrixCtrl值保持一致。 | 63 | - 该接口需要配合[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口一起使用,需要在[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口之前调用,其中fmatrixMode参数需要和LoadData(卷积数据搬运)接口参数中的fMatrixCtrl值保持一致。 |
| 64 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 64 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 65 | 65 | ||
| 66 | ## 调用示例<a name="section642mcpsimp"></a> | 66 | ## 调用示例<a name="section642mcpsimp"></a> |
| 67 | 67 | ||
| @@ -46,7 +46,7 @@ __aicore__ inline void SetFmatrix(const SetFMatrixBitModeParams& param, const Fm | |||
| 46 | 46 | ||
| 47 | | 参数名称 | 输入/输出 | 含义 | | 47 | | 参数名称 | 输入/输出 | 含义 | |
| 48 | | --------- | ---------- | ------ | | 48 | | --------- | ---------- | ------ | |
| 49 | -| fmatrixMode | 输入 | 用于控制LoadData指令从left还是right寄存器获取信息。FmatrixMode类型,定义如下。当前只支持FMATRIX\_LEFT,左右矩阵均使用该配置。<br><pre>enum class FmatrixMode : uint8_t {<br> FMATRIX_LEFT = 0,<br> FMATRIX_RIGHT = 1,<br>};</pre> | | 49 | +| fmatrixMode | 输入 | 用于控制LoadData指令从left还是right寄存器获取信息。FmatrixMode类型,定义如下。当前只支持FMATRIX\_LEFT,左右矩阵均使用该配置。<br>enum class FmatrixMode : uint8_t {<br> FMATRIX_LEFT = 0,<br> FMATRIX_RIGHT = 1,<br>}; | |
| 50 | | param | 输入 | 类型为SetFMatrixBitMode,具体参考[表2](#table85031523118)。 | | 50 | | param | 输入 | 类型为SetFMatrixBitMode,具体参考[表2](#table85031523118)。 | |
| 51 | 51 | ||
| 52 | <a name="table85031523118"></a> | 52 | <a name="table85031523118"></a> |
| @@ -93,7 +93,7 @@ __aicore__ inline SetFMatrixBitModeParams(const LoadData3DParamsV2<T> &loadData3 | |||
| 93 | ## 约束说明<a name="section633mcpsimp"></a> | 93 | ## 约束说明<a name="section633mcpsimp"></a> |
| 94 | 94 | ||
| 95 | - 该接口需要配合[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口一起使用,需要在[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口之前调用。 | 95 | - 该接口需要配合[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口一起使用,需要在[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)接口之前调用。 |
| 96 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 96 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 97 | 97 | ||
| 98 | ## 调用示例<a name="section642mcpsimp"></a> | 98 | ## 调用示例<a name="section642mcpsimp"></a> |
| 99 | 99 | ||
| @@ -55,7 +55,7 @@ __aicore__ inline void SetLoadDataBoundary(uint32_t boundaryValue) | |||
| 55 | - 如果使用SetLoadDataBoundary接口设置了边界值,配合LoadData(卷积数据搬运)指令使用时,LoadData(卷积数据搬运)指令的L1 Buffer(A1/B1)的初始地址要在设置的边界内。 | 55 | - 如果使用SetLoadDataBoundary接口设置了边界值,配合LoadData(卷积数据搬运)指令使用时,LoadData(卷积数据搬运)指令的L1 Buffer(A1/B1)的初始地址要在设置的边界内。 |
| 56 | - 如果boundaryValue设置为0,则表示无边界,可使用整个L1 Buffer(A1/B1)。 | 56 | - 如果boundaryValue设置为0,则表示无边界,可使用整个L1 Buffer(A1/B1)。 |
| 57 | - 配合[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)指令使用时,边界值大小最小值要求是1024,如果设置1~1023值是未定义行为。 | 57 | - 配合[LoadData(卷积数据搬运)](../cube_compute_load/LoadData_3D.md)指令使用时,边界值大小最小值要求是1024,如果设置1~1023值是未定义行为。 |
| 58 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 58 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 59 | 59 | ||
| 60 | ## 调用示例<a name="section642mcpsimp"></a> | 60 | ## 调用示例<a name="section642mcpsimp"></a> |
| 61 | 61 | ||
| @@ -53,8 +53,8 @@ __aicore__ inline Conv2dTilling GetConv2dTiling(Conv2dParams& conv2dParams) | |||
| 53 | | dst | 输出 | 目的操作数。<br><br><!-- npu="910" id8 -->Atlas 训练系列产品,支持的TPosition为:CO1,CO2<!-- end id8 --><br><!-- npu="310p" id9 -->Atlas 推理系列产品AI Core,支持的TPosition为:CO1,CO2<!-- end id9 --><br><br>结果中有效张量格式为[Cout/16, Ho, Wo, 16],大小为Cout \* Ho \* Wo,Ho与Wo可以根据其他数据计算得出。<br>Ho = floor((H + pad_top + pad_bottom - dilation_h \* (Kh - 1) - 1) / stride_h + 1)<br>Wo = floor((W + pad_left + pad_right - dilation_w \* (Kw - 1) - 1) / stride_w + 1)<br>由于硬件要求Ho\*Wo需为16倍数,在申请dst Tensor时,shape应向上16对齐,实际申请shape大小应为Cout \* round_howo。<br>round_howo = ceil(Ho \* Wo /16) \* 16。 | | 53 | | dst | 输出 | 目的操作数。<br><br><!-- npu="910" id8 -->Atlas 训练系列产品,支持的TPosition为:CO1,CO2<!-- end id8 --><br><!-- npu="310p" id9 -->Atlas 推理系列产品AI Core,支持的TPosition为:CO1,CO2<!-- end id9 --><br><br>结果中有效张量格式为[Cout/16, Ho, Wo, 16],大小为Cout \* Ho \* Wo,Ho与Wo可以根据其他数据计算得出。<br>Ho = floor((H + pad_top + pad_bottom - dilation_h \* (Kh - 1) - 1) / stride_h + 1)<br>Wo = floor((W + pad_left + pad_right - dilation_w \* (Kw - 1) - 1) / stride_w + 1)<br>由于硬件要求Ho\*Wo需为16倍数,在申请dst Tensor时,shape应向上16对齐,实际申请shape大小应为Cout \* round_howo。<br>round_howo = ceil(Ho \* Wo /16) \* 16。 | |
| 54 | | featureMap | 输入 | 输入张量,Tensor的TPosition为A1。<br><br>输入张量"feature_map"的形状,格式是[C1, H, W, C0]。<br>C1\*C0为输入的channel数,要求如下:<br>•当feature_map的数据类型为half时,C0=16。<br>•当feature_map的数据类型为int8_t时,C0=32。<br>• C1取值范围:[1,4],输入的channel的范围:[16,32,64,128]。<br><br>H为高,取值范围:[1,40]。<br>W为宽,取值范围:[1,40]。 | | 54 | | featureMap | 输入 | 输入张量,Tensor的TPosition为A1。<br><br>输入张量"feature_map"的形状,格式是[C1, H, W, C0]。<br>C1\*C0为输入的channel数,要求如下:<br>•当feature_map的数据类型为half时,C0=16。<br>•当feature_map的数据类型为int8_t时,C0=32。<br>• C1取值范围:[1,4],输入的channel的范围:[16,32,64,128]。<br><br>H为高,取值范围:[1,40]。<br>W为宽,取值范围:[1,40]。 | |
| 55 | | weight | 输入 | 卷积核(权重)张量,Tensor的TPosition为B1。<br><br>卷积核张量"weight"的形状,格式是[C1, Kh, Kw, Cout, C0]。<br>C1\*C0为输入的channel数,对于C0要求如下:<br>•当feature_map的数据类型为half时,C0=16。<br>•当feature_map的数据类型为int8_t时,C0=32。<br>• C1取值范围:[1,4]。<br>• kernel_shape输入的channel数需与fm_shape输入的channel数保持一致。<br><br>Cout为卷积核数目,取值范围:[16,32,64,128],Cout必须为16的倍数。<br>Kh为卷积核高;值的范围:[1,5]。<br>Kw表示卷积核宽;值的范围:[1,5]。 | | 55 | | weight | 输入 | 卷积核(权重)张量,Tensor的TPosition为B1。<br><br>卷积核张量"weight"的形状,格式是[C1, Kh, Kw, Cout, C0]。<br>C1\*C0为输入的channel数,对于C0要求如下:<br>•当feature_map的数据类型为half时,C0=16。<br>•当feature_map的数据类型为int8_t时,C0=32。<br>• C1取值范围:[1,4]。<br>• kernel_shape输入的channel数需与fm_shape输入的channel数保持一致。<br><br>Cout为卷积核数目,取值范围:[16,32,64,128],Cout必须为16的倍数。<br>Kh为卷积核高;值的范围:[1,5]。<br>Kw表示卷积核宽;值的范围:[1,5]。 | |
| 56 | -| conv2dParams | 输入 | 输入矩阵形状等状态参数,类型为Conv2dParams。结构体具体定义为:<br><br><pre><br>struct Conv2dParams {<br> uint32_t imgShape[CONV2D_IMG_SIZE]; // [H, W]<br> uint32_t kernelShapeIn[CONV2D_KERNEL_SIZE]; // [Kh, Kw]<br> uint32_t stride[CONV2D_STRIDE]; // [stride_h, stride_w]<br> uint32_t cin; // cin = C0 * C1;<br> uint32_t cout;<br> uint32_t padList[CONV2D_PAD]; // [pad_left, pad_right, pad_top, pad_bottom]<br> uint32_t dilation[CONV2D_DILATION]; // [dilation_h, dilation_w]<br> uint32_t initY;<br> uint32_t partialSum;<br>};<br></pre> | | 56 | +| conv2dParams | 输入 | 输入矩阵形状等状态参数,类型为Conv2dParams。结构体具体定义为:<br><br><br>struct Conv2dParams {<br> uint32_t imgShape[CONV2D_IMG_SIZE]; // [H, W]<br> uint32_t kernelShapeIn[CONV2D_KERNEL_SIZE]; // [Kh, Kw]<br> uint32_t stride[CONV2D_STRIDE]; // [stride_h, stride_w]<br> uint32_t cin; // cin = C0 * C1;<br> uint32_t cout;<br> uint32_t padList[CONV2D_PAD]; // [pad_left, pad_right, pad_top, pad_bottom]<br> uint32_t dilation[CONV2D_DILATION]; // [dilation_h, dilation_w]<br> uint32_t initY;<br> uint32_t partialSum;<br>};<br> | |
| 57 | -| tilling | 输入 | 分形控制参数,类型为Conv2dTilling。结构体具体定义为:<br><br><pre>struct Conv2dTilling {<br> const uint32_t blockSize = 16; // # M block size is always 16<br> LoopMode loopMode = LoopMode::MODE_NM;<br><br> uint32_t c0Size = 32;<br> uint32_t dTypeSize = 1;<br><br> uint32_t strideH = 0;<br> uint32_t strideW = 0;<br> uint32_t dilationH = 0;<br> uint32_t dilationW = 0;<br> uint32_t hi = 0;<br> uint32_t wi = 0;<br> uint32_t ho = 0;<br> uint32_t wo = 0;<br><br> uint32_t height = 0;<br> uint32_t width = 0;<br><br> uint32_t howo = 0;<br><br> uint32_t mNum = 0;<br> uint32_t nNum = 0;<br> uint32_t kNum = 0;<br><br> uint32_t mBlockNum = 0;<br> uint32_t kBlockNum = 0;<br> uint32_t nBlockNum = 0;<br><br> uint32_t roundM = 0;<br> uint32_t roundN = 0;<br> uint32_t roundK = 0;<br><br> uint32_t mTileBlock = 0;<br> uint32_t nTileBlock = 0;<br> uint32_t kTileBlock = 0;<br><br> uint32_t mIterNum = 0;<br> uint32_t nIterNum = 0;<br> uint32_t kIterNum = 0;<br><br> uint32_t mTileNums = 0;<br><br> bool mHasTail = false;<br> bool nHasTail = false;<br> bool kHasTail = false;<br><br> uint32_t kTailBlock = 0;<br> uint32_t mTailBlock = 0;<br> uint32_t nTailBlock = 0;<br><br> uint32_t mTailNums = 0;<br>};<br></pre> | | 57 | +| tilling | 输入 | 分形控制参数,类型为Conv2dTilling。结构体具体定义为:<br><br>struct Conv2dTilling {<br> const uint32_t blockSize = 16; // # M block size is always 16<br> LoopMode loopMode = LoopMode::MODE_NM;<br><br> uint32_t c0Size = 32;<br> uint32_t dTypeSize = 1;<br><br> uint32_t strideH = 0;<br> uint32_t strideW = 0;<br> uint32_t dilationH = 0;<br> uint32_t dilationW = 0;<br> uint32_t hi = 0;<br> uint32_t wi = 0;<br> uint32_t ho = 0;<br> uint32_t wo = 0;<br><br> uint32_t height = 0;<br> uint32_t width = 0;<br><br> uint32_t howo = 0;<br><br> uint32_t mNum = 0;<br> uint32_t nNum = 0;<br> uint32_t kNum = 0;<br><br> uint32_t mBlockNum = 0;<br> uint32_t kBlockNum = 0;<br> uint32_t nBlockNum = 0;<br><br> uint32_t roundM = 0;<br> uint32_t roundN = 0;<br> uint32_t roundK = 0;<br><br> uint32_t mTileBlock = 0;<br> uint32_t nTileBlock = 0;<br> uint32_t kTileBlock = 0;<br><br> uint32_t mIterNum = 0;<br> uint32_t nIterNum = 0;<br> uint32_t kIterNum = 0;<br><br> uint32_t mTileNums = 0;<br><br> bool mHasTail = false;<br> bool nHasTail = false;<br> bool kHasTail = false;<br><br> uint32_t kTailBlock = 0;<br> uint32_t mTailBlock = 0;<br> uint32_t nTailBlock = 0;<br><br> uint32_t mTailNums = 0;<br>};<br> | |
| 58 | 58 | ||
| 59 | **表2** Conv2DParams结构体内参数说明: | 59 | **表2** Conv2DParams结构体内参数说明: |
| 60 | 60 | ||
| @@ -75,7 +75,7 @@ __aicore__ inline Conv2dTilling GetConv2dTiling(Conv2dParams& conv2dParams) | |||
| 75 | | 参数名称 | 类型 | 说明 | | 75 | | 参数名称 | 类型 | 说明 | |
| 76 | | --- | --- | --- | | 76 | | --- | --- | --- | |
| 77 | | blockSize | uint32_t | 固定值,恒为16,一个维度内存放的元素个数。 | | 77 | | blockSize | uint32_t | 固定值,恒为16,一个维度内存放的元素个数。 | |
| 78 | -| loopMode | LoopMode | 遍历模式,结构体具体定义为:<br><br><pre>enum class LoopMode {<br> MODE_NM = 0,<br> MODE_MN = 1,<br> MODE_KM = 2,<br> MODE_KN = 3<br>};<br></pre> | | 78 | +| loopMode | LoopMode | 遍历模式,结构体具体定义为:<br><br>enum class LoopMode {<br> MODE_NM = 0,<br> MODE_MN = 1,<br> MODE_KM = 2,<br> MODE_KN = 3<br>};<br> | |
| 79 | | c0Size | uint32_t | 一个block的字节长度,范围[16或者32]。 | | 79 | | c0Size | uint32_t | 一个block的字节长度,范围[16或者32]。 | |
| 80 | | dtypeSize | uint32_t | 传入的数据类型的字节长度,范围[1, 2]。 | | 80 | | dtypeSize | uint32_t | 传入的数据类型的字节长度,范围[1, 2]。 | |
| 81 | | strideH | uint32_t | 卷积步长-高,范围:[1,4]。 | | 81 | | strideH | uint32_t | 卷积步长-高,范围:[1,4]。 | |
| @@ -130,7 +130,7 @@ __aicore__ inline Conv2dTilling GetConv2dTiling(Conv2dParams& conv2dParams) | |||
| 130 | ## 约束说明 | 130 | ## 约束说明 |
| 131 | 131 | ||
| 132 | - 该接口当前不支持W=Kw并且H\>Kh的场景,其将产生不可预期的结果。 | 132 | - 该接口当前不支持W=Kw并且H\>Kh的场景,其将产生不可预期的结果。 |
| 133 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 133 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 134 | 134 | ||
| 135 | ## 调用示例 | 135 | ## 调用示例 |
| 136 | 136 | ||
| @@ -58,7 +58,7 @@ | |||
| 58 | | m | 输入 | 左矩阵Src0Local有效Height,范围:[1, 4096]。<br>注意:m可以不是16的倍数。 | | 58 | | m | 输入 | 左矩阵Src0Local有效Height,范围:[1, 4096]。<br>注意:m可以不是16的倍数。 | |
| 59 | | k | 输入 | 左矩阵Src0Local有效Width、右矩阵Src1Local有效Height。<br>•当输入张量Src0Local的数据类型为float时,范围:[1, 8192]<br>•当输入张量Src0Local的数据类型为half时,范围:[1, 16384]<br>•当输入张量Src0Local的数据类型为int8_t时,范围:[1, 32768]<br><br>注意:k可以不是16的倍数。 | | 59 | | k | 输入 | 左矩阵Src0Local有效Width、右矩阵Src1Local有效Height。<br>•当输入张量Src0Local的数据类型为float时,范围:[1, 8192]<br>•当输入张量Src0Local的数据类型为half时,范围:[1, 16384]<br>•当输入张量Src0Local的数据类型为int8_t时,范围:[1, 32768]<br><br>注意:k可以不是16的倍数。 | |
| 60 | | n | 输入 | 右矩阵Src1Local有效Width,范围:[1, 4096]。<br>注意:n可以不是16的倍数。 | | 60 | | n | 输入 | 右矩阵Src1Local有效Width,范围:[1, 4096]。<br>注意:n可以不是16的倍数。 | |
| 61 | -| tiling | 输入 | 切分规则,类型为GemmTiling,结构体具体定义为:<br><br><pre>struct GemmTiling {<br> const uint32_t blockSize = 16;<br> LoopMode loopMode = LoopMode::MODE_NM;<br> uint32_t mNum = 0;<br> uint32_t nNum = 0;<br> uint32_t kNum = 0;<br> uint32_t roundM = 0;<br> uint32_t roundN = 0;<br> uint32_t roundK = 0;<br> uint32_t c0Size = 32;<br> uint32_t dtypeSize = 1;<br> uint32_t mBlockNum = 0;<br> uint32_t nBlockNum = 0;<br> uint32_t kBlockNum = 0;<br> uint32_t mIterNum = 0;<br> uint32_t nIterNum = 0;<br> uint32_t kIterNum = 0;<br> uint32_t mTileBlock = 0;<br> uint32_t nTileBlock = 0;<br> uint32_t kTileBlock = 0;<br> uint32_t kTailBlock = 0;<br> uint32_t mTailBlock = 0;<br> uint32_t nTailBlock = 0;<br> bool kHasTail = false;<br> bool mHasTail = false;<br> bool nHasTail = false;<br> bool kHasTailEle = false;<br> uint32_t kTailEle = 0;<br>};<br></pre><br>参数说明请参考[表3](#table3)。 | | 61 | +| tiling | 输入 | 切分规则,类型为GemmTiling,结构体具体定义为:<br><br>struct GemmTiling {<br> const uint32_t blockSize = 16;<br> LoopMode loopMode = LoopMode::MODE_NM;<br> uint32_t mNum = 0;<br> uint32_t nNum = 0;<br> uint32_t kNum = 0;<br> uint32_t roundM = 0;<br> uint32_t roundN = 0;<br> uint32_t roundK = 0;<br> uint32_t c0Size = 32;<br> uint32_t dtypeSize = 1;<br> uint32_t mBlockNum = 0;<br> uint32_t nBlockNum = 0;<br> uint32_t kBlockNum = 0;<br> uint32_t mIterNum = 0;<br> uint32_t nIterNum = 0;<br> uint32_t kIterNum = 0;<br> uint32_t mTileBlock = 0;<br> uint32_t nTileBlock = 0;<br> uint32_t kTileBlock = 0;<br> uint32_t kTailBlock = 0;<br> uint32_t mTailBlock = 0;<br> uint32_t nTailBlock = 0;<br> bool kHasTail = false;<br> bool mHasTail = false;<br> bool nHasTail = false;<br> bool kHasTailEle = false;<br> uint32_t kTailEle = 0;<br>};<br><br>参数说明请参考[表3](#table3)。 | |
| 62 | | partialsum | 输入 | 当dst参数所在的TPosition为CO2时,通过该参数控制计算结果是否搬出。<br>•取值0:搬出计算结果;<br>•取值1:不搬出计算结果,可以进行后续计算。 | | 62 | | partialsum | 输入 | 当dst参数所在的TPosition为CO2时,通过该参数控制计算结果是否搬出。<br>•取值0:搬出计算结果;<br>•取值1:不搬出计算结果,可以进行后续计算。 | |
| 63 | | initValue | 输入 | 表示dst是否需要初始化。<br>•取值0:dst需要初始化,dst初始矩阵保存有之前结果,新计算结果会累加前一次Gemm计算结果。<br>•取值1:dst不需要初始化,dst初始矩阵中数据无意义,计算结果直接覆盖dst中的数据。 | | 63 | | initValue | 输入 | 表示dst是否需要初始化。<br>•取值0:dst需要初始化,dst初始矩阵保存有之前结果,新计算结果会累加前一次Gemm计算结果。<br>•取值1:dst不需要初始化,dst初始矩阵中数据无意义,计算结果直接覆盖dst中的数据。 | |
| 64 | 64 | ||
| @@ -75,7 +75,7 @@ | |||
| 75 | | 参数名称 | 类型 | 说明 | | 75 | | 参数名称 | 类型 | 说明 | |
| 76 | | --- | --- | --- | | 76 | | --- | --- | --- | |
| 77 | | blockSize | uint32_t | 固定值,恒为16,一个维度内存放的元素个数。 | | 77 | | blockSize | uint32_t | 固定值,恒为16,一个维度内存放的元素个数。 | |
| 78 | -| loopMode | LoopMode | 遍历模式,结构体具体定义为:<br><br><pre><br>enum class LoopMode {<br> MODE_NM = 0,<br> MODE_MN = 1,<br> MODE_KM = 2,<br> MODE_KN = 3<br>};<br></pre> | | 78 | +| loopMode | LoopMode | 遍历模式,结构体具体定义为:<br><br><br>enum class LoopMode {<br> MODE_NM = 0,<br> MODE_MN = 1,<br> MODE_KM = 2,<br> MODE_KN = 3<br>};<br> | |
| 79 | | mNum | uint32_t | M轴等效数据长度参数值,范围:[1, 4096]。 | | 79 | | mNum | uint32_t | M轴等效数据长度参数值,范围:[1, 4096]。 | |
| 80 | | nNum | uint32_t | N轴等效数据长度参数值,范围:[1, 4096]。 | | 80 | | nNum | uint32_t | N轴等效数据长度参数值,范围:[1, 4096]。 | |
| 81 | | kNum | uint32_t | K轴等效数据长度参数值。<br>•当输入张量Src0Local的数据类型为float时,范围:[1, 8192]。<br>•当输入张量Src0Local的数据类型为half时,范围:[1, 16384]。<br>•当输入张量Src0Local的数据类型为int8_t时,范围:[1, 32768]。 | | 81 | | kNum | uint32_t | K轴等效数据长度参数值。<br>•当输入张量Src0Local的数据类型为float时,范围:[1, 8192]。<br>•当输入张量Src0Local的数据类型为half时,范围:[1, 16384]。<br>•当输入张量Src0Local的数据类型为int8_t时,范围:[1, 32768]。 | |
| @@ -119,7 +119,7 @@ | |||
| 119 | ## 约束说明 | 119 | ## 约束说明 |
| 120 | 120 | ||
| 121 | - 参数m,k,n可以不是16对齐,但因硬件原因,操作数dst,Src0Local和Src1Local的shape需满足对齐要求,即m方向,n方向要求向上16对齐,k方向根据操作数数据类型按16或32向上对齐。 | 121 | - 参数m,k,n可以不是16对齐,但因硬件原因,操作数dst,Src0Local和Src1Local的shape需满足对齐要求,即m方向,n方向要求向上16对齐,k方向根据操作数数据类型按16或32向上对齐。 |
| 122 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 122 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 123 | 123 | ||
| 124 | ## 调用示例 | 124 | ## 调用示例 |
| 125 | 125 | ||
| @@ -29,7 +29,7 @@ AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../ | |||
| 29 | 29 | ||
| 30 | > [!NOTE]说明 | 30 | > [!NOTE]说明 |
| 31 | > - 同一个物理内存可能对应多个不同的[TPosition](../../../basic_api/aux_data_structures/TPosition.md),例如Unified Buffer(UB)同时映射到VECIN、VECCALC和VECOUT三个逻辑位置,分别代表矢量计算的输入、中间计算和输出阶段。L1 Buffer同时映射到A1、B1、C1和TSCM,具体含义取决于当前所服务的计算流程(矩阵左/右矩阵暂存或共享通信)。这种设计使得同一物理内存可以在不同计算阶段被赋予不同的逻辑语义,开发者可根据编程模型的阶段需求选择合适的TPosition。 | 31 | > - 同一个物理内存可能对应多个不同的[TPosition](../../../basic_api/aux_data_structures/TPosition.md),例如Unified Buffer(UB)同时映射到VECIN、VECCALC和VECOUT三个逻辑位置,分别代表矢量计算的输入、中间计算和输出阶段。L1 Buffer同时映射到A1、B1、C1和TSCM,具体含义取决于当前所服务的计算流程(矩阵左/右矩阵暂存或共享通信)。这种设计使得同一物理内存可以在不同计算阶段被赋予不同的逻辑语义,开发者可根据编程模型的阶段需求选择合适的TPosition。 |
| 32 | - > - 同一个逻辑位置,在不同产品型号中可能对应不同的物理内存,例如逻辑位置CO2在Atlas A2 训练系列产品/Atlas A2 推理系列产品中映射到Global Memory,而在Atlas训练及推理系列产品中映射到Unified Buffer,详细情况请参考[逻辑位置和物理存储的映射关系](../../../通用说明和约束.md#section1359919519819)。 | 32 | + > - 同一个逻辑位置,在不同产品型号中可能对应不同的物理内存,例如逻辑位置CO2在Atlas A2 训练系列产品/Atlas A2 推理系列产品中映射到Global Memory,而在Atlas训练及推理系列产品中映射到Unified Buffer,详细情况请参考[逻辑位置和物理存储的映射关系](../../../general_description_and_constraints.md#section1359919519819)。 |
| 33 | 33 | ||
| 34 | ## 数据通路与搬运流水 | 34 | ## 数据通路与搬运流水 |
| 35 | 35 | ||
| @@ -45,7 +45,7 @@ void SetKernelMode(KernelMode mode) | |||
| 45 | ## 参数说明<a name="zh-cn_topic_0000001963639310_zh-cn_topic_0000001656094169_section158061867342"></a> | 45 | ## 参数说明<a name="zh-cn_topic_0000001963639310_zh-cn_topic_0000001656094169_section158061867342"></a> |
| 46 | | 参数名称 | 输入/输出 | 描述 | | 46 | | 参数名称 | 输入/输出 | 描述 | |
| 47 | | ------ | ------ | ------ | | 47 | | ------ | ------ | ------ | |
| 48 | -| mode | 输入 | 内核模式,用于AIC/AIV/MIX算子的CPU调试。<br><pre>enum class KernelMode { MIX_MODE = 0, AIC_MODE, AIV_MODE };</pre> | | 48 | +| mode | 输入 | 内核模式,用于AIC/AIV/MIX算子的CPU调试。<br>enum class KernelMode { MIX_MODE = 0, AIC_MODE, AIV_MODE }; | |
| 49 | 49 | ||
| 50 | ## 返回值说明<a name="zh-cn_topic_0000001963639310_zh-cn_topic_0000001656094169_section640mcpsimp"></a> | 50 | ## 返回值说明<a name="zh-cn_topic_0000001963639310_zh-cn_topic_0000001656094169_section640mcpsimp"></a> |
| 51 | 51 | ||
| @@ -63,7 +63,7 @@ __aicore__ inline void CheckLocalMemoryIA(const CheckLocalMemoryIAParam& checkPa | |||
| 63 | 63 | ||
| 64 | - startAddr/endAddr的单位是32B,check的范围不包含startAddr,包含endAddr,即(startAddr,endAddr]。 | 64 | - startAddr/endAddr的单位是32B,check的范围不包含startAddr,包含endAddr,即(startAddr,endAddr]。 |
| 65 | - 每次调用完该接口需要进行复位(配置isEnable为false进行复位)。 | 65 | - 每次调用完该接口需要进行复位(配置isEnable为false进行复位)。 |
| 66 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 66 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 67 | 67 | ||
| 68 | ## 调用示例<a name="section642mcpsimp"></a> | 68 | ## 调用示例<a name="section642mcpsimp"></a> |
| 69 | 69 | ||
| @@ -68,7 +68,7 @@ __aicore__ inline void DumpAccChkPoint(const GlobalTensor<T> &tensor, uint32_t i | |||
| 68 | | ------ | ------ | ------ | | 68 | | ------ | ------ | ------ | |
| 69 | | tensor | 输入 | 需要dump的Tensor。<br>•待dump的tensor位于Unified Buffer/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。<br>•待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。| | 69 | | tensor | 输入 | 需要dump的Tensor。<br>•待dump的tensor位于Unified Buffer/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。<br>•待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。| |
| 70 | | index | 输入 | 用户自定义附加信息(行号或其他自定义数字)。| | 70 | | index | 输入 | 用户自定义附加信息(行号或其他自定义数字)。| |
| 71 | -| countOff | 输入 | 偏移元素个数。偏移后的Tensor地址需要满足所在物理位置的对齐约束。具体参考[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。| | 71 | +| countOff | 输入 | 偏移元素个数。偏移后的Tensor地址需要满足所在物理位置的对齐约束。具体参考[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。| |
| 72 | | dumpSize | 输入 | 需要dump的元素个数。| | 72 | | dumpSize | 输入 | 需要dump的元素个数。| |
| 73 | 73 | ||
| 74 | ## 数据类型 | 74 | ## 数据类型 |
| @@ -96,7 +96,7 @@ __aicore__ inline void DumpAccChkPoint(const GlobalTensor<T> &tensor, uint32_t i | |||
| 96 | <!-- npu="950" id100 --> | 96 | <!-- npu="950" id100 --> |
| 97 | - 针对Ascend 950PR/Ascend 950DT,使用该接口打印L1 Tensor数据时,HDK版本需要至少升级到25.7.0以上。 | 97 | - 针对Ascend 950PR/Ascend 950DT,使用该接口打印L1 Tensor数据时,HDK版本需要至少升级到25.7.0以上。 |
| 98 | <!-- end id100 --> | 98 | <!-- end id100 --> |
| 99 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 99 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 100 | - 单次调用DumpAccChkPoint打印的数据总量不可超过30KB(还包括少量框架需要的头尾信息,通常可忽略)。使用时应注意,如果超出这个限制,则数据不会被打印。 | 100 | - 单次调用DumpAccChkPoint打印的数据总量不可超过30KB(还包括少量框架需要的头尾信息,通常可忽略)。使用时应注意,如果超出这个限制,则数据不会被打印。 |
| 101 | 101 | ||
| 102 | ## 调用示例<a name="section82241477610"></a> | 102 | ## 调用示例<a name="section82241477610"></a> |
| @@ -125,7 +125,7 @@ DumpTensor: desc=5, addr=0, data_type=float16, position=UB, dump_size=32 | |||
| 125 | - 针对Ascend 950PR/Ascend 950DT,打印Fixpipe Buffer中的Tensor信息场景: | 125 | - 针对Ascend 950PR/Ascend 950DT,打印Fixpipe Buffer中的Tensor信息场景: |
| 126 | - Fixpipe Buffer保存的是硬件参数位域,打印结果不一定与L1 Buffer中的原始数据按位相同。前级Quant参数每8字节保留bit[7:0]、bit[31:13]和bit[46:37],期望值为`input & 0x00007fe0ffffe0ffULL`;前级ReLU参数每4字节保留bit[31:13],期望值为`word & 0xffffe000U`。 | 126 | - Fixpipe Buffer保存的是硬件参数位域,打印结果不一定与L1 Buffer中的原始数据按位相同。前级Quant参数每8字节保留bit[7:0]、bit[31:13]和bit[46:37],期望值为`input & 0x00007fe0ffffe0ffULL`;前级ReLU参数每4字节保留bit[31:13],期望值为`word & 0xffffe000U`。 |
| 127 | <!-- end id113 --> | 127 | <!-- end id113 --> |
| 128 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 128 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 129 | - SIMD场景下,单次调用本接口打印的数据总量不可超过打印大小限制,默认为30KB。使用时应注意,如果超出这个限制,则数据不会被打印。您可以通过[aclInit接口](https://hiascend.com/document/redirect/CannCommunityruntimeapiaclinit)中的"simd\_printf\_fifo\_size\_per\_core"字段进行配置,配置范围最小为1KB,最大为64MB。使用时应注意,如果超出这个限制,则数据不会被打印。 | 129 | - SIMD场景下,单次调用本接口打印的数据总量不可超过打印大小限制,默认为30KB。使用时应注意,如果超出这个限制,则数据不会被打印。您可以通过[aclInit接口](https://hiascend.com/document/redirect/CannCommunityruntimeapiaclinit)中的"simd\_printf\_fifo\_size\_per\_core"字段进行配置,配置范围最小为1KB,最大为64MB。使用时应注意,如果超出这个限制,则数据不会被打印。 |
| 130 | 130 | ||
| 131 | ## 调用示例<a name="section82241477610"></a> | 131 | ## 调用示例<a name="section82241477610"></a> |
| @@ -76,7 +76,7 @@ Mask操作的使用方式如下: | |||
| 76 | > | 76 | > |
| 77 | > - 仅部分API支持isSetMask,具体支持情况请参考对应API的函数原型; | 77 | > - 仅部分API支持isSetMask,具体支持情况请参考对应API的函数原型; |
| 78 | > | 78 | > |
| 79 | -> - 接口外设置Mask**性能实践参考:[基于全局掩码复用的计算性能优化](../../../../../guide/算子实践参考/SIMD算子性能优化/矢量计算/基于全局掩码复用的计算性能优化.md)**。 | 79 | +> - 接口外设置Mask**性能实践参考:[基于全局掩码复用的计算性能优化](../../../../../guide/算子实践参考/SIMD算子性能优化/矢量计算/mask_reuse_optimization.md)**。 |
| 80 | 80 | ||
| 81 | ## 接口内设置Mask | 81 | ## 接口内设置Mask |
| 82 | 82 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/Vector_logical_arch/Vector_logical_arch.md+2-2
| @@ -37,8 +37,8 @@ Vector计算单元专用于执行向量计算。如下图所示,高亮部分 | |||
| 37 | 37 | ||
| 38 | ### Unified Buffer的通用约束说明 | 38 | ### Unified Buffer的通用约束说明 |
| 39 | 39 | ||
| 40 | -- Unified Buffer地址对齐约束,请参考[通用地址对齐约束](../../../通用说明和约束.md#通用地址对齐约束)。 | 40 | +- Unified Buffer地址对齐约束,请参考[通用地址对齐约束](../../../general_description_and_constraints.md#通用地址对齐约束)。 |
| 41 | -- Unified Buffer地址重叠约束,请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 41 | +- Unified Buffer地址重叠约束,请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 42 | 42 | ||
| 43 | ### Unified Buffer的内存结构与bank冲突 | 43 | ### Unified Buffer的内存结构与bank冲突 |
| 44 | 44 | ||
| @@ -86,8 +86,8 @@ $dst_i = |src_i|$ | |||
| 86 | 86 | ||
| 87 | | 参数名 | 输入/输出 | 描述 | | 87 | | 参数名 | 输入/输出 | 描述 | |
| 88 | |---|---|---| | 88 | |---|---|---| |
| 89 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 89 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 90 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 90 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 91 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 91 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 92 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 92 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 93 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 93 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -128,8 +128,8 @@ $dst_i = |src_i|$ | |||
| 128 | 128 | ||
| 129 | ## 约束说明<a name="section633mcpsimp"></a> | 129 | ## 约束说明<a name="section633mcpsimp"></a> |
| 130 | 130 | ||
| 131 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 131 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 132 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 132 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 133 | <!-- npu="A3,910b,950" id20 --> | 133 | <!-- npu="A3,910b,950" id20 --> |
| 134 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 134 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 135 | <!-- npu="A3,910b" id25 --> | 135 | <!-- npu="A3,910b" id25 --> |
| @@ -81,8 +81,8 @@ $dst_i = src0_i + src1_i$ | |||
| 81 | 81 | ||
| 82 | | 参数名 | 输入/输出 | 描述 | | 82 | | 参数名 | 输入/输出 | 描述 | |
| 83 | |---|---|---| | 83 | |---|---|---| |
| 84 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 84 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 85 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 85 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -121,8 +121,8 @@ $dst_i = src0_i + src1_i$ | |||
| 121 | 121 | ||
| 122 | ## 约束说明<a name="section633mcpsimp"></a> | 122 | ## 约束说明<a name="section633mcpsimp"></a> |
| 123 | 123 | ||
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 125 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 125 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 | 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 |
| 127 | 127 | ||
| 128 | <!-- npu="A3,910b,950" id20 --> | 128 | <!-- npu="A3,910b,950" id20 --> |
| @@ -100,8 +100,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 100 | 100 | ||
| 101 | | 参数名 | 输入/输出 | 描述 | | 101 | | 参数名 | 输入/输出 | 描述 | |
| 102 | |---|---|---| | 102 | |---|---|---| |
| 103 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 103 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 104 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。<br>数据类型需要与目的操作数保持一致。 | | 104 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。<br>数据类型需要与目的操作数保持一致。 | |
| 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | | 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | |
| 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| @@ -141,8 +141,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 141 | 141 | ||
| 142 | ## 约束说明<a name="section633mcpsimp"></a> | 142 | ## 约束说明<a name="section633mcpsimp"></a> |
| 143 | 143 | ||
| 144 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 144 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 145 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 145 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 146 | 146 | ||
| 147 | <!-- npu="A3,910b,950" id24 --> | 147 | <!-- npu="A3,910b,950" id24 --> |
| 148 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 148 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -66,7 +66,7 @@ $dst_i = scalar + src_i$ | |||
| 66 | | ---- | ---- | | 66 | | ---- | ---- | |
| 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | | 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | |
| 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | | 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | |
| 69 | -| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br><pre>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};</pre> | | 69 | +| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
| 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | | 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | |
| 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | | 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | |
| 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | | 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | |
| @@ -75,8 +75,8 @@ $dst_i = scalar + src_i$ | |||
| 75 | 75 | ||
| 76 | | 参数名称 | 类型 | 说明 | | 76 | | 参数名称 | 类型 | 说明 | |
| 77 | | ---- | ---- | ---- | | 77 | | ---- | ---- | ---- | |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 <br>• 类型为标量。 | | 79 | +| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 <br>• 类型为标量。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -94,8 +94,8 @@ $dst_i = scalar + src_i$ | |||
| 94 | 94 | ||
| 95 | ## 约束说明<a name="section633mcpsimp"></a> | 95 | ## 约束说明<a name="section633mcpsimp"></a> |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 98 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 98 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 | 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 |
| 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 | 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 |
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/basic_arithmetic/BilinearInterpolation_ISASI.md+1-1
| @@ -206,7 +206,7 @@ hRepeat = 2;vRepeat = 2;mask = 128;vROffset = 128。 | |||
| 206 | 206 | ||
| 207 | ## 约束说明<a name="section633mcpsimp"></a> | 207 | ## 约束说明<a name="section633mcpsimp"></a> |
| 208 | 208 | ||
| 209 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 209 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 210 | - src0、src1、src0Offset之间不允许地址重叠,且两个垂直repeat的目的地址之间不允许地址重叠。 | 210 | - src0、src1、src0Offset之间不允许地址重叠,且两个垂直repeat的目的地址之间不允许地址重叠。 |
| 211 | - 参数vROffset的取值范围为\[128, 65535\)。 | 211 | - 参数vROffset的取值范围为\[128, 65535\)。 |
| 212 | - 水平方向迭代次数,取值范围为\[1, 255\]。 | 212 | - 水平方向迭代次数,取值范围为\[1, 255\]。 |
| @@ -134,14 +134,14 @@ $dst_i = src0_i / src1_i$ | |||
| 134 | |---|---| | 134 | |---|---| |
| 135 | | T | 操作数数据类型。 | | 135 | | T | 操作数数据类型。 | |
| 136 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | | 136 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | |
| 137 | -| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,DivConfig类型,定义如下:<br><pre>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 DivConfig {<br> DivAlgo algo = DivAlgo::INTRINSIC;<br>};</pre>通过DivConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>• DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br>• DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>• DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持Subnormal数据计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>• DivAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,使用单指令计算得出结果,最大精度误差为1ulp。<br>该参数的默认值DEFAULT_DIV_CONFIG的取值如下:<br><pre>constexpr DivConfig DEFAULT_DIV_CONFIG = { DivAlgo::INTRINSIC };</pre><br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_DIV_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | | 137 | +| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,DivConfig类型,定义如下:<br>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 DivConfig {<br> DivAlgo algo = DivAlgo::INTRINSIC;<br>};<br>通过DivConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>• DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br>• DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>• DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持Subnormal数据计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br>• DivAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,使用单指令计算得出结果,最大精度误差为1ulp。<br>该参数的默认值DEFAULT_DIV_CONFIG的取值如下:<br>constexpr DivConfig DEFAULT_DIV_CONFIG = { DivAlgo::INTRINSIC };<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_DIV_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | |
| 138 | 138 | ||
| 139 | **表2** 参数说明 | 139 | **表2** 参数说明 |
| 140 | 140 | ||
| 141 | | 参数名 | 输入/输出 | 描述 | | 141 | | 参数名 | 输入/输出 | 描述 | |
| 142 | |---|---|---| | 142 | |---|---|---| |
| 143 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 143 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 144 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。<br>两个源操作数的数据类型需要与目的操作数保持一致。 | | 144 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。<br>两个源操作数的数据类型需要与目的操作数保持一致。 | |
| 145 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 145 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 146 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 146 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 147 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 147 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -180,8 +180,8 @@ $dst_i = src0_i / src1_i$ | |||
| 180 | 180 | ||
| 181 | ## 约束说明<a name="section633mcpsimp"></a> | 181 | ## 约束说明<a name="section633mcpsimp"></a> |
| 182 | 182 | ||
| 183 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 183 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 184 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 184 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 185 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 | 185 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 |
| 186 | 186 | ||
| 187 | <!-- npu="A3,910b,950" id28 --> | 187 | <!-- npu="A3,910b,950" id28 --> |
| @@ -66,7 +66,7 @@ $dst_i = scalar \div src_i$ | |||
| 66 | | ---- | ---- | | 66 | | ---- | ---- | |
| 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | | 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | |
| 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | | 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | |
| 69 | -| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br><pre>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};</pre> | | 69 | +| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
| 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | | 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | |
| 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | | 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | |
| 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | | 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | |
| @@ -75,8 +75,8 @@ $dst_i = scalar \div src_i$ | |||
| 75 | 75 | ||
| 76 | | 参数名称 | 类型 | 说明 | | 76 | | 参数名称 | 类型 | 说明 | |
| 77 | | ---- | ---- | ---- | | 77 | | ---- | ---- | ---- | |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 <br>• 类型为标量。 | | 79 | +| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 <br>• 类型为标量。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -94,8 +94,8 @@ $dst_i = scalar \div src_i$ | |||
| 94 | 94 | ||
| 95 | ## 约束说明<a name="section633mcpsimp"></a> | 95 | ## 约束说明<a name="section633mcpsimp"></a> |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 98 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 98 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 99 | - 使用Tensor高维切分计算接口时,节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下: | 99 | - 使用Tensor高维切分计算接口时,节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下: |
| 100 | - 对于单次repeat(repeatTime=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。 | 100 | - 对于单次repeat(repeatTime=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。 |
| 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 | 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 |
| @@ -128,14 +128,14 @@ $dst_i = e^{src_i}$ | |||
| 128 | |---|---| | 128 | |---|---| |
| 129 | | T | 操作数数据类型。 | | 129 | | T | 操作数数据类型。 | |
| 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | | 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | |
| 131 | -| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,ExpConfig类型,定义如下:<br><pre>enum class ExpAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct ExpConfig {<br> ExpAlgo algo = ExpAlgo::INTRINSIC;<br>};</pre>通过ExpConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>• ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br>• ExpAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_EXP_CONFIG的取值如下:<br><pre>constexpr ExpConfig DEFAULT_EXP_CONFIG = { ExpAlgo::INTRINSIC };</pre><br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_EXP_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | | 131 | +| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,ExpConfig类型,定义如下:<br>enum class ExpAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct ExpConfig {<br> ExpAlgo algo = ExpAlgo::INTRINSIC;<br>};<br>通过ExpConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>• ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br>• ExpAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_EXP_CONFIG的取值如下:<br>constexpr ExpConfig DEFAULT_EXP_CONFIG = { ExpAlgo::INTRINSIC };<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_EXP_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | |
| 132 | 132 | ||
| 133 | **表2** 参数说明 | 133 | **表2** 参数说明 |
| 134 | 134 | ||
| 135 | | 参数名 | 输入/输出 | 描述 | | 135 | | 参数名 | 输入/输出 | 描述 | |
| 136 | |---|---|---| | 136 | |---|---|---| |
| 137 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 137 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 138 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 138 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -151,8 +151,8 @@ T支持的数据类型为:half、float。 | |||
| 151 | 151 | ||
| 152 | ## 约束说明<a name="section633mcpsimp"></a> | 152 | ## 约束说明<a name="section633mcpsimp"></a> |
| 153 | 153 | ||
| 154 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 154 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 155 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 155 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 156 | 156 | ||
| 157 | <!-- npu="A3,910b,950" id20 --> | 157 | <!-- npu="A3,910b,950" id20 --> |
| 158 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 158 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -110,8 +110,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 110 | 110 | ||
| 111 | | 参数名 | 输入/输出 | 描述 | | 111 | | 参数名 | 输入/输出 | 描述 | |
| 112 | |---|---|---| | 112 | |---|---|---| |
| 113 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 113 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 114 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 114 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 115 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | | 115 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | |
| 116 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 116 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 117 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 117 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| @@ -128,8 +128,8 @@ T和U支持的数据类型为:half、float。 | |||
| 128 | 128 | ||
| 129 | ## 约束说明<a name="section1636318590"></a> | 129 | ## 约束说明<a name="section1636318590"></a> |
| 130 | 130 | ||
| 131 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 131 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 132 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 132 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 133 | 133 | ||
| 134 | <!-- npu="A3,910b,950" id16 --> | 134 | <!-- npu="A3,910b,950" id16 --> |
| 135 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 135 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -128,7 +128,7 @@ $dst_i = \ln(src_i)$ | |||
| 128 | |---|---| | 128 | |---|---| |
| 129 | | T | 操作数数据类型。 | | 129 | | T | 操作数数据类型。 | |
| 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | | 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | |
| 131 | -| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,LnConfig类型,定义如下:<br><pre>enum class LnAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct LnConfig {<br> LnAlgo algo = LnAlgo::INTRINSIC;<br>};</pre>通过LnConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>• LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br>• LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_LN_CONFIG的取值如下:<br><pre>constexpr LnConfig DEFAULT_LN_CONFIG = { LnAlgo::INTRINSIC };</pre><br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_LN_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | | 131 | +| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,LnConfig类型,定义如下:<br>enum class LnAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct LnConfig {<br> LnAlgo algo = LnAlgo::INTRINSIC;<br>};<br>通过LnConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>• LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br>• LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_LN_CONFIG的取值如下:<br>constexpr LnConfig DEFAULT_LN_CONFIG = { LnAlgo::INTRINSIC };<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_LN_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | |
| 132 | 132 | ||
| 133 | **表2** 参数说明 | 133 | **表2** 参数说明 |
| 134 | 134 | ||
| @@ -136,8 +136,8 @@ $dst_i = \ln(src_i)$ | |||
| 136 | 136 | ||
| 137 | | 参数名 | 输入/输出 | 描述 | | 137 | | 参数名 | 输入/输出 | 描述 | |
| 138 | |--------|-----------|------| | 138 | |--------|-----------|------| |
| 139 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 139 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 140 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 140 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 141 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 141 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 142 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 142 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 143 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 143 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -153,8 +153,8 @@ T支持的数据类型为:half、float。 | |||
| 153 | 153 | ||
| 154 | ## 约束说明<a name="section633mcpsimp"></a> | 154 | ## 约束说明<a name="section633mcpsimp"></a> |
| 155 | 155 | ||
| 156 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 156 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 157 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 157 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 158 | 158 | ||
| 159 | <!-- npu="A3,910b,950" id20 --> | 159 | <!-- npu="A3,910b,950" id20 --> |
| 160 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 160 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -75,8 +75,8 @@ $dst_i = max(src0_i, src1_i)$ | |||
| 75 | 75 | ||
| 76 | | 参数名 | 输入/输出 | 描述 | | 76 | | 参数名 | 输入/输出 | 描述 | |
| 77 | |---|---|---| | 77 | |---|---|---| |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。<br>两个源操作数的数据类型需要与目的操作数保持一致。 | | 79 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。<br>两个源操作数的数据类型需要与目的操作数保持一致。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -115,8 +115,8 @@ $dst_i = max(src0_i, src1_i)$ | |||
| 115 | 115 | ||
| 116 | ## 约束说明<a name="section633mcpsimp"></a> | 116 | ## 约束说明<a name="section633mcpsimp"></a> |
| 117 | 117 | ||
| 118 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 118 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 119 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 119 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 120 | 120 | ||
| 121 | <!-- npu="A3,910b,950" id20 --> | 121 | <!-- npu="A3,910b,950" id20 --> |
| 122 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 122 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -100,8 +100,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 100 | 100 | ||
| 101 | | 参数名 | 输入/输出 | 描述 | | 101 | | 参数名 | 输入/输出 | 描述 | |
| 102 | |---|---|---| | 102 | |---|---|---| |
| 103 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 103 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 104 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 104 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | | 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | |
| 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| @@ -138,8 +138,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 138 | 138 | ||
| 139 | ## 约束说明<a name="section633mcpsimp"></a> | 139 | ## 约束说明<a name="section633mcpsimp"></a> |
| 140 | 140 | ||
| 141 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 141 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 142 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 142 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 143 | 143 | ||
| 144 | <!-- npu="A3,910b,950" id23 --> | 144 | <!-- npu="A3,910b,950" id23 --> |
| 145 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 145 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -66,7 +66,7 @@ $dst_i = \operatorname{Max}(scalar, src_i)$ | |||
| 66 | | ---- | ---- | | 66 | | ---- | ---- | |
| 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | | 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | |
| 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | | 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | |
| 69 | -| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br><pre>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};</pre> | | 69 | +| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
| 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | | 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | |
| 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | | 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | |
| 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | | 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | |
| @@ -75,8 +75,8 @@ $dst_i = \operatorname{Max}(scalar, src_i)$ | |||
| 75 | 75 | ||
| 76 | | 参数名称 | 类型 | 说明 | | 76 | | 参数名称 | 类型 | 说明 | |
| 77 | | ---- | ---- | ---- | | 77 | | ---- | ---- | ---- | |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 <br>• 类型为标量。 | | 79 | +| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 <br>• 类型为标量。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -94,8 +94,8 @@ $dst_i = \operatorname{Max}(scalar, src_i)$ | |||
| 94 | 94 | ||
| 95 | ## 约束说明<a name="section633mcpsimp"></a> | 95 | ## 约束说明<a name="section633mcpsimp"></a> |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 98 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 98 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持和目的操作数地址重叠。 | 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持和目的操作数地址重叠。 |
| 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 | 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 |
| 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 | 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 |
| @@ -75,8 +75,8 @@ $dst_i = min(src0_i, src1_i)$ | |||
| 75 | 75 | ||
| 76 | | 参数名 | 输入/输出 | 描述 | | 76 | | 参数名 | 输入/输出 | 描述 | |
| 77 | |---|---|---| | 77 | |---|---|---| |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 79 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -115,8 +115,8 @@ $dst_i = min(src0_i, src1_i)$ | |||
| 115 | 115 | ||
| 116 | ## 约束说明<a name="section633mcpsimp"></a> | 116 | ## 约束说明<a name="section633mcpsimp"></a> |
| 117 | 117 | ||
| 118 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 118 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 119 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 119 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 120 | 120 | ||
| 121 | <!-- npu="A3,910b,950" id20 --> | 121 | <!-- npu="A3,910b,950" id20 --> |
| 122 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 122 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -100,8 +100,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 100 | 100 | ||
| 101 | | 参数名 | 输入/输出 | 描述 | | 101 | | 参数名 | 输入/输出 | 描述 | |
| 102 | |---|---|---| | 102 | |---|---|---| |
| 103 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 103 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 104 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 104 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | | 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | |
| 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| @@ -138,8 +138,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 138 | 138 | ||
| 139 | ## 约束说明<a name="section199031843133716"></a> | 139 | ## 约束说明<a name="section199031843133716"></a> |
| 140 | 140 | ||
| 141 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 141 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 142 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 142 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 143 | 143 | ||
| 144 | <!-- npu="A3,910b,950" id23 --> | 144 | <!-- npu="A3,910b,950" id23 --> |
| 145 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 145 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -66,7 +66,7 @@ $dst_i = \operatorname{Min}(scalar, src_i)$ | |||
| 66 | | ---- | ---- | | 66 | | ---- | ---- | |
| 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | | 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | |
| 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | | 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | |
| 69 | -| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br><pre>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};</pre> | | 69 | +| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
| 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | | 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | |
| 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | | 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | |
| 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | | 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | |
| @@ -75,8 +75,8 @@ $dst_i = \operatorname{Min}(scalar, src_i)$ | |||
| 75 | 75 | ||
| 76 | | 参数名称 | 类型 | 说明 | | 76 | | 参数名称 | 类型 | 说明 | |
| 77 | | ---- | ---- | ---- | | 77 | | ---- | ---- | ---- | |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 <br>• 类型为标量。 | | 79 | +| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 <br>• 类型为标量。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -94,8 +94,8 @@ $dst_i = \operatorname{Min}(scalar, src_i)$ | |||
| 94 | 94 | ||
| 95 | ## 约束说明<a name="section199031843133716"></a> | 95 | ## 约束说明<a name="section199031843133716"></a> |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 98 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 98 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 | 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 |
| 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 | 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 |
| @@ -81,8 +81,8 @@ $dst_i = src0_i \times src1_i$ | |||
| 81 | 81 | ||
| 82 | | 参数名 | 输入/输出 | 描述 | | 82 | | 参数名 | 输入/输出 | 描述 | |
| 83 | |---|---|---| | 83 | |---|---|---| |
| 84 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 84 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 85 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 85 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体描述请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体描述请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体描述请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体描述请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -121,8 +121,8 @@ $dst_i = src0_i \times src1_i$ | |||
| 121 | 121 | ||
| 122 | ## 约束说明<a name="section633mcpsimp"></a> | 122 | ## 约束说明<a name="section633mcpsimp"></a> |
| 123 | 123 | ||
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 125 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 125 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 | 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 |
| 127 | 127 | ||
| 128 | <!-- npu="A3,910b,950" id20 --> | 128 | <!-- npu="A3,910b,950" id20 --> |
| @@ -51,8 +51,8 @@ __aicore__ inline void Mull(const LocalTensor<T>& dst0, const LocalTensor<T>& ds | |||
| 51 | 51 | ||
| 52 | | 参数名 | 输入/输出 | 描述 | | 52 | | 参数名 | 输入/输出 | 描述 | |
| 53 | | ---- | ---- | ---- | | 53 | | ---- | ---- | ---- | |
| 54 | -| dst0、dst1 | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 54 | +| dst0、dst1 | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 55 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 55 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 56 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 56 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 57 | 57 | ||
| 58 | ## 数据类型 | 58 | ## 数据类型 |
| @@ -67,8 +67,8 @@ __aicore__ inline void Mull(const LocalTensor<T>& dst0, const LocalTensor<T>& ds | |||
| 67 | 67 | ||
| 68 | ## 约束说明<a name="section633mcpsimp"></a> | 68 | ## 约束说明<a name="section633mcpsimp"></a> |
| 69 | 69 | ||
| 70 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 70 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 71 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 71 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 72 | 72 | ||
| 73 | ## 调用示例<a name="section642mcpsimp"></a> | 73 | ## 调用示例<a name="section642mcpsimp"></a> |
| 74 | 74 | ||
| @@ -100,8 +100,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 100 | 100 | ||
| 101 | | 参数名 | 输入/输出 | 描述 | | 101 | | 参数名 | 输入/输出 | 描述 | |
| 102 | |---|---|---| | 102 | |---|---|---| |
| 103 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 103 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 104 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 104 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | | 105 | | scalarValue | 输入 | 源操作数,数据类型需要与目的操作数中的元素类型保持一致。 | |
| 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 106 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| @@ -141,8 +141,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 141 | 141 | ||
| 142 | ## 约束说明<a name="section633mcpsimp"></a> | 142 | ## 约束说明<a name="section633mcpsimp"></a> |
| 143 | 143 | ||
| 144 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 144 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 145 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 145 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 146 | 146 | ||
| 147 | <!-- npu="A3,910b,950" id24 --> | 147 | <!-- npu="A3,910b,950" id24 --> |
| 148 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 148 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -66,7 +66,7 @@ $dst_i = scalar * src_i$ | |||
| 66 | | ---- | ---- | | 66 | | ---- | ---- | |
| 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | | 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | |
| 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | | 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | |
| 69 | -| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br><pre>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};</pre> | | 69 | +| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
| 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | | 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | |
| 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | | 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | |
| 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | | 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | |
| @@ -75,8 +75,8 @@ $dst_i = scalar * src_i$ | |||
| 75 | 75 | ||
| 76 | | 参数名称 | 类型 | 说明 | | 76 | | 参数名称 | 类型 | 说明 | |
| 77 | | ---- | ---- | ---- | | 77 | | ---- | ---- | ---- | |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 <br>• 类型为标量。 | | 79 | +| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 <br>• 类型为标量。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -94,8 +94,8 @@ $dst_i = scalar * src_i$ | |||
| 94 | 94 | ||
| 95 | ## 约束说明<a name="section13772125417295"></a> | 95 | ## 约束说明<a name="section13772125417295"></a> |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 98 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 98 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 99 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 | 100 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 |
| 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 | 101 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 |
| @@ -51,8 +51,8 @@ __aicore__ inline void Neg(const LocalTensor<T>& dst, const LocalTensor<T>& src, | |||
| 51 | 51 | ||
| 52 | | 参数名 | 输入/输出 | 描述 | | 52 | | 参数名 | 输入/输出 | 描述 | |
| 53 | | ---- | ---- | ---- | | 53 | | ---- | ---- | ---- | |
| 54 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 54 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 55 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 55 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 56 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 56 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 57 | 57 | ||
| 58 | ## 数据类型 | 58 | ## 数据类型 |
| @@ -67,8 +67,8 @@ __aicore__ inline void Neg(const LocalTensor<T>& dst, const LocalTensor<T>& src, | |||
| 67 | 67 | ||
| 68 | ## 约束说明<a name="section633mcpsimp"></a> | 68 | ## 约束说明<a name="section633mcpsimp"></a> |
| 69 | 69 | ||
| 70 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 70 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 71 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 71 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 72 | 72 | ||
| 73 | ## 调用示例<a name="section176061616102911"></a> | 73 | ## 调用示例<a name="section176061616102911"></a> |
| 74 | 74 | ||
| @@ -51,8 +51,8 @@ __aicore__ inline void Prelu(const LocalTensor<T>& dst, const LocalTensor<T>& sr | |||
| 51 | 51 | ||
| 52 | | 参数名 | 输入/输出 | 描述 | | 52 | | 参数名 | 输入/输出 | 描述 | |
| 53 | | ---- | ---- | ---- | | 53 | | ---- | ---- | ---- | |
| 54 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 54 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 55 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 55 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 56 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 56 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 57 | 57 | ||
| 58 | ## 数据类型 | 58 | ## 数据类型 |
| @@ -67,8 +67,8 @@ __aicore__ inline void Prelu(const LocalTensor<T>& dst, const LocalTensor<T>& sr | |||
| 67 | 67 | ||
| 68 | ## 约束说明<a name="section633mcpsimp"></a> | 68 | ## 约束说明<a name="section633mcpsimp"></a> |
| 69 | 69 | ||
| 70 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 70 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 71 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 71 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 72 | 72 | ||
| 73 | ## 调用示例<a name="section642mcpsimp"></a> | 73 | ## 调用示例<a name="section642mcpsimp"></a> |
| 74 | 74 | ||
| @@ -128,14 +128,14 @@ $dst_i = \frac{1}{src_i}$ | |||
| 128 | |---|---| | 128 | |---|---| |
| 129 | | T | 操作数数据类型。 | | 129 | | T | 操作数数据类型。 | |
| 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | | 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | |
| 131 | -| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,ReciprocalConfig类型,定义如下:<br><pre>enum class ReciprocalAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct ReciprocalConfig {<br> ReciprocalAlgo algo = ReciprocalAlgo::INTRINSIC;<br>};</pre>通过ReciprocalConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>• ReciprocalAlgo::INTRINSIC、ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br>• ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_RECIPROCAL_CONFIG的取值如下:<br><pre>constexpr ReciprocalConfig DEFAULT_RECIPROCAL_CONFIG = { ReciprocalAlgo::INTRINSIC };</pre><br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RECIPROCAL_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | | 131 | +| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置Subnormal计算模式,ReciprocalConfig类型,定义如下:<br>enum class ReciprocalAlgo {<br> INTRINSIC = 0,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct ReciprocalConfig {<br> ReciprocalAlgo algo = ReciprocalAlgo::INTRINSIC;<br>};<br>通过ReciprocalConfig结构体的参数algo来配置Subnormal计算模式。algo取值如下:<br>• ReciprocalAlgo::INTRINSIC、ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br>• ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。<br>该参数的默认值DEFAULT_RECIPROCAL_CONFIG的取值如下:<br>constexpr ReciprocalConfig DEFAULT_RECIPROCAL_CONFIG = { ReciprocalAlgo::INTRINSIC };<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RECIPROCAL_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | |
| 132 | 132 | ||
| 133 | **表2** 参数说明 | 133 | **表2** 参数说明 |
| 134 | 134 | ||
| 135 | | 参数名 | 输入/输出 | 描述 | | 135 | | 参数名 | 输入/输出 | 描述 | |
| 136 | |---|---|---| | 136 | |---|---|---| |
| 137 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 137 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 138 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 138 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -174,8 +174,8 @@ $dst_i = \frac{1}{src_i}$ | |||
| 174 | 174 | ||
| 175 | ## 约束说明<a name="section633mcpsimp"></a> | 175 | ## 约束说明<a name="section633mcpsimp"></a> |
| 176 | 176 | ||
| 177 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 177 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 178 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 178 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 179 | 179 | ||
| 180 | <!-- npu="A3,910b,950" id28 --> | 180 | <!-- npu="A3,910b,950" id28 --> |
| 181 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 181 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -79,8 +79,8 @@ $dst_i = \max(0, src_i)$ | |||
| 79 | 79 | ||
| 80 | | 参数名 | 输入/输出 | 描述 | | 80 | | 参数名 | 输入/输出 | 描述 | |
| 81 | |---|---|---| | 81 | |---|---|---| |
| 82 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 82 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 83 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 83 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 84 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 84 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 85 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 85 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 86 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 86 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -119,8 +119,8 @@ $dst_i = \max(0, src_i)$ | |||
| 119 | 119 | ||
| 120 | ## 约束说明<a name="section633mcpsimp"></a> | 120 | ## 约束说明<a name="section633mcpsimp"></a> |
| 121 | 121 | ||
| 122 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 122 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 123 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 123 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 124 | 124 | ||
| 125 | <!-- npu="A3,910b,950" id20 --> | 125 | <!-- npu="A3,910b,950" id20 --> |
| 126 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 126 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -128,14 +128,14 @@ $dst_i = \frac{1}{\sqrt{src_i}}$ | |||
| 128 | |---|---| | 128 | |---|---| |
| 129 | | T | 操作数数据类型。 | | 129 | | T | 操作数数据类型。 | |
| 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | | 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | |
| 131 | -| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,RsqrtConfig类型,定义如下:<br><pre>enum class RsqrtAlgo {<br> INTRINSIC = 0,<br> FAST_INVERSE,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_FALSE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct RsqrtConfig {<br> RsqrtAlgo algo = RsqrtAlgo::INTRINSIC;<br>};</pre>通过RsqrtConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>• RsqrtAlgo::INTRINSIC、RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br>• RsqrtAlgo::FAST_INVERSE、RsqrtAlgo::PRECISION_0ULP_FTZ_FALSE,使用快速求逆算法得出结果。适用于输入值在[0, 85070596800837026223494223584045301760]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为inf。目前,该算法支持float数据类型,并在该模式下支持Subnormal数据计算。<br>• RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE,仅支持half类型的Subnormal数据计算,此时最大精度误差为1ulp。<br>该参数的默认值DEFAULT_RSQRT_CONFIG的取值如下:<br><pre>constexpr RsqrtConfig DEFAULT_RSQRT_CONFIG = { RsqrtAlgo::INTRINSIC };</pre><br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RSQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | | 131 | +| <!-- npu="950" id19 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,RsqrtConfig类型,定义如下:<br>enum class RsqrtAlgo {<br> INTRINSIC = 0,<br> FAST_INVERSE,<br> PRECISION_1ULP_FTZ_TRUE,<br> PRECISION_0ULP_FTZ_FALSE,<br> PRECISION_1ULP_FTZ_FALSE,<br>};<br>struct RsqrtConfig {<br> RsqrtAlgo algo = RsqrtAlgo::INTRINSIC;<br>};<br>通过RsqrtConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>• RsqrtAlgo::INTRINSIC、RsqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br>• RsqrtAlgo::FAST_INVERSE、RsqrtAlgo::PRECISION_0ULP_FTZ_FALSE,使用快速求逆算法得出结果。适用于输入值在[0, 85070596800837026223494223584045301760]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为inf。目前,该算法支持float数据类型,并在该模式下支持Subnormal数据计算。<br>• RsqrtAlgo::PRECISION_1ULP_FTZ_FALSE,仅支持half类型的Subnormal数据计算,此时最大精度误差为1ulp。<br>该参数的默认值DEFAULT_RSQRT_CONFIG的取值如下:<br>constexpr RsqrtConfig DEFAULT_RSQRT_CONFIG = { RsqrtAlgo::INTRINSIC };<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_RSQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id19 --> | |
| 132 | 132 | ||
| 133 | **表2** 参数说明 | 133 | **表2** 参数说明 |
| 134 | 134 | ||
| 135 | | 参数名 | 输入/输出 | 描述 | | 135 | | 参数名 | 输入/输出 | 描述 | |
| 136 | |---|---|---| | 136 | |---|---|---| |
| 137 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 137 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 138 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 138 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -151,8 +151,8 @@ T支持的数据类型为:half、float。 | |||
| 151 | 151 | ||
| 152 | ## 约束说明<a name="section633mcpsimp"></a> | 152 | ## 约束说明<a name="section633mcpsimp"></a> |
| 153 | 153 | ||
| 154 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 154 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 155 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 155 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 156 | 156 | ||
| 157 | <!-- npu="A3,910b,950" id20 --> | 157 | <!-- npu="A3,910b,950" id20 --> |
| 158 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 158 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -128,14 +128,14 @@ $dst_i = \sqrt{src_i}$ | |||
| 128 | |---|---| | 128 | |---|---| |
| 129 | | T | 操作数数据类型。 | | 129 | | T | 操作数数据类型。 | |
| 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | | 130 | | isSetMask | 是否在接口内部设置mask。<br>• true,表示在接口内部设置mask。<br>• false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 | |
| 131 | -| <!-- npu="950" id22 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,SqrtConfig类型,定义如下:<br><pre>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 SqrtConfig {<br> SqrtAlgo algo = SqrtAlgo::INTRINSIC;<br>};</pre>通过SqrtConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>• SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br>• SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE,使用快速求逆算法得出结果。适用于输入值在[0, 85070596800837026223494223584045301760]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为0。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br>• SqrtAlgo::PRECISION_1ULP_FTZ_FALSE,仅支持half类型的Subnormal数据计算,此时最大精度误差为1ulp。<br>该参数的默认值DEFAULT_SQRT_CONFIG的取值如下:<br><pre>constexpr SqrtConfig DEFAULT_SQRT_CONFIG = { SqrtAlgo::INTRINSIC };</pre><br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_SQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id22 --> | | 131 | +| <!-- npu="950" id22 -->config | 该参数仅支持Ascend 950PR/Ascend 950DT。<br>用于配置精度计算模式,SqrtConfig类型,定义如下:<br>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 SqrtConfig {<br> SqrtAlgo algo = SqrtAlgo::INTRINSIC;<br>};<br>通过SqrtConfig结构体的参数algo来配置精度计算模式。algo取值如下:<br>• SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br>• SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE,使用快速求逆算法得出结果。适用于输入值在[0, 85070596800837026223494223584045301760]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为0。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br>• SqrtAlgo::PRECISION_1ULP_FTZ_FALSE,仅支持half类型的Subnormal数据计算,此时最大精度误差为1ulp。<br>该参数的默认值DEFAULT_SQRT_CONFIG的取值如下:<br>constexpr SqrtConfig DEFAULT_SQRT_CONFIG = { SqrtAlgo::INTRINSIC };<br>调用本原型时若不显式传入config参数,则默认使用DEFAULT_SQRT_CONFIG,此时行为与不传入config参数的原型等价。<!-- end id22 --> | |
| 132 | 132 | ||
| 133 | **表2** 参数说明 | 133 | **表2** 参数说明 |
| 134 | 134 | ||
| 135 | | 参数名 | 输入/输出 | 描述 | | 135 | | 参数名 | 输入/输出 | 描述 | |
| 136 | |---|---|---| | 136 | |---|---|---| |
| 137 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 137 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 138 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 138 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 139 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 140 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 141 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -151,8 +151,8 @@ T支持的数据类型为:half、float。 | |||
| 151 | 151 | ||
| 152 | ## 约束说明<a name="section633mcpsimp"></a> | 152 | ## 约束说明<a name="section633mcpsimp"></a> |
| 153 | 153 | ||
| 154 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 154 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 155 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 155 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 156 | 156 | ||
| 157 | <!-- npu="A3,910b,950" id20 --> | 157 | <!-- npu="A3,910b,950" id20 --> |
| 158 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 158 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -81,8 +81,8 @@ $dst_i = src0_i - src1_i$ | |||
| 81 | 81 | ||
| 82 | | 参数名 | 输入/输出 | 描述 | | 82 | | 参数名 | 输入/输出 | 描述 | |
| 83 | |---|---|---| | 83 | |---|---|---| |
| 84 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 84 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 85 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 85 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -121,8 +121,8 @@ $dst_i = src0_i - src1_i$ | |||
| 121 | 121 | ||
| 122 | ## 约束说明<a name="section633mcpsimp"></a> | 122 | ## 约束说明<a name="section633mcpsimp"></a> |
| 123 | 123 | ||
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 125 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 125 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 | 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 |
| 127 | 127 | ||
| 128 | <!-- npu="A3,910b,950" id20 --> | 128 | <!-- npu="A3,910b,950" id20 --> |
| @@ -66,7 +66,7 @@ $dst_i = scalar - src_i$ | |||
| 66 | | ---- | ---- | | 66 | | ---- | ---- | |
| 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | | 67 | | T | 操作数数据类型。<br>对于灵活标量位置接口,为预留参数,暂未启用,为后续的功能扩展做保留,需要指定时,传入默认值BinaryDefaultType即可。 | |
| 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | | 68 | | isSetMask | 是否在接口内部设置mask模式和mask值。<br>• true:表示在接口内部设置mask。<br>• false:表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER。<br>具体使用方式可参考[掩码](../SIMD_compute/mask.md)。 | |
| 69 | -| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br><pre>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};</pre> | | 69 | +| config | 类型为BinaryConfig,当标量为LocalTensor单点元素类型时生效,用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG,表示右操作数为标量。<br>struct BinaryConfig {<br> int8_t scalarTensorIndex = 1; // 用于指定标量为LocalTensor单点元素时标量的位置,0表示左操作数,1表示右操作数<br>};<br>constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
| 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | | 70 | | U | LocalTensor类型,根据输入参数dst自动推导相应的数据类型,开发者无需配置该参数,保证dst满足数据类型的约束即可。 | |
| 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | | 71 | | S | LocalTensor类型或标量类型,根据输入参数src0自动推导相应的数据类型,开发者无需配置该参数,保证src0满足数据类型的约束即可。 | |
| 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | | 72 | | V | LocalTensor类型或标量类型,根据输入参数src1自动推导相应的数据类型,开发者无需配置该参数,保证src1满足数据类型的约束即可。 | |
| @@ -75,8 +75,8 @@ $dst_i = scalar - src_i$ | |||
| 75 | 75 | ||
| 76 | | 参数名称 | 类型 | 说明 | | 76 | | 参数名称 | 类型 | 说明 | |
| 77 | | ---- | ---- | ---- | | 77 | | ---- | ---- | ---- | |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md)。 <br>• 类型为标量。 | | 79 | +| src0/src1 | 输入 | 灵活标量位置接口中源操作数。<br>• 类型为LocalTensor:可作矢量操作数或标量单点元素,TPosition支持VECIN/VECCALC/VECOUT。地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md)。 <br>• 类型为标量。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -94,8 +94,8 @@ $dst_i = scalar - src_i$ | |||
| 94 | 94 | ||
| 95 | ## 约束说明<a name="section633mcpsimp"></a> | 95 | ## 约束说明<a name="section633mcpsimp"></a> |
| 96 | 96 | ||
| 97 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 97 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 98 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 98 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 99 | - 使用tensor高维切分计算接口时,节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下: | 99 | - 使用tensor高维切分计算接口时,节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下: |
| 100 | - 对于单次repeat(repeatTime=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。 | 100 | - 对于单次repeat(repeatTime=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。 |
| 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 | 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 |
| @@ -203,7 +203,7 @@ | |||
| 203 | 203 | ||
| 204 | ## 约束说明<a name="section633mcpsimp"></a> | 204 | ## 约束说明<a name="section633mcpsimp"></a> |
| 205 | 205 | ||
| 206 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 206 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 207 | 207 | ||
| 208 | - dst按照小端顺序排序成二进制结果,对应src中相应位置的数据比较结果。 | 208 | - dst按照小端顺序排序成二进制结果,对应src中相应位置的数据比较结果。 |
| 209 | 209 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/compare_and_select/Compare_store_to_register.md+1-1
| @@ -88,7 +88,7 @@ | |||
| 88 | 88 | ||
| 89 | ## 约束说明<a name="section633mcpsimp"></a> | 89 | ## 约束说明<a name="section633mcpsimp"></a> |
| 90 | 90 | ||
| 91 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 91 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 92 | 92 | ||
| 93 | - 本接口没有repeat输入,repeat默认为1,即一条指令计算256B的数据。 | 93 | - 本接口没有repeat输入,repeat默认为1,即一条指令计算256B的数据。 |
| 94 | 94 | ||
| @@ -179,7 +179,7 @@ | |||
| 179 | 179 | ||
| 180 | ## 约束说明<a name="section633mcpsimp"></a> | 180 | ## 约束说明<a name="section633mcpsimp"></a> |
| 181 | 181 | ||
| 182 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 182 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 183 | 183 | ||
| 184 | - dst按照小端顺序排序成二进制结果,对应src0中相应位置的数据比较结果。 | 184 | - dst按照小端顺序排序成二进制结果,对应src0中相应位置的数据比较结果。 |
| 185 | 185 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/compare_and_select/Compares_flexible_scalar.md+1-1
| @@ -108,7 +108,7 @@ Ascend 950PR/Ascend 950DT,目的操作数dst支持的数据类型为:uint8_t | |||
| 108 | 108 | ||
| 109 | ## 约束说明<a name="section633mcpsimp"></a> | 109 | ## 约束说明<a name="section633mcpsimp"></a> |
| 110 | 110 | ||
| 111 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 111 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 112 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 112 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 113 | 113 | ||
| 114 | - dst按照小端顺序排序成二进制结果,对应src中相应位置的数据比较结果。 | 114 | - dst按照小端顺序排序成二进制结果,对应src中相应位置的数据比较结果。 |
| @@ -246,9 +246,9 @@ repeatTimes值不生效,指令的迭代次数由源操作数和mask共同决 | |||
| 246 | 246 | ||
| 247 | ## 约束说明<a name="section633mcpsimp"></a> | 247 | ## 约束说明<a name="section633mcpsimp"></a> |
| 248 | 248 | ||
| 249 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 249 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 250 | 250 | ||
| 251 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 251 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 252 | 252 | ||
| 253 | - 采用内置固定模式时,配置src1RepeatStride参数无效。 | 253 | - 采用内置固定模式时,配置src1RepeatStride参数无效。 |
| 254 | 254 | ||
| @@ -169,7 +169,7 @@ Kirin 9030,支持模式0、1、2。 | |||
| 169 | | selMask | 输入 | 选取mask。<br>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐。<br>每个比特位表示1个元素的选取,当selMask的比特位为1时,从src0中选取元素;比特位为0时,从src1中选取元素。<br>各模式下的selMask使用方式详见selMode参数说明。<br> | | 169 | | selMask | 输入 | 选取mask。<br>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐。<br>每个比特位表示1个元素的选取,当selMask的比特位为1时,从src0中选取元素;比特位为0时,从src1中选取元素。<br>各模式下的selMask使用方式详见selMode参数说明。<br> | |
| 170 | | src0 | 输入 | 源操作数。<br>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐。 | | 170 | | src0 | 输入 | 源操作数。<br>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐。 | |
| 171 | | src1 | 输入 | 源操作数。<br>•当selMode为模式0或模式2时:<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐。<br>•当selMode为模式1时,类型为T,标量数据类型。 | | 171 | | src1 | 输入 | 源操作数。<br>•当selMode为模式0或模式2时:<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐。<br>•当selMode为模式1时,类型为T,标量数据类型。 | |
| 172 | -| selMode | 输入 | 指令模式,SELMODE类型,取值如下:<br><pre>enum class SELMODE : uint8_t {<br> VSEL_CMPMASK_SPR = 0, <br> VSEL_TENSOR_SCALAR_MODE,<br> VSEL_TENSOR_TENSOR_MODE,<br>};</pre> 三种模式详细说明请参考[功能说明](#section618mcpsimp)。| | 172 | +| selMode | 输入 | 指令模式,SELMODE类型,取值如下:<br>enum class SELMODE : uint8_t {<br> VSEL_CMPMASK_SPR = 0, <br> VSEL_TENSOR_SCALAR_MODE,<br> VSEL_TENSOR_TENSOR_MODE,<br>};<br> 三种模式详细说明请参考[功能说明](#section618mcpsimp)。| |
| 173 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。<br>设置详见[掩码](../SIMD_compute/mask.md)。| | 173 | | mask/mask[] | 输入 | mask用于控制每次迭代内参与计算的元素。<br>设置详见[掩码](../SIMD_compute/mask.md)。| |
| 174 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>具体请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 174 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>具体请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| 175 | | repeatParams | 输入 | 控制操作数地址步长的参数。[BinaryRepeatParams](../../aux_data_structures/BinaryRepeatParams.md)类型,包含操作数相邻迭代间相同DataBlock的地址步长,操作数同一迭代内不同DataBlock的地址步长等参数。<br>相邻迭代间的地址步长参数说明请参考[repeatStride](../SIMD_compute/high_dim_split.md);同一迭代内DataBlock的地址步长参数说明请参考[dataBlockStride](../SIMD_compute/high_dim_split.md)。 | | 175 | | repeatParams | 输入 | 控制操作数地址步长的参数。[BinaryRepeatParams](../../aux_data_structures/BinaryRepeatParams.md)类型,包含操作数相邻迭代间相同DataBlock的地址步长,操作数同一迭代内不同DataBlock的地址步长等参数。<br>相邻迭代间的地址步长参数说明请参考[repeatStride](../SIMD_compute/high_dim_split.md);同一迭代内DataBlock的地址步长参数说明请参考[dataBlockStride](../SIMD_compute/high_dim_split.md)。 | |
| @@ -218,9 +218,9 @@ Kirin 9030,支持模式0、1、2。 | |||
| 218 | 218 | ||
| 219 | ## 约束说明<a name="section633mcpsimp"></a> | 219 | ## 约束说明<a name="section633mcpsimp"></a> |
| 220 | 220 | ||
| 221 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 221 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 222 | 222 | ||
| 223 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 223 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 224 | 224 | ||
| 225 | <!-- npu="950" id10 --> | 225 | <!-- npu="950" id10 --> |
| 226 | - 当参数count或repeatTime取值为0时,针对Ascend 950PR/Ascend 950DT,该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,不保证该接口将被视为NOP(空操作)。 | 226 | - 当参数count或repeatTime取值为0时,针对Ascend 950PR/Ascend 950DT,该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,不保证该接口将被视为NOP(空操作)。 |
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/compare_and_select/Select_flexible_scalar.md+1-1
| @@ -104,7 +104,7 @@ Ascend 950PR/Ascend 950DT,源操作数dst和目的操作数src支持的数据 | |||
| 104 | ## 约束说明<a name="section633mcpsimp"></a> | 104 | ## 约束说明<a name="section633mcpsimp"></a> |
| 105 | 105 | ||
| 106 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 106 | - 调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 107 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 107 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 108 | 108 | ||
| 109 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 | 109 | - 左操作数及右操作数中,必须有一个为矢量;当前不支持左右操作数同时为标量。 |
| 110 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 | 110 | - 本接口传入LocalTensor单点数据作为标量时,idx参数需要传入编译期已知的常量,传入变量时需要声明为constexpr。 |
| @@ -68,9 +68,9 @@ Ascend 950PR/Ascend 950DT,T支持的数据类型为:half、float。 | |||
| 68 | 68 | ||
| 69 | ## 约束说明<a name="section633mcpsimp"></a> | 69 | ## 约束说明<a name="section633mcpsimp"></a> |
| 70 | 70 | ||
| 71 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 71 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 72 | 72 | ||
| 73 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 73 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 74 | 74 | ||
| 75 | <!-- npu="950" id9 --> | 75 | <!-- npu="950" id9 --> |
| 76 | - 该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count取值为0时,不保证该接口将被视为NOP(空操作)。 | 76 | - 该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count取值为0时,不保证该接口将被视为NOP(空操作)。 |
| @@ -128,8 +128,8 @@ $$ | |||
| 128 | 128 | ||
| 129 | ## 约束说明<a name="section633mcpsimp"></a> | 129 | ## 约束说明<a name="section633mcpsimp"></a> |
| 130 | 130 | ||
| 131 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 131 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 132 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 132 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 133 | <!-- npu="A3,910b,950" id8 --> | 133 | <!-- npu="A3,910b,950" id8 --> |
| 134 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 134 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 135 | <!-- npu="A3,910b" id9 --> | 135 | <!-- npu="A3,910b" id9 --> |
| @@ -112,8 +112,8 @@ Atlas 推理系列产品 AI Core,支持的数据类型为:int16_t、half、f | |||
| 112 | 112 | ||
| 113 | ## 约束说明<a name="section633mcpsimp"></a> | 113 | ## 约束说明<a name="section633mcpsimp"></a> |
| 114 | 114 | ||
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 116 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 116 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 117 | <!-- npu="A3,910b,950" id13 --> | 117 | <!-- npu="A3,910b,950" id13 --> |
| 118 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 118 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 119 | <!-- npu="A3,910b" id14 --> | 119 | <!-- npu="A3,910b" id14 --> |
| @@ -156,8 +156,8 @@ $$ | |||
| 156 | 156 | ||
| 157 | ## 约束说明<a name="section633mcpsimp"></a> | 157 | ## 约束说明<a name="section633mcpsimp"></a> |
| 158 | 158 | ||
| 159 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 159 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 160 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 160 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 161 | - 本指令涉及精度转换,转换规则参考[精度转换规则](../../data_structures/precision_conversion.md)。 | 161 | - 本指令涉及精度转换,转换规则参考[精度转换规则](../../data_structures/precision_conversion.md)。 |
| 162 | <!-- npu="A3,910b,950" id13 --> | 162 | <!-- npu="A3,910b,950" id13 --> |
| 163 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 163 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -197,8 +197,8 @@ PAR列表示矢量计算单元一个迭代能够处理的元素个数。 | |||
| 197 | 197 | ||
| 198 | ## 约束说明<a name="section633mcpsimp"></a> | 198 | ## 约束说明<a name="section633mcpsimp"></a> |
| 199 | 199 | ||
| 200 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 200 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 201 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 201 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 202 | - 源操作数的数据类型为half、目的操作数的数据类型为float的情况下,不支持地址重叠。 | 202 | - 源操作数的数据类型为half、目的操作数的数据类型为float的情况下,不支持地址重叠。 |
| 203 | - 使用tensor高维切分计算接口时,src和scalarValue的数据类型为half、dst的数据类型为float的情况下,一个迭代处理内最多处理64个输入数据。 | 203 | - 使用tensor高维切分计算接口时,src和scalarValue的数据类型为half、dst的数据类型为float的情况下,一个迭代处理内最多处理64个输入数据。 |
| 204 | <!-- npu="A3,910b,950" id18 --> | 204 | <!-- npu="A3,910b,950" id18 --> |
| @@ -156,8 +156,8 @@ | |||
| 156 | 156 | ||
| 157 | ## 约束说明<a name="section633mcpsimp"></a> | 157 | ## 约束说明<a name="section633mcpsimp"></a> |
| 158 | 158 | ||
| 159 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 159 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 160 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 160 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 161 | - 当输出类型为b8时,目的操作数数据类型需要和`SetDeqScale`接口的signMode入参配合,当signMode=true时输出数据类型int8_t;signMode=false时输出数据类型uint8_t。 | 161 | - 当输出类型为b8时,目的操作数数据类型需要和`SetDeqScale`接口的signMode入参配合,当signMode=true时输出数据类型int8_t;signMode=false时输出数据类型uint8_t。 |
| 162 | - halfBlock参数仅在输出数据为b8类型时有效。 | 162 | - halfBlock参数仅在输出数据为b8类型时有效。 |
| 163 | <!-- npu="A3,910b,950" id12 --> | 163 | <!-- npu="A3,910b,950" id12 --> |
| @@ -186,9 +186,9 @@ | |||
| 186 | **表** CastDequant与SetDeqScale使用关系映射表 | 186 | **表** CastDequant与SetDeqScale使用关系映射表 |
| 187 | |CastDequant使用场景|对应使用的SetDeqScale函数原型| | 187 | |CastDequant使用场景|对应使用的SetDeqScale函数原型| |
| 188 | |---|---| | 188 | |---|---| |
| 189 | - |输入类型为int16_t,关闭向量量化模式|<pre>\_\_aicore\_\_ inline void SetDeqScale(float scale, int16_t offset, bool signMode)</pre>| | 189 | + |输入类型为int16_t,关闭向量量化模式|<br>\_\_aicore\_\_ inline void SetDeqScale(float scale, int16_t offset, bool signMode)| |
| 190 | - |输入类型为int16_t,开启向量量化模式|<pre>template <typename T><br>\_\_aicore\_\_ inline void SetDeqScale(const LocalTensor<T>& vdeq, const VdeqInfo& vdeqInfo)</pre>| | 190 | + |输入类型为int16_t,开启向量量化模式|<br>template <typename T><br>\_\_aicore\_\_ inline void SetDeqScale(const LocalTensor<T>& vdeq, const VdeqInfo& vdeqInfo)| |
| 191 | - |输入类型为int32_t,输出数据类型为half类型|<pre>\_\_aicore\_\_ inline void SetDeqScale(half scale)</pre>| | 191 | + |输入类型为int32_t,输出数据类型为half类型|<br>\_\_aicore\_\_ inline void SetDeqScale(half scale)| |
| 192 | 192 | ||
| 193 | ## 关键特性 | 193 | ## 关键特性 |
| 194 | 194 | ||
| @@ -73,9 +73,9 @@ Ascend 950PR/Ascend 950DT,T和U支持的数据类型为:half、float。 | |||
| 73 | 73 | ||
| 74 | ## 约束说明<a name="section633mcpsimp"></a> | 74 | ## 约束说明<a name="section633mcpsimp"></a> |
| 75 | 75 | ||
| 76 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 76 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 77 | 77 | ||
| 78 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 78 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 79 | 79 | ||
| 80 | <!-- npu="950" id9 --> | 80 | <!-- npu="950" id9 --> |
| 81 | - 该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count取值为0时,不保证该接口将被视为NOP(空操作)。 | 81 | - 该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count取值为0时,不保证该接口将被视为NOP(空操作)。 |
| @@ -120,8 +120,8 @@ Kirin 9030,支持的数据类型为:half、float。 | |||
| 120 | 120 | ||
| 121 | ## 约束说明<a name="section633mcpsimp"></a> | 121 | ## 约束说明<a name="section633mcpsimp"></a> |
| 122 | 122 | ||
| 123 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 123 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 124 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 124 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 125 | <!-- npu="A3,910b,950" id17 --> | 125 | <!-- npu="A3,910b,950" id17 --> |
| 126 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 126 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 127 | <!-- npu="A3,910b" id18 --> | 127 | <!-- npu="A3,910b" id18 --> |
| @@ -186,8 +186,8 @@ PAR列表示矢量计算单元一个迭代能够处理的元素个数。 | |||
| 186 | 186 | ||
| 187 | ## 约束说明<a name="section633mcpsimp"></a> | 187 | ## 约束说明<a name="section633mcpsimp"></a> |
| 188 | 188 | ||
| 189 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 189 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 190 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 190 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 191 | - 源操作数的数据类型为half、目的操作数的数据类型为float的情况下,不支持地址重叠。 | 191 | - 源操作数的数据类型为half、目的操作数的数据类型为float的情况下,不支持地址重叠。 |
| 192 | <!-- npu="A3,910b,950" id17 --> | 192 | <!-- npu="A3,910b,950" id17 --> |
| 193 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 193 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -112,8 +112,8 @@ Atlas 推理系列产品AI Core,支持的数据类型为:half、float。 | |||
| 112 | 112 | ||
| 113 | ## 约束说明<a name="section633mcpsimp"></a> | 113 | ## 约束说明<a name="section633mcpsimp"></a> |
| 114 | 114 | ||
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 116 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 116 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 117 | <!-- npu="A3,910b,950" id13 --> | 117 | <!-- npu="A3,910b,950" id13 --> |
| 118 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 118 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 119 | <!-- npu="A3,910b" id14 --> | 119 | <!-- npu="A3,910b" id14 --> |
| @@ -146,8 +146,8 @@ $$ | |||
| 146 | 146 | ||
| 147 | ## 约束说明<a name="section633mcpsimp"></a> | 147 | ## 约束说明<a name="section633mcpsimp"></a> |
| 148 | 148 | ||
| 149 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 149 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 150 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 150 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 151 | - 使用tensor高维切分计算接口时,一个迭代处理的源操作数元素个数需要和目的操作数保持一致,而一次计算最多输入128个half类型数据,因此目的操作数最多输出128个b8类型数据,所以每次迭代输出到前4个datablock,srcRepStride需要设置为8,dstRepStride则设置为4。 | 151 | - 使用tensor高维切分计算接口时,一个迭代处理的源操作数元素个数需要和目的操作数保持一致,而一次计算最多输入128个half类型数据,因此目的操作数最多输出128个b8类型数据,所以每次迭代输出到前4个datablock,srcRepStride需要设置为8,dstRepStride则设置为4。 |
| 152 | <!-- npu="A3,910b,950" id13 --> | 152 | <!-- npu="A3,910b,950" id13 --> |
| 153 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 153 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -112,8 +112,8 @@ Atlas 推理系列产品AI Core,支持的数据类型为:int16_t、half、fl | |||
| 112 | 112 | ||
| 113 | ## 约束说明<a name="section633mcpsimp"></a> | 113 | ## 约束说明<a name="section633mcpsimp"></a> |
| 114 | 114 | ||
| 115 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 115 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 116 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 116 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 117 | <!-- npu="A3,910b,950" id13 --> | 117 | <!-- npu="A3,910b,950" id13 --> |
| 118 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 118 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 119 | <!-- npu="A3,910b" id14 --> | 119 | <!-- npu="A3,910b" id14 --> |
| @@ -156,8 +156,8 @@ $$ | |||
| 156 | 156 | ||
| 157 | ## 约束说明<a name="section633mcpsimp"></a> | 157 | ## 约束说明<a name="section633mcpsimp"></a> |
| 158 | 158 | ||
| 159 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 159 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 160 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 160 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 161 | <!-- npu="A3,910b,950" id13 --> | 161 | <!-- npu="A3,910b,950" id13 --> |
| 162 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 162 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 163 | <!-- npu="A3,910b" id14 --> | 163 | <!-- npu="A3,910b" id14 --> |
| @@ -125,8 +125,8 @@ Kirin 9030,支持的数据类型为:int8_t、uint8_t、int16_t、uint16_t、 | |||
| 125 | 125 | ||
| 126 | ## 约束说明<a name="zh-cn_topic_0000001521260417_section633mcpsimp"></a> | 126 | ## 约束说明<a name="zh-cn_topic_0000001521260417_section633mcpsimp"></a> |
| 127 | 127 | ||
| 128 | -- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 128 | +- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 129 | -- 操作数地址重叠约束请参考[Unified Buffer地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 129 | +- 操作数地址重叠约束请参考[Unified Buffer地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 130 | - dst与src中的地址需要连续存放。 | 130 | - dst与src中的地址需要连续存放。 |
| 131 | - 单次和多次repeat操作实现转置功能,都只需要配置一次srcList和dstList,后续LocalTensor地址通过nchwconvParams参数自动偏移。 | 131 | - 单次和多次repeat操作实现转置功能,都只需要配置一次srcList和dstList,后续LocalTensor地址通过nchwconvParams参数自动偏移。 |
| 132 | 132 | ||
| @@ -90,7 +90,7 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 90 | | dst | 输出 | 目的操作数。<br/>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br/>LocalTensor的起始地址需要32字节对齐。 | | 90 | | dst | 输出 | 目的操作数。<br/>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br/>LocalTensor的起始地址需要32字节对齐。 | |
| 91 | | src | 输入 | 源操作数。<br/>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br/>LocalTensor的起始地址需要32字节对齐。<br/>数据类型需要与dst保持一致。 | | 91 | | src | 输入 | 源操作数。<br/>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br/>LocalTensor的起始地址需要32字节对齐。<br/>数据类型需要与dst保持一致。 | |
| 92 | | sharedTmpBuffer | 输入 | 共享的临时Buffer,sharedTmpBuffer的大小参考[表sharedTmpBuffer所需的内存](#table4)。 | | 92 | | sharedTmpBuffer | 输入 | 共享的临时Buffer,sharedTmpBuffer的大小参考[表sharedTmpBuffer所需的内存](#table4)。 | |
| 93 | -| transposeParams | 输入 | 控制Transpose的数据结构。结构体内包含:输入的shape信息和transposeType参数。该数据结构的定义请参考[表TransposeParamsExt结构体内参数说明](#table3)。<pre>struct TransposeParamsExt {<br/> \_\_aicore\_\_ TransposeParamsExt() {}<br/> \_\_aicore\_\_ TransposeParamsExt(const uint16_t nSizeIn, const uint16_t cSizeIn, const uint16_t hSizeIn,<br/> const uint16_t wSizeIn, const TransposeType transposeTypeIn)<br/> : nSize(nSizeIn),<br/> cSize(cSizeIn),<br/> hSize(hSizeIn),<br/> wSize(wSizeIn),<br/> transposeType(transposeTypeIn)<br/> {}<br/> uint16_t nSize = 0;<br/> uint16_t cSize = 0;<br/> uint16_t hSize = 0;<br/> uint16_t wSize = 0;<br/> TransposeType transposeType = TransposeType::TRANSPOSE\_ND2ND\_B16;<br/>};</pre> | | 93 | +| transposeParams | 输入 | 控制Transpose的数据结构。结构体内包含:输入的shape信息和transposeType参数。该数据结构的定义请参考[表TransposeParamsExt结构体内参数说明](#table3)。<br>struct TransposeParamsExt {<br/> \_\_aicore\_\_ TransposeParamsExt() {}<br/> \_\_aicore\_\_ TransposeParamsExt(const uint16_t nSizeIn, const uint16_t cSizeIn, const uint16_t hSizeIn,<br/> const uint16_t wSizeIn, const TransposeType transposeTypeIn)<br/> : nSize(nSizeIn),<br/> cSize(cSizeIn),<br/> hSize(hSizeIn),<br/> wSize(wSizeIn),<br/> transposeType(transposeTypeIn)<br/> {}<br/> uint16_t nSize = 0;<br/> uint16_t cSize = 0;<br/> uint16_t hSize = 0;<br/> uint16_t wSize = 0;<br/> TransposeType transposeType = TransposeType::TRANSPOSE\_ND2ND\_B16;<br/>}; | |
| 94 | 94 | ||
| 95 | **表** TransposeParamsExt结构体内参数说明<a id="table3"></a> | 95 | **表** TransposeParamsExt结构体内参数说明<a id="table3"></a> |
| 96 | 96 | ||
| @@ -100,7 +100,7 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 100 | | cSize | c轴长度。默认值为0。<br/>•二维矩阵数据块转置,无需传入,传入数值无效。<br/>•[N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:cSize∈[0, 4095]。 | | 100 | | cSize | c轴长度。默认值为0。<br/>•二维矩阵数据块转置,无需传入,传入数值无效。<br/>•[N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:cSize∈[0, 4095]。 | |
| 101 | | hSize | h轴长度。默认值为0。<br/>•二维矩阵数据块转置,固定传入16。<br/>•[N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize \* wSize ∈[0, 4095],hSize \* wSize \* sizeof(T)需要保证32B对齐。 | | 101 | | hSize | h轴长度。默认值为0。<br/>•二维矩阵数据块转置,固定传入16。<br/>•[N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize \* wSize ∈[0, 4095],hSize \* wSize \* sizeof(T)需要保证32B对齐。 | |
| 102 | | wSize | w轴长度。默认值为0。<br/>•二维矩阵数据块转置,固定传入16。<br/>•[N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize \* wSize ∈[0, 4095],hSize \* wSize \* sizeof(T)需要保证32B对齐。 | | 102 | | wSize | w轴长度。默认值为0。<br/>•二维矩阵数据块转置,固定传入16。<br/>•[N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize \* wSize ∈[0, 4095],hSize \* wSize \* sizeof(T)需要保证32B对齐。 | |
| 103 | -| transposeType | 数据排布及reshape的类型,类型为TransposeType枚举类。默认值为TRANSPOSE_ND2ND_B16。<pre>enum class TransposeType : uint8_t {<br/> TRANSPOSE_TYPE_NONE, // API不做任何处理<br/> TRANSPOSE_NZ2ND_0213, // 当前不支持<br/> TRANSPOSE_NZ2NZ_0213, // 当前不支持<br/> TRANSPOSE_NZ2NZ_012_WITH_N, // 当前不支持<br/> TRANSPOSE_NZ2ND_012_WITH_N, // 当前不支持<br/> TRANSPOSE_NZ2ND_012_WITHOUT_N, // 当前不支持<br/> TRANSPOSE_NZ2NZ_012_WITHOUT_N, // 当前不支持<br/> TRANSPOSE_ND2ND_ONLY, // 当前不支持<br/> TRANSPOSE_ND_UB_GM, // 当前不支持<br/> TRANSPOSE_GRAD_ND_UB_GM, // 当前不支持<br/> TRANSPOSE_ND2ND_B16, // [16,16]二维矩阵转置<br/> TRANSPOSE_NCHW2NHWC, // [N,C,H,W]->[N,H,W,C],<br/> TRANSPOSE_NHWC2NCHW // [N,H,W,C]->[N,C,H,W]<br/>};</pre> | | 103 | +| transposeType | 数据排布及reshape的类型,类型为TransposeType枚举类。默认值为TRANSPOSE_ND2ND_B16。<br>enum class TransposeType : uint8_t {<br/> TRANSPOSE_TYPE_NONE, // API不做任何处理<br/> TRANSPOSE_NZ2ND_0213, // 当前不支持<br/> TRANSPOSE_NZ2NZ_0213, // 当前不支持<br/> TRANSPOSE_NZ2NZ_012_WITH_N, // 当前不支持<br/> TRANSPOSE_NZ2ND_012_WITH_N, // 当前不支持<br/> TRANSPOSE_NZ2ND_012_WITHOUT_N, // 当前不支持<br/> TRANSPOSE_NZ2NZ_012_WITHOUT_N, // 当前不支持<br/> TRANSPOSE_ND2ND_ONLY, // 当前不支持<br/> TRANSPOSE_ND_UB_GM, // 当前不支持<br/> TRANSPOSE_GRAD_ND_UB_GM, // 当前不支持<br/> TRANSPOSE_ND2ND_B16, // [16,16]二维矩阵转置<br/> TRANSPOSE_NCHW2NHWC, // [N,C,H,W]->[N,H,W,C],<br/> TRANSPOSE_NHWC2NCHW // [N,H,W,C]->[N,C,H,W]<br/>}; | |
| 104 | 104 | ||
| 105 | <!-- npu="950" id10 --> | 105 | <!-- npu="950" id10 --> |
| 106 | 106 | ||
| @@ -109,8 +109,8 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 109 | | transposeType | sharedTmpBuffer所需的大小 | | 109 | | transposeType | sharedTmpBuffer所需的大小 | |
| 110 | | :-- | :-- | | 110 | | :-- | :-- | |
| 111 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | | 111 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | |
| 112 | -| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type);</pre> | | 112 | +| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type); | |
| 113 | -| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type);</pre> | | 113 | +| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type); | |
| 114 | 114 | ||
| 115 | <!-- end id10 --> | 115 | <!-- end id10 --> |
| 116 | 116 | ||
| @@ -121,8 +121,8 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 121 | | transposeType | sharedTmpBuffer所需的大小 | | 121 | | transposeType | sharedTmpBuffer所需的大小 | |
| 122 | | :-- | :-- | | 122 | | :-- | :-- | |
| 123 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | | 123 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | |
| 124 | -| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type);</pre> | | 124 | +| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type); | |
| 125 | -| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type);</pre> | | 125 | +| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type); | |
| 126 | 126 | ||
| 127 | <!-- end id11 --> | 127 | <!-- end id11 --> |
| 128 | 128 | ||
| @@ -133,8 +133,8 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 133 | | transposeType | sharedTmpBuffer所需的大小 | | 133 | | transposeType | sharedTmpBuffer所需的大小 | |
| 134 | | :-- | :-- | | 134 | | :-- | :-- | |
| 135 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | | 135 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | |
| 136 | -| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type);</pre> | | 136 | +| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type); | |
| 137 | -| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type);</pre> | | 137 | +| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type); | |
| 138 | 138 | ||
| 139 | <!-- end id12 --> | 139 | <!-- end id12 --> |
| 140 | 140 | ||
| @@ -167,8 +167,8 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 167 | | transposeType | sharedTmpBuffer所需的大小 | | 167 | | transposeType | sharedTmpBuffer所需的大小 | |
| 168 | | :-- | :-- | | 168 | | :-- | :-- | |
| 169 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | | 169 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | |
| 170 | -| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type);</pre> | | 170 | +| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type); | |
| 171 | -| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type);</pre> | | 171 | +| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type); | |
| 172 | 172 | ||
| 173 | <!-- end id15 --> | 173 | <!-- end id15 --> |
| 174 | 174 | ||
| @@ -179,8 +179,8 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 179 | | transposeType | sharedTmpBuffer所需的大小 | | 179 | | transposeType | sharedTmpBuffer所需的大小 | |
| 180 | | :-- | :-- | | 180 | | :-- | :-- | |
| 181 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | | 181 | | TRANSPOSE_ND2ND_B16 | 不需要临时Buffer。 | |
| 182 | -| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type);</pre> | | 182 | +| TRANSPOSE_NCHW2NHWC | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize + 2) * h0 \* w0 \* sizeof(type); | |
| 183 | -| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<pre>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type);</pre> | | 183 | +| TRANSPOSE_NHWC2NCHW | 临时Buffer的大小按照下述计算规则(伪代码)进行计算。<br>auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16<br/>auto w0 = 32 / sizeof(type); // type代表数据类型<br/>auto tmpBufferSize = (cSize \* 2 + 1) \* h0 \* w0 \* sizeof(type); | |
| 184 | 184 | ||
| 185 | <!-- end id16 --> | 185 | <!-- end id16 --> |
| 186 | 186 | ||
| @@ -275,7 +275,7 @@ dst_nchw = np.transpose(src_nhwc, axes=(0,3,1,2)) | |||
| 275 | 275 | ||
| 276 | ## 约束说明 | 276 | ## 约束说明 |
| 277 | 277 | ||
| 278 | -- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 278 | +- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 279 | - 普通转置接口支持src和dst复用。 | 279 | - 普通转置接口支持src和dst复用。 |
| 280 | - 增强转置接口,transposeType为TRANSPOSE\_ND2ND\_B16时支持src和dst复用,transposeType为TRANSPOSE\_NCHW2NHWC、TRANSPOSE\_NHWC2NCHW时不支持src和dst复用。 | 280 | - 增强转置接口,transposeType为TRANSPOSE\_ND2ND\_B16时支持src和dst复用,transposeType为TRANSPOSE\_NCHW2NHWC、TRANSPOSE\_NHWC2NCHW时不支持src和dst复用。 |
| 281 | - 二维矩阵数据块转置时,nSize、cSize无需传入,传入数值无效;hSize、wSize固定传入16。 | 281 | - 二维矩阵数据块转置时,nSize、cSize无需传入,传入数值无效;hSize、wSize固定传入16。 |
| @@ -84,7 +84,7 @@ Ascend 950PR/Ascend 950DT,支持的数据类型为:int8_t、uint8_t、fp4x2_ | |||
| 84 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> | 84 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> |
| 85 | 85 | ||
| 86 | - 位于Unified Buffer的地址必须32字节对齐。 | 86 | - 位于Unified Buffer的地址必须32字节对齐。 |
| 87 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 87 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 88 | - isSetMask参数不生效,保持默认值true即可。 | 88 | - isSetMask参数不生效,保持默认值true即可。 |
| 89 | 89 | ||
| 90 | ## 调用示例<a name="zh-cn_topic_0000002567699435_section088124295117"></a> | 90 | ## 调用示例<a name="zh-cn_topic_0000002567699435_section088124295117"></a> |
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/Copy_UBToUB_mask_highdim_split.md+1-1
| @@ -137,7 +137,7 @@ | |||
| 137 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> | 137 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> |
| 138 | 138 | ||
| 139 | - 位于Unified Buffer的地址必须32字节对齐。 | 139 | - 位于Unified Buffer的地址必须32字节对齐。 |
| 140 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 140 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 141 | - CopyRepeatParams结构体参数的值需在取值范围内: | 141 | - CopyRepeatParams结构体参数的值需在取值范围内: |
| 142 | 142 | ||
| 143 | **表4** CopyRepeatParams结构体参数取值范围 | 143 | **表4** CopyRepeatParams结构体参数取值范围 |
| @@ -104,7 +104,7 @@ | |||
| 104 | | 参数名 | 描述 | | 104 | | 参数名 | 描述 | |
| 105 | | :--- | :--- | | 105 | | :--- | :--- | |
| 106 | | T | 操作数以及paddingValue(待填充数据值)的数据类型。各产品支持的数据类型请参考[数据类型](#section4219135304818)。 | | 106 | | T | 操作数以及paddingValue(待填充数据值)的数据类型。各产品支持的数据类型请参考[数据类型](#section4219135304818)。 | |
| 107 | -| mode | 配置数据搬运模式。PaddingMode类型,定义如下:<br><pre>enum class PaddingMode : uint8_t {<br> Normal = 0, // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐<br> Compact, // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐<br>};</pre> | | 107 | +| mode | 配置数据搬运模式。PaddingMode类型,定义如下:<br>enum class PaddingMode : uint8_t {<br> Normal = 0, // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐<br> Compact, // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐<br>}; | |
| 108 | 108 | ||
| 109 | **表2** 接口参数说明 | 109 | **表2** 接口参数说明 |
| 110 | 110 | ||
| @@ -93,7 +93,7 @@ | |||
| 93 | | 参数名 | 描述 | | 93 | | 参数名 | 描述 | |
| 94 | | :--- | :--- | | 94 | | :--- | :--- | |
| 95 | | T | 操作数的数据类型。各产品支持的数据类型请参考[数据类型](#section4219135304818)。 | | 95 | | T | 操作数的数据类型。各产品支持的数据类型请参考[数据类型](#section4219135304818)。 | |
| 96 | -| mode | 配置数据搬运模式。PaddingMode类型,定义如下:<br><pre>enum class PaddingMode : uint8_t {<br> Normal = 0, // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐<br> Compact, // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐<br>};</pre> | | 96 | +| mode | 配置数据搬运模式。PaddingMode类型,定义如下:<br>enum class PaddingMode : uint8_t {<br> Normal = 0, // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐<br> Compact, // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐<br>}; | |
| 97 | 97 | ||
| 98 | **表2** 接口参数说明 | 98 | **表2** 接口参数说明 |
| 99 | 99 | ||
| @@ -58,7 +58,7 @@ | |||
| 58 | | :--- | :--- | | 58 | | :--- | :--- | |
| 59 | | T | 源操作数或者目的操作数的数据类型。 | | 59 | | T | 源操作数或者目的操作数的数据类型。 | |
| 60 | | dim | 搬运的数据维度,数据类型为uint8_t,支持的维度为[1, 5]。 | | 60 | | dim | 搬运的数据维度,数据类型为uint8_t,支持的维度为[1, 5]。 | |
| 61 | -| config | 搬运配置选项,NdDmaConfig类型,定义如下,具体参数说明请参考[表3](#table_nddma_3)。<br><pre>struct NdDmaConfig {<br> static constexpr uint16_t unsetPad = 0xffff;<br> bool isNearestValueMode = false;<br> uint16_t loopLpSize = unsetPad; // Left padding size of all dimensions, must be less than 256.<br> uint16_t loopRpSize = unsetPad; // Right padding size of all dimensions, must be less than 256.<br> bool ascOptimize = false; // used for Ascend C optimization on special scenario.<br>};</pre> | | 61 | +| config | 搬运配置选项,NdDmaConfig类型,定义如下,具体参数说明请参考[表3](#table_nddma_3)。<br>struct NdDmaConfig {<br> static constexpr uint16_t unsetPad = 0xffff;<br> bool isNearestValueMode = false;<br> uint16_t loopLpSize = unsetPad; // Left padding size of all dimensions, must be less than 256.<br> uint16_t loopRpSize = unsetPad; // Right padding size of all dimensions, must be less than 256.<br> bool ascOptimize = false; // used for Ascend C optimization on special scenario.<br>}; | |
| 62 | 62 | ||
| 63 | **表2** 参数说明 | 63 | **表2** 参数说明 |
| 64 | 64 | ||
| @@ -66,7 +66,7 @@ | |||
| 66 | | :--- | :---: | :--- | | 66 | | :--- | :---: | :--- | |
| 67 | | dst | 输出 | 目的操作数,类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)。 | | 67 | | dst | 输出 | 目的操作数,类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)。 | |
| 68 | | src | 输入 | 源操作数,类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)。 | | 68 | | src | 输入 | 源操作数,类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)。 | |
| 69 | -| params | 输入 | 搬运参数NdDmaParams类型,定义如下,具体参数说明请参考[表4](#table_nddma_4)。<br><pre>template <typename T, uint8_t dim><br>struct NdDmaParams {<br> NdDmaLoopInfo<dim> loopInfo;<br> T constantValue; // 若有左右Padding,且不使能NearestValueMode时,该值将作为Padding值填充。<br>};</pre><br>NdDmaLoopInfo类型,定义如下,具体参数说明请参考[表5](#table_nddma_5)。<br><pre>template <uint8_t dim><br>struct NdDmaLoopInfo {<br> uint64_t loopSrcStride[dim] = {0}; // src stride info per loop.<br> uint32_t loopDstStride[dim] = {0}; // dst stride info per loop.<br> uint32_t loopSize[dim] = {0}; // Loop size per loop.<br> uint8_t loopLpSize[dim] = {0}; // Left padding size per loop.<br> uint8_t loopRpSize[dim] = {0}; // Right padding size per loop.<br>};<br>// 注意:dim的有效范围为[1,5]。</pre> | | 69 | +| params | 输入 | 搬运参数NdDmaParams类型,定义如下,具体参数说明请参考[表4](#table_nddma_4)。<br>template <typename T, uint8_t dim><br>struct NdDmaParams {<br> NdDmaLoopInfo<dim> loopInfo;<br> T constantValue; // 若有左右Padding,且不使能NearestValueMode时,该值将作为Padding值填充。<br>};<br>NdDmaLoopInfo类型,定义如下,具体参数说明请参考[表5](#table_nddma_5)。<br>template <uint8_t dim><br>struct NdDmaLoopInfo {<br> uint64_t loopSrcStride[dim] = {0}; // src stride info per loop.<br> uint32_t loopDstStride[dim] = {0}; // dst stride info per loop.<br> uint32_t loopSize[dim] = {0}; // Loop size per loop.<br> uint8_t loopLpSize[dim] = {0}; // Left padding size per loop.<br> uint8_t loopRpSize[dim] = {0}; // Right padding size per loop.<br>};<br>// 注意:dim的有效范围为[1,5]。 | |
| 70 | 70 | ||
| 71 | **表3** NdDmaConfig结构体参数定义<a name="table_nddma_3"></a> | 71 | **表3** NdDmaConfig结构体参数定义<a name="table_nddma_3"></a> |
| 72 | 72 | ||
| @@ -49,8 +49,8 @@ __aicore__ inline void SetLoopModePara(const LoopModeParams& loopParams, DataCop | |||
| 49 | 49 | ||
| 50 | | 参数名 | 输入/输出 | 描述 | | 50 | | 参数名 | 输入/输出 | 描述 | |
| 51 | | --- | --- | --- | | 51 | | --- | --- | --- | |
| 52 | -| loopParams | 输入 | 循环模式参数LoopModeParams类型,定义如下,具体参数说明请参考[表2](#table_setloop_2)。<br><pre>struct LoopModeParams {<br> loop1Size = 0;<br> loop2Size = 0;<br> loop1SrcStride = 0;<br> loop1DstStride = 0;<br> loop2SrcStride = 0;<br> loop2DstStride = 0 ;<br>};</pre> | | 52 | +| loopParams | 输入 | 循环模式参数LoopModeParams类型,定义如下,具体参数说明请参考[表2](#table_setloop_2)。<br>struct LoopModeParams {<br> loop1Size = 0;<br> loop2Size = 0;<br> loop1SrcStride = 0;<br> loop1DstStride = 0;<br> loop2SrcStride = 0;<br> loop2DstStride = 0 ;<br>}; | |
| 53 | -| type | 输入 | 数据搬运模式。DataCopyMVType为枚举类型,定义如下,具体参数说明请参考[表3](#table1166074612214)。<br><pre>enum class DataCopyMVType : uint8_t {<br> UB_TO_OUT = 0,<br> OUT_TO_UB = 1,<br>};</pre> | | 53 | +| type | 输入 | 数据搬运模式。DataCopyMVType为枚举类型,定义如下,具体参数说明请参考[表3](#table1166074612214)。<br>enum class DataCopyMVType : uint8_t {<br> UB_TO_OUT = 0,<br> OUT_TO_UB = 1,<br>}; | |
| 54 | 54 | ||
| 55 | **表2** LoopModeParams结构体参数说明<a name="table_setloop_2"></a> | 55 | **表2** LoopModeParams结构体参数说明<a name="table_setloop_2"></a> |
| 56 | 56 | ||
| @@ -118,7 +118,7 @@ __aicore__ inline void Brcb(const LocalTensor<T>& dst, const LocalTensor<T>& src | |||
| 118 | 118 | ||
| 119 | ## 约束说明<a name="section633mcpsimp"></a> | 119 | ## 约束说明<a name="section633mcpsimp"></a> |
| 120 | 120 | ||
| 121 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 121 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 122 | - 不支持源操作数与目的操作数使用同一块内存地址。 | 122 | - 不支持源操作数与目的操作数使用同一块内存地址。 |
| 123 | - BrcbRepeatParams结构体内参数dstBlkStride不支持设置为0,若设置成0可能产生未定义行为。 | 123 | - BrcbRepeatParams结构体内参数dstBlkStride不支持设置为0,若设置成0可能产生未定义行为。 |
| 124 | <!-- npu="310p" id16 --> | 124 | <!-- npu="310p" id16 --> |
| @@ -102,7 +102,7 @@ def CreateVecIndex(dst, firstValue, count): | |||
| 102 | 102 | ||
| 103 | ## 约束说明<a name="section633mcpsimp"></a> | 103 | ## 约束说明<a name="section633mcpsimp"></a> |
| 104 | 104 | ||
| 105 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 105 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 106 | - firstValue需保证不超出dst中元素数据类型对应的大小范围。 | 106 | - firstValue需保证不超出dst中元素数据类型对应的大小范围。 |
| 107 | <!-- npu="A3,910b,950" id12 --> | 107 | <!-- npu="A3,910b,950" id12 --> |
| 108 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 108 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| @@ -137,7 +137,7 @@ def Duplicate(scalarValue, dst, count): | |||
| 137 | 137 | ||
| 138 | ## 约束说明<a name="section633mcpsimp"></a> | 138 | ## 约束说明<a name="section633mcpsimp"></a> |
| 139 | 139 | ||
| 140 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 140 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 141 | <!-- npu="A3,910b,950" id20 --> | 141 | <!-- npu="A3,910b,950" id20 --> |
| 142 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 142 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 143 | <!-- npu="A3,910b" id21 --> | 143 | <!-- npu="A3,910b" id21 --> |
| @@ -179,7 +179,7 @@ | |||
| 179 | 179 | ||
| 180 | ## 约束说明<a name="section633mcpsimp"></a> | 180 | ## 约束说明<a name="section633mcpsimp"></a> |
| 181 | 181 | ||
| 182 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 182 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 183 | 183 | ||
| 184 | - mask仅控制目的操作数中的哪些元素要写入,源操作数的读取与mask无关。 | 184 | - mask仅控制目的操作数中的哪些元素要写入,源操作数的读取与mask无关。 |
| 185 | - count表示写入目的操作数中的元素总数,源操作数的读取与count无关。 | 185 | - count表示写入目的操作数中的元素总数,源操作数的读取与count无关。 |
| @@ -81,8 +81,8 @@ $dst_i = src0_i \& src1_i$ | |||
| 81 | 81 | ||
| 82 | | 参数名 | 输入/输出 | 描述 | | 82 | | 参数名 | 输入/输出 | 描述 | |
| 83 | |---|---|---| | 83 | |---|---|---| |
| 84 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 84 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 85 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 85 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -121,8 +121,8 @@ $dst_i = src0_i \& src1_i$ | |||
| 121 | 121 | ||
| 122 | ## 约束说明<a name="section633mcpsimp"></a> | 122 | ## 约束说明<a name="section633mcpsimp"></a> |
| 123 | 123 | ||
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 125 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 125 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 | 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 |
| 127 | <!-- npu="A3,910b,310b,310p,910" id18 --> | 127 | <!-- npu="A3,910b,310b,310p,910" id18 --> |
| 128 | - 特别地,针对uint32_t/int32_t类型的And操作,支持通过ReinterpretCast的方式来实现:使用Local Tensor的ReinterpretCast转换成uint16_t/int16_t后再调用And进行计算。直接传入uint32_t/int32_t类型的数据,在不同版本型号上表现会有所差异,考虑到算子在各个版本中的兼容性,不建议使用这种直接传入的方式: | 128 | - 特别地,针对uint32_t/int32_t类型的And操作,支持通过ReinterpretCast的方式来实现:使用Local Tensor的ReinterpretCast转换成uint16_t/int16_t后再调用And进行计算。直接传入uint32_t/int32_t类型的数据,在不同版本型号上表现会有所差异,考虑到算子在各个版本中的兼容性,不建议使用这种直接传入的方式: |
| @@ -101,7 +101,7 @@ Ascend 950PR/Ascend 950DT,目的操作数dst和源操作数src支持的数据 | |||
| 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 | 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 |
| 102 | - 源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 102 | - 源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 103 | 103 | ||
| 104 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 104 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 105 | 105 | ||
| 106 | <!-- npu="950" id9 --> | 106 | <!-- npu="950" id9 --> |
| 107 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 107 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| @@ -75,8 +75,8 @@ $dst_i = \sim src_i$ | |||
| 75 | 75 | ||
| 76 | | 参数名 | 输入/输出 | 描述 | | 76 | | 参数名 | 输入/输出 | 描述 | |
| 77 | |---|---|---| | 77 | |---|---|---| |
| 78 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 78 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 79 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 79 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 80 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 81 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 81 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 82 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -115,8 +115,8 @@ $dst_i = \sim src_i$ | |||
| 115 | 115 | ||
| 116 | ## 约束说明<a name="section633mcpsimp"></a> | 116 | ## 约束说明<a name="section633mcpsimp"></a> |
| 117 | 117 | ||
| 118 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 118 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 119 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 119 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 120 | <!-- npu="A3,910b,950" id18 --> | 120 | <!-- npu="A3,910b,950" id18 --> |
| 121 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 121 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 122 | <!-- npu="A3,910b" id19 --> | 122 | <!-- npu="A3,910b" id19 --> |
| @@ -81,8 +81,8 @@ $dst_i = src0_i | src1_i$ | |||
| 81 | 81 | ||
| 82 | | 参数名 | 输入/输出 | 描述 | | 82 | | 参数名 | 输入/输出 | 描述 | |
| 83 | |---|---|---| | 83 | |---|---|---| |
| 84 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 84 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 85 | -| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。<br>源操作数的数据类型需要与目的操作数保持一致。 | | 85 | +| src0、src1 | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。<br>源操作数的数据类型需要与目的操作数保持一致。 | |
| 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 86 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 87 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 88 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -121,8 +121,8 @@ $dst_i = src0_i | src1_i$ | |||
| 121 | 121 | ||
| 122 | ## 约束说明<a name="section633mcpsimp"></a> | 122 | ## 约束说明<a name="section633mcpsimp"></a> |
| 123 | 123 | ||
| 124 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 124 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 125 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 125 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 | 126 | - 使用整个tensor参与计算接口符号重载时,运算量为目的LocalTensor的总长度。 |
| 127 | 127 | ||
| 128 | <!-- npu="A3,910b,310b,310p,910" id18 --> | 128 | <!-- npu="A3,910b,310b,310p,910" id18 --> |
| @@ -101,7 +101,7 @@ Ascend 950PR/Ascend 950DT,目的操作数dst和源操作数src支持的数据 | |||
| 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 | 101 | - 对于多次repeat(repeatTime\>1),操作数与目的操作数之间存在依赖的情况下,即第N次迭代的目的操作数是第N+1次的源操作数,不支持地址重叠。 |
| 102 | - 源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 | 102 | - 源操作数为LocalTensor单点元素的场景,不支持源操作数和目的操作数地址重叠。 |
| 103 | 103 | ||
| 104 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 104 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 105 | 105 | ||
| 106 | <!-- npu="950" id9 --> | 106 | <!-- npu="950" id9 --> |
| 107 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 107 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| @@ -101,8 +101,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 101 | 101 | ||
| 102 | | 参数名 | 输入/输出 | 描述 | | 102 | | 参数名 | 输入/输出 | 描述 | |
| 103 | |---|---|---| | 103 | |---|---|---| |
| 104 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 104 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 105 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。<br>源操作数的数据类型需要与目的操作数保持一致。 | | 105 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。<br>源操作数的数据类型需要与目的操作数保持一致。 | |
| 106 | | scalarValue | 输入 | 左移的位数,数据类型需要与目的操作数中的元素数据类型保持一致。具体取值说明请参考下面的[scalarValue取值说明](#scalarvalue取值说明)。 | | 106 | | scalarValue | 输入 | 左移的位数,数据类型需要与目的操作数中的元素数据类型保持一致。具体取值说明请参考下面的[scalarValue取值说明](#scalarvalue取值说明)。 | |
| 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 107 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 108 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | | 108 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体说明请参考[高维切分](../SIMD_compute/high_dim_split.md)。 | |
| @@ -144,8 +144,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 144 | 144 | ||
| 145 | ## 约束说明<a name="section633mcpsimp"></a> | 145 | ## 约束说明<a name="section633mcpsimp"></a> |
| 146 | 146 | ||
| 147 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 147 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 148 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 148 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 149 | <!-- npu="A3,910b,950" id19 --> | 149 | <!-- npu="A3,910b,950" id19 --> |
| 150 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 150 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 151 | <!-- npu="A3,910b" id20 --> | 151 | <!-- npu="A3,910b" id20 --> |
| @@ -67,7 +67,7 @@ Ascend 950PR/Ascend 950DT,T支持的数据类型为:int8_t、uint8_t、int16 | |||
| 67 | 67 | ||
| 68 | ## 约束说明<a name="section15109150164412"></a> | 68 | ## 约束说明<a name="section15109150164412"></a> |
| 69 | 69 | ||
| 70 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 70 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 71 | 71 | ||
| 72 | - 对于逻辑位移(无符号数据类型),如果位移量大于数据类型位宽,则输出为0。 | 72 | - 对于逻辑位移(无符号数据类型),如果位移量大于数据类型位宽,则输出为0。 |
| 73 | - 对于算数位移(有符号数据类型),如果src0小于0,src1小于0,并且位移量大于数据类型位宽,则输出-1;如果src0大于0,并且位移量大于数据类型位宽,则输出0。 | 73 | - 对于算数位移(有符号数据类型),如果src0小于0,src1小于0,并且位移量大于数据类型位宽,则输出-1;如果src0大于0,并且位移量大于数据类型位宽,则输出0。 |
| @@ -101,8 +101,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 101 | 101 | ||
| 102 | | 参数名 | 输入/输出 | 描述 | | 102 | | 参数名 | 输入/输出 | 描述 | |
| 103 | |---|---|---| | 103 | |---|---|---| |
| 104 | -| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | | 104 | +| dst | 输出 | 目的操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 | |
| 105 | -| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。<br>源操作数的数据类型需要与目的操作数保持一致。 | | 105 | +| src | 输入 | 源操作数。<br>类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。<br>源操作数的数据类型需要与目的操作数保持一致。 | |
| 106 | | scalarValue | 输入 | 右移的位数,数据类型需要与目的操作数中的元素数据类型保持一致。具体取值说明请参考下面的[scalarValue取值说明](#scalarvalue取值说明)。 | | 106 | | scalarValue | 输入 | 右移的位数,数据类型需要与目的操作数中的元素数据类型保持一致。具体取值说明请参考下面的[scalarValue取值说明](#scalarvalue取值说明)。 | |
| 107 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | | 107 | | count | 输入 | 参与计算的元素个数。关于该参数的具体说明请参考[连续计算](../SIMD_compute/continuous_compute.md)。 | |
| 108 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 108 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| @@ -146,8 +146,8 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 146 | 146 | ||
| 147 | ## 约束说明<a name="section23625411480"></a> | 147 | ## 约束说明<a name="section23625411480"></a> |
| 148 | 148 | ||
| 149 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md)。 | 149 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 150 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md)。 | 150 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md)。 |
| 151 | <!-- npu="A3,910b,950" id21 --> | 151 | <!-- npu="A3,910b,950" id21 --> |
| 152 | - 当参数count或repeatTime取值为0时,该接口的行为如下: | 152 | - 当参数count或repeatTime取值为0时,该接口的行为如下: |
| 153 | <!-- npu="A3,910b" id22 --> | 153 | <!-- npu="A3,910b" id22 --> |
| @@ -77,7 +77,7 @@ Ascend 950PR/Ascend 950DT,T支持的数据类型为:int8_t、uint8_t、int16 | |||
| 77 | 77 | ||
| 78 | ## 约束说明<a name="section633mcpsimp"></a> | 78 | ## 约束说明<a name="section633mcpsimp"></a> |
| 79 | 79 | ||
| 80 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 80 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 81 | 81 | ||
| 82 | - 对于逻辑位移(无符号数据类型),如果位移量大于数据类型位宽,则输出为0。 | 82 | - 对于逻辑位移(无符号数据类型),如果位移量大于数据类型位宽,则输出为0。 |
| 83 | - 对于算数位移(有符号数据类型),如果src0小于0,src1大于0,并且位移量大于数据类型位宽,则输出-1;如果src0大于0,并且位移量大于数据类型位宽,则输出0。 | 83 | - 对于算数位移(有符号数据类型),如果src0小于0,src1大于0,并且位移量大于数据类型位宽,则输出-1;如果src0大于0,并且位移量大于数据类型位宽,则输出0。 |
| @@ -70,7 +70,7 @@ | |||
| 70 | | 参数名 | 描述 | | 70 | | 参数名 | 描述 | |
| 71 | | --- | --- | | 71 | | --- | --- | |
| 72 | | T | 矢量计算操作数数据类型。 | | 72 | | T | 矢量计算操作数数据类型。 | |
| 73 | -| mode | Mask模式,MaskMode类型,定义如下:<br><pre>enum class MaskMode : uint8_t {<br> NORMAL = 0, // Normal模式<br> COUNTER // Counter模式<br>};</pre>| | 73 | +| mode | Mask模式,MaskMode类型,定义如下:<br>enum class MaskMode : uint8_t {<br> NORMAL = 0, // Normal模式<br> COUNTER // Counter模式<br>};| |
| 74 | 74 | ||
| 75 | **表2** 参数说明 | 75 | **表2** 参数说明 |
| 76 | 76 | ||
| @@ -120,8 +120,8 @@ | |||
| 120 | 120 | ||
| 121 | ## 约束说明 | 121 | ## 约束说明 |
| 122 | 122 | ||
| 123 | -- 源操作数的对齐约束请参见[通用地址对齐约束](../../../通用说明和约束.md#通用地址对齐约束),起始地址需要32字节对齐;目的操作数起始地址的对齐约束与操作数数据类型有关,在`half`数据类型时需要保证16字节对齐,在`float`数据类型时需要保证32字节对齐。 | 123 | +- 源操作数的对齐约束请参见[通用地址对齐约束](../../../general_description_and_constraints.md#通用地址对齐约束),起始地址需要32字节对齐;目的操作数起始地址的对齐约束与操作数数据类型有关,在`half`数据类型时需要保证16字节对齐,在`float`数据类型时需要保证32字节对齐。 |
| 124 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 124 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 125 | - `dstRepStride`、`srcBlkStride`、`srcRepStride`取值范围为[0, $2^{16}-1$],需要结合UB的实际大小避免出现越界。 | 125 | - `dstRepStride`、`srcBlkStride`、`srcRepStride`取值范围为[0, $2^{16}-1$],需要结合UB的实际大小避免出现越界。 |
| 126 | 126 | ||
| 127 | <!-- npu="950,A3,910b" id18 --> | 127 | <!-- npu="950,A3,910b" id18 --> |
| @@ -123,8 +123,8 @@ | |||
| 123 | 123 | ||
| 124 | ## 约束说明 | 124 | ## 约束说明 |
| 125 | 125 | ||
| 126 | -- 源操作数及`sharedTmpBuffer`的地址对齐约束请参考[通用地址对齐约束](../../../通用说明和约束.md#section796754519912),起始地址需要32字节对齐;目的操作数的起始地址对齐约束请参考[ReduceRepeat-表3](./ReduceRepeat.md#tab3)。 | 126 | +- 源操作数及`sharedTmpBuffer`的地址对齐约束请参考[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912),起始地址需要32字节对齐;目的操作数的起始地址对齐约束请参考[ReduceRepeat-表3](./ReduceRepeat.md#tab3)。 |
| 127 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 127 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 128 | - 需要使用`sharedTmpBuffer`的情况下,支持`dst`与`sharedTmpBuffer`地址重叠(通常情况下`dst`比`sharedTmpBuffer`所需的空间要小),此时`sharedTmpBuffer`必须满足所需空间要求,详情请参考[关键特性说明](#关键特性说明)。 | 128 | - 需要使用`sharedTmpBuffer`的情况下,支持`dst`与`sharedTmpBuffer`地址重叠(通常情况下`dst`比`sharedTmpBuffer`所需的空间要小),此时`sharedTmpBuffer`必须满足所需空间要求,详情请参考[关键特性说明](#关键特性说明)。 |
| 129 | 129 | ||
| 130 | <!-- npu="950,A3,910b" id18 --> | 130 | <!-- npu="950,A3,910b" id18 --> |
| @@ -124,8 +124,8 @@ | |||
| 124 | 124 | ||
| 125 | ## 约束说明 | 125 | ## 约束说明 |
| 126 | 126 | ||
| 127 | -- 源操作数及`sharedTmpBuffer`的地址对齐约束请参考[通用地址对齐约束](../../../通用说明和约束.md#section796754519912),起始地址需要32字节对齐;目的操作数的起始地址对齐约束请参考[ReduceRepeat-表3](./ReduceRepeat.md#tab3)。 | 127 | +- 源操作数及`sharedTmpBuffer`的地址对齐约束请参考[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912),起始地址需要32字节对齐;目的操作数的起始地址对齐约束请参考[ReduceRepeat-表3](./ReduceRepeat.md#tab3)。 |
| 128 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 128 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 129 | - 需要使用`sharedTmpBuffer`的情况下,支持`dst`与`sharedTmpBuffer`地址重叠(通常情况下`dst`比`sharedTmpBuffer`所需的空间要小),此时`sharedTmpBuffer`必须满足所需空间要求,详情请参考[关键特性说明](#关键特性说明)。 | 129 | - 需要使用`sharedTmpBuffer`的情况下,支持`dst`与`sharedTmpBuffer`地址重叠(通常情况下`dst`比`sharedTmpBuffer`所需的空间要小),此时`sharedTmpBuffer`必须满足所需空间要求,详情请参考[关键特性说明](#关键特性说明)。 |
| 130 | 130 | ||
| 131 | <!-- npu="950,A3,910b" id18 --> | 131 | <!-- npu="950,A3,910b" id18 --> |
| @@ -108,8 +108,8 @@ | |||
| 108 | 108 | ||
| 109 | ## 约束说明 | 109 | ## 约束说明 |
| 110 | 110 | ||
| 111 | -- 操作数的起始地址对齐约束请参考[通用地址对齐约束](../../../通用说明和约束.md#通用地址对齐约束),需要32字节对齐。 | 111 | +- 操作数的起始地址对齐约束请参考[通用地址对齐约束](../../../general_description_and_constraints.md#通用地址对齐约束),需要32字节对齐。 |
| 112 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 112 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 113 | - `dstRepStride`、`srcBlkStride`、`srcRepStride`取值范围为[0, $2^{16}-1$],需要结合UB的实际大小避免出现越界。 | 113 | - `dstRepStride`、`srcBlkStride`、`srcRepStride`取值范围为[0, $2^{16}-1$],需要结合UB的实际大小避免出现越界。 |
| 114 | 114 | ||
| 115 | <!-- npu="950,A3,910b" id14 --> | 115 | <!-- npu="950,A3,910b" id14 --> |
| @@ -159,8 +159,8 @@ | |||
| 159 | 159 | ||
| 160 | ## 约束说明 | 160 | ## 约束说明 |
| 161 | 161 | ||
| 162 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 162 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 163 | -- 源操作数的地址对齐约束请参考[通用地址对齐约束](../../../通用说明和约束.md#通用地址对齐约束),起始地址需要32字节对齐;目的操作数的起始地址对齐约束受操作数数据类型、`reduceType`和`order`参数的影响,请参考[表3](#tab3)。 | 163 | +- 源操作数的地址对齐约束请参考[通用地址对齐约束](../../../general_description_and_constraints.md#通用地址对齐约束),起始地址需要32字节对齐;目的操作数的起始地址对齐约束受操作数数据类型、`reduceType`和`order`参数的影响,请参考[表3](#tab3)。 |
| 164 | 164 | ||
| 165 | **表3** 目的操作数地址对齐约束及dstRepStride单位 | 165 | **表3** 目的操作数地址对齐约束及dstRepStride单位 |
| 166 | 166 | ||
| @@ -122,8 +122,8 @@ | |||
| 122 | 122 | ||
| 123 | ## 约束说明 | 123 | ## 约束说明 |
| 124 | 124 | ||
| 125 | -- 源操作数及`sharedTmpBuffer`的地址对齐约束请参考[通用地址对齐约束](../../../通用说明和约束.md#section796754519912),起始地址需要32字节对齐;目的操作数的起始地址对齐约束请参考[ReduceRepeat-表3](./ReduceRepeat.md#tab3)。 | 125 | +- 源操作数及`sharedTmpBuffer`的地址对齐约束请参考[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912),起始地址需要32字节对齐;目的操作数的起始地址对齐约束请参考[ReduceRepeat-表3](./ReduceRepeat.md#tab3)。 |
| 126 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#通用地址重叠约束)。 | 126 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 127 | - 需要使用`sharedTmpBuffer`的情况下,支持`dst`与`sharedTmpBuffer`地址重叠(通常情况下`dst`比`sharedTmpBuffer`所需的空间要小),此时`sharedTmpBuffer`必须满足所需空间要求,详情请参考[关键特性说明](#关键特性说明)。 | 127 | - 需要使用`sharedTmpBuffer`的情况下,支持`dst`与`sharedTmpBuffer`地址重叠(通常情况下`dst`比`sharedTmpBuffer`所需的空间要小),此时`sharedTmpBuffer`必须满足所需空间要求,详情请参考[关键特性说明](#关键特性说明)。 |
| 128 | 128 | ||
| 129 | <!-- npu="950,A3,910b" id18 --> | 129 | <!-- npu="950,A3,910b" id18 --> |
| @@ -111,7 +111,7 @@ Atlas 推理系列产品AI Core,支持的数据类型为:int16_t、uint16_t | |||
| 111 | 111 | ||
| 112 | ## 约束说明<a name="section633mcpsimp"></a> | 112 | ## 约束说明<a name="section633mcpsimp"></a> |
| 113 | 113 | ||
| 114 | -- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 114 | +- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 115 | - 不支持源操作数与目的操作数使用同一块内存地址。 | 115 | - 不支持源操作数与目的操作数使用同一块内存地址。 |
| 116 | - srcOffset的取值要求如下: | 116 | - srcOffset的取值要求如下: |
| 117 | - 取值应保证src元素类型位宽对齐。 | 117 | - 取值应保证src元素类型位宽对齐。 |
| @@ -113,7 +113,7 @@ Atlas 200I/500 A2 推理产品,支持的数据类型为:int8_t、uint8_t、i | |||
| 113 | 113 | ||
| 114 | ## 约束说明<a name="section633mcpsimp"></a> | 114 | ## 约束说明<a name="section633mcpsimp"></a> |
| 115 | 115 | ||
| 116 | -- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 116 | +- 操作数地址对齐要求请参见[Unified Buffer地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 117 | - 不支持源操作数与目的操作数使用同一块内存地址。 | 117 | - 不支持源操作数与目的操作数使用同一块内存地址。 |
| 118 | - offset的取值要求如下: | 118 | - offset的取值要求如下: |
| 119 | - 取值应保证src元素类型位宽对齐。 | 119 | - 取值应保证src元素类型位宽对齐。 |
| @@ -99,8 +99,8 @@ Atlas 推理系列产品AI Core,支持的数据类型为:uint16_t、half、u | |||
| 99 | 99 | ||
| 100 | ## 约束说明<a name="section633mcpsimp"></a> | 100 | ## 约束说明<a name="section633mcpsimp"></a> |
| 101 | 101 | ||
| 102 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 102 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 103 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。 | 103 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。 |
| 104 | 104 | ||
| 105 | - dstOffset的取值要求如下: | 105 | - dstOffset的取值要求如下: |
| 106 | - 偏移地址不能有相同值,如果存在2个或者多个偏移重复的情况,行为是不可预期的。 | 106 | - 偏移地址不能有相同值,如果存在2个或者多个偏移重复的情况,行为是不可预期的。 |
| @@ -52,7 +52,7 @@ __aicore__ inline void MrgSort(const LocalTensor<T>& dst, const MrgSortSrcList<T | |||
| 52 | | 参数名称 | 输入/输出 | 说明 | | 52 | | 参数名称 | 输入/输出 | 说明 | |
| 53 | |:---|:---|:---| | 53 | |:---|:---|:---| |
| 54 | | dst | 输出 | 目的操作数。<br> 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br> LocalTensor的起始地址需要32字节对齐。 | | 54 | | dst | 输出 | 目的操作数。<br> 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br> LocalTensor的起始地址需要32字节对齐。 | |
| 55 | -| src | 输入 | 源操作数,4个已经排序完成的队列,类型为MrgSortSrcList结构体,定义如下:<br><pre>template \<typename T\> struct MrgSortSrcList {<br> \_\_aicore\_\_ MrgSortSrcList() {}<br> \_\_aicore\_\_ MrgSortSrcList(const LocalTensor<T> src1In, const LocalTensor<T> src2In, const LocalTensor<T> src3In, const LocalTensor<T> src4In)<br> {<br> src1 = src1In[0];<br> src2 = src2In[0];<br> src3 = src3In[0];<br> src4 = src4In[0];<br> }<br> LocalTensor<T> src1;<br> LocalTensor<T> src2;<br> LocalTensor<T> src3;<br> LocalTensor<T> src4;<br>};</pre>src1、src2、src3、src4类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要8字节对齐。| | 55 | +| src | 输入 | 源操作数,4个已经排序完成的队列,类型为MrgSortSrcList结构体,定义如下:<br>template \<typename T\> struct MrgSortSrcList {<br> \_\_aicore\_\_ MrgSortSrcList() {}<br> \_\_aicore\_\_ MrgSortSrcList(const LocalTensor<T> src1In, const LocalTensor<T> src2In, const LocalTensor<T> src3In, const LocalTensor<T> src4In)<br> {<br> src1 = src1In[0];<br> src2 = src2In[0];<br> src3 = src3In[0];<br> src4 = src4In[0];<br> }<br> LocalTensor<T> src1;<br> LocalTensor<T> src2;<br> LocalTensor<T> src3;<br> LocalTensor<T> src4;<br>};<br>src1、src2、src3、src4类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要8字节对齐。| |
| 56 | | params | 输入 | 排序参数,类型为MrgSort4Info结构体。<br> MrgSort4Info参数说明请参考[表MrgSort4Info结构体参数定义](MrgSort.md#参数说明)。| | 56 | | params | 输入 | 排序参数,类型为MrgSort4Info结构体。<br> MrgSort4Info参数说明请参考[表MrgSort4Info结构体参数定义](MrgSort.md#参数说明)。| |
| 57 | 57 | ||
| 58 | **表3** MrgSort4Info结构体参数定义 | 58 | **表3** MrgSort4Info结构体参数定义 |
| @@ -161,7 +161,7 @@ __aicore__ inline void MrgSort4(const LocalTensor<T>& dst, const MrgSortSrcList< | |||
| 161 | ## 约束说明<a name="section633mcpsimp"></a> | 161 | ## 约束说明<a name="section633mcpsimp"></a> |
| 162 | 162 | ||
| 163 | - 当存在proposal\[i\]与proposal\[j\]的score值相同时,如果i\>j,则proposal\[j\]将首先被选出来,排在前面。 | 163 | - 当存在proposal\[i\]与proposal\[j\]的score值相同时,如果i\>j,则proposal\[j\]将首先被选出来,排在前面。 |
| 164 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 164 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 165 | 165 | ||
| 166 | - 不支持源操作数与目的操作数之间存在地址重叠。 | 166 | - 不支持源操作数与目的操作数之间存在地址重叠。 |
| 167 | 167 | ||
| @@ -135,7 +135,7 @@ __aicore__ inline void ProposalConcat(const LocalTensor<T>& dst, const LocalTens | |||
| 135 | 135 | ||
| 136 | - 用户需保证dst中存储的proposal数目大于等于实际所需数目,否则会存在tensor越界错误。 | 136 | - 用户需保证dst中存储的proposal数目大于等于实际所需数目,否则会存在tensor越界错误。 |
| 137 | - 用户需保证src中存储的元素大于等于实际所需数目,否则会存在tensor越界错误。 | 137 | - 用户需保证src中存储的元素大于等于实际所需数目,否则会存在tensor越界错误。 |
| 138 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 138 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 139 | 139 | ||
| 140 | ## 调用示例<a name="section642mcpsimp"></a> | 140 | ## 调用示例<a name="section642mcpsimp"></a> |
| 141 | 141 | ||
| @@ -113,7 +113,7 @@ __aicore__ inline void ProposalExtract(const LocalTensor<T>& dst, const LocalTen | |||
| 113 | 113 | ||
| 114 | - 用户需保证src中存储的proposal数目大于等于实际所需数目,否则会存在tensor越界错误。 | 114 | - 用户需保证src中存储的proposal数目大于等于实际所需数目,否则会存在tensor越界错误。 |
| 115 | - 用户需保证dst中存储的元素大于等于实际所需数目,否则会存在tensor越界错误。 | 115 | - 用户需保证dst中存储的元素大于等于实际所需数目,否则会存在tensor越界错误。 |
| 116 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 116 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 117 | 117 | ||
| 118 | ## 调用示例<a name="section642mcpsimp"></a> | 118 | ## 调用示例<a name="section642mcpsimp"></a> |
| 119 | 119 | ||
| @@ -100,7 +100,7 @@ __aicore__ inline void RpSort16(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 100 | 100 | ||
| 101 | - 用户需保证src和dst中存储的Region Proposal数目大于实际所需数据,否则会存在tensor越界错误。 | 101 | - 用户需保证src和dst中存储的Region Proposal数目大于实际所需数据,否则会存在tensor越界错误。 |
| 102 | - 当存在proposal\[i\]与proposal\[j\]的score值相同时,如果i\>j,则proposal\[j\]将首先被选出来,排在前面。 | 102 | - 当存在proposal\[i\]与proposal\[j\]的score值相同时,如果i\>j,则proposal\[j\]将首先被选出来,排在前面。 |
| 103 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 103 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 104 | 104 | ||
| 105 | ## 调用示例<a name="section642mcpsimp"></a> | 105 | ## 调用示例<a name="section642mcpsimp"></a> |
| 106 | 106 | ||
| @@ -76,7 +76,7 @@ __aicore__ inline void Sort32(const LocalTensor<T>& dst, const LocalTensor<T>& s | |||
| 76 | 76 | ||
| 77 | ## 约束说明<a name="section633mcpsimp"></a> | 77 | ## 约束说明<a name="section633mcpsimp"></a> |
| 78 | 78 | ||
| 79 | -- 地址对齐约束参考[通用地址对齐约束](../../../通用说明和约束.md)。 | 79 | +- 地址对齐约束参考[通用地址对齐约束](../../../general_description_and_constraints.md)。 |
| 80 | <!-- npu="A3,910b,950" id12 --> | 80 | <!-- npu="A3,910b,950" id12 --> |
| 81 | - 当参数repeatTime取值为0时,该接口的行为如下: | 81 | - 当参数repeatTime取值为0时,该接口的行为如下: |
| 82 | <!-- npu="A3,910b" id10 --> | 82 | <!-- npu="A3,910b" id10 --> |
| @@ -354,8 +354,8 @@ enum class RoundMode { | |||
| 354 | 354 | ||
| 355 | ## 约束说明 | 355 | ## 约束说明 |
| 356 | 356 | ||
| 357 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 357 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 358 | -- 操作数地址重叠约束请参考[通用地址重叠约束](../../../通用说明和约束.md#section668772811100)。特别地,对于长度较小的数据类型转换为长度较大的数据类型时,地址重叠可能会导致结果错误。 | 358 | +- 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#section668772811100)。特别地,对于长度较小的数据类型转换为长度较大的数据类型时,地址重叠可能会导致结果错误。 |
| 359 | 359 | ||
| 360 | - 当源操作数和目的操作数位数不同时,计算输入参数以数据类型的字节较大的为准。例如,源操作数为half类型,目的操作数为int32\_t类型时,每次迭代最多操作64个元素,为保证输出和输入是连续的,dstRepStride应设置为8,srcRepStride应设置为4。 | 360 | - 当源操作数和目的操作数位数不同时,计算输入参数以数据类型的字节较大的为准。例如,源操作数为half类型,目的操作数为int32\_t类型时,每次迭代最多操作64个元素,为保证输出和输入是连续的,dstRepStride应设置为8,srcRepStride应设置为4。 |
| 361 | - 当dst或src为int4b\_t时,由于一个int4b\_t只占半个字节,故申请Tensor空间时,只需申请相同数量的int8\_t数据空间的一半。host侧目前暂不支持int4b\_t,故在申请int4b\_t类型的tensor时,应先申请一个类型为int8\_t的tensor,再用Reinterpretcast接口转化为int4b\_t类型的tensor,接着调用Cast指令。 | 361 | - 当dst或src为int4b\_t时,由于一个int4b\_t只占半个字节,故申请Tensor空间时,只需申请相同数量的int8\_t数据空间的一半。host侧目前暂不支持int4b\_t,故在申请int4b\_t类型的tensor时,应先申请一个类型为int8\_t的tensor,再用Reinterpretcast接口转化为int4b\_t类型的tensor,接着调用Cast指令。 |
| @@ -66,7 +66,7 @@ __aicore__ inline void Truncate(const LocalTensor<T> &dst, const LocalTensor<T> | |||
| 66 | 66 | ||
| 67 | ## 约束说明<a name="section633mcpsimp"></a> | 67 | ## 约束说明<a name="section633mcpsimp"></a> |
| 68 | 68 | ||
| 69 | -- 操作数地址对齐要求请参见[通用地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 69 | +- 操作数地址对齐要求请参见[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 70 | <!-- npu="950" id9 --> | 70 | <!-- npu="950" id9 --> |
| 71 | - 针对Ascend 950PR/Ascend 950DT,该接口通过VF调用[Reg矢量计算](../../reg_vector_compute/reg_vector_compute.md)API实现兼容,当参数count取值为0时,不保证该接口被视为NOP(空操作)。 | 71 | - 针对Ascend 950PR/Ascend 950DT,该接口通过VF调用[Reg矢量计算](../../reg_vector_compute/reg_vector_compute.md)API实现兼容,当参数count取值为0时,不保证该接口被视为NOP(空操作)。 |
| 72 | <!-- end id9 --> | 72 | <!-- end id9 --> |
| @@ -94,7 +94,7 @@ | |||
| 94 | ## 约束说明<a name="zh-cn_topic_0000002563051145_section1323412155712"></a> | 94 | ## 约束说明<a name="zh-cn_topic_0000002563051145_section1323412155712"></a> |
| 95 | 95 | ||
| 96 | - offset量化参数,int16\_t类型,只有前9位有效。 | 96 | - offset量化参数,int16\_t类型,只有前9位有效。 |
| 97 | -- vdeq地址对齐约束参考[地址对齐约束](../../../通用说明和约束.md#section796754519912)。 | 97 | +- vdeq地址对齐约束参考[地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。 |
| 98 | 98 | ||
| 99 | ## 调用示例<a name="zh-cn_topic_0000002563051145_section5349145316712"></a> | 99 | ## 调用示例<a name="zh-cn_topic_0000002563051145_section5349145316712"></a> |
| 100 | 100 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | | 参数名 | 描述 | | 3 | | 参数名 | 描述 | |
| 4 | | :-- | :-- | | 4 | | :-- | :-- | |
| 5 | -| MaskMergeMode | 用于指定写入寄存器数据模式。<br><pre>enum class MaskMergeMode { <br> UNKNOWN, <br> MERGING, <br> ZEROING <br>};</pre>• UNKNOWN:当转换类型不支持MaskMergeMode时,选择该模式;<br>• ZEROING:mask未选择的元素在dst中置零;<br>• MERGING:mask未选择的元素对应dst元素中保留dst原值。 | | 5 | +| MaskMergeMode | 用于指定写入寄存器数据模式。<br>enum class MaskMergeMode { <br> UNKNOWN, <br> MERGING, <br> ZEROING <br>};<br>• UNKNOWN:当转换类型不支持MaskMergeMode时,选择该模式;<br>• ZEROING:mask未选择的元素在dst中置零;<br>• MERGING:mask未选择的元素对应dst元素中保留dst原值。 | |
| 6 | 6 | ||
| 7 | ```cpp | 7 | ```cpp |
| 8 | enum class MaskMergeMode { | 8 | enum class MaskMergeMode { |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | | 参数名 | 描述 | | 3 | | 参数名 | 描述 | |
| 4 | | :-- | :-- | | 4 | | :-- | :-- | |
| 5 | -| PostLiteral | 用于控制是否开启UB地址自动更新功能(post update)。<br><pre>enum class PostLiteral { <br> POST_MODE_NORMAL, <br> POST_MODE_UPDATE <br>};</pre>• POST_MODE_NORMAL:POST_MODE_NORMAL场景使用,UB操作数地址不更新。连续非对齐搬入(LoadUnAlign)不支持POST_MODE_NORMAL模式;<br>• POST_MODE_UPDATE:POST_MODE_UPDATE场景使用,UB地址同时作为输入和输出,每次调用会更新。 | | 5 | +| PostLiteral | 用于控制是否开启UB地址自动更新功能(post update)。<br>enum class PostLiteral { <br> POST_MODE_NORMAL, <br> POST_MODE_UPDATE <br>};<br>• POST_MODE_NORMAL:POST_MODE_NORMAL场景使用,UB操作数地址不更新。连续非对齐搬入(LoadUnAlign)不支持POST_MODE_NORMAL模式;<br>• POST_MODE_UPDATE:POST_MODE_UPDATE场景使用,UB地址同时作为输入和输出,每次调用会更新。 | |
| 6 | 6 | ||
| 7 | ```cpp | 7 | ```cpp |
| 8 | enum class PostLiteral { | 8 | enum class PostLiteral { |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | | 参数名 | 描述 | | 3 | | 参数名 | 描述 | |
| 4 | | :-- | :-- | | 4 | | :-- | :-- | |
| 5 | -| RoundMode | 用于设置控制舍入模式。<br><pre>enum class RoundMode { <br> CAST_NONE = 0, <br> CAST_RINT, <br> CAST_FLOOR,<br> CAST_CEIL,<br> CAST_ROUND,<br> CAST_TRUNC,<br> CAST_ODD,<br> CAST_HYBRID <br>};</pre>• CAST_NONE:当转换过程存在精度损失时,按 CAST_RINT 模式处理;当不存在精度损失时,不进行舍入。<br>• CAST_RINT:向最近的偶数舍入。<br> - 若待舍入部分的首位为 0,则不进位。<br> - 若待舍入部分的首位为 1 且后续位不全为 0,则进位。<br> - 若待舍入部分的首位为 1 且后续位全为 0:当非舍入部分的末位为 0,则不进位。当非舍入部分的末位为 1,则进位。<br>• CAST_FLOOR:向负无穷大方向舍入。<br> - 若符号位(S)为 0(正数),不进位。<br> - 若符号位(S)为 1(负数):当待舍入部分全为 0,则不进位。否则,进位。<br>• CAST_CEIL:向正无穷大方向舍入。<br> - 若符号位(S)为 1(负数),不进位。<br> - 若符号位(S)为 0(正数):当待舍入部分全为 0,则不进位。否则,进位。<br>• CAST_ROUND: 四舍五入。若待舍入部分的首位为0,则不进位。否则,进位。<br>• CAST_TRUNC: 直接丢弃待舍入部分。<br>• CAST_ODD:向最近的奇数舍入。<br> - 若待舍入部分全为 0,则不进位。<br> - 若待舍入部分不全为 0:非舍入部分的末位为 1,则不进位。当非舍入部分的末位为 0,则进位。<br>• CAST_HYBRID:随机舍入,目前特指输出结果是hifloat8_t数据类型时的随机舍入。 | | 5 | +| RoundMode | 用于设置控制舍入模式。<br>enum class RoundMode { <br> CAST_NONE = 0, <br> CAST_RINT, <br> CAST_FLOOR,<br> CAST_CEIL,<br> CAST_ROUND,<br> CAST_TRUNC,<br> CAST_ODD,<br> CAST_HYBRID <br>};<br>• CAST_NONE:当转换过程存在精度损失时,按 CAST_RINT 模式处理;当不存在精度损失时,不进行舍入。<br>• CAST_RINT:向最近的偶数舍入。<br> - 若待舍入部分的首位为 0,则不进位。<br> - 若待舍入部分的首位为 1 且后续位不全为 0,则进位。<br> - 若待舍入部分的首位为 1 且后续位全为 0:当非舍入部分的末位为 0,则不进位。当非舍入部分的末位为 1,则进位。<br>• CAST_FLOOR:向负无穷大方向舍入。<br> - 若符号位(S)为 0(正数),不进位。<br> - 若符号位(S)为 1(负数):当待舍入部分全为 0,则不进位。否则,进位。<br>• CAST_CEIL:向正无穷大方向舍入。<br> - 若符号位(S)为 1(负数),不进位。<br> - 若符号位(S)为 0(正数):当待舍入部分全为 0,则不进位。否则,进位。<br>• CAST_ROUND: 四舍五入。若待舍入部分的首位为0,则不进位。否则,进位。<br>• CAST_TRUNC: 直接丢弃待舍入部分。<br>• CAST_ODD:向最近的奇数舍入。<br> - 若待舍入部分全为 0,则不进位。<br> - 若待舍入部分不全为 0:非舍入部分的末位为 1,则不进位。当非舍入部分的末位为 0,则进位。<br>• CAST_HYBRID:随机舍入,目前特指输出结果是hifloat8_t数据类型时的随机舍入。 | |
| 6 | 6 | ||
| 7 | ```cpp | 7 | ```cpp |
| 8 | enum class RoundMode { | 8 | enum class RoundMode { |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | | 参数名 | 描述 | | 3 | | 参数名 | 描述 | |
| 4 | | :-- | :-- | | 4 | | :-- | :-- | |
| 5 | -| SatMode | 用于设置Cast类型转换饱和与不饱和模式。<br><pre>enum class SatMode { <br> UNKNOWN = -1, <br> NO_SAT, <br> SAT <br>};</pre>• UNKNOWN:当转换类型不支持SatMode时,选择该模式;<br>• NO_SAT:不饱和模式;<br>• SAT:饱和模式。 | | 5 | +| SatMode | 用于设置Cast类型转换饱和与不饱和模式。<br>enum class SatMode { <br> UNKNOWN = -1, <br> NO_SAT, <br> SAT <br>};<br>• UNKNOWN:当转换类型不支持SatMode时,选择该模式;<br>• NO_SAT:不饱和模式;<br>• SAT:饱和模式。 | |
| 6 | 6 | ||
| 7 | ```cpp | 7 | ```cpp |
| 8 | enum class SatMode { | 8 | enum class SatMode { |
| @@ -48,7 +48,7 @@ __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>• 配置MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 配置DivSpecificMode<br><pre><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></pre>当precisionMode为true时,使能更高精度的Div计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前只针对float数据类型生效。<br>• algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br> • DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br> • DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float、complex64数据类型。<br> • DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持Subnormal数据计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br> • DivAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 | | 51 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或DivSpecificMode的结构体指针。<br>• 配置MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 配置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>• algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br> • DivAlgo::INTRINSIC、DivAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br> • DivAlgo::DIFF_COMPENSATION、DivAlgo::PRECISION_0ULP_FTZ_TRUE,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float、complex64数据类型。<br> • DivAlgo::PRECISION_0ULP_FTZ_FALSE,支持Subnormal数据计算,使用差值补偿算法得出结果,最大精度误差为0ulp。目前,该算法支持float数据类型。<br> • DivAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 | |
| 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 53 | 53 | ||
| 54 | 54 | ||
| @@ -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>• MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• ExpSpecificMode,定义如下:<pre><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></pre>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br> • ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br> • ExpAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 | | 51 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型的枚举或ExpSpecificMode的结构体指针。<br>• MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 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>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br> • ExpAlgo::INTRINSIC、ExpAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br> • ExpAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 | |
| 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 53 | 53 | ||
| 54 | **表 2** 参数说明 | 54 | **表 2** 参数说明 |
| @@ -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>• 配置MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 配置LnSpecificMode,定义如下:<br><pre><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></pre>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。目前,该算法支持half、float数据类型。<br> • LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 | | 51 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或LnSpecificMode的结构体指针。<br>• 配置MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 配置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>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • LnAlgo::INTRINSIC、LnAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。目前,该算法支持half、float数据类型。<br> • LnAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 | |
| 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 53 | 53 | ||
| 54 | **表 2** 参数说明 | 54 | **表 2** 参数说明 |
| @@ -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>• 配置MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 配置LogSpecificMode,定义如下:<br><pre><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></pre>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • LogAlgo::INTRINSIC、LogAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。目前,该算法支持half、float数据类型。<br> • LogAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 | | 51 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或LogSpecificMode的结构体指针。<br>• 配置MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 配置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>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • LogAlgo::INTRINSIC、LogAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。目前,该算法支持half、float数据类型。<br> • LogAlgo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算,最大精度误差为1ulp。目前,该算法支持half、float数据类型。 | |
| 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 53 | 53 | ||
| 54 | **表2** 参数说明 | 54 | **表2** 参数说明 |
| @@ -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>• 配置MaskMergeMode枚举类型选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• Log10SpecificMode,定义如下:<pre><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></pre>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • Log10Algo::INTRINSIC、Log10Algo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br> • Log10Algo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 | | 53 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或Log10SpecificMode的结构体。<br>• 配置MaskMergeMode枚举类型选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 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>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • Log10Algo::INTRINSIC、Log10Algo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,所有Subnormal被近似为0。<br> • Log10Algo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 | |
| 54 | | U | 目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 54 | | U | 目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 55 | 55 | ||
| 56 | **表2** 参数说明 | 56 | **表2** 参数说明 |
| @@ -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>• 配置MaskMergeMode枚举类型选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• Log2SpecificMode,定义如下:<pre><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></pre>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • Log2Algo::INTRINSIC、Log2Algo::PRECISION_1ULP_FTZ_TRUE,所有Subnormal被近似为0。<br> • Log2Algo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 | | 53 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型或Log2SpecificMode的结构体实例。<br>• 配置MaskMergeMode枚举类型选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 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>• mrgMode:选择MERGING模式或ZEROING模式。<br>• algo:用于配置Subnormal模式。<br> • Log2Algo::INTRINSIC、Log2Algo::PRECISION_1ULP_FTZ_TRUE,所有Subnormal被近似为0。<br> • Log2Algo::PRECISION_1ULP_FTZ_FALSE,支持Subnormal数据计算。 | |
| 54 | | U | 目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 54 | | U | 目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 55 | 55 | ||
| 56 | **表2** 参数说明 | 56 | **表2** 参数说明 |
| @@ -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>• MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• SqrtSpecificMode,定义如下:<pre><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></pre>• mrgMode:选择MERGING模式或ZEROING模式。<br>• precisionMode:用于配置精度模式。当precisionMode为true时,使能更高精度的Sqrt计算,使用快速求逆算法得出结果。该算法目前只针对float数据类型生效。<br>• algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br> • SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br> • SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE,使用快速求逆算法得出结果。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br> • SqrtAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。 | | 51 | +| mode | 可配置为[MaskMergeMode](../aux_data_types/MaskMergeMode.md)枚举类型的枚举或SqrtSpecificMode的结构体指针。<br>• MaskMergeMode,选择MERGING模式或ZEROING模式。<br> • ZEROING模式下,mask未筛选的元素在dstReg中置零。<br> • MERGING模式当前不支持。<br>• 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>• mrgMode:选择MERGING模式或ZEROING模式。<br>• precisionMode:用于配置精度模式。当precisionMode为true时,使能更高精度的Sqrt计算,使用快速求逆算法得出结果。该算法目前只针对float数据类型生效。<br>• algo:用于配置Subnormal模式,具体参考[关键特性说明](#关键特性说明)。<br> • SqrtAlgo::INTRINSIC、SqrtAlgo::PRECISION_1ULP_FTZ_TRUE,使用单指令计算得出结果,最大精度误差为1ulp。<br> • SqrtAlgo::FAST_INVERSE、SqrtAlgo::PRECISION_0ULP_FTZ_FALSE,使用快速求逆算法得出结果。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。<br> • SqrtAlgo::PRECISION_1ULP_FTZ_FALSE,最大精度误差为1ulp。 | |
| 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | | 52 | | U | 源操作数和目的操作数的RegTensor类型,例如RegTensor<half>,由编译器自动推导,用户不需要填写。 | |
| 53 | 53 | ||
| 54 | **表 2** 参数说明 | 54 | **表 2** 参数说明 |
| @@ -45,7 +45,7 @@ __simd_callee__ inline void PairReduceElem(U& dstReg, U srcReg, MaskReg mask) | |||
| 45 | 45 | ||
| 46 | | 参数名 | 描述 | | 46 | | 参数名 | 描述 | |
| 47 | | --- | --- | | 47 | | --- | --- | |
| 48 | -| type | 具体的PairReduce类型,当前仅支持归约求和计算。<br><pre>enum class PairReduce {<br> SUM = 0,<br>};</pre> | | 48 | +| type | 具体的PairReduce类型,当前仅支持归约求和计算。<br>enum class PairReduce {<br> SUM = 0,<br>}; | |
| 49 | | T | 目的操作数和源操作数的数据类型。 | | 49 | | T | 目的操作数和源操作数的数据类型。 | |
| 50 | | mode | [MaskMergeMode](../aux_data_types/MaskMergeMode.md),选择MERGING模式或ZEROING模式。<br>• ZEROING,mask未筛选的元素在dst中置零。目前仅支持该模式。<br>• MERGING,当前不支持。 | | 50 | | mode | [MaskMergeMode](../aux_data_types/MaskMergeMode.md),选择MERGING模式或ZEROING模式。<br>• ZEROING,mask未筛选的元素在dst中置零。目前仅支持该模式。<br>• MERGING,当前不支持。 | |
| 51 | | U | 目的操作数和源操作数的RegTensor类型,由编译器自动推导,用户不需要填写。 | | 51 | | U | 目的操作数和源操作数的RegTensor类型,由编译器自动推导,用户不需要填写。 | |
| @@ -49,7 +49,7 @@ __simd_callee__ inline void Reduce(S& dstReg, V srcReg, MaskReg mask) | |||
| 49 | 49 | ||
| 50 | | 参数名 | 描述 | | 50 | | 参数名 | 描述 | |
| 51 | | --- | --- | | 51 | | --- | --- | |
| 52 | -| type | ReduceType类型,支持SUM、MAX、MIN。<br><pre>enum class ReduceType {<br> SUM = 0,<br> MAX,<br> MIN,<br>};</pre> | | 52 | +| type | ReduceType类型,支持SUM、MAX、MIN。<br>enum class ReduceType {<br> SUM = 0,<br> MAX,<br> MIN,<br>}; | |
| 53 | | T | 目的操作数dstReg的数据类型。 | | 53 | | T | 目的操作数dstReg的数据类型。 | |
| 54 | | U | 源操作数srcReg的数据类型。 | | 54 | | U | 源操作数srcReg的数据类型。 | |
| 55 | | mode | [MaskMergeMode](../aux_data_types/MaskMergeMode.md),选择MERGING模式或ZEROING模式。<br>• ZEROING,mask未选中的元素在dst中置零。<br>• MERGING,当前不支持。 | | 55 | | mode | [MaskMergeMode](../aux_data_types/MaskMergeMode.md),选择MERGING模式或ZEROING模式。<br>• ZEROING,mask未选中的元素在dst中置零。<br>• MERGING,当前不支持。 | |
| @@ -47,7 +47,7 @@ __simd_callee__ inline void ReduceDataBlock(U& dstReg, U srcReg, MaskReg mask) | |||
| 47 | 47 | ||
| 48 | | 参数名 | 描述 | | 48 | | 参数名 | 描述 | |
| 49 | | --- | --- | | 49 | | --- | --- | |
| 50 | -| type | ReduceType类型,支持SUM、MAX、MIN。<br><pre>enum class ReduceType {<br> SUM = 0,<br> MAX,<br> MIN,<br>};</pre> | | 50 | +| type | ReduceType类型,支持SUM、MAX、MIN。<br>enum class ReduceType {<br> SUM = 0,<br> MAX,<br> MIN,<br>}; | |
| 51 | | T | 目的操作数和源操作数的数据类型。 | | 51 | | T | 目的操作数和源操作数的数据类型。 | |
| 52 | | mode | [MaskMergeMode](../aux_data_types/MaskMergeMode.md),选择MERGING模式或ZEROING模式。当前仅支持ZEROING模式。<br>• ZEROING,mask未筛选的元素在dst中置零。<br>• MERGING,当前不支持。 | | 52 | | mode | [MaskMergeMode](../aux_data_types/MaskMergeMode.md),选择MERGING模式或ZEROING模式。当前仅支持ZEROING模式。<br>• ZEROING,mask未筛选的元素在dst中置零。<br>• MERGING,当前不支持。 | |
| 53 | | U | 目的操作数和源操作数的RegTensor类型,例如RegTensor<int32_t>,由编译器自动推导,用户不需要填写。 | | 53 | | U | 目的操作数和源操作数的RegTensor类型,例如RegTensor<int32_t>,由编译器自动推导,用户不需要填写。 | |
| @@ -54,7 +54,7 @@ MaskReg寄存器用于指示在计算过程中哪些元素参与计算,宽度 | |||
| 54 | | 参数名 | 输入/输出 | 描述 | | 54 | | 参数名 | 输入/输出 | 描述 | |
| 55 | | :-- | :------------ | :------------ | | 55 | | :-- | :------------ | :------------ | |
| 56 | | T | 输入 | 模板参数,支持的数据类型为b8/b16/b32/b64。 | | 56 | | T | 输入 | 模板参数,支持的数据类型为b8/b16/b32/b64。 | |
| 57 | -| mode | 输入 | 创建MaskReg的模式,enum class类型。<br><pre>enum class MaskPattern {<br> ALL, // 所有元素设置为有效数据<br> VL1, // 最低1个元素设置为有效数据<br> VL2, // 最低2个元素设置为有效数据<br> VL3, // 最低3个元素设置为有效数据<br> VL4, // 最低4个元素设置为有效数据<br> VL8, // 最低8个元素设置为有效数据<br> VL16, // 最低16个元素设置为有效数据<br> VL32, // 最低32个元素设置为有效数据<br> VL64, // 最低64个元素设置为有效数据<br> VL128, // 最低128个元素设置为有效数据<br> M3, // 3的倍数设置为有效数据<br> M4, // 4的倍数设置为有效数据<br> H, // 最低一半元素设置为有效数据<br> Q, // 最低四分之一元素设置为有效数据<br> ALLF = 15 // 所有元素设置为无效数据<br>};</pre> | | 57 | +| mode | 输入 | 创建MaskReg的模式,enum class类型。<br>enum class MaskPattern {<br> ALL, // 所有元素设置为有效数据<br> VL1, // 最低1个元素设置为有效数据<br> VL2, // 最低2个元素设置为有效数据<br> VL3, // 最低3个元素设置为有效数据<br> VL4, // 最低4个元素设置为有效数据<br> VL8, // 最低8个元素设置为有效数据<br> VL16, // 最低16个元素设置为有效数据<br> VL32, // 最低32个元素设置为有效数据<br> VL64, // 最低64个元素设置为有效数据<br> VL128, // 最低128个元素设置为有效数据<br> M3, // 3的倍数设置为有效数据<br> M4, // 4的倍数设置为有效数据<br> H, // 最低一半元素设置为有效数据<br> Q, // 最低四分之一元素设置为有效数据<br> ALLF = 15 // 所有元素设置为无效数据<br>}; | |
| 58 | | regTrait | 输入 | 该参数默认值为RegTraitNumOne。 | | 58 | | regTrait | 输入 | 该参数默认值为RegTraitNumOne。 | |
| 59 | 59 | ||
| 60 | <a id="update-mask-params"></a> | 60 | <a id="update-mask-params"></a> |
| @@ -60,7 +60,7 @@ __simd_callee__ inline void Cast(S& dstReg, V& srcReg, MaskReg& mask); | |||
| 60 | | --- | --- | | 60 | | --- | --- | |
| 61 | | T | 目的操作数的数据类型。支持的数据类型请参考[数据类型](#数据类型)。 | | 61 | | T | 目的操作数的数据类型。支持的数据类型请参考[数据类型](#数据类型)。 | |
| 62 | | U | 源操作数的数据类型。支持的数据类型请参考[数据类型](#数据类型)。 | | 62 | | U | 源操作数的数据类型。支持的数据类型请参考[数据类型](#数据类型)。 | |
| 63 | -| trait | CastTrait类型,类型转换模式结构体。包括[RegLayout](../aux_data_types/RegLayout.md)、[SatMode](../aux_data_types/SatMode.md)、[MaskMergeMode](../aux_data_types/MaskMergeMode.md)、[RoundMode](../aux_data_types/RoundMode.md)。<br><pre><code>struct CastTrait {<br> RegLayout layoutMode = RegLayout::UNKNOWN;<br> SatMode satMode = SatMode::UNKNOWN;<br> MaskMergeMode mrgMode = MaskMergeMode::UNKNOWN;<br> RoundMode roundMode = RoundMode::UNKNOWN;<br>};</code></pre>使能SatMode生效需与SetCtrlSpr配合使用。不饱和模式和饱和模式的具体配置请参考[表5 饱和模式全局或单指令生效配置表](#表5-饱和模式全局或单指令生效配置表)。<br>注:SetCtrlSpr需在SIMD_VF外调用。 | | 63 | +| trait | CastTrait类型,类型转换模式结构体。包括[RegLayout](../aux_data_types/RegLayout.md)、[SatMode](../aux_data_types/SatMode.md)、[MaskMergeMode](../aux_data_types/MaskMergeMode.md)、[RoundMode](../aux_data_types/RoundMode.md)。<br><code>struct CastTrait {<br> RegLayout layoutMode = RegLayout::UNKNOWN;<br> SatMode satMode = SatMode::UNKNOWN;<br> MaskMergeMode mrgMode = MaskMergeMode::UNKNOWN;<br> RoundMode roundMode = RoundMode::UNKNOWN;<br>};</code><br>使能SatMode生效需与SetCtrlSpr配合使用。不饱和模式和饱和模式的具体配置请参考[表5 饱和模式全局或单指令生效配置表](#表5-饱和模式全局或单指令生效配置表)。<br>注:SetCtrlSpr需在SIMD_VF外调用。 | |
| 64 | | S | 目的操作数的[RegTensor](../register_data_types/RegTensor.md)类型,例如RegTensor<float>,由编译器自动推导,用户不需要填写。 | | 64 | | S | 目的操作数的[RegTensor](../register_data_types/RegTensor.md)类型,例如RegTensor<float>,由编译器自动推导,用户不需要填写。 | |
| 65 | | V | 源操作数的[RegTensor](../register_data_types/RegTensor.md)类型,例如RegTensor<int32_t>,由编译器自动推导,用户不需要填写。 | | 65 | | V | 源操作数的[RegTensor](../register_data_types/RegTensor.md)类型,例如RegTensor<int32_t>,由编译器自动推导,用户不需要填写。 | |
| 66 | 66 | ||
| @@ -53,7 +53,7 @@ __aicore__ inline U Cast(T valueIn) | |||
| 53 | | ------ | ------ | | 53 | | ------ | ------ | |
| 54 | | T | valueIn的数据类型。 | | 54 | | T | valueIn的数据类型。 | |
| 55 | | U | 转换后的数据类型。 | | 55 | | U | 转换后的数据类型。 | |
| 56 | -| roundMode | 精度转换处理模式,类型是RoundMode。<br>RoundMode为枚举类型,用以控制精度转换处理模式,参考[精度舍入模式](../data_structures/precision_conversion.md#tab1),可取值为:<pre>• CAST_NONE:当转换过程存在精度损失时,按CAST_RINT模式处理;当不存在精度损失时,不进行舍入;<br>• CAST_RINT:向最近的偶数舍入;<br>• CAST_FLOOR:向负无穷大方向舍入;<br>• CAST_CEIL:向正无穷大方向舍入;<br>• CAST_ROUND:四舍五入;<br>• CAST_TRUNC:截断模式;<br>• CAST_ODD:向最近的奇数舍入。</pre> | | 56 | +| roundMode | 精度转换处理模式,类型是RoundMode。<br>RoundMode为枚举类型,用以控制精度转换处理模式,参考[精度舍入模式](../data_structures/precision_conversion.md#tab1),可取值为:<br>• CAST_NONE:当转换过程存在精度损失时,按CAST_RINT模式处理;当不存在精度损失时,不进行舍入;<br>• CAST_RINT:向最近的偶数舍入;<br>• CAST_FLOOR:向负无穷大方向舍入;<br>• CAST_CEIL:向正无穷大方向舍入;<br>• CAST_ROUND:四舍五入;<br>• CAST_TRUNC:截断模式;<br>• CAST_ODD:向最近的奇数舍入。 | |
| 57 | 57 | ||
| 58 | **表2** 参数说明 | 58 | **表2** 参数说明 |
| 59 | 59 | ||
| @@ -49,7 +49,7 @@ __aicore__ inline bool GetSaturationFlag() | |||
| 49 | 49 | ||
| 50 | | 参数名 | 描述 | | 50 | | 参数名 | 描述 | |
| 51 | | -------- | -------- | | 51 | | -------- | -------- | |
| 52 | -| mode | 配置的对应饱和模式。<br>当mode配置为FLOAT时,开启饱和模式,inf输出会被饱和为±MAX,NaN输出会被饱和为0;关闭饱和模式,inf/NaN保持原输出。<br>当mode配置为CAST时,开启饱和模式,溢出值会被饱和为±MAX;关闭饱和模式,溢出值会按目标数据类型位数截断,保留低位,舍弃高位。<br><pre>enum class SaturationMode : uint8_t {<br> FLOAT, // 控制浮点数计算和浮点数精度转换时的饱和模式,浮点数数据类型仅支持half、bfloat16_t;<br> CAST // 控制浮点数转整数或整数转整数时的精度转换饱和模式;<br>};<br></pre> | | 52 | +| mode | 配置的对应饱和模式。<br>当mode配置为FLOAT时,开启饱和模式,inf输出会被饱和为±MAX,NaN输出会被饱和为0;关闭饱和模式,inf/NaN保持原输出。<br>当mode配置为CAST时,开启饱和模式,溢出值会被饱和为±MAX;关闭饱和模式,溢出值会按目标数据类型位数截断,保留低位,舍弃高位。<br>enum class SaturationMode : uint8_t {<br> FLOAT, // 控制浮点数计算和浮点数精度转换时的饱和模式,浮点数数据类型仅支持half、bfloat16_t;<br> CAST // 控制浮点数转整数或整数转整数时的精度转换饱和模式;<br>};<br> | |
| 53 | 53 | ||
| 54 | ## 返回值说明 | 54 | ## 返回值说明 |
| 55 | 55 | ||
| @@ -49,7 +49,7 @@ __aicore__ inline void SetSaturationFlag(bool enableSat) | |||
| 49 | 49 | ||
| 50 | | 参数名 | 描述 | | 50 | | 参数名 | 描述 | |
| 51 | | -------- | -------- | | 51 | | -------- | -------- | |
| 52 | -| mode | 配置的对应饱和模式。<br>当mode配置为FLOAT时,开启饱和模式,inf输出会被饱和为±MAX,NaN输出会被饱和为0;关闭饱和模式,inf/NaN保持原输出。<br>当mode配置为CAST时,开启饱和模式,溢出值会被饱和为±MAX;关闭饱和模式,溢出值会按目标数据类型位数截断,保留低位,舍弃高位。<br><pre>enum class SaturationMode : uint8_t {<br> FLOAT, // 控制浮点数计算和浮点数精度转换时的饱和模式,浮点数数据类型仅支持half、bfloat16_t;<br> CAST // 控制浮点数转整数或整数转整数时的精度转换饱和模式;<br>};<br></pre> | | 52 | +| mode | 配置的对应饱和模式。<br>当mode配置为FLOAT时,开启饱和模式,inf输出会被饱和为±MAX,NaN输出会被饱和为0;关闭饱和模式,inf/NaN保持原输出。<br>当mode配置为CAST时,开启饱和模式,溢出值会被饱和为±MAX;关闭饱和模式,溢出值会按目标数据类型位数截断,保留低位,舍弃高位。<br>enum class SaturationMode : uint8_t {<br> FLOAT, // 控制浮点数计算和浮点数精度转换时的饱和模式,浮点数数据类型仅支持half、bfloat16_t;<br> CAST // 控制浮点数转整数或整数转整数时的精度转换饱和模式;<br>};<br> | |
| 53 | 53 | ||
| 54 | **表2** 参数说明 | 54 | **表2** 参数说明 |
| 55 | 55 | ||
| @@ -139,7 +139,7 @@ SyncAll是核间同步控制接口,根据不同的函数原型介绍其功能 | |||
| 139 | | 参数名 | 描述 | | 139 | | 参数名 | 描述 | |
| 140 | | --- | --- | | 140 | | --- | --- | |
| 141 | | isAIVOnly | 控制SyncAll作用于纯Vector算子或Mix(包含Cube和Vector计算)算子。可选值:<br>• **true**(默认值):纯Vector算子的全核同步,仅执行Vector核的全核同步。<br>• **false**:Mix(包含Cube和Vector计算)算子的全核同步,先分别完成Vector核和Cube核的全核同步,再执行两者之间的同步(软同步接口不支持此功能)。 | | 141 | | isAIVOnly | 控制SyncAll作用于纯Vector算子或Mix(包含Cube和Vector计算)算子。可选值:<br>• **true**(默认值):纯Vector算子的全核同步,仅执行Vector核的全核同步。<br>• **false**:Mix(包含Cube和Vector计算)算子的全核同步,先分别完成Vector核和Cube核的全核同步,再执行两者之间的同步(软同步接口不支持此功能)。 | |
| 142 | -| config | **该配置仅当isAIVOnly=True时有效。**<br><pre>struct SyncAllConfig {
 pipe_t triggerPipe;
 pipe_t waitPipe;
};

// 默认使用全部流水来进行触发和等待行为。<br>constexpr SyncAllConfig DEFAULT_SYNC_ALL_CONFIG = {PIPE_ALL, PIPE_ALL};</pre><br>控制SyncAll函数的行为,在多个AI Core之间进行流水同步时,指定哪些流水(pipe)用于触发和等待。<br>• **triggerPipe**:指定哪个流水用于“发送触发信号”。仅支持MTE2、MTE3、PIPE_ALL。<br>• **waitPipe**:指定哪个流水用于“接收等待信号”。仅支持MTE2、MTE3、PIPE_ALL。<br><pre>// 多个AIV进行计算
Compute();
// 多个AIV将计算结果搬出到GM
CopyToGM();
// 等待所有数据拷贝到GM后,进行累加
constexpr AscendC::SyncAllConfig CustomConfig = {PIPE_MTE3, PIPE_ALL};
AscendC::SyncAll<true, CustomConfig>();
for (int i = 0; i < blockNum; i++) {
 if (i != blockIdx) {
 CopyFromGm();
 Accumulate();
 }
}
// 累加后的数据写回
CopyToGm();</pre> | | 142 | +| config | **该配置仅当isAIVOnly=True时有效。**<br>struct SyncAllConfig {
 pipe_t triggerPipe;
 pipe_t waitPipe;
};

// 默认使用全部流水来进行触发和等待行为。<br>constexpr SyncAllConfig DEFAULT_SYNC_ALL_CONFIG = {PIPE_ALL, PIPE_ALL};<br>控制SyncAll函数的行为,在多个AI Core之间进行流水同步时,指定哪些流水(pipe)用于触发和等待。<br>• **triggerPipe**:指定哪个流水用于“发送触发信号”。仅支持MTE2、MTE3、PIPE_ALL。<br>• **waitPipe**:指定哪个流水用于“接收等待信号”。仅支持MTE2、MTE3、PIPE_ALL。<br>// 多个AIV进行计算
<br>Compute();
<br>// 多个AIV将计算结果搬出到GM
<br>CopyToGM();
<br>// 等待所有数据拷贝到GM后,进行累加
<br>constexpr AscendC::SyncAllConfig CustomConfig = {PIPE_MTE3, PIPE_ALL};
<br>AscendC::SyncAll<true, CustomConfig>();
<br>for (int i = 0; i < blockNum; i++) {
<br> if (i != blockIdx) {
<br> CopyFromGm();
<br> Accumulate();
<br> }
<br>}
<br>// 累加后的数据写回
<br>CopyToGm(); | |
| 143 | 143 | ||
| 144 | **表2** 参数说明 | 144 | **表2** 参数说明 |
| 145 | 145 | ||
| @@ -29,7 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | - **接口不支持Mask或者无需设置Mask**。 | 30 | - **接口不支持Mask或者无需设置Mask**。 |
| 31 | 31 | ||
| 32 | -更多Mask信息可参考[基于全局掩码复用的计算性能优化](../../guide/算子实践参考/SIMD算子性能优化/矢量计算/基于全局掩码复用的计算性能优化.md)。 | 32 | +更多Mask信息可参考[基于全局掩码复用的计算性能优化](../../guide/算子实践参考/SIMD算子性能优化/矢量计算/mask_reuse_optimization.md)。 |
| 33 | 33 | ||
| 34 | 注:表中的`-`表示不存在该类型接口。 | 34 | 注:表中的`-`表示不存在该类型接口。 |
| 35 | 35 | ||
| @@ -292,7 +292,6 @@ | |||
| 292 | - [概述](算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md) | 292 | - [概述](算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md) |
| 293 | - [避免bank冲突(NPU架构版本2201)](算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md) | 293 | - [避免bank冲突(NPU架构版本2201)](算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md) |
| 294 | - [避免bank冲突(NPU架构版本3510)](算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_3510.md) | 294 | - [避免bank冲突(NPU架构版本3510)](算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_3510.md) |
| 295 | - | ||
| 296 | - [L2 Cache切分](算子实践参考/SIMD算子性能优化/内存访问/L2-Cache切分.md) | 295 | - [L2 Cache切分](算子实践参考/SIMD算子性能优化/内存访问/L2-Cache切分.md) |
| 297 | 296 | ||
| 298 | - [矢量计算](算子实践参考/SIMD算子性能优化/矢量计算/矢量计算.md) | 297 | - [矢量计算](算子实践参考/SIMD算子性能优化/矢量计算/矢量计算.md) |
| @@ -304,6 +303,7 @@ | |||
| 304 | - [指令双发优化](算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/指令双发优化.md) | 303 | - [指令双发优化](算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/指令双发优化.md) |
| 305 | - [连续非对齐场景优化](算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/连续非对齐场景优化.md) | 304 | - [连续非对齐场景优化](算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/连续非对齐场景优化.md) |
| 306 | - [VF融合优化](算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md) | 305 | - [VF融合优化](算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md) |
| 306 | + - [基于全局掩码复用的计算性能优化](算子实践参考/SIMD算子性能优化/矢量计算/mask_reuse_optimization.md) | ||
| 307 | 307 | ||
| 308 | - [矩阵计算](算子实践参考/SIMD算子性能优化/矩阵计算/矩阵计算.md) | 308 | - [矩阵计算](算子实践参考/SIMD算子性能优化/矩阵计算/矩阵计算.md) |
| 309 | - [通过BT Buffer实现高效的bias计算](算子实践参考/SIMD算子性能优化/矩阵计算/通过BT-Buffer实现高效的bias计算.md) | 309 | - [通过BT Buffer实现高效的bias计算](算子实践参考/SIMD算子性能优化/矩阵计算/通过BT-Buffer实现高效的bias计算.md) |
| @@ -28,7 +28,7 @@ Cube编程范式把算子的实现流程分为5个基本任务:CopyIn,Split | |||
| 28 | 28 | ||
| 29 | 4. Stage4:Aggregate任务。 | 29 | 4. Stage4:Aggregate任务。 |
| 30 | 1. 使用[DeQue](../../../../api/SIMD-API/basic_api/resource_management/TQue/DeQue.md)从L0C Buffer(CO1)中取出LocalTensor。 | 30 | 1. 使用[DeQue](../../../../api/SIMD-API/basic_api/resource_management/TQue/DeQue.md)从L0C Buffer(CO1)中取出LocalTensor。 |
| 31 | - 2. 使用Ascend C接口拷贝结果矩阵到逻辑位置CO2。CO2的物理存储映射与产品型号相关,具体请参考[逻辑位置和物理存储的映射关系](../../../../api/SIMD-API/通用说明和约束.md#section1359919519819)。 | 31 | + 2. 使用Ascend C接口拷贝结果矩阵到逻辑位置CO2。CO2的物理存储映射与产品型号相关,具体请参考[逻辑位置和物理存储的映射关系](../../../../api/SIMD-API/general_description_and_constraints.md#section1359919519819)。 |
| 32 | 3. 使用[EnQue](../../../../api/SIMD-API/basic_api/resource_management/TQue/EnQue.md)将计算结果LocalTensor放入到CO2对应的Queue中。 | 32 | 3. 使用[EnQue](../../../../api/SIMD-API/basic_api/resource_management/TQue/EnQue.md)将计算结果LocalTensor放入到CO2对应的Queue中。 |
| 33 | 33 | ||
| 34 | 5. Stage5:CopyOut任务。 | 34 | 5. Stage5:CopyOut任务。 |
| @@ -16,7 +16,7 @@ Matmul的计算公式为:C = A \* B + bias,其示意图如下。 | |||
| 16 | 16 | ||
| 17 | ## 矩阵乘法数据流<a name="zh-cn_topic_0000001622194138_section295172162917"></a> | 17 | ## 矩阵乘法数据流<a name="zh-cn_topic_0000001622194138_section295172162917"></a> |
| 18 | 18 | ||
| 19 | -在了解矩阵乘法数据流之前,需要先回顾一下几个重要的存储**逻辑位置**的概念,逻辑位置和物理存储的映射关系请参考[逻辑位置和物理存储的映射关系](../../../../api/SIMD-API/通用说明和约束.md#section1359919519819): | 19 | +在了解矩阵乘法数据流之前,需要先回顾一下几个重要的存储**逻辑位置**的概念,逻辑位置和物理存储的映射关系请参考[逻辑位置和物理存储的映射关系](../../../../api/SIMD-API/general_description_and_constraints.md#section1359919519819): |
| 20 | 20 | ||
| 21 | - 搬入数据的存放位置:A1,用于存放整块A矩阵,可类比CPU多级缓存中的二级缓存; | 21 | - 搬入数据的存放位置:A1,用于存放整块A矩阵,可类比CPU多级缓存中的二级缓存; |
| 22 | - 搬入数据的存放位置:B1,用于存放整块B矩阵,可类比CPU多级缓存中的二级缓存; | 22 | - 搬入数据的存放位置:B1,用于存放整块B矩阵,可类比CPU多级缓存中的二级缓存; |
| @@ -92,7 +92,7 @@ | |||
| 92 | <tr id="row244169133112"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p13310519891"><a name="p13310519891"></a><a name="p13310519891"></a><a href="矢量计算/Vector算子灵活运用Counter模式.md">Vector算子灵活运用Counter模式</a></p> | 92 | <tr id="row244169133112"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p13310519891"><a name="p13310519891"></a><a name="p13310519891"></a><a href="矢量计算/Vector算子灵活运用Counter模式.md">Vector算子灵活运用Counter模式</a></p> |
| 93 | </td> | 93 | </td> |
| 94 | </tr> | 94 | </tr> |
| 95 | -<tr id="row244169133113"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p13310519892"><a name="p13310519892"></a><a name="p13310519892"></a><a href="矢量计算/基于全局掩码复用的计算性能优化.md">基于全局掩码复用的计算性能优化</a></p> | 95 | +<tr id="row244169133113"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p13310519892"><a name="p13310519892"></a><a name="p13310519892"></a><a href="矢量计算/mask_reuse_optimization.md">基于全局掩码复用的计算性能优化</a></p> |
| 96 | </td> | 96 | </td> |
| 97 | </tr> | 97 | </tr> |
| 98 | <tr id="row14158230103211"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p12515651494"><a name="p12515651494"></a><a name="p12515651494"></a><a href="矢量计算/选择低延迟指令-优化归约操作性能.md">选择低延迟指令,优化归约操作性能</a></p> | 98 | <tr id="row14158230103211"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p12515651494"><a name="p12515651494"></a><a name="p12515651494"></a><a href="矢量计算/选择低延迟指令-优化归约操作性能.md">选择低延迟指令,优化归约操作性能</a></p> |
Rdocs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/基于全局掩码复用的计算性能优化.md→docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/mask_reuse_optimization.md+0-0
文件重命名但无更改。
| @@ -152,7 +152,7 @@ __global__ __vector__ void add_custom(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm | |||
| 152 | AscendC::LocalTensor<float> zLocalPing(AscendC::TPosition::VECCALC, zAddrPing, 256); | 152 | AscendC::LocalTensor<float> zLocalPing(AscendC::TPosition::VECCALC, zAddrPing, 256); |
| 153 | } | 153 | } |
| 154 | ``` | 154 | ``` |
| 155 | -> 📌 其中AscendC::TPosition::VECCALC为对物理位置的逻辑抽象定义,与物理位置的映射参考文件[逻辑位置和物理存储的映射](../../../../../api/SIMD-API/通用说明和约束.md)。 | 155 | +> 📌 其中AscendC::TPosition::VECCALC为对物理位置的逻辑抽象定义,与物理位置的映射参考文件[逻辑位置和物理存储的映射](../../../../../api/SIMD-API/general_description_and_constraints.md)。 |
| 156 | 156 | ||
| 157 | 相比基础Tensor,[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入Layout描述并将其作为Tensor的核心属性,开发者可在Tensor创建时直接关联Shape与Stride信息,简化多维数据的布局管理。通过`MakeTensor`,开发者可灵活指定内存地址和Layout布局,更便捷地描述ND、NZ等典型数据排布。 | 157 | 相比基础Tensor,[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入Layout描述并将其作为Tensor的核心属性,开发者可在Tensor创建时直接关联Shape与Stride信息,简化多维数据的布局管理。通过`MakeTensor`,开发者可灵活指定内存地址和Layout布局,更便捷地描述ND、NZ等典型数据排布。 |
| 158 | 158 | ||
| @@ -52,11 +52,11 @@ Cube单元采用分块计算逻辑,硬件最小计算粒度为分形块,可 | |||
| 52 | 52 | ||
| 53 | - 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Zz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式。如图1所示: | 53 | - 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Zz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式。如图1所示: |
| 54 | 54 | ||
| 55 | -<img src="../../../../figures/matmul_data_2.png" alt="矩阵乘法场景设计的数据格式" width="800" /> | 55 | +<img src="../../../../figures/matmul_data_2.png" alt="矩阵乘法场景设计的数据格式" width="800"/> |
| 56 | 56 | ||
| 57 | - 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Nz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如图2所示: | 57 | - 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Nz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如图2所示: |
| 58 | 58 | ||
| 59 | -<img src="../../../../figures/matmul_data_1.png" alt="矩阵乘法场景涉及的数据格式" width="800" /> | 59 | +<img src="../../../../figures/matmul_data_1.png" alt="矩阵乘法场景涉及的数据格式" width="800"/> |
| 60 | 60 | ||
| 61 | #### ND 格式(N-Dimension) | 61 | #### ND 格式(N-Dimension) |
| 62 | 62 | ||
| @@ -65,7 +65,7 @@ ND格式是通用的N维张量格式,数据在内存中连续线性存放, | |||
| 65 | #### Nz 格式 | 65 | #### Nz 格式 |
| 66 | Nz格式主要用于L1 Buffer和L0C Buffer中存放数据。针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer也采用Nz分形格式。该格式采用大N(外部列主序)+ 小z(内部行主序)的方式排布。 | 66 | Nz格式主要用于L1 Buffer和L0C Buffer中存放数据。针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer也采用Nz分形格式。该格式采用大N(外部列主序)+ 小z(内部行主序)的方式排布。 |
| 67 | 67 | ||
| 68 | -<img src="../../../../figures/nz_format.png" alt="Nz数据排布格式" width="400" /> | 68 | +<img src="../../../../figures/nz_format.png" alt="Nz数据排布格式" width="400"/> |
| 69 | 69 | ||
| 70 | 70 | ||
| 71 | Nz是Ascend架构的中间格式,介于线性数据(ND)和计算专用数据(Zz/Zn)之间,便于格式转换。大N排布(列主序Block)的设计通常是为了配合多核并行或后续算子(如Vector向量计算)在处理通道(Channel)维度数据时的便利性。 | 71 | Nz是Ascend架构的中间格式,介于线性数据(ND)和计算专用数据(Zz/Zn)之间,便于格式转换。大N排布(列主序Block)的设计通常是为了配合多核并行或后续算子(如Vector向量计算)在处理通道(Channel)维度数据时的便利性。 |
| @@ -79,7 +79,7 @@ Nz是Ascend架构的中间格式,介于线性数据(ND)和计算专用数据(Z | |||
| 79 | 79 | ||
| 80 | 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer使用此格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)使用Nz格式)。该格式采用大Z(外部行主序)+ 小z(内部行主序)。 | 80 | 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer使用此格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)使用Nz格式)。该格式采用大Z(外部行主序)+ 小z(内部行主序)。 |
| 81 | 81 | ||
| 82 | -<img src="../../../../figures/zz_half.png" alt="Zz 格式(以half类型为例)" width="400" /> | 82 | +<img src="../../../../figures/zz_half.png" alt="Zz 格式(以half类型为例)" width="400"/> |
| 83 | 83 | ||
| 84 | 84 | ||
| 85 | 在矩阵乘法中,A矩阵逐行读取数据。Zz格式的行主序特性使同一行元素物理地址连续,与计算访问模式匹配,便于Cube单元左侧通道通过DMA连续读取,避免跨步访问,提升数据搬运效率。 | 85 | 在矩阵乘法中,A矩阵逐行读取数据。Zz格式的行主序特性使同一行元素物理地址连续,与计算访问模式匹配,便于Cube单元左侧通道通过DMA连续读取,避免跨步访问,提升数据搬运效率。 |
| @@ -88,7 +88,7 @@ Nz是Ascend架构的中间格式,介于线性数据(ND)和计算专用数据(Z | |||
| 88 | 88 | ||
| 89 | Zn格式主要用于L0B Buffer中存放数据,如果离线处理好的右矩阵数据直接为Zn格式,则在`Global Memory`和`L1 Buffer`上存储该格式。该格式采用大Z(外部行主序)+ 小n(内部列主序)。 | 89 | Zn格式主要用于L0B Buffer中存放数据,如果离线处理好的右矩阵数据直接为Zn格式,则在`Global Memory`和`L1 Buffer`上存储该格式。该格式采用大Z(外部行主序)+ 小n(内部列主序)。 |
| 90 | 90 | ||
| 91 | -<img src="../../../../figures/zn_half.png" alt="Zn 格式(以half类型为例)" width="400" /> | 91 | +<img src="../../../../figures/zn_half.png" alt="Zn 格式(以half类型为例)" width="400"/> |
| 92 | 92 | ||
| 93 | 93 | ||
| 94 | 矩阵乘法需读取B矩阵列向量。普通行主序存储导致列数据地址跳跃。Zn格式在分形内部按列存储,使列数据在L0B中紧凑排列,便于Cube单元右侧通道线性读取完整列向量,避免跨步访问。 | 94 | 矩阵乘法需读取B矩阵列向量。普通行主序存储导致列数据地址跳跃。Zn格式在分形内部按列存储,使列数据在L0B中紧凑排列,便于Cube单元右侧通道线性读取完整列向量,避免跨步访问。 |
| @@ -97,7 +97,7 @@ Zn格式主要用于L0B Buffer中存放数据,如果离线处理好的右矩 | |||
| 97 | 97 | ||
| 98 | Global Memory中的原始数据为ND通用线性格式,而L1 Buffer要求使用Nz格式,因此数据搬运过程中需要完成ND到Nz的格式转换。 | 98 | Global Memory中的原始数据为ND通用线性格式,而L1 Buffer要求使用Nz格式,因此数据搬运过程中需要完成ND到Nz的格式转换。 |
| 99 | 99 | ||
| 100 | -<img src="../../../../figures/nd2nz_conv.png" alt="ND2NZ格式转换" width="800" /> | 100 | +<img src="../../../../figures/nd2nz_conv.png" alt="ND2NZ格式转换" width="800"/> |
| 101 | 101 | ||
| 102 | 以上图为例,图中展示了一个具体的M=40, K=56的矩阵(数据类型为half),在从Global Memory(GM)搬运至L1 Buffer并转换为Nz格式时的内存排布变化: | 102 | 以上图为例,图中展示了一个具体的M=40, K=56的矩阵(数据类型为half),在从Global Memory(GM)搬运至L1 Buffer并转换为Nz格式时的内存排布变化: |
| 103 | - 原始数据 (ND 格式): | 103 | - 原始数据 (ND 格式): |
| @@ -136,7 +136,7 @@ C语言编程提供了`asc_set_gm2l1_nz_para`和`asc_copy_gm2l1_nd2nz`接口来 | |||
| 136 | 136 | ||
| 137 | 该功能用于将Global Memory中的矩阵搬运至L1 Buffer,并在搬运过程中同步完成ND到Nz的格式转换,主要依托`asc_copy_gm2l1_nd2nz`接口实现,通过配置对应参数即可完成数据搬运与格式转换。 | 137 | 该功能用于将Global Memory中的矩阵搬运至L1 Buffer,并在搬运过程中同步完成ND到Nz的格式转换,主要依托`asc_copy_gm2l1_nd2nz`接口实现,通过配置对应参数即可完成数据搬运与格式转换。 |
| 138 | 138 | ||
| 139 | -<img src="../../../../figures/gm_l1_nd2nz.png" alt="GM到L1的ND2NZ搬运示例" width="700" /> | 139 | +<img src="../../../../figures/gm_l1_nd2nz.png" alt="GM到L1的ND2NZ搬运示例" width="700"/> |
| 140 | 140 | ||
| 141 | 以上图为例,实现A矩阵(Shape(16, 23),数据类型为half)从GM搬运到L1的能力,针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),调用接口如下: | 141 | 以上图为例,实现A矩阵(Shape(16, 23),数据类型为half)从GM搬运到L1的能力,针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),调用接口如下: |
| 142 | 142 | ||
| @@ -175,7 +175,7 @@ asc_copy_gm2l1_nd2nz(dst, src, src_d_value, l2_cache_ctrl, n_value, d_value, src | |||
| 175 | 175 | ||
| 176 | 该能力主要实现将矩阵从L1 Buffer搬运至L0A/L0B Buffer并支持从Nz分型转换到Zz或Zn格式,C语言编程提供了`asc_copy_l12l0a`和`asc_copy_l12l0b`接口。其中针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)的`asc_copy_l12l0a`接口可将L1 Buffer中512B大小的矩阵搬运到L0A Buffer,支持2D搬运、转置搬运、3D搬运等模式。 | 176 | 该能力主要实现将矩阵从L1 Buffer搬运至L0A/L0B Buffer并支持从Nz分型转换到Zz或Zn格式,C语言编程提供了`asc_copy_l12l0a`和`asc_copy_l12l0b`接口。其中针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)的`asc_copy_l12l0a`接口可将L1 Buffer中512B大小的矩阵搬运到L0A Buffer,支持2D搬运、转置搬运、3D搬运等模式。 |
| 177 | 177 | ||
| 178 | -<img src="../../../../figures/l1_l0a_copy.png" alt="L12L0A非转置搬运" width="700" /> | 178 | +<img src="../../../../figures/l1_l0a_copy.png" alt="L12L0A非转置搬运" width="700"/> |
| 179 | 179 | ||
| 180 | 通过如下方式调用可完成上述的`L1 Buffer`到`L0A Buffer`的搬入操作。 | 180 | 通过如下方式调用可完成上述的`L1 Buffer`到`L0A Buffer`的搬入操作。 |
| 181 | ```c | 181 | ```c |
| @@ -199,7 +199,7 @@ asc_copy_l12l0a(l0a_buffer, l1_buffer, m_start_position, k_start_position, m_ste | |||
| 199 | 199 | ||
| 200 | 当输入A矩阵(Global Memory)是转置排布(K × M)时,搬入到`L1 Buffer`为(K × N)排布的Nz分形。要使`L0A Buffer`存放(M × K)的Zz或Nz格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)),需要在L12L0A时进行转置,调用`asc_copy_l12l0a_transpose`接口。 | 200 | 当输入A矩阵(Global Memory)是转置排布(K × M)时,搬入到`L1 Buffer`为(K × N)排布的Nz分形。要使`L0A Buffer`存放(M × K)的Zz或Nz格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)),需要在L12L0A时进行转置,调用`asc_copy_l12l0a_transpose`接口。 |
| 201 | 201 | ||
| 202 | -<img src="../../../../figures/need_transpose.png" alt="需要转置的处理场景" width="800" /> | 202 | +<img src="../../../../figures/need_transpose.png" alt="需要转置的处理场景" width="800"/> |
| 203 | 203 | ||
| 204 | ```c | 204 | ```c |
| 205 | // Use transpose interface to complete processing | 205 | // Use transpose interface to complete processing |
| @@ -212,21 +212,21 @@ asc_copy_l12l0a_transpose(l0a_buffer, l1_buffer, m_start_position, k_start_posit | |||
| 212 | 212 | ||
| 213 | 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md): | 213 | 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md): |
| 214 | 214 | ||
| 215 | -<img src="../../../../figures/mat_copy_out_a2a3.png" alt="矩阵搬出流程" width="800" /> | 215 | +<img src="../../../../figures/mat_copy_out_a2a3.png" alt="矩阵搬出流程" width="800"/> |
| 216 | 216 | ||
| 217 | 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md): | 217 | 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md): |
| 218 | 218 | ||
| 219 | -<img src="../../../../figures/mat_copy_out_950.png" alt="矩阵搬出流程" width="800" /> | 219 | +<img src="../../../../figures/mat_copy_out_950.png" alt="矩阵搬出流程" width="800"/> |
| 220 | 220 | ||
| 221 | 矩阵搬出接口支持多种随路能力的灵活组合,以L0C到Global Memory的搬运场景为例:矩阵计算结果暂存于L0C Buffer后需搬运至GM,在此过程中可协同执行随路量化、ReLU激活、格式转换及通道拆分合并等操作。下图展示了这些随路能力的有效组合、中间数据类型及完整数据路径。例如,L0C中的F32数据可通过QF322B8_PRE随路量化得到B8数据,可选使能ReLU后经NZ2NZ/NZ2ND格式转换输出至GM。图中F32→F16和F32→BF16为数据类型转换,其余路径为随路scalar/vector量化模式;针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),还额外支持NZ2DN格式转换。 | 221 | 矩阵搬出接口支持多种随路能力的灵活组合,以L0C到Global Memory的搬运场景为例:矩阵计算结果暂存于L0C Buffer后需搬运至GM,在此过程中可协同执行随路量化、ReLU激活、格式转换及通道拆分合并等操作。下图展示了这些随路能力的有效组合、中间数据类型及完整数据路径。例如,L0C中的F32数据可通过QF322B8_PRE随路量化得到B8数据,可选使能ReLU后经NZ2NZ/NZ2ND格式转换输出至GM。图中F32→F16和F32→BF16为数据类型转换,其余路径为随路scalar/vector量化模式;针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),还额外支持NZ2DN格式转换。 |
| 222 | 222 | ||
| 223 | 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md): | 223 | 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md): |
| 224 | 224 | ||
| 225 | -<img src="../../../../figures/l0c_gm_a2a3.png" alt="L0C2GM搬运" width="800" /> | 225 | +<img src="../../../../figures/l0c_gm_a2a3.png" alt="L0C2GM搬运" width="800"/> |
| 226 | 226 | ||
| 227 | 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md): | 227 | 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md): |
| 228 | 228 | ||
| 229 | -<img src="../../../../figures/l0c_gm_950.png" alt="L0C2GM搬运" width="800" /> | 229 | +<img src="../../../../figures/l0c_gm_950.png" alt="L0C2GM搬运" width="800"/> |
| 230 | 230 | ||
| 231 | C语言编程提供了`asc_copy_l0c2gm`来使能发挥芯片的各种随路能力,通过直接传入配置参数可完成随路搬运的操作。 | 231 | C语言编程提供了`asc_copy_l0c2gm`来使能发挥芯片的各种随路能力,通过直接传入配置参数可完成随路搬运的操作。 |
| 232 | ```c | 232 | ```c |
| @@ -14,7 +14,7 @@ AI Core采用分级存储架构,不同计算单元的编程视角有所差异 | |||
| 14 | 14 | ||
| 15 | **Vector矢量计算**:传统架构采用「Global Memory → UB」两级层级;[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器后构建「Global Memory → Unified Buffer → Register」三级层级。Global Memory存放输入输出数据,Unified Buffer作为矢量计算数据中间缓存,Register位于Vector计算单元最内层,直接与矢量计算执行单元交互。 | 15 | **Vector矢量计算**:传统架构采用「Global Memory → UB」两级层级;[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器后构建「Global Memory → Unified Buffer → Register」三级层级。Global Memory存放输入输出数据,Unified Buffer作为矢量计算数据中间缓存,Register位于Vector计算单元最内层,直接与矢量计算执行单元交互。 |
| 16 | 16 | ||
| 17 | -<img src="../../../../figures/aicore_mem_2.png" alt="AI Core存储层次结构" width="800" /> | 17 | +<img src="../../../../figures/aicore_mem_2.png" alt="AI Core存储层次结构" width="800"/> |
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | ### 外部存储(Global Memory) | 20 | ### 外部存储(Global Memory) |
| @@ -169,7 +169,7 @@ __cc__ half l0c_buffer[m_size * n_size]; // L0C Buffer, 64 bytes aligned | |||
| 169 | 169 | ||
| 170 | 上文介绍了各类内部存储的定义、排布格式。由于AI Core内部存储采用Bank分组架构,不当的内存访问会引发Bank冲突,进而降低算子性能。下面以Unified Buffer为例,介绍Bank冲突的相关原理,在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品上,Unified Buffer总大小为256KB(256 × 1024字节),包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B,采用低位地址交织。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)的UB容量规格请参考相应硬件架构文档。 | 170 | 上文介绍了各类内部存储的定义、排布格式。由于AI Core内部存储采用Bank分组架构,不当的内存访问会引发Bank冲突,进而降低算子性能。下面以Unified Buffer为例,介绍Bank冲突的相关原理,在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品上,Unified Buffer总大小为256KB(256 × 1024字节),包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B,采用低位地址交织。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)的UB容量规格请参考相应硬件架构文档。 |
| 171 | 171 | ||
| 172 | -<img src="../../../../figures/ub_conflict.png" alt="UB Bank冲突示意图" width="800" /> | 172 | +<img src="../../../../figures/ub_conflict.png" alt="UB Bank冲突示意图" width="800"/> |
| 173 | 173 | ||
| 174 | 该架构地址使用低位编址,地址排布如下图所示,每个bank可以独立地进行数据的读写操作,允许多个数据请求同时进行。然而,当多个读写操作试图同时访问同一个bank,由于硬件资源的限制,这些操作必须排队等待,会导致bank冲突,引起性能下降。 | 174 | 该架构地址使用低位编址,地址排布如下图所示,每个bank可以独立地进行数据的读写操作,允许多个数据请求同时进行。然而,当多个读写操作试图同时访问同一个bank,由于硬件资源的限制,这些操作必须排队等待,会导致bank冲突,引起性能下降。 |
| 175 | 175 | ||
| @@ -202,11 +202,11 @@ AI Core内部的执行单元(如MTE2数据搬运单元、Vector计算单元等 | |||
| 202 | 202 | ||
| 203 | 上述不同执行单元对应AI Core内部不同的硬件流水线,各流水线分工明确,具体分类如下表: | 203 | 上述不同执行单元对应AI Core内部不同的硬件流水线,各流水线分工明确,具体分类如下表: |
| 204 | 204 | ||
| 205 | -<img src="../../../../figures/vec_flow.png" alt="Vector计算数据流" width="800" /> | 205 | +<img src="../../../../figures/vec_flow.png" alt="Vector计算数据流" width="800"/> |
| 206 | 206 | ||
| 207 | 四个执行单元Scalar、Vector、DMA(MTE2)、DMA(MTE3)并行执行,若访问同一片Local Memory,需要同步机制来控制它们的访问时序:保证先搬入Local Memory后再计算,计算完成后再搬出。 | 207 | 四个执行单元Scalar、Vector、DMA(MTE2)、DMA(MTE3)并行执行,若访问同一片Local Memory,需要同步机制来控制它们的访问时序:保证先搬入Local Memory后再计算,计算完成后再搬出。 |
| 208 | 208 | ||
| 209 | -<img src="../../../../figures/sync_order.png" alt="同步顺序示意图" width="800" /> | 209 | +<img src="../../../../figures/sync_order.png" alt="同步顺序示意图" width="800"/> |
| 210 | 210 | ||
| 211 | > 📌 提示:上例描述为主要路径,当`Scalar`执行单元读写GM或者UB时,也需要考虑`Scalar`流水与其他流水的同步。 | 211 | > 📌 提示:上例描述为主要路径,当`Scalar`执行单元读写GM或者UB时,也需要考虑`Scalar`流水与其他流水的同步。 |
| 212 | 212 | ||
| @@ -236,11 +236,11 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证 | |||
| 236 | 236 | ||
| 237 | 若某个核的计算依赖其他相关核的全部计算结果,则需通过核间同步机制保障多核执行的时序正确性。以下图为例,AIC需要依赖于AIV的ReduceSum计算结果。由于整体矢量较大,必须拆分为多个部分,由每个AIV分别完成部分计算。每个AIV将其部分计算结果通过原子累加写入GM。AIC需要读取的必须是所有AIV均完成累加后的最终结果。 | 237 | 若某个核的计算依赖其他相关核的全部计算结果,则需通过核间同步机制保障多核执行的时序正确性。以下图为例,AIC需要依赖于AIV的ReduceSum计算结果。由于整体矢量较大,必须拆分为多个部分,由每个AIV分别完成部分计算。每个AIV将其部分计算结果通过原子累加写入GM。AIC需要读取的必须是所有AIV均完成累加后的最终结果。 |
| 238 | 238 | ||
| 239 | -<img src="../../../../figures/inter_core_sync_ex.png" alt="核间同步业务场景示例" width="800" /> | 239 | +<img src="../../../../figures/inter_core_sync_ex.png" alt="核间同步业务场景示例" width="800"/> |
| 240 | 240 | ||
| 241 | 从上图可以看到,当前AI Core是由AIC核和AIV核组成,其中AIC核主要用于Cube计算,AIV核负责Vector计算。AIC/AIV按group进行划分。一个group内细分为block(主核)和subblock(从核),二者比例为1:N(N≥1);其中,block代表主核的数量,subblock代表单个主核关联的从核数量。 | 241 | 从上图可以看到,当前AI Core是由AIC核和AIV核组成,其中AIC核主要用于Cube计算,AIV核负责Vector计算。AIC/AIV按group进行划分。一个group内细分为block(主核)和subblock(从核),二者比例为1:N(N≥1);其中,block代表主核的数量,subblock代表单个主核关联的从核数量。 |
| 242 | 242 | ||
| 243 | -<img src="../../../../figures/block_rel.png" alt="block和subblock之间关系" width="800" /> | 243 | +<img src="../../../../figures/block_rel.png" alt="block和subblock之间关系" width="800"/> |
| 244 | 244 | ||
| 245 | 算子按计算特征可划分为三类:Cube算子(矩阵计算)、Vector算子(矢量计算)和Mix算子(矩阵与矢量混合计算)。算子类型决定了其核间同步方式与group配置模式的选择。针对不同算子场景,C语言编程提供了相应的编程接口,以满足多样化的算子开发需求。 | 245 | 算子按计算特征可划分为三类:Cube算子(矩阵计算)、Vector算子(矢量计算)和Mix算子(矩阵与矢量混合计算)。算子类型决定了其核间同步方式与group配置模式的选择。针对不同算子场景,C语言编程提供了相应的编程接口,以满足多样化的算子开发需求。 |
| 246 | 246 | ||
| @@ -93,7 +93,7 @@ Memory矢量计算依托本地内存中的UB完成运算,开发者需先将输 | |||
| 93 | 93 | ||
| 94 | **连续搬运**: 若需将GM中连续地址的数据搬运至UB,仅需指定搬运数据的字节长度即可。例如将形状为256、数据类型为half的src_gm数据搬入UB,可直接调用`asc_copy_gm2ub`接口: | 94 | **连续搬运**: 若需将GM中连续地址的数据搬运至UB,仅需指定搬运数据的字节长度即可。例如将形状为256、数据类型为half的src_gm数据搬入UB,可直接调用`asc_copy_gm2ub`接口: |
| 95 | 95 | ||
| 96 | -<img src="../../../../figures/cont_copy.png" alt="连续数据搬运" width="800" /> | 96 | +<img src="../../../../figures/cont_copy.png" alt="连续数据搬运" width="800"/> |
| 97 | 97 | ||
| 98 | ```c | 98 | ```c |
| 99 | uint32_t size = 256 * sizeof(half); | 99 | uint32_t size = 256 * sizeof(half); |
| @@ -105,7 +105,7 @@ asc_copy_gm2ub(dst_ub, src_gm, size); | |||
| 105 | **非连续搬运**: 若需将GM中多段非连续数据搬入同一段UB空间,可通过高维切分模式,配置数据块数量、单块长度、块间间隔等参数。以形状为256、数据类型为half的src_gm为例,对应搬运逻辑与代码实现如下: | 105 | **非连续搬运**: 若需将GM中多段非连续数据搬入同一段UB空间,可通过高维切分模式,配置数据块数量、单块长度、块间间隔等参数。以形状为256、数据类型为half的src_gm为例,对应搬运逻辑与代码实现如下: |
| 106 | 106 | ||
| 107 | 107 | ||
| 108 | -<img src="../../../../figures/discont_copy.png" alt="非连续搬运" width="800" /> | 108 | +<img src="../../../../figures/discont_copy.png" alt="非连续搬运" width="800"/> |
| 109 | 109 | ||
| 110 | ```c | 110 | ```c |
| 111 | // Number of consecutive data blocks: 16 rows of data, transfer every alternate row to UB, need to transfer 8 rows | 111 | // Number of consecutive data blocks: 16 rows of data, transfer every alternate row to UB, need to transfer 8 rows |
| @@ -124,7 +124,7 @@ asc_copy_gm2ub(dst_ub, src_gm, burst_count, burst_len, src_stride, dst_stride); | |||
| 124 | 124 | ||
| 125 | **非对齐搬运**: 基础高维切分接口要求GM的数据长度与地址间隔均按32字节对齐,无法适配非对齐场景。例如将数据改为形状(16, 200)、类型为half的src_gm后,asc_copy_gm2ub无法实现隔行搬运。针对该场景,Ascend C提供`asc_copy_gm2ub_align`非对齐搬运接口,支持以字节为单位配置数据块长度与地址步长,突破32字节对齐限制。 | 125 | **非对齐搬运**: 基础高维切分接口要求GM的数据长度与地址间隔均按32字节对齐,无法适配非对齐场景。例如将数据改为形状(16, 200)、类型为half的src_gm后,asc_copy_gm2ub无法实现隔行搬运。针对该场景,Ascend C提供`asc_copy_gm2ub_align`非对齐搬运接口,支持以字节为单位配置数据块长度与地址步长,突破32字节对齐限制。 |
| 126 | 126 | ||
| 127 | -<img src="../../../../figures/unaligned_in_cap.png" alt="非对齐搬入能力" width="800" /> | 127 | +<img src="../../../../figures/unaligned_in_cap.png" alt="非对齐搬入能力" width="800"/> |
| 128 | 128 | ||
| 129 | 以上图为例,将两个数据块从GM搬运至UB,每个blockLen为54B,源操作数相邻数据块之间的间隔为1B,目的操作数相邻数据块之间的间隔为32B。 | 129 | 以上图为例,将两个数据块从GM搬运至UB,每个blockLen为54B,源操作数相邻数据块之间的间隔为1B,目的操作数相邻数据块之间的间隔为32B。 |
| 130 | 在blockLen左侧和右侧分别填充2个和3个half类型元素,此时blockLen + leftPadding + rightPadding = 54B + 2 * 2B + 3 * 2B = 64B,满足32B对齐。 | 130 | 在blockLen左侧和右侧分别填充2个和3个half类型元素,此时blockLen + leftPadding + rightPadding = 54B + 2 * 2B + 3 * 2B = 64B,满足32B对齐。 |
| @@ -153,7 +153,7 @@ asc_copy_gm2ub_align(dst, src, burst_count, burst_len, left_padding_num, right_p | |||
| 153 | Memory矢量计算包含连续计算和高维切分计算两种模式,同时支持掩码功能,可灵活控制参与计算的数据范围。 | 153 | Memory矢量计算包含连续计算和高维切分计算两种模式,同时支持掩码功能,可灵活控制参与计算的数据范围。 |
| 154 | 下文以加法接口为例,结合示意图说明两种模式的差异:连续计算用法简单,适用于一维张量的连续数据运算;高维切分计算灵活性更强,支持迭代运算与自定义地址间隔。开发者可根据业务场景按需选择。 | 154 | 下文以加法接口为例,结合示意图说明两种模式的差异:连续计算用法简单,适用于一维张量的连续数据运算;高维切分计算灵活性更强,支持迭代运算与自定义地址间隔。开发者可根据业务场景按需选择。 |
| 155 | 155 | ||
| 156 | -<img src="../../../../figures/mem_vec_c.png" alt="Memory矢量计算模式示意图" width="800" /> | 156 | +<img src="../../../../figures/mem_vec_c.png" alt="Memory矢量计算模式示意图" width="800"/> |
| 157 | 157 | ||
| 158 | ### 高维切分计算 | 158 | ### 高维切分计算 |
| 159 | 159 | ||
| @@ -163,13 +163,13 @@ Memory矢量计算包含连续计算和高维切分计算两种模式,同时 | |||
| 163 | 163 | ||
| 164 | 矢量计算单元单次迭代从UB读取8个连续的DataBlock(每个32字节),运算结果写入目的UB的8个对应DataBlock。 | 164 | 矢量计算单元单次迭代从UB读取8个连续的DataBlock(每个32字节),运算结果写入目的UB的8个对应DataBlock。 |
| 165 | 165 | ||
| 166 | -<img src="../../../../figures/db_iter_c.png" alt="DataBlock迭代示意图" width="800" /> | 166 | +<img src="../../../../figures/db_iter_c.png" alt="DataBlock迭代示意图" width="800"/> |
| 167 | 167 | ||
| 168 | 若设置repeat_time(迭代次数)为2,单元将执行两轮迭代,总处理数据量为2 × 8 × 32字节 = 512字节;若数据类型为half(2字节 / 元素),则对应处理256个元素。 | 168 | 若设置repeat_time(迭代次数)为2,单元将执行两轮迭代,总处理数据量为2 × 8 × 32字节 = 512字节;若数据类型为half(2字节 / 元素),则对应处理256个元素。 |
| 169 | 169 | ||
| 170 | > 📌 硬件约束:repeat_time取值范围为1~255,该约束对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)、[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)全系列产品生效。 | 170 | > 📌 硬件约束:repeat_time取值范围为1~255,该约束对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)、[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)全系列产品生效。 |
| 171 | 171 | ||
| 172 | -<img src="../../../../figures/iter2_exp_c.png" alt="2次迭代Exp计算" width="800" /> | 172 | +<img src="../../../../figures/iter2_exp_c.png" alt="2次迭代Exp计算" width="800"/> |
| 173 | 173 | ||
| 174 | #### 地址间隔配置 | 174 | #### 地址间隔配置 |
| 175 | 175 | ||
| @@ -177,26 +177,26 @@ Memory矢量计算包含连续计算和高维切分计算两种模式,同时 | |||
| 177 | 连续计算,`data_block_stride`设置为1,对同一迭代内的8个DataBlock数据连续进行处理。 | 177 | 连续计算,`data_block_stride`设置为1,对同一迭代内的8个DataBlock数据连续进行处理。 |
| 178 | 非连续计算,`data_block_stride`值大于1(如取2),同一迭代内不同DataBlock之间在读取数据时出现一个DataBlock的间隔,如下图所示。 | 178 | 非连续计算,`data_block_stride`值大于1(如取2),同一迭代内不同DataBlock之间在读取数据时出现一个DataBlock的间隔,如下图所示。 |
| 179 | 179 | ||
| 180 | -<img src="../../../../figures/db_stride_c.png" alt="data_block_stride示例" width="800" /> | 180 | +<img src="../../../../figures/db_stride_c.png" alt="data_block_stride示例" width="800"/> |
| 181 | 181 | ||
| 182 | > 📌 若dst_block_stride == 0,等效于dst_block_stride = 1;若src_block_stride = 0,源操作数将始终复用第一个DataBlock。 | 182 | > 📌 若dst_block_stride == 0,等效于dst_block_stride = 1;若src_block_stride = 0,源操作数将始终复用第一个DataBlock。 |
| 183 | 183 | ||
| 184 | 下图给出了单次迭代内源操作数与目的操作数在UB空间的读写示例。示例中源操作数的`data_block_stride`配置为2,表示单次迭代内不同DataBlock间地址步长为2个DataBlock;目的操作数的`data_block_stride`配置为1,表示单次迭代内地址连续。 | 184 | 下图给出了单次迭代内源操作数与目的操作数在UB空间的读写示例。示例中源操作数的`data_block_stride`配置为2,表示单次迭代内不同DataBlock间地址步长为2个DataBlock;目的操作数的`data_block_stride`配置为1,表示单次迭代内地址连续。 |
| 185 | 185 | ||
| 186 | -<img src="../../../../figures/iter_rw_c.png" alt="单次迭代内源和目的操作数读写示例" width="800" /> | 186 | +<img src="../../../../figures/iter_rw_c.png" alt="单次迭代内源和目的操作数读写示例" width="800"/> |
| 187 | 187 | ||
| 188 | 其中**repeat_stride**是指相邻迭代间相同DataBlock的地址步长,可通过设置`repeat_stride`来灵活控制不同的场景。 | 188 | 其中**repeat_stride**是指相邻迭代间相同DataBlock的地址步长,可通过设置`repeat_stride`来灵活控制不同的场景。 |
| 189 | 189 | ||
| 190 | | 场景 | repeat_stride取值 | 数据读取特点 | 适用场景 | | 190 | | 场景 | repeat_stride取值 | 数据读取特点 | 适用场景 | |
| 191 | |------|------------------|-------------|--------| | 191 | |------|------------------|-------------|--------| |
| 192 | -| 连续计算 | 8 | 每轮迭代读取连续8个data_block,完成所有输入数据的计算 | <img src="../../../../figures/rep_cont_c.png" alt="repeat_stride连续计算场景" width="600" /> | | 192 | +| 连续计算 | 8 | 每轮迭代读取连续8个data_block,完成所有输入数据的计算 | <img src="../../../../figures/rep_cont_c.png" alt="repeat_stride连续计算场景" width="600"/> | |
| 193 | -| 非连续计算 | >8 (如10) | 相邻迭代间存在data_block间隔,地址不连续 | <img src="../../../../figures/rep_discont_c.png" alt="repeat_stride非连续计算场景" width="600" /> | | 193 | +| 非连续计算 | >8 (如10) | 相邻迭代间存在data_block间隔,地址不连续 | <img src="../../../../figures/rep_discont_c.png" alt="repeat_stride非连续计算场景" width="600"/> | |
| 194 | -| 反复计算 | 0 | 对首个连续8个data_block反复读取和计算 | <img src="../../../../figures/rep_repeat_c.png" alt="repeat_stride反复计算场景" width="600" /> | | 194 | +| 反复计算 | 0 | 对首个连续8个data_block反复读取和计算 | <img src="../../../../figures/rep_repeat_c.png" alt="repeat_stride反复计算场景" width="600"/> | |
| 195 | -| 部分重复计算 | (0, 8) | 相邻迭代间部分数据重复读取,一般场景不涉及 | <img src="../../../../figures/rep_partial_c.png" alt="repeat_stride部分重复计算" width="600" /> | | 195 | +| 部分重复计算 | (0, 8) | 相邻迭代间部分数据重复读取,一般场景不涉及 | <img src="../../../../figures/rep_partial_c.png" alt="repeat_stride部分重复计算" width="600"/> | |
| 196 | 196 | ||
| 197 | 当 `repeat_time`>1 时,通过多次迭代完成计算。`repeat_stride` 表示相邻迭代间相同位置DataBlock的起始地址间隔(以DataBlock为单位)。例如 `repeat_stride` = 9 时,第一迭代的第1个DataBlock与第二迭代的第1个DataBlock间隔9个DataBlock。 | 197 | 当 `repeat_time`>1 时,通过多次迭代完成计算。`repeat_stride` 表示相邻迭代间相同位置DataBlock的起始地址间隔(以DataBlock为单位)。例如 `repeat_stride` = 9 时,第一迭代的第1个DataBlock与第二迭代的第1个DataBlock间隔9个DataBlock。 |
| 198 | 198 | ||
| 199 | -<img src="../../../../figures/multi_iter_c.png" alt="多次迭代非连续场景示意图" width="800" /> | 199 | +<img src="../../../../figures/multi_iter_c.png" alt="多次迭代非连续场景示意图" width="800"/> |
| 200 | 200 | ||
| 201 | 通过C风格接口配置`repeat_stride`和`data_block_stride`实现上述多次迭代功能。 | 201 | 通过C风格接口配置`repeat_stride`和`data_block_stride`实现上述多次迭代功能。 |
| 202 | ```c | 202 | ```c |
| @@ -215,7 +215,7 @@ asc_add(z, x, y, repeat_time, dst_block_stride, src0_block_stride, src1_block_st | |||
| 215 | 215 | ||
| 216 | 针对同一个迭代中的数据,可以通过mask参数进行掩码操作来控制实际参与计算的个数。下图为进行Abs计算时通过mask逐比特模式按位控制哪些元素参与计算的示意图,1表示参与计算,0表示不参与计算。 | 216 | 针对同一个迭代中的数据,可以通过mask参数进行掩码操作来控制实际参与计算的个数。下图为进行Abs计算时通过mask逐比特模式按位控制哪些元素参与计算的示意图,1表示参与计算,0表示不参与计算。 |
| 217 | 217 | ||
| 218 | -<img src="../../../../figures/mask_op_c.png" alt="掩码操作示意图" width="800" /> | 218 | +<img src="../../../../figures/mask_op_c.png" alt="掩码操作示意图" width="800"/> |
| 219 | 219 | ||
| 220 | 每一位掩码对应数据中的一个元素的位置,通过有效位和无效位标记,实现对数据操作的精细化开关控制。 | 220 | 每一位掩码对应数据中的一个元素的位置,通过有效位和无效位标记,实现对数据操作的精细化开关控制。 |
| 221 | 掩码为固定位宽数值,规则如下:有效位(值为1)代表对应元素参与计算,无效位(值为0)代表对应元素被屏蔽,不参与运算。 | 221 | 掩码为固定位宽数值,规则如下:有效位(值为1)代表对应元素参与计算,无效位(值为0)代表对应元素被屏蔽,不参与运算。 |
| @@ -223,7 +223,7 @@ asc_add(z, x, y, repeat_time, dst_block_stride, src0_block_stride, src1_block_st | |||
| 223 | 掩码设置提供了两种模式:Counter模式和Normal模式,Normal模式又包含连续模式、逐比特模式。 | 223 | 掩码设置提供了两种模式:Counter模式和Normal模式,Normal模式又包含连续模式、逐比特模式。 |
| 224 | Counter模式适用于连续元素的计算场景。该模式下,掩码寄存器仅低64位有效,用于标识参与计算的元素总数;接口会自动忽略repeat_time,由系统根据元素数量自动匹配迭代次数。例如计算200个half类型元素时,受UB的32B对齐约束,需申请256个元素空间。此时使用Counter模式,可精确处理实际元素数量,避免多余计算。 | 224 | Counter模式适用于连续元素的计算场景。该模式下,掩码寄存器仅低64位有效,用于标识参与计算的元素总数;接口会自动忽略repeat_time,由系统根据元素数量自动匹配迭代次数。例如计算200个half类型元素时,受UB的32B对齐约束,需申请256个元素空间。此时使用Counter模式,可精确处理实际元素数量,避免多余计算。 |
| 225 | 225 | ||
| 226 | -<img src="../../../../figures/count_mode.png" alt="Counter模式计算" width="600" /> | 226 | +<img src="../../../../figures/count_mode.png" alt="Counter模式计算" width="600"/> |
| 227 | 227 | ||
| 228 | ```c | 228 | ```c |
| 229 | __ubuf__ half dst_ub[256]; | 229 | __ubuf__ half dst_ub[256]; |
| @@ -252,7 +252,7 @@ asc_set_mask_normal(); | |||
| 252 | 252 | ||
| 253 | 该模式下,可以指定单次迭代内计算前n个连续元素,其他数据不参与计算。例如:对src数据(shape(256),数据类型为half),该数据需通过2次迭代计算完(每次迭代计算128个元素),可通过设置mask = 100,表示第1次迭代计算[0, 99]范围的元素,第2次迭代计算[128, 227]范围的元素参与计算,其他元素不参与计算。 | 253 | 该模式下,可以指定单次迭代内计算前n个连续元素,其他数据不参与计算。例如:对src数据(shape(256),数据类型为half),该数据需通过2次迭代计算完(每次迭代计算128个元素),可通过设置mask = 100,表示第1次迭代计算[0, 99]范围的元素,第2次迭代计算[128, 227]范围的元素参与计算,其他元素不参与计算。 |
| 254 | 254 | ||
| 255 | - <img src="../../../../figures/iter_cont.png" alt="单次迭代内连续计算" width="600" /> | 255 | + <img src="../../../../figures/iter_cont.png" alt="单次迭代内连续计算" width="600"/> |
| 256 | 256 | ||
| 257 | ```c | 257 | ```c |
| 258 | __ubuf__ half dst_ub[256]; | 258 | __ubuf__ half dst_ub[256]; |
| @@ -274,7 +274,7 @@ asc_set_mask_normal(); | |||
| 274 | 该模式下,可以指定maskHigh和maskLow的值,来处理各种掩码操作。如需进行交错计算,则mask设置成01010101...或者10101010...模式即可。 | 274 | 该模式下,可以指定maskHigh和maskLow的值,来处理各种掩码操作。如需进行交错计算,则mask设置成01010101...或者10101010...模式即可。 |
| 275 | 以src数据(shape(256),数据类型为half)为例,通过设置逐bit的掩码,可在单迭代中选取特定bit位的数值参与计算: | 275 | 以src数据(shape(256),数据类型为half)为例,通过设置逐bit的掩码,可在单迭代中选取特定bit位的数值参与计算: |
| 276 | 276 | ||
| 277 | - <img src="../../../../figures/iter_bit.png" alt="单次迭代内逐bit计算" width="600" /> | 277 | + <img src="../../../../figures/iter_bit.png" alt="单次迭代内逐bit计算" width="600"/> |
| 278 | 278 | ||
| 279 | ```c | 279 | ```c |
| 280 | __ubuf__ half dst_ub[256]; | 280 | __ubuf__ half dst_ub[256]; |
| @@ -59,7 +59,7 @@ Reg矢量执行单元、DMA单元和Aux Scalar虽属于不同的硬件执行单 | |||
| 59 | 59 | ||
| 60 | **图1** SIMD Reg矢量执行关系 | 60 | **图1** SIMD Reg矢量执行关系 |
| 61 | 61 | ||
| 62 | -<img src="../../../../figures/reg_exec.png" title="Reg执行单元" style="zoom:80%;" /> | 62 | +<img src="../../../../figures/reg_exec.png" title="Reg执行单元" style="zoom:80%;"/> |
| 63 | 63 | ||
| 64 | ### 内存层级 | 64 | ### 内存层级 |
| 65 | 65 | ||
| @@ -115,7 +115,7 @@ Reg矢量计算编程模型中`Load` -> `Compute` ->`Store`的执行过程, | |||
| 115 | 115 | ||
| 116 | **图4** 函数标签调用关系 | 116 | **图4** 函数标签调用关系 |
| 117 | 117 | ||
| 118 | -<img src="../../../../figures/reg_calculation_call_hierarchy.png" title="调用层级" style="zoom: 28%;" /> | 118 | +<img src="../../../../figures/reg_calculation_call_hierarchy.png" title="调用层级" style="zoom: 28%;"/> |
| 119 | 119 | ||
| 120 | 一个完整的实现由外层`__aicore__`逻辑和内层`__simd_vf__`逻辑两部分组成: | 120 | 一个完整的实现由外层`__aicore__`逻辑和内层`__simd_vf__`逻辑两部分组成: |
| 121 | 121 | ||
| @@ -30,7 +30,7 @@ Reg矢量执行单元、DMA单元和Aux Scalar虽属于不同的硬件执行单 | |||
| 30 | 2. Reg矢量执行单元和DMA单元在没有数据依赖时可以**同时发射、并行执行**。 | 30 | 2. Reg矢量执行单元和DMA单元在没有数据依赖时可以**同时发射、并行执行**。 |
| 31 | 31 | ||
| 32 | **图3** SIMD Reg矢量计算示意图 | 32 | **图3** SIMD Reg矢量计算示意图 |
| 33 | -<img src="../../../../figures/reg_exec.png" title="Reg执行单元" style="zoom:80%;" /> | 33 | +<img src="../../../../figures/reg_exec.png" title="Reg执行单元" style="zoom:80%;"/> |
| 34 | 34 | ||
| 35 | ### SIMT Vector Function | 35 | ### SIMT Vector Function |
| 36 | 36 | ||
| @@ -39,4 +39,4 @@ Reg矢量执行单元、DMA单元和Aux Scalar虽属于不同的硬件执行单 | |||
| 39 | Warp内线程共享同一条指令流,各线程维护独立的线程索引、寄存器和栈等执行状态。硬件根据线程活跃掩码发射指令:当Warp内线程控制流一致时,可保持较高执行效率;发生分支发散时,硬件会按不同分支路径分批执行活跃线程,有效并行度随之下降。 | 39 | Warp内线程共享同一条指令流,各线程维护独立的线程索引、寄存器和栈等执行状态。硬件根据线程活跃掩码发射指令:当Warp内线程控制流一致时,可保持较高执行效率;发生分支发散时,硬件会按不同分支路径分批执行活跃线程,有效并行度随之下降。 |
| 40 | 40 | ||
| 41 | **图4** SIMT线程架构示意图 | 41 | **图4** SIMT线程架构示意图 |
| 42 | -<img src="../../../../figures/simt_thread.png" title="SIMT线程结构示意图" style="zoom:80%;" /> | 42 | +<img src="../../../../figures/simt_thread.png" title="SIMT线程结构示意图" style="zoom:80%;"/> |