已合并
docs: 修复简易表格前后缺少空行的问题 #5676
munanhw创建于 12 天前
docs: 修复简易表格前后缺少空行的问题 #5676
已合并
munanhw创建于 12 天前
102 个文件变更+298-16
@@ -40,6 +40,7 @@ $$
40 __aicore__ inline void Axpy(const LocalTensor<T>& dstTensor, const LocalTensor<U>& srcTensor, const U scalarValue, const LocalTensor<uint8_t>& sharedTmpBuffer, const uint32_t calCount)40 __aicore__ inline void Axpy(const LocalTensor<T>& dstTensor, const LocalTensor<U>& srcTensor, const U scalarValue, const LocalTensor<uint8_t>& sharedTmpBuffer, const uint32_t calCount)
41 ```41 ```
42 Template parameter description42 Template parameter description
43+ 
43 | Parameter Name | Description |44 | Parameter Name | Description |
44 | ----------- | ----------- |45 | ----------- | ----------- |
45 | T | Destination operand data type, supported data types are half/float. |46 | T | Destination operand data type, supported data types are half/float. |
@@ -47,6 +48,7 @@ $$
47 | isReuseSource | This parameter is reserved, pass default value false. |48 | isReuseSource | This parameter is reserved, pass default value false. |
48 49 
49 Interface parameter description50 Interface parameter description
51+ 
50 | Parameter Name | Input/Output | Description |52 | Parameter Name | Input/Output | Description |
51 | ----------- | ----------- |----------- |53 | ----------- | ----------- |----------- |
52 | dstTensor | Output | Destination operand. |54 | dstTensor | Output | Destination operand. |
@@ -54,6 +56,7 @@ $$
54 | scalarValue | Input | Scalar value. Supported data types are half/float. Scalar operand type needs to match srcTensor. |56 | scalarValue | Input | Scalar value. Supported data types are half/float. Scalar operand type needs to match srcTensor. |
55 | sharedTmpBuffer | Input | Temporary buffer. Type is LocalTensor, supported TPosition is VECIN/VECCALC/VECOUT. Since the internal implementation of this interface needs extra temporary space to store intermediate variables during computation. Temporary space needs to be passed by developer through sharedTmpBuffer parameter. |57 | sharedTmpBuffer | Input | Temporary buffer. Type is LocalTensor, supported TPosition is VECIN/VECCALC/VECOUT. Since the internal implementation of this interface needs extra temporary space to store intermediate variables during computation. Temporary space needs to be passed by developer through sharedTmpBuffer parameter. |
56 | calCount | Input | Number of elements participating in computation. |58 | calCount | Input | Number of elements participating in computation. |
59+ 
57- Tiling Side60- Tiling Side
58 61 
59 The kernel function interface requires developers to reserve/apply for temporary space. The size of this temporary space needs to be calculated on Tiling side based on obtained source operand shape size, computing high-level API required maximum (maxValue) temporary space and minimum temporary space (minValue) sizes. Therefore, Tiling side provides an interface for computing maxValue and minValue. Interface input parameters include source operand Tensor shape size and source operand data type byte size. Shape size parameter uses AscendC::TensorShape type, data type byte size uses `uint32_t` type. Output parameters include minValue and maxValue. Similar to isReuseSource parameter in Axpy interface, isReuseSource in Tiling interface is a reserved parameter.62 The kernel function interface requires developers to reserve/apply for temporary space. The size of this temporary space needs to be calculated on Tiling side based on obtained source operand shape size, computing high-level API required maximum (maxValue) temporary space and minimum temporary space (minValue) sizes. Therefore, Tiling side provides an interface for computing maxValue and minValue. Interface input parameters include source operand Tensor shape size and source operand data type byte size. Shape size parameter uses AscendC::TensorShape type, data type byte size uses `uint32_t` type. Output parameters include minValue and maxValue. Similar to isReuseSource parameter in Axpy interface, isReuseSource in Tiling interface is a reserved parameter.
@@ -61,6 +64,7 @@ $$
61 void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue);64 void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue);
62 ```65 ```
63 Interface parameter description66 Interface parameter description
67+ 
64 | Parameter Name | Input/Output | Description |68 | Parameter Name | Input/Output | Description |
65 | ----------- | ----------- |----------- |69 | ----------- | ----------- |----------- |
66 | srcShape | Input | Input shape information. |70 | srcShape | Input | Input shape information. |
@@ -68,6 +72,7 @@ $$
68 | isReuseSource | Input | Reserved parameter. |72 | isReuseSource | Input | Reserved parameter. |
69 | maxValue | Output | Maximum temporary space size required by Axpy interface to complete computation. Space exceeding this value will not be used by the interface. Within the minimum temporary space to maximum temporary space range, as temporary space increases, the computation performance of the kernel function interface will improve. To achieve better performance, developers can apply for space based on actual memory usage. Maximum space size of 0 indicates computation does not need temporary space. |73 | maxValue | Output | Maximum temporary space size required by Axpy interface to complete computation. Space exceeding this value will not be used by the interface. Within the minimum temporary space to maximum temporary space range, as temporary space increases, the computation performance of the kernel function interface will improve. To achieve better performance, developers can apply for space based on actual memory usage. Maximum space size of 0 indicates computation does not need temporary space. |
70 | minValue | Output | Minimum temporary space size required by Axpy interface to complete computation. To ensure correct functionality, temporary space applied for during interface computation cannot be smaller than this value. Minimum space size of 0 indicates computation does not need temporary space. |74 | minValue | Output | Minimum temporary space size required by Axpy interface to complete computation. To ensure correct functionality, temporary space applied for during interface computation cannot be smaller than this value. Minimum space size of 0 indicates computation does not need temporary space. |
75+ 
71### Develop API76### Develop API
72#### Write API External Interface77#### Write API External Interface
73- Kernel Function Side Interface78- Kernel Function Side Interface
@@ -108,13 +108,7 @@
108 - [矩阵计算分形介绍](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/cube_compute_fractal_intro.md)108 - [矩阵计算分形介绍](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/cube_compute_fractal_intro.md)
109 - [背景与核心概念](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/background_and_core_concepts.md)109 - [背景与核心概念](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/background_and_core_concepts.md)
110 - [关键分形格式详解](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md)110 - [关键分形格式详解](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md)
111- 
112- <cann-filter npu-type="910b,A3,A5">
113- 
114 - [辅助矩阵分形格式详解](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/aux_cube_fractal_format_details.md)111 - [辅助矩阵分形格式详解](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/aux_cube_fractal_format_details.md)
115- 
116- </cann-filter>
117- 
118 - [矩阵计算的搬入](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/cube_compute_load.md)112 - [矩阵计算的搬入](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/cube_compute_load.md)
119 - [总体说明](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/overall_description.md)113 - [总体说明](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/overall_description.md)
120 - [矩阵计算输入搬运约束](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/cube_compute_input_move_constraint.md)114 - [矩阵计算输入搬运约束](SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/cube_compute_input_move_constraint.md)
@@ -164,19 +158,9 @@
164 - [Gemm(废弃)](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute/Gemm_deprecated.md)158 - [Gemm(废弃)](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute/Gemm_deprecated.md)
165 - [Mmad计算关键特性说明](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/mmad_compute_key_features.md)159 - [Mmad计算关键特性说明](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/mmad_compute_key_features.md)
166 - [GEMV](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/GEMV.md)160 - [GEMV](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/GEMV.md)
167- 
168- <cann-filter npu-type="950,910b,A3,310b">
169- 
170 - [HF32](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/HF32.md)161 - [HF32](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/HF32.md)
171 - [UnitFlag](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/UnitFlag.md)162 - [UnitFlag](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/UnitFlag.md)
172- 
173- </cann-filter>
174- 
175- <cann-filter npu-type="910b,A3,x90,9030">
176- 
177 - [K方向对齐约束](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/k_direction_alignment_constraint.md)163 - [K方向对齐约束](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/k_direction_alignment_constraint.md)
178- 
179- </cann-filter>
180 - [Mmad计算辅助配置接口](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_aux_config/mmad_compute_aux_config.md)164 - [Mmad计算辅助配置接口](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_aux_config/mmad_compute_aux_config.md)
181 - [SetMMColumnMajor/SetMMRowMajor](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_aux_config/SetMMColumnMajor-SetMMRowMajor.md)165 - [SetMMColumnMajor/SetMMRowMajor](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_aux_config/SetMMColumnMajor-SetMMRowMajor.md)
182 - [SetHF32Mode](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_aux_config/SetHF32Mode.md)166 - [SetHF32Mode](SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_aux_config/SetHF32Mode.md)
@@ -41,6 +41,7 @@ class Hccl;
41**表1** Hccl类模板参数说明41**表1** Hccl类模板参数说明
42 42 
43<a name="hccl-template-params"></a>43<a name="hccl-template-params"></a>
44+ 
44| 参数名称 | 描述 |45| 参数名称 | 描述 |
45| --- | --- |46| --- | --- |
46| serverType | 支持的服务端类型。HcclServerType枚举类型,取值如下。<br>HCCL_SERVER_TYPE_AICPU:AI CPU服务端。<br>HCCL_SERVER_TYPE_CCU:CCU服务端。<br>HCCL_SERVER_TYPE_END:预留参数,不支持使用。<!-- npu="950" id7 --><br><br>对于Ascend 950PR/Ascend 950DT,当前仅支持HCCL_SERVER_TYPE_CCU。<!-- end id7 --><!-- npu="A3" id8 --><br><br>对于Atlas A3 训练系列产品/Atlas A3 推理系列产品,当前仅支持HCCL_SERVER_TYPE_AICPU。<!-- end id8 --><!-- npu="910b" id9 --><br><br>对于Atlas A2 训练系列产品/Atlas A2 推理系列产品,当前仅支持HCCL_SERVER_TYPE_AICPU。<!-- end id9 --> |47| serverType | 支持的服务端类型。HcclServerType枚举类型,取值如下。<br>HCCL_SERVER_TYPE_AICPU:AI CPU服务端。<br>HCCL_SERVER_TYPE_CCU:CCU服务端。<br>HCCL_SERVER_TYPE_END:预留参数,不支持使用。<!-- npu="950" id7 --><br><br>对于Ascend 950PR/Ascend 950DT,当前仅支持HCCL_SERVER_TYPE_CCU。<!-- end id7 --><!-- npu="A3" id8 --><br><br>对于Atlas A3 训练系列产品/Atlas A3 推理系列产品,当前仅支持HCCL_SERVER_TYPE_AICPU。<!-- end id8 --><!-- npu="910b" id9 --><br><br>对于Atlas A2 训练系列产品/Atlas A2 推理系列产品,当前仅支持HCCL_SERVER_TYPE_AICPU。<!-- end id9 --> |
@@ -75,6 +75,7 @@ HCCL为**集合通信任务客户端**,主要对外提供了集合通信原语
75 **表1** HcclDataType参数说明75 **表1** HcclDataType参数说明
76 76 
77 <a name="table116710585514"></a>77 <a name="table116710585514"></a>
78+ 
78 | 数据类型 | 说明 |79 | 数据类型 | 说明 |
79 | --- | --- |80 | --- | --- |
80 | HcclDataType | HCCL任务的数据类型。HcclDataType为枚举类型,定义如下代码所示。<br> HCCL_DATA_TYPE_INT8:int8 <br> HCCL_DATA_TYPE_INT16:int16 <br> HCCL_DATA_TYPE_INT32:int32 <br> HCCL_DATA_TYPE_FP16: half或float16 <br> HCCL_DATA_TYPE_FP32: float <br> HCCL_DATA_TYPE_INT64:int64 <br> HCCL_DATA_TYPE_UINT64:uint64 <br> HCCL_DATA_TYPE_UINT8:uint8 <br> HCCL_DATA_TYPE_UINT16:uint16 <br> HCCL_DATA_TYPE_UINT32:uint32 <br> HCCL_DATA_TYPE_FP64:float64 <br> HCCL_DATA_TYPE_BFP16:bfloat16 <br> HCCL_DATA_TYPE_INT128:int128,预留类型,暂不支持 <br> HCCL_DATA_TYPE_HIF8:hif8 <br> HCCL_DATA_TYPE_FP8E4M3:fp8e4m3 <br> HCCL_DATA_TYPE_FP8E5M2:fp8e5m2 <br> HCCL_DATA_TYPE_FP8E8M0:fp8e8m0 <br> HCCL_DATA_TYPE_RESERVED:暂不支持使用 |81 | HcclDataType | HCCL任务的数据类型。HcclDataType为枚举类型,定义如下代码所示。<br> HCCL_DATA_TYPE_INT8:int8 <br> HCCL_DATA_TYPE_INT16:int16 <br> HCCL_DATA_TYPE_INT32:int32 <br> HCCL_DATA_TYPE_FP16: half或float16 <br> HCCL_DATA_TYPE_FP32: float <br> HCCL_DATA_TYPE_INT64:int64 <br> HCCL_DATA_TYPE_UINT64:uint64 <br> HCCL_DATA_TYPE_UINT8:uint8 <br> HCCL_DATA_TYPE_UINT16:uint16 <br> HCCL_DATA_TYPE_UINT32:uint32 <br> HCCL_DATA_TYPE_FP64:float64 <br> HCCL_DATA_TYPE_BFP16:bfloat16 <br> HCCL_DATA_TYPE_INT128:int128,预留类型,暂不支持 <br> HCCL_DATA_TYPE_HIF8:hif8 <br> HCCL_DATA_TYPE_FP8E4M3:fp8e4m3 <br> HCCL_DATA_TYPE_FP8E5M2:fp8e5m2 <br> HCCL_DATA_TYPE_FP8E8M0:fp8e8m0 <br> HCCL_DATA_TYPE_RESERVED:暂不支持使用 |
@@ -105,6 +106,7 @@ HCCL为**集合通信任务客户端**,主要对外提供了集合通信原语
105 **表2** HcclReduceOp参数说明106 **表2** HcclReduceOp参数说明
106 107 
107 <a name="table2469980529"></a>108 <a name="table2469980529"></a>
109+ 
108 | 数据类型 | 说明 |110 | 数据类型 | 说明 |
109 | --- | --- |111 | --- | --- |
110 | HcclReduceOp | Reduce操作类型。HcclReduceOp为枚举类型,定义如下代码所示。<br> HCCL_REDUCE_SUM:sum <br> HCCL_REDUCE_PROD:prod <br> HCCL_REDUCE_MAX:max <br> HCCL_REDUCE_MIN:min <br> HCCL_REDUCE_RESERVED:暂不支持使用 |112 | HcclReduceOp | Reduce操作类型。HcclReduceOp为枚举类型,定义如下代码所示。<br> HCCL_REDUCE_SUM:sum <br> HCCL_REDUCE_PROD:prod <br> HCCL_REDUCE_MAX:max <br> HCCL_REDUCE_MIN:min <br> HCCL_REDUCE_RESERVED:暂不支持使用 |
@@ -27,6 +27,7 @@ Mc2CcTilingConfig(const std::string& groupName, uint32_t opType, const std::stri
27**表2** HcclCMDType参数说明27**表2** HcclCMDType参数说明
28 28 
29<a name="table2469980529"></a>29<a name="table2469980529"></a>
30+ 
30| 数据类型 | 说明 |31| 数据类型 | 说明 |
31| --- | --- |32| --- | --- |
32| HcclCMDType | 通信任务类型。HcclCMDType枚举类定义如下代码所示。<!-- npu="950" id10 --><br><br>针对Ascend 950PR/Ascend 950DT,当前支持的通信任务类型为HCCL_CMD_ALLREDUCE、HCCL_CMD_ALLGATHER、HCCL_CMD_REDUCE_SCATTER、HCCL_CMD_ALLTOALL、HCCL_CMD_ALLTOALLV、HCCL_CMD_HALF_ALLTOALLV。<!-- end id10 --><!-- npu="A3" id11 --><br><br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,当前支持的通信任务类型为HCCL_CMD_ALLREDUCE、HCCL_CMD_ALLGATHER、HCCL_CMD_REDUCE_SCATTER、HCCL_CMD_ALLTOALL、HCCL_CMD_ALLTOALLV、HCCL_CMD_BATCH_WRITE。<!-- end id11 --><!-- npu="910b" id12 --><br><br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品,当前支持的通信任务类型为HCCL_CMD_ALLREDUCE、HCCL_CMD_ALLGATHER、HCCL_CMD_REDUCE_SCATTER、HCCL_CMD_ALLTOALL、HCCL_CMD_BATCH_WRITE。<!-- end id12 --> |33| HcclCMDType | 通信任务类型。HcclCMDType枚举类定义如下代码所示。<!-- npu="950" id10 --><br><br>针对Ascend 950PR/Ascend 950DT,当前支持的通信任务类型为HCCL_CMD_ALLREDUCE、HCCL_CMD_ALLGATHER、HCCL_CMD_REDUCE_SCATTER、HCCL_CMD_ALLTOALL、HCCL_CMD_ALLTOALLV、HCCL_CMD_HALF_ALLTOALLV。<!-- end id10 --><!-- npu="A3" id11 --><br><br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,当前支持的通信任务类型为HCCL_CMD_ALLREDUCE、HCCL_CMD_ALLGATHER、HCCL_CMD_REDUCE_SCATTER、HCCL_CMD_ALLTOALL、HCCL_CMD_ALLTOALLV、HCCL_CMD_BATCH_WRITE。<!-- end id11 --><!-- npu="910b" id12 --><br><br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品,当前支持的通信任务类型为HCCL_CMD_ALLREDUCE、HCCL_CMD_ALLGATHER、HCCL_CMD_REDUCE_SCATTER、HCCL_CMD_ALLTOALL、HCCL_CMD_BATCH_WRITE。<!-- end id12 --> |
@@ -9,6 +9,7 @@
9**表1** Mc2InitTiling参数说明9**表1** Mc2InitTiling参数说明
10 10 
11<a name="table4835205712588"></a>11<a name="table4835205712588"></a>
12+ 
12| 参数名 | 描述 |13| 参数名 | 描述 |
13| --- | --- |14| --- | --- |
14| reserved | 初始化通信任务配置。uint8_t*类型,支持最大长度64字节,该结构体仅支持通过接口[GetTiling](GetTiling.md)获取。 |15| reserved | 初始化通信任务配置。uint8_t*类型,支持最大长度64字节,该结构体仅支持通过接口[GetTiling](GetTiling.md)获取。 |
@@ -16,6 +17,7 @@
16**表2** Mc2CcTiling参数说明17**表2** Mc2CcTiling参数说明
17 18 
18<a name="table678914014562"></a>19<a name="table678914014562"></a>
20+ 
19| 参数名 | 描述 |21| 参数名 | 描述 |
20| --- | --- |22| --- | --- |
21| reserved | 各通信域中每个通信任务的参数配置。uint8_t*类型,支持最大长度280字节,该结构体仅支持通过接口[GetTiling](GetTiling.md)获取。注意,最多支持配置8个通信任务。 |23| reserved | 各通信域中每个通信任务的参数配置。uint8_t*类型,支持最大长度280字节,该结构体仅支持通过接口[GetTiling](GetTiling.md)获取。注意,最多支持配置8个通信任务。 |
@@ -14,6 +14,7 @@ AI CPU启动下发通信任务前,需获取固定的通信配置[Mc2Msg](#tabl
14**表1** Mc2Msg参数说明14**表1** Mc2Msg参数说明
15 15 
16<a name="table4835205712588"></a>16<a name="table4835205712588"></a>
17+ 
17| 参数名 | 描述 |18| 参数名 | 描述 |
18| --- | --- |19| --- | --- |
19| preparePosition | 设置服务端组装任务的方式,用户需要在Tiling中显式赋值,uint32_t类型,当前支持的取值如下:<br><br>1:AI CPU与AI Core通过通信任务机制实现消息传递和任务下发;由AI Core侧通过消息通知时设置为1,即算子中使用[HCCL](../HCCL_Kernel/HCCL_Kernel.md)时设置为1。 |20| preparePosition | 设置服务端组装任务的方式,用户需要在Tiling中显式赋值,uint32_t类型,当前支持的取值如下:<br><br>1:AI CPU与AI Core通过通信任务机制实现消息传递和任务下发;由AI Core侧通过消息通知时设置为1,即算子中使用[HCCL](../HCCL_Kernel/HCCL_Kernel.md)时设置为1。 |
@@ -12,6 +12,7 @@ AI CPU启动下发通信任务前,需获取固定的通信配置,如[表1](#
12**表1** v2版本HCCL TilingData参数说明12**表1** v2版本HCCL TilingData参数说明
13 13 
14<a name="table4835205712588"></a>14<a name="table4835205712588"></a>
15+ 
15| 参数名 | 描述 |16| 参数名 | 描述 |
16| --- | --- |17| --- | --- |
17| version | uint32_t类型。用于区分TilingData版本。<br><br>v2版本的TilingData结构体中,version字段仅支持取值为2。<br><br>注意:该字段在v2版本TilingData中的位置,同v1版本的preparePosition字段。当该字段取值为2时,为v2版本的结构体,当取值为1时,为v1版本的结构体,请使用[Mc2Msg结构体](v1_TilingData_deprecated.md#table4835205712588)。 |18| version | uint32_t类型。用于区分TilingData版本。<br><br>v2版本的TilingData结构体中,version字段仅支持取值为2。<br><br>注意:该字段在v2版本TilingData中的位置,同v1版本的preparePosition字段。当该字段取值为2时,为v2版本的结构体,当取值为1时,为v1版本的结构体,请使用[Mc2Msg结构体](v1_TilingData_deprecated.md#table4835205712588)。 |
@@ -76,6 +76,7 @@ Conv3dBackpropFilter的计算公式为:
76 **表1** ConvType说明76 **表1** ConvType说明
77 77 
78 <a name="table19081115275"></a>78 <a name="table19081115275"></a>
79+ 
79 | 参数 | 说明 |80 | 参数 | 说明 |
80 | --- | --- |81 | --- | --- |
81 | POSITION | 内存逻辑位置。<br> Input X矩阵可设置为TPosition::GM。<br>WeightSize可设置为TPosition::GM。<br>GradOutput矩阵可设置为TPosition::GM。<br>GradWeight矩阵可设置为TPosition::GM。 |82 | POSITION | 内存逻辑位置。<br> Input X矩阵可设置为TPosition::GM。<br>WeightSize可设置为TPosition::GM。<br>GradOutput矩阵可设置为TPosition::GM。<br>GradWeight矩阵可设置为TPosition::GM。 |
@@ -89,6 +90,7 @@ Conv3dBackpropFilter的计算公式为:
89 | --- | --- | --- | --- | --- |90 | --- | --- | --- | --- | --- |
90 | half | int32_t | half | float | <!-- npu="A3" id1 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id1 --><!-- npu="910b" id2 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id2 --> |91 | half | int32_t | half | float | <!-- npu="A3" id1 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id1 --><!-- npu="910b" id2 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id2 --> |
91 | bfloat16_t | int32_t | bfloat16_t | float | <!-- npu="A3" id3 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id3 --><!-- npu="910b" id4 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id4 --> |92 | bfloat16_t | int32_t | bfloat16_t | float | <!-- npu="A3" id3 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id3 --><!-- npu="910b" id4 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id4 --> |
93+ 
92 <!-- end id5 -->94 <!-- end id5 -->
93 95 
942. 初始化操作。962. 初始化操作。
@@ -7,6 +7,7 @@ TConv3DBpFilterTiling结构体包含Conv3dBackpropFilter算子规格信息及Til
7**表1** TConv3DBpFilterTiling结构说明7**表1** TConv3DBpFilterTiling结构说明
8 8 
9<a name="table1563162142915"></a>9<a name="table1563162142915"></a>
10+ 
10| 参数名称 | 说明 |11| 参数名称 | 说明 |
11| --- | --- |12| --- | --- |
12| batch | 输入GradOutput的Batch,单位元素。 |13| batch | 输入GradOutput的Batch,单位元素。 |
@@ -80,6 +80,7 @@ Conv3DBackpropInput的计算公式为:
80 **表1** ConvType说明80 **表1** ConvType说明
81 81 
82 <a name="table19081115275"></a>82 <a name="table19081115275"></a>
83+ 
83 | 参数 | 说明 |84 | 参数 | 说明 |
84 | --- | --- |85 | --- | --- |
85 | POSITION | 内存逻辑位置。<br> Weight矩阵可设置为TPosition::GM。<br>GradOutput矩阵可设置为TPosition::GM。<br>InputSize可设置为TPosition::GM。<br>GradInput矩阵可设置为TPosition::GM。 |86 | POSITION | 内存逻辑位置。<br> Weight矩阵可设置为TPosition::GM。<br>GradOutput矩阵可设置为TPosition::GM。<br>InputSize可设置为TPosition::GM。<br>GradInput矩阵可设置为TPosition::GM。 |
@@ -93,6 +94,7 @@ Conv3DBackpropInput的计算公式为:
93 | --- | --- | --- | --- | --- |94 | --- | --- | --- | --- | --- |
94 | half | half | int32_t | half | <!-- npu="A3" id1 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id1 --><!-- npu="910b" id2 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id2 --> |95 | half | half | int32_t | half | <!-- npu="A3" id1 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id1 --><!-- npu="910b" id2 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id2 --> |
95 | bfloat16_t | bfloat16_t | int32_t | bfloat16_t | <!-- npu="A3" id3 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id3 --><!-- npu="910b" id4 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id4 --> |96 | bfloat16_t | bfloat16_t | int32_t | bfloat16_t | <!-- npu="A3" id3 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id3 --><!-- npu="910b" id4 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id4 --> |
97+ 
96 <!-- end id5 -->98 <!-- end id5 -->
97 99 
982. 初始化操作。1002. 初始化操作。
@@ -113,6 +113,7 @@ Ascend C提供一组Conv3D高阶API,方便用户快速实现3维卷积正向
113 **表1** ConvType说明113 **表1** ConvType说明
114 114 
115 <a name="table19081115275"></a>115 <a name="table19081115275"></a>
116+ 
116 | 参数 | 说明 |117 | 参数 | 说明 |
117 | --- | --- |118 | --- | --- |
118 | TPosition | 内存逻辑位置。<br> Input矩阵可设置为TPosition::GM。<br>Weight矩阵可设置为TPosition::GM。<br>Bias矩阵可设置为TPosition::GM。<br>Output矩阵可设置为TPosition::GM。 |119 | TPosition | 内存逻辑位置。<br> Input矩阵可设置为TPosition::GM。<br>Weight矩阵可设置为TPosition::GM。<br>Bias矩阵可设置为TPosition::GM。<br>Output矩阵可设置为TPosition::GM。 |
@@ -126,6 +127,7 @@ Ascend C提供一组Conv3D高阶API,方便用户快速实现3维卷积正向
126 | --- | --- | --- | --- | --- |127 | --- | --- | --- | --- | --- |
127 | half | half | half | half | <!-- npu="A3" id1 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id1 --><!-- npu="910b" id2 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id2 --> |128 | half | half | half | half | <!-- npu="A3" id1 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id1 --><!-- npu="910b" id2 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id2 --> |
128 | bfloat16_t | bfloat16_t | float | bfloat16_t | <!-- npu="A3" id3 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id3 --><!-- npu="910b" id4 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id4 --> |129 | bfloat16_t | bfloat16_t | float | bfloat16_t | <!-- npu="A3" id3 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><!-- end id3 --><!-- npu="910b" id4 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id4 --> |
130+ 
129 <!-- end id5 -->131 <!-- end id5 -->
130 132 
1312. 初始化操作。1332. 初始化操作。
@@ -7,6 +7,7 @@ TConv3DApiTiling结构体包含Conv3D算子规格信息及Tiling切分算法的
7**表1** TConv3DApiTiling结构说明7**表1** TConv3DApiTiling结构说明
8 8 
9<a name="table18244199192620"></a>9<a name="table18244199192620"></a>
10+ 
10| 参数名称 | 数据类型 | 说明 |11| 参数名称 | 数据类型 | 说明 |
11| --- | --- | --- |12| --- | --- | --- |
12| groups | uint32_t | 预留参数,当前仅支持为1。 |13| groups | uint32_t | 预留参数,当前仅支持为1。 |
@@ -60,6 +60,7 @@ __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)
60**表3** MatmulConfigMode参数说明60**表3** MatmulConfigMode参数说明
61 61 
62<a name="table17837129144319"></a>62<a name="table17837129144319"></a>
63+ 
63| 参数 | 说明 |64| 参数 | 说明 |
64| --- | --- |65| --- | --- |
65| CONFIG_NORM | 表示设置MatmulConfig默认值为Norm模板 |66| CONFIG_NORM | 表示设置MatmulConfig默认值为Norm模板 |
@@ -70,6 +71,7 @@ __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)
70**表4** MatmulShapeParams参数说明71**表4** MatmulShapeParams参数说明
71 72 
72<a name="table16317184295116"></a>73<a name="table16317184295116"></a>
74+ 
73| 参数 | 数据类型 | 说明 |75| 参数 | 数据类型 | 说明 |
74| --- | --- | --- |76| --- | --- | --- |
75| singleCoreM | uint32_t | 单核内M轴shape大小,以元素为单位。 |77| singleCoreM | uint32_t | 单核内M轴shape大小,以元素为单位。 |
@@ -82,6 +84,7 @@ __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)
82**表5** MatmulQuantParams参数说明84**表5** MatmulQuantParams参数说明
83 85 
84<a name="table8313111211573"></a>86<a name="table8313111211573"></a>
87+ 
85| 参数 | 数据类型 | 说明 |88| 参数 | 数据类型 | 说明 |
86| --- | --- | --- |89| --- | --- | --- |
87| isPerTensor | bool | A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否为per tensor。<br>true:per tensor量化。false:per channel量化。<!-- npu="950" id9 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id9 --> |90| isPerTensor | bool | A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否为per tensor。<br>true:per tensor量化。false:per channel量化。<!-- npu="950" id9 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id9 --> |
@@ -90,6 +93,7 @@ __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)
90**表6** MatmulBatchParams参数说明93**表6** MatmulBatchParams参数说明
91 94 
92<a name="table15129204644"></a>95<a name="table15129204644"></a>
96+ 
93| 参数 | 数据类型 | 说明 |97| 参数 | 数据类型 | 说明 |
94| --- | --- | --- |98| --- | --- | --- |
95| isNBatch | bool | 是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。<br>true:开启多Batch。 |99| isNBatch | bool | 是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。<br>true:开启多Batch。 |
@@ -100,6 +104,7 @@ __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)
100**表7** MatmulFuncParams参数说明104**表7** MatmulFuncParams参数说明
101 105 
102<a name="table66217141862"></a>106<a name="table66217141862"></a>
107+ 
103| 参数 | 数据类型 | 说明 |108| 参数 | 数据类型 | 说明 |
104| --- | --- | --- |109| --- | --- | --- |
105| intrinsicsLimit | bool | 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id19 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id19 --> |110| intrinsicsLimit | bool | 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id19 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id19 --> |
@@ -41,6 +41,7 @@ MatmulCallBackFunc中包含3个可由用户自定义的回调函数接口,即
41**表1** MatmulCallBackFunc回调函数接口及参数说明41**表1** MatmulCallBackFunc回调函数接口及参数说明
42 42 
43<a name="table10989848113111"></a>43<a name="table10989848113111"></a>
44+ 
44| 回调函数功能 | 回调函数接口 | 参数说明 |45| 回调函数功能 | 回调函数接口 | 参数说明 |
45| --- | --- | --- |46| --- | --- | --- |
46| 可自定义设置不同的搬出数据片段数目等参数,实现将Matmul计算结果从L0C Buffer(CO1)搬出到GM的功能 | void DataCopyOut(const __gm__ void* gm, const LocalTensor<int8_t>& co1Local, const void* dataCopyOutParams, const uint64_t tilingPtr, const uint64_t dataPtr) | gm:输出的GM地址。<br><br>co1Local: L0C Buffer(CO1)上的计算结果。<br><br>dataCopyOutParams:Matmul定义的DataCopyOutParams结构体指针,具体定义如下方代码所示,供用户参考使用。<br><br>tilingPtr: 用户使用[SetUserDefInfo](SetUserDefInfo.md)设置的tiling参数地址。<br><br>dataPtr: 用户使用[SetSelfDefineData](SetSelfDefineData.md)设置的计算数据地址。 |47| 可自定义设置不同的搬出数据片段数目等参数,实现将Matmul计算结果从L0C Buffer(CO1)搬出到GM的功能 | void DataCopyOut(const __gm__ void* gm, const LocalTensor<int8_t>& co1Local, const void* dataCopyOutParams, const uint64_t tilingPtr, const uint64_t dataPtr) | gm:输出的GM地址。<br><br>co1Local: L0C Buffer(CO1)上的计算结果。<br><br>dataCopyOutParams:Matmul定义的DataCopyOutParams结构体指针,具体定义如下方代码所示,供用户参考使用。<br><br>tilingPtr: 用户使用[SetUserDefInfo](SetUserDefInfo.md)设置的tiling参数地址。<br><br>dataPtr: 用户使用[SetSelfDefineData](SetSelfDefineData.md)设置的计算数据地址。 |
@@ -9,6 +9,7 @@
9**表1** 模板特性9**表1** 模板特性
10 10 
11<a id="template-features"></a>11<a id="template-features"></a>
12+ 
12| 模板 | 实现 | 优点 | 推荐使用场景 |13| 模板 | 实现 | 优点 | 推荐使用场景 |
13| --- | --- | --- | --- |14| --- | --- | --- | --- |
14| Norm | 支持L1缓存多个基本块,MTE2分多次从GM搬运基本块到L1,每次搬运一份基本块,已搬的基本块不清空。(举例说明:Tiling结构体中的[depthA1](../Matmul_Tiling/TCubeTiling_struct.md#deptha1)=6,代表搬入6份A矩阵基本块到L1,1次搬运一份基本块,MTE2进行6次搬运)。 | 可以提前启动MTE1流水(因为搬1份基本块就可以做MTE1后面的运算)。 | 默认开启Norm模板。 |15| Norm | 支持L1缓存多个基本块,MTE2分多次从GM搬运基本块到L1,每次搬运一份基本块,已搬的基本块不清空。(举例说明:Tiling结构体中的[depthA1](../Matmul_Tiling/TCubeTiling_struct.md#deptha1)=6,代表搬入6份A矩阵基本块到L1,1次搬运一份基本块,MTE2进行6次搬运)。 | 可以提前启动MTE1流水(因为搬1份基本块就可以做MTE1后面的运算)。 | 默认开启Norm模板。 |
@@ -20,6 +21,7 @@
20**表2** MatmulConfig参数说明21**表2** MatmulConfig参数说明
21 22 
22<a id="matmulconfig-params"></a>23<a id="matmulconfig-params"></a>
24+ 
23| 参数 | 说明 | 支持模板:Norm, MDL, SpecialMDL, IBShare, BasicBlock, SpecialBasicBlock |25| 参数 | 说明 | 支持模板:Norm, MDL, SpecialMDL, IBShare, BasicBlock, SpecialBasicBlock |
24| --- | --- | --- |26| --- | --- | --- |
25| doNorm | 开启Norm模板。参数取值如下:<br>true:开启Norm模板。false:不开启Norm模板。<br><br>不指定模板的情况默认开启Norm模板。<!-- npu="9030" id1 --><br><br>Kirin 9030不支持此参数。<!-- end id1 --> | Norm |27| doNorm | 开启Norm模板。参数取值如下:<br>true:开启Norm模板。false:不开启Norm模板。<br><br>不指定模板的情况默认开启Norm模板。<!-- npu="9030" id1 --><br><br>Kirin 9030不支持此参数。<!-- end id1 --> | Norm |
@@ -113,6 +113,7 @@ template <class A_TYPE, class B_TYPE, class C_TYPE, class BIAS_TYPE = C_TYPE, co
113**表1** MatmulApiStaticTiling常量化Tiling参数说明113**表1** MatmulApiStaticTiling常量化Tiling参数说明
114 114 
115<a name="table7939847143412"></a>115<a name="table7939847143412"></a>
116+ 
116| 参数 | 数据类型 | 说明 |117| 参数 | 数据类型 | 说明 |
117| --- | --- | --- |118| --- | --- | --- |
118| M, N, Ka, Kb,<br><br>singleCoreM, singleCoreN, singleCoreK,<br><br>baseM, baseN, baseK,<br><br>depthA1, depthB1,<br><br>stepM, stepN,stepKa,stepKb,<br><br>isBias,<br><br>transLength,<br><br>iterateOrder,<br><br>dbL0A, dbL0B,<br><br>dbL0C,<br><br>shareMode,<br><br>shareL1Size,<br><br>shareL0CSize,<br><br>shareUbSize,<br><br>batchM,<br><br>batchN,<br><br>singleBatchM,<br><br>singleBatchN,<br><br>mxTypePara | int32_t | 与[TCubeTiling](../Matmul_Tiling/TCubeTiling_struct.md)结构体中各同名参数含义一致。本结构体中的参数是常量化后的常数值。 |119| M, N, Ka, Kb,<br><br>singleCoreM, singleCoreN, singleCoreK,<br><br>baseM, baseN, baseK,<br><br>depthA1, depthB1,<br><br>stepM, stepN,stepKa,stepKb,<br><br>isBias,<br><br>transLength,<br><br>iterateOrder,<br><br>dbL0A, dbL0B,<br><br>dbL0C,<br><br>shareMode,<br><br>shareL1Size,<br><br>shareL0CSize,<br><br>shareUbSize,<br><br>batchM,<br><br>batchN,<br><br>singleBatchM,<br><br>singleBatchN,<br><br>mxTypePara | int32_t | 与[TCubeTiling](../Matmul_Tiling/TCubeTiling_struct.md)结构体中各同名参数含义一致。本结构体中的参数是常量化后的常数值。 |
@@ -63,6 +63,7 @@ Matmul的计算公式为:C = A \* B + Bias,其示意图如下。
63 **表1** MatmulType参数说明63 **表1** MatmulType参数说明
64 64 
65 <a name="table1188045714378"></a>65 <a name="table1188045714378"></a>
66+ 
66 | 参数 | 说明 |67 | 参数 | 说明 |
67 | --- | --- |68 | --- | --- |
68 | POSITION | 内存逻辑位置。<!-- npu="950" id15 --><br><br>针对Ascend 950PR/Ascend 950DT:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>C矩阵可设置为TPosition::GM,TPosition::VECIN<br> 注意,A矩阵、B矩阵或Bias矩阵设置为TPosition::VECOUT或TPosition::TSCM时,对应矩阵用于单核计算的数据必须全部在Unified Buffer(UB)或L1 Buffer上,具体样例请参考[matmul_vecout样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_vecout)、[自定义数据来源为VECOUT的TSCM输入的Matmul算子样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_tscm_src_vecout)、[自定义数据来源为GM的TSCM输入的Matmul算子样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_tscm)。<!-- end id15 --><!-- npu="A3" id16 --><br><br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::VECIN, TPosition::CO1<br> 注意,C矩阵设置为TPosition::CO1时,C矩阵的数据排布格式仅支持CubeFormat::NZ,C矩阵的数据类型仅支持float、int32_t。<!-- end id16 --><!-- npu="910b" id17 --><br> <br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::VECIN, TPosition::CO1<br> 注意,C矩阵设置为TPosition::CO1时,C矩阵的数据排布格式仅支持CubeFormat::NZ,C矩阵的数据类型仅支持float、int32_t。<!-- end id17 --><!-- npu="310p" id18 --><br><br>针对Atlas 推理系列产品AI Core:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::VECIN<!-- end id18 --><!-- npu="310b" id19 --><br> <br>针对Atlas 200I/500 A2 推理产品:<br> A矩阵可设置为TPosition::GM<br>B矩阵可设置为TPosition::GM<br>Bias可设置为TPosition::GM<br>C矩阵可设置为TPosition::GM<!-- end id19 --><!-- npu="x90" id1 --><br> <br>针对Kirin X90:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT, TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::CO1<!-- end id1 --><!-- npu="9030" id2 --><br> <br>针对Kirin 9030:<br> A矩阵可设置为TPosition::TSCM<br>B矩阵可设置为TPosition::TSCM<br>Bias可设置为TPosition::GM<br>C矩阵可设置为TPosition::GM<!-- end id2 --> |69 | POSITION | 内存逻辑位置。<!-- npu="950" id15 --><br><br>针对Ascend 950PR/Ascend 950DT:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>C矩阵可设置为TPosition::GM,TPosition::VECIN<br> 注意,A矩阵、B矩阵或Bias矩阵设置为TPosition::VECOUT或TPosition::TSCM时,对应矩阵用于单核计算的数据必须全部在Unified Buffer(UB)或L1 Buffer上,具体样例请参考[matmul_vecout样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_vecout)、[自定义数据来源为VECOUT的TSCM输入的Matmul算子样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_tscm_src_vecout)、[自定义数据来源为GM的TSCM输入的Matmul算子样例](../../../../../../../examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_tscm)。<!-- end id15 --><!-- npu="A3" id16 --><br><br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::VECIN, TPosition::CO1<br> 注意,C矩阵设置为TPosition::CO1时,C矩阵的数据排布格式仅支持CubeFormat::NZ,C矩阵的数据类型仅支持float、int32_t。<!-- end id16 --><!-- npu="910b" id17 --><br> <br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::VECIN, TPosition::CO1<br> 注意,C矩阵设置为TPosition::CO1时,C矩阵的数据排布格式仅支持CubeFormat::NZ,C矩阵的数据类型仅支持float、int32_t。<!-- end id17 --><!-- npu="310p" id18 --><br><br>针对Atlas 推理系列产品AI Core:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::VECIN<!-- end id18 --><!-- npu="310b" id19 --><br> <br>针对Atlas 200I/500 A2 推理产品:<br> A矩阵可设置为TPosition::GM<br>B矩阵可设置为TPosition::GM<br>Bias可设置为TPosition::GM<br>C矩阵可设置为TPosition::GM<!-- end id19 --><!-- npu="x90" id1 --><br> <br>针对Kirin X90:<br> A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br>B矩阵可设置为TPosition::GM,TPosition::VECOUT, TPosition::TSCM<br>Bias可设置为TPosition::GM,TPosition::VECOUT<br>C矩阵可设置为TPosition::GM,TPosition::CO1<!-- end id1 --><!-- npu="9030" id2 --><br> <br>针对Kirin 9030:<br> A矩阵可设置为TPosition::TSCM<br>B矩阵可设置为TPosition::TSCM<br>Bias可设置为TPosition::GM<br>C矩阵可设置为TPosition::GM<!-- end id2 --> |
@@ -79,6 +80,7 @@ Matmul的计算公式为:C = A \* B + Bias,其示意图如下。
79 **表2** Matmul输入输出数据类型的支持列表80 **表2** Matmul输入输出数据类型的支持列表
80 81 
81 <a name="table1996113269499"></a>82 <a name="table1996113269499"></a>
83+ 
82 | A矩阵 | B矩阵 | Bias | C矩阵 | 支持平台 |84 | A矩阵 | B矩阵 | Bias | C矩阵 | 支持平台 |
83 | --- | --- | --- | --- | --- |85 | --- | --- | --- | --- | --- |
84 | float | float | float/half | float/half/bfloat16_t | <!-- npu="950" id38 -->Ascend 950PR/Ascend 950DT<!-- end id38 --><!-- npu="A3" id39 --><br> <br>Atlas A3 训练系列产品/Atlas A3 推理系列产品<!-- end id39 --><!-- npu="910b" id40 --><br> <br>Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id40 --><!-- npu="310b" id41 --><br> <br>Atlas 200I/500 A2 推理产品<!-- end id41 --> |86 | float | float | float/half | float/half/bfloat16_t | <!-- npu="950" id38 -->Ascend 950PR/Ascend 950DT<!-- end id38 --><!-- npu="A3" id39 --><br> <br>Atlas A3 训练系列产品/Atlas A3 推理系列产品<!-- end id39 --><!-- npu="910b" id40 --><br> <br>Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id40 --><!-- npu="310b" id41 --><br> <br>Atlas 200I/500 A2 推理产品<!-- end id41 --> |
@@ -101,6 +103,7 @@ Matmul的计算公式为:C = A \* B + Bias,其示意图如下。
101 | bfloat16_t | bfloat16_t | bfloat16_t | float/half/bfloat16_t | <!-- npu="950" id83 -->Ascend 950PR/Ascend 950DT<!-- end id83 --> |103 | bfloat16_t | bfloat16_t | bfloat16_t | float/half/bfloat16_t | <!-- npu="950" id83 -->Ascend 950PR/Ascend 950DT<!-- end id83 --> |
102 | half | half | bfloat16_t | float/half/bfloat16_t | <!-- npu="950" id84 -->Ascend 950PR/Ascend 950DT<!-- end id84 --> |104 | half | half | bfloat16_t | float/half/bfloat16_t | <!-- npu="950" id84 -->Ascend 950PR/Ascend 950DT<!-- end id84 --> |
103 | int8_t | int8_t | int32_t | bfloat16_t | <!-- npu="950" id85 -->Ascend 950PR/Ascend 950DT<!-- end id85 --> |105 | int8_t | int8_t | int32_t | bfloat16_t | <!-- npu="950" id85 -->Ascend 950PR/Ascend 950DT<!-- end id85 --> |
106+ 
104 <!-- end id102 -->107 <!-- end id102 -->
105 108 
106 <!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_usage_res.md#id6 -->109 <!-- @ref: asc-devkit/res/docs/zh/api/SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_usage_res.md#id6 -->
@@ -19,6 +19,7 @@ void SetMatmulConfigParams(const MatmulConfigParams& configParams)
19**表1** 参数说明19**表1** 参数说明
20 20 
21<a name="table9646134355611"></a>21<a name="table9646134355611"></a>
22+ 
22| 参数名 | 输入/输出 | 描述 |23| 参数名 | 输入/输出 | 描述 |
23| --- | --- | --- |24| --- | --- | --- |
24| mmConfigTypeIn | 输入 | 设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。<br>0:代表Norm模板<br>1:代表MDL模板,默认值为1 |25| mmConfigTypeIn | 输入 | 设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。<br>0:代表Norm模板<br>1:代表MDL模板,默认值为1 |
@@ -52,6 +53,7 @@ struct MatmulConfigParams {
52**表2** MatmulConfigParams结构体内参数说明53**表2** MatmulConfigParams结构体内参数说明
53 54 
54<a name="table15780447181917"></a>55<a name="table15780447181917"></a>
56+ 
55| 参数名称 | 含义 |57| 参数名称 | 含义 |
56| --- | --- |58| --- | --- |
57| mmConfigType | 设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。<br>0:代表Norm模板<br>1:代表MDL模板,默认值为1 |59| mmConfigType | 设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。<br>0:代表Norm模板<br>1:代表MDL模板,默认值为1 |
@@ -5,6 +5,7 @@ TCubeTiling结构体包含Matmul Tiling切分算法的相关参数,被传递
5**表1** TCubeTiling结构说明5**表1** TCubeTiling结构说明
6 6 
7<a id="tcubetiling-struct"></a>7<a id="tcubetiling-struct"></a>
8+ 
8| 参数名称 | 数据类型 | 说明 |9| 参数名称 | 数据类型 | 说明 |
9| --- | --- | --- |10| --- | --- | --- |
10| usedCoreNum | int | 使用的AI处理器核数,请根据实际情况设置。取值范围为:[1, AI处理器最大核数]。该参数与shape相关参数的关系为:usedCoreNum = (M / singleCoreM) * (N / singleCoreN)。 |11| usedCoreNum | int | 使用的AI处理器核数,请根据实际情况设置。取值范围为:[1, AI处理器最大核数]。该参数与shape相关参数的关系为:usedCoreNum = (M / singleCoreM) * (N / singleCoreN)。 |
@@ -38,6 +39,7 @@ TCubeTiling结构体包含Matmul Tiling切分算法的相关参数,被传递
38 **表2** TCubeTiling约束条件39 **表2** TCubeTiling约束条件
39 40 
40 <a name="table1275812182115"></a>41 <a name="table1275812182115"></a>
42+ 
41 | 约束条件 | 说明 |43 | 约束条件 | 说明 |
42 | --- | --- |44 | --- | --- |
43 | usedCoreNum <= aiCoreCnt | 使用核数小于等于当前AI处理器的最大核数 |45 | usedCoreNum <= aiCoreCnt | 使用核数小于等于当前AI处理器的最大核数 |
@@ -54,6 +56,7 @@ TCubeTiling结构体包含Matmul Tiling切分算法的相关参数,被传递
54 **表3** MDL模板补充约束条件56 **表3** MDL模板补充约束条件
55 57 
56 <a name="table1094616401179"></a>58 <a name="table1094616401179"></a>
59+ 
57 | 约束条件 | 说明 |60 | 约束条件 | 说明 |
58 | --- | --- |61 | --- | --- |
59 | Ka不全载时,即Ka / baseK > stepKa,stepM = 1 | K方向非全载时,M方向只能逐块搬运 |62 | Ka不全载时,即Ka / baseK > stepKa,stepM = 1 | K方向非全载时,M方向只能逐块搬运 |
@@ -81,6 +81,7 @@ struct NormalizeConfig {
81**表2** 接口参数说明81**表2** 接口参数说明
82 82 
83<a name="table2087718184450"></a>83<a name="table2087718184450"></a>
84+ 
84| 参数名称 | 输入/输出 | 含义 |85| 参数名称 | 输入/输出 | 含义 |
85| --- | --- | --- |86| --- | --- | --- |
86| output | 输出 | 目的操作数,shape为[A, R],LocalTensor数据结构的定义请参考[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md)。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 |87| output | 输出 | 目的操作数,shape为[A, R],LocalTensor数据结构的定义请参考[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md)。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 |
@@ -151,6 +151,7 @@ struct QuantizeParams {
151| bfloat16_t | float | CAST_ROUND(默认)<br>CAST_HYBRID |151| bfloat16_t | float | CAST_ROUND(默认)<br>CAST_HYBRID |
152 152 
153**表5** DstT为int8_t支持的数据类型组合153**表5** DstT为int8_t支持的数据类型组合
154+ 
154| SrcT | ScaleT/OffsetT | roundMode |155| SrcT | ScaleT/OffsetT | roundMode |
155| --- | --- | --- |156| --- | --- | --- |
156| half | half | CAST_RINT(默认)<br>CAST_ROUND<br>CAST_FLOOR<br>CAST_CEIL<br>CAST_TRUNC |157| half | half | CAST_RINT(默认)<br>CAST_ROUND<br>CAST_FLOOR<br>CAST_CEIL<br>CAST_TRUNC |
@@ -160,6 +161,7 @@ struct QuantizeParams {
160| bfloat16_t | float | CAST_RINT(默认)<br>CAST_ROUND<br>CAST_FLOOR<br>CAST_CEIL<br>CAST_TRUNC |161| bfloat16_t | float | CAST_RINT(默认)<br>CAST_ROUND<br>CAST_FLOOR<br>CAST_CEIL<br>CAST_TRUNC |
161 162 
162**表6** DstT为fp4x2_e1m2_t/fp4x2_e2m1_t支持的数据类型组合(当前均只支持PER_GROUP场景)163**表6** DstT为fp4x2_e1m2_t/fp4x2_e2m1_t支持的数据类型组合(当前均只支持PER_GROUP场景)
164+ 
163| SrcT | ScaleT/OffsetT | roundMode |165| SrcT | ScaleT/OffsetT | roundMode |
164| --- | --- | --- |166| --- | --- | --- |
165| half | half | CAST_RINT(默认)<br>CAST_ROUND<br>CAST_FLOOR<br>CAST_CEIL<br>CAST_TRUNC |167| half | half | CAST_RINT(默认)<br>CAST_ROUND<br>CAST_FLOOR<br>CAST_CEIL<br>CAST_TRUNC |
@@ -148,6 +148,7 @@
148**表5** kernel侧tiling计算接口参数说明148**表5** kernel侧tiling计算接口参数说明
149 149 
150<a name="table5458981523"></a>150<a name="table5458981523"></a>
151+ 
151| 参数名称 | 输入/输出 | 功能 |152| 参数名称 | 输入/输出 | 功能 |
152| --- | --- | --- |153| --- | --- | --- |
153| rank | 输入 | 输入/输出tensor的维度数目,目前支持的取值为[1, 9]。 |154| rank | 输入 | 输入/输出tensor的维度数目,目前支持的取值为[1, 9]。 |
@@ -34,4 +34,5 @@
34| [AtomicMax](AtomicMax.md) | 用于在指定GM地址上进行原子取大操作,将address指向的GM地址上的旧值(old_value)与输入的标量值(value)进行比较,将较大值(new_value)写回GM地址,返回该地址修改前的值(old_value)。 |34| [AtomicMax](AtomicMax.md) | 用于在指定GM地址上进行原子取大操作,将address指向的GM地址上的旧值(old_value)与输入的标量值(value)进行比较,将较大值(new_value)写回GM地址,返回该地址修改前的值(old_value)。 |
35| [AtomicCas](AtomicCas.md) | 在指定GM地址上进行原子比较操作,读取address指向的GM地址上的旧值(old_value)与输入标量值value1进行比较:如果相等,则将输入标量值value2写入GM地址;如果不相等,则GM地址上的值保持不变。返回该地址修改前的值(old_value)。 |35| [AtomicCas](AtomicCas.md) | 在指定GM地址上进行原子比较操作,读取address指向的GM地址上的旧值(old_value)与输入标量值value1进行比较:如果相等,则将输入标量值value2写入GM地址;如果不相等,则GM地址上的值保持不变。返回该地址修改前的值(old_value)。 |
36| [AtomicExch](AtomicExch.md) | 用于在GM内存中执行原子交换操作,读取address指向的GM地址上的旧值(old_value),并将输入的标量值(value)替换旧值存储回同一地址,返回该地址修改前的值(old_value)。 |36| [AtomicExch](AtomicExch.md) | 用于在GM内存中执行原子交换操作,读取address指向的GM地址上的旧值(old_value),并将输入的标量值(value)替换旧值存储回同一地址,返回该地址修改前的值(old_value)。 |
37+ 
37<!-- end id1 -->38<!-- end id1 -->
@@ -114,6 +114,7 @@
114## Memory矢量计算114## Memory矢量计算
115 115 
116### 数据搬运116### 数据搬运
117+ 
117| 接口名 | 功能描述 |118| 接口名 | 功能描述 |
118| --- | --- |119| --- | --- |
119| [DataCopy(GM与UB连续数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_continuous.md) | 支持Global Memory与UB之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 |120| [DataCopy(GM与UB连续数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_continuous.md) | 支持Global Memory与UB之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 |
@@ -133,6 +134,7 @@
133| [Copy(UBToUB掩码式高维数据搬运)](memory_vector_compute/data_move/Copy_UBToUB_mask_highdim_split.md) | 支持UB和UB之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 |134| [Copy(UBToUB掩码式高维数据搬运)](memory_vector_compute/data_move/Copy_UBToUB_mask_highdim_split.md) | 支持UB和UB之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 |
134 135 
135### 基础算术136### 基础算术
137+ 
136| 接口名 | 功能描述 |138| 接口名 | 功能描述 |
137| --- | --- |139| --- | --- |
138| [Exp](memory_vector_compute/basic_arithmetic/Exp.md) | Exp属于单目矢量类计算接口,负责将输入的tensor按元素取自然指数。 |140| [Exp](memory_vector_compute/basic_arithmetic/Exp.md) | Exp属于单目矢量类计算接口,负责将输入的tensor按元素取自然指数。 |
@@ -165,6 +167,7 @@
165| [LeakyRelu](memory_vector_compute/basic_arithmetic/LeakyRelu.md) | LeakyRelu属于双目标量类计算接口,输入为一个矢量tensor和一个标量scalar,LeakyRelu负责将矢量tensor内的每个元素执行Leaky ReLu(Leaky Rectified Linear Unit)操作。 |167| [LeakyRelu](memory_vector_compute/basic_arithmetic/LeakyRelu.md) | LeakyRelu属于双目标量类计算接口,输入为一个矢量tensor和一个标量scalar,LeakyRelu负责将矢量tensor内的每个元素执行Leaky ReLu(Leaky Rectified Linear Unit)操作。 |
166 168 
167### 逻辑计算169### 逻辑计算
170+ 
168| 接口名 | 功能描述 |171| 接口名 | 功能描述 |
169| --- | --- |172| --- | --- |
170| [Not](memory_vector_compute/logical_compute/Not.md) | 对元素做按位取反。 |173| [Not](memory_vector_compute/logical_compute/Not.md) | 对元素做按位取反。 |
@@ -178,6 +181,7 @@
178| [ShiftRight(右移位数为Tensor)](memory_vector_compute/logical_compute/ShiftRight_shift_amount_tensor.md) | 源操作数内每个元素做右移。 |181| [ShiftRight(右移位数为Tensor)](memory_vector_compute/logical_compute/ShiftRight_shift_amount_tensor.md) | 源操作数内每个元素做右移。 |
179 182 
180### 复合计算183### 复合计算
184+ 
181| 接口名 | 功能描述 |185| 接口名 | 功能描述 |
182| --- | --- |186| --- | --- |
183| [Axpy](memory_vector_compute/composite_compute/Axpy.md) | 向量和标量的乘积,并将乘积结果逐元素加到的输出向量上。 |187| [Axpy](memory_vector_compute/composite_compute/Axpy.md) | 向量和标量的乘积,并将乘积结果逐元素加到的输出向量上。 |
@@ -196,6 +200,7 @@
196| [MulsCast(ISASI)](memory_vector_compute/composite_compute/MulsCast_ISASI.md) | 将矢量源操作数前count个数据与标量相乘再按照CAST_ROUND模式转换成half类型,并将计算结果写入dst,此接口支持标量在前和标量在后两种场景。 |200| [MulsCast(ISASI)](memory_vector_compute/composite_compute/MulsCast_ISASI.md) | 将矢量源操作数前count个数据与标量相乘再按照CAST_ROUND模式转换成half类型,并将计算结果写入dst,此接口支持标量在前和标量在后两种场景。 |
197 201 
198### 比较与选择202### 比较与选择
203+ 
199| 接口名 | 功能描述 |204| 接口名 | 功能描述 |
200| --- | --- |205| --- | --- |
201| [Compare](memory_vector_compute/compare_and_select/Compare.md) | 逐元素比较两个tensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。 |206| [Compare](memory_vector_compute/compare_and_select/Compare.md) | 逐元素比较两个tensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。 |
@@ -209,6 +214,7 @@
209| [GatherMask](memory_vector_compute/compare_and_select/GatherMask.md) | 以**内置固定模式**或者**用户自定义输入的Tensor**数值对应的二进制为gather mask(数据收集的掩码),从源操作数中选取元素写入目的操作数中。1为选取,0为不选取。 |214| [GatherMask](memory_vector_compute/compare_and_select/GatherMask.md) | 以**内置固定模式**或者**用户自定义输入的Tensor**数值对应的二进制为gather mask(数据收集的掩码),从源操作数中选取元素写入目的操作数中。1为选取,0为不选取。 |
210 215 
211### 类型转换216### 类型转换
217+ 
212| 接口名 | 功能描述 |218| 接口名 | 功能描述 |
213| --- | --- |219| --- | --- |
214| [SetDeqScale](memory_vector_compute/type_conversion_aux_config/SetDeqScale.md) | 本接口用于设置DEQSCALE寄存器的值,DEQSCALE寄存器位宽为64bit,用于Vector计算单元上的量化计算,寄存器中存放的参数在不同场景下的含义不同。 |220| [SetDeqScale](memory_vector_compute/type_conversion_aux_config/SetDeqScale.md) | 本接口用于设置DEQSCALE寄存器的值,DEQSCALE寄存器位宽为64bit,用于Vector计算单元上的量化计算,寄存器中存放的参数在不同场景下的含义不同。 |
@@ -216,6 +222,7 @@
216| [Truncate(ISASI)](memory_vector_compute/type_conversion/Truncate_ISASI.md) | 将源操作数的浮点数元素截断到整数位,同时源操作数的数据类型保持不变。 |222| [Truncate(ISASI)](memory_vector_compute/type_conversion/Truncate_ISASI.md) | 将源操作数的浮点数元素截断到整数位,同时源操作数的数据类型保持不变。 |
217 223 
218### 归约计算224### 归约计算
225+ 
219| 接口名 | 功能描述 |226| 接口名 | 功能描述 |
220| --- | --- |227| --- | --- |
221| [ReduceDataBlock](memory_vector_compute/reduction_compute/ReduceDataBlock.md) | `ReduceDataBlock`接口对输入数据以DataBlock为单位进行归约操作,根据模板参数`reduceType`,对每个DataBlock内的数据求和/求最大值/求最小值。 |228| [ReduceDataBlock](memory_vector_compute/reduction_compute/ReduceDataBlock.md) | `ReduceDataBlock`接口对输入数据以DataBlock为单位进行归约操作,根据模板参数`reduceType`,对每个DataBlock内的数据求和/求最大值/求最小值。 |
@@ -228,12 +235,14 @@
228| [GetReduceRepeatMaxMinSpr(ISASI)](memory_vector_compute/reduction_compute_aux_config/GetReduceRepeatMaxMinSpr_ISASI.md) | 本接口用于获取调用ReduceRepeat时所有repeat内的最值及其索引,或获取调用ReduceMax/ReduceMin得到的最值。计算结果以全局变量形式存储,可以随时调用获取。 |235| [GetReduceRepeatMaxMinSpr(ISASI)](memory_vector_compute/reduction_compute_aux_config/GetReduceRepeatMaxMinSpr_ISASI.md) | 本接口用于获取调用ReduceRepeat时所有repeat内的最值及其索引,或获取调用ReduceMax/ReduceMin得到的最值。计算结果以全局变量形式存储,可以随时调用获取。 |
229 236 
230### 数据排布转换237### 数据排布转换
238+ 
231| 接口名 | 功能描述 |239| 接口名 | 功能描述 |
232| --- | --- |240| --- | --- |
233| [Transpose](memory_vector_compute/data_layout_conversion/Transpose.md) | Transpose接口用于实现16*16的二维矩阵数据块转置或者[N,C,H,W]与[N,H,W,C]数据格式互相转换。 |241| [Transpose](memory_vector_compute/data_layout_conversion/Transpose.md) | Transpose接口用于实现16*16的二维矩阵数据块转置或者[N,C,H,W]与[N,H,W,C]数据格式互相转换。 |
234| [TransDataTo5HD](memory_vector_compute/data_layout_conversion/TransDataTo5HD.md) | TransDataTo5HD接口数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式。特别的,也可以用于二维矩阵数据块的转置。完成转置功能时,相比于Transpose接口,Transpose仅支持16\*16大小的矩阵转置;本接口单次repeat内可处理512Byte的数据(16个DataBlock),根据数据类型不同,支持不同shape的矩阵转置,同时还可以支持多次repeat操作。 |242| [TransDataTo5HD](memory_vector_compute/data_layout_conversion/TransDataTo5HD.md) | TransDataTo5HD接口数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式。特别的,也可以用于二维矩阵数据块的转置。完成转置功能时,相比于Transpose接口,Transpose仅支持16\*16大小的矩阵转置;本接口单次repeat内可处理512Byte的数据(16个DataBlock),根据数据类型不同,支持不同shape的矩阵转置,同时还可以支持多次repeat操作。 |
235 243 
236### 数据填充244### 数据填充
245+ 
237| 接口名 | 功能描述 |246| 接口名 | 功能描述 |
238| --- | --- |247| --- | --- |
239| [Duplicate](memory_vector_compute/data_padding/Duplicate.md) | Duplicate接口将一个变量或立即数复制多次并填充到向量中。 |248| [Duplicate](memory_vector_compute/data_padding/Duplicate.md) | Duplicate接口将一个变量或立即数复制多次并填充到向量中。 |
@@ -242,6 +251,7 @@
242| [VectorPadding(ISASI)](memory_vector_compute/data_padding/VectorPadding_ISASI.md) | 根据padMode(pad模式)与padSide(pad方向)对源操作数按照datablock进行填充操作。 |251| [VectorPadding(ISASI)](memory_vector_compute/data_padding/VectorPadding_ISASI.md) | 根据padMode(pad模式)与padSide(pad方向)对源操作数按照datablock进行填充操作。 |
243 252 
244### 排序组合(ISASI)253### 排序组合(ISASI)
254+ 
245| 接口名 | 功能描述 |255| 接口名 | 功能描述 |
246| --- | --- |256| --- | --- |
247| [ProposalConcat](memory_vector_compute/sort_and_merge_ISASI/ProposalConcat.md) | 将连续元素合入Region Proposal内对应位置,每次迭代会将16个连续元素合入到16个Region Proposals的对应位置里。 |257| [ProposalConcat](memory_vector_compute/sort_and_merge_ISASI/ProposalConcat.md) | 将连续元素合入Region Proposal内对应位置,每次迭代会将16个连续元素合入到16个Region Proposals的对应位置里。 |
@@ -253,6 +263,7 @@
253| [GetMrgSortResult](memory_vector_compute/sort_and_merge_ISASI/GetMrgSortResult.md) | GetMrgSortResult接口需与MrgSort接口配合使用。当MrgSort接口中的ifExhaustedSuspension参数设置为true时,若某个输入队列中的数据耗尽,MrgSort会停止执行。此时,可调用GetMrgSortResult接口来获取4个队列里已经处理过的数据个数。 |263| [GetMrgSortResult](memory_vector_compute/sort_and_merge_ISASI/GetMrgSortResult.md) | GetMrgSortResult接口需与MrgSort接口配合使用。当MrgSort接口中的ifExhaustedSuspension参数设置为true时,若某个输入队列中的数据耗尽,MrgSort会停止执行。此时,可调用GetMrgSortResult接口来获取4个队列里已经处理过的数据个数。 |
254 264 
255### 离散与聚合265### 离散与聚合
266+ 
256| 接口名 | 功能描述 |267| 接口名 | 功能描述 |
257| --- | --- |268| --- | --- |
258| [Gather](memory_vector_compute/scatter_gather/Gather.md) | Gather接口接受输入张量(src)、地址偏移张量(srcOffset)和基地址(srcBaseAddr),根据基地址和地址偏移量确定输入张量的索引,将输入张量中对应元素收集到结果张量(dst)中。 |269| [Gather](memory_vector_compute/scatter_gather/Gather.md) | Gather接口接受输入张量(src)、地址偏移张量(srcOffset)和基地址(srcBaseAddr),根据基地址和地址偏移量确定输入张量的索引,将输入张量中对应元素收集到结果张量(dst)中。 |
@@ -260,6 +271,7 @@
260| [Scatter(ISASI)](memory_vector_compute/scatter_gather/Scatter_ISASI.md) | 给定一个连续的输入张量和一个目的地址偏移张量,Scatter指令根据偏移地址生成新的结果张量后将输入张量分散到结果张量中。 |271| [Scatter(ISASI)](memory_vector_compute/scatter_gather/Scatter_ISASI.md) | 给定一个连续的输入张量和一个目的地址偏移张量,Scatter指令根据偏移地址生成新的结果张量后将输入张量分散到结果张量中。 |
261 272 
262### 掩码操作273### 掩码操作
274+ 
263| 接口名 | 功能描述 |275| 接口名 | 功能描述 |
264| --- | --- |276| --- | --- |
265| [SetMaskCount](memory_vector_compute/mask_operations/SetMaskCount.md) | 设置Mask模式为Counter模式。该模式下,不需要开发者去感知迭代次数、处理非对齐的尾块等操作,可直接传入计算数据量,实际迭代次数由Vector计算单元自动推断。本接口推荐配合API中isSetMask模板参数使用,当isSetMask为false时,支持用户调用本接口手动管理Counter模式,并通过SetVectorMask设置Counter模式下参与计算的元素个数。 |277| [SetMaskCount](memory_vector_compute/mask_operations/SetMaskCount.md) | 设置Mask模式为Counter模式。该模式下,不需要开发者去感知迭代次数、处理非对齐的尾块等操作,可直接传入计算数据量,实际迭代次数由Vector计算单元自动推断。本接口推荐配合API中isSetMask模板参数使用,当isSetMask为false时,支持用户调用本接口手动管理Counter模式,并通过SetVectorMask设置Counter模式下参与计算的元素个数。 |
@@ -268,6 +280,7 @@
268| [ResetMask](memory_vector_compute/mask_operations/ResetMask.md) | 恢复mask的值为默认值(全1),表示矢量计算中每次迭代内的所有元素都将参与运算。 |280| [ResetMask](memory_vector_compute/mask_operations/ResetMask.md) | 恢复mask的值为默认值(全1),表示矢量计算中每次迭代内的所有元素都将参与运算。 |
269 281 
270### 数据重排(ISASI)282### 数据重排(ISASI)
283+ 
271| 接口名 | 功能描述 |284| 接口名 | 功能描述 |
272| --- | --- |285| --- | --- |
273| [Interleave](memory_vector_compute/data_rearrange_ISASI/Interleave.md) | 给定源操作数src0和src1,将src0和src1中的元素交织存入结果操作数dst0和dst1中。 |286| [Interleave](memory_vector_compute/data_rearrange_ISASI/Interleave.md) | 给定源操作数src0和src1,将src0和src1中的元素交织存入结果操作数dst0和dst1中。 |
@@ -276,6 +289,7 @@
276## Reg矢量计算289## Reg矢量计算
277 290 
278### 寄存器数据类型291### 寄存器数据类型
292+ 
279| 接口名 | 功能描述 |293| 接口名 | 功能描述 |
280| --- | --- |294| --- | --- |
281| [RegTensor](reg_vector_compute/register_data_types/RegTensor.md) | Reg矢量计算基本单元,RegTensor位宽为VL(Vector Length),具体值可能因不同AI处理器型号而异。 |295| [RegTensor](reg_vector_compute/register_data_types/RegTensor.md) | Reg矢量计算基本单元,RegTensor位宽为VL(Vector Length),具体值可能因不同AI处理器型号而异。 |
@@ -284,6 +298,7 @@
284| [AddrReg](reg_vector_compute/register_data_types/AddrReg.md) | AddrReg即为Address Register(地址寄存器),是用于存储地址偏移量的寄存器。AddrReg应该通过CreateAddrReg API初始化,然后在循环中使用AddrReg存储地址偏移量。AddrReg在每层循环中根据所设置的stride进行自增。 |298| [AddrReg](reg_vector_compute/register_data_types/AddrReg.md) | AddrReg即为Address Register(地址寄存器),是用于存储地址偏移量的寄存器。AddrReg应该通过CreateAddrReg API初始化,然后在循环中使用AddrReg存储地址偏移量。AddrReg在每层循环中根据所设置的stride进行自增。 |
285 299 
286### Reg数据搬运300### Reg数据搬运
301+ 
287| 接口名 | 功能描述 |302| 接口名 | 功能描述 |
288| --- | --- |303| --- | --- |
289| [连续对齐搬入](reg_vector_compute/reg_data_load/LoadAlign_continuous.md) | Reg矢量计算数据搬运接口,适用于从UB连续对齐搬入RegTensor。单搬入模式下,可以将数据从UB搬运到一个目的寄存器,双搬入模式下,可以将数据从UB搬运到两个目的寄存器。 |304| [连续对齐搬入](reg_vector_compute/reg_data_load/LoadAlign_continuous.md) | Reg矢量计算数据搬运接口,适用于从UB连续对齐搬入RegTensor。单搬入模式下,可以将数据从UB搬运到一个目的寄存器,双搬入模式下,可以将数据从UB搬运到两个目的寄存器。 |
@@ -297,6 +312,7 @@
297| [Move](reg_vector_compute/reg_data_load/Move.md) | 对srcReg中的有效元素逐个复制写入dstReg中对应位置处。 |312| [Move](reg_vector_compute/reg_data_load/Move.md) | 对srcReg中的有效元素逐个复制写入dstReg中对应位置处。 |
298 313 
299### MaskReg计算314### MaskReg计算
315+ 
300| 接口名 | 功能描述 |316| 接口名 | 功能描述 |
301| --- | --- |317| --- | --- |
302| [Move](reg_vector_compute/MaskReg_compute/Move.md) | 将src中的元素复制到dst中的对应位置。如果有输入mask,则仅复制被mask选定的有效元素,无效元素填0。 |318| [Move](reg_vector_compute/MaskReg_compute/Move.md) | 将src中的元素复制到dst中的对应位置。如果有输入mask,则仅复制被mask选定的有效元素,无效元素填0。 |
@@ -308,6 +324,7 @@
308| [MoveMask](reg_vector_compute/MaskReg_compute/MoveMask.md) | 从SetVectorMask设置的掩码寄存器{MASK1, MASK0}中读取Mask值,并按模板参数T对应的数据格式转换后写入返回值MaskReg。 |324| [MoveMask](reg_vector_compute/MaskReg_compute/MoveMask.md) | 从SetVectorMask设置的掩码寄存器{MASK1, MASK0}中读取Mask值,并按模板参数T对应的数据格式转换后写入返回值MaskReg。 |
309 325 
310### 基础算术326### 基础算术
327+ 
311| 接口名 | 功能描述 |328| 接口名 | 功能描述 |
312| --- | --- |329| --- | --- |
313| [Abs](reg_vector_compute/basic_arithmetic/Abs.md) | 对srcReg中的有效元素逐个取绝对值,并将结果写入dstReg对应位置。 |330| [Abs](reg_vector_compute/basic_arithmetic/Abs.md) | 对srcReg中的有效元素逐个取绝对值,并将结果写入dstReg对应位置。 |
@@ -336,6 +353,7 @@
336| [LeakyRelu](reg_vector_compute/basic_arithmetic/LeakyRelu.md) | 该接口用于按元素执行Leaky ReLU(Leaky Rectified Linear Unit)操作:当源操作数中某元素大于0时,直接将该元素写入目的操作数;否则将该元素乘以标量值scalarValue后写入目的操作数。 |353| [LeakyRelu](reg_vector_compute/basic_arithmetic/LeakyRelu.md) | 该接口用于按元素执行Leaky ReLU(Leaky Rectified Linear Unit)操作:当源操作数中某元素大于0时,直接将该元素写入目的操作数;否则将该元素乘以标量值scalarValue后写入目的操作数。 |
337 354 
338### 逻辑计算355### 逻辑计算
356+ 
339| 接口名 | 功能描述 |357| 接口名 | 功能描述 |
340| --- | --- |358| --- | --- |
341| [Not](reg_vector_compute/logical_compute/Not.md) | 本节介绍两种接口,分别用于对RegTensor和MaskReg进行有效bit进行取反运算得到结果并保存。 |359| [Not](reg_vector_compute/logical_compute/Not.md) | 本节介绍两种接口,分别用于对RegTensor和MaskReg进行有效bit进行取反运算得到结果并保存。 |
@@ -348,6 +366,7 @@
348| [ShiftRights](reg_vector_compute/logical_compute/ShiftRights.md) | 源操作数内每个元素做右移,右移的位数由输入参数scalarValue决定。 |366| [ShiftRights](reg_vector_compute/logical_compute/ShiftRights.md) | 源操作数内每个元素做右移,右移的位数由输入参数scalarValue决定。 |
349 367 
350### 复合计算368### 复合计算
369+ 
351| 接口名 | 功能描述 |370| 接口名 | 功能描述 |
352| --- | --- |371| --- | --- |
353| [Axpy](reg_vector_compute/composite_compute/Axpy.md) | 根据mask对输入数据dstReg、srcReg、scalarValue按元素做乘加操作,将结果写入dstReg。 |372| [Axpy](reg_vector_compute/composite_compute/Axpy.md) | 根据mask对输入数据dstReg、srcReg、scalarValue按元素做乘加操作,将结果写入dstReg。 |
@@ -358,6 +377,7 @@
358| [MulsCast](reg_vector_compute/composite_compute/MulsCast.md) | src与scalar相乘的结果再按照CAST_ROUND模式转换成half类型,根据mask将计算结果写入dst。 |377| [MulsCast](reg_vector_compute/composite_compute/MulsCast.md) | src与scalar相乘的结果再按照CAST_ROUND模式转换成half类型,根据mask将计算结果写入dst。 |
359 378 
360### 比较与选择379### 比较与选择
380+ 
361| 接口名 | 功能描述 |381| 接口名 | 功能描述 |
362| --- | --- |382| --- | --- |
363| [Compare](reg_vector_compute/compare_and_select/Compare.md) | 逐元素比较两个RegTensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。 |383| [Compare](reg_vector_compute/compare_and_select/Compare.md) | 逐元素比较两个RegTensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。 |
@@ -366,12 +386,14 @@
366| [Squeeze](reg_vector_compute/compare_and_select/Squeeze.md) | 将传入的srcReg中被mask选择的有效元素依次复制到dstReg中,有效元素在dstReg中从低到高连续排列。dstReg中剩余位置元素置为0。 |386| [Squeeze](reg_vector_compute/compare_and_select/Squeeze.md) | 将传入的srcReg中被mask选择的有效元素依次复制到dstReg中,有效元素在dstReg中从低到高连续排列。dstReg中剩余位置元素置为0。 |
367 387 
368### 类型转换388### 类型转换
389+ 
369| 接口名 | 功能描述 |390| 接口名 | 功能描述 |
370| --- | --- |391| --- | --- |
371| [Cast](reg_vector_compute/type_conversion/Cast.md) | Cast用于数据类型精度转换,将源操作数数据类型转换成目的操作数数据类型,能够实现浮点转整数、浮点转浮点、整数转浮点、整数转整数的数据类型转换。 |392| [Cast](reg_vector_compute/type_conversion/Cast.md) | Cast用于数据类型精度转换,将源操作数数据类型转换成目的操作数数据类型,能够实现浮点转整数、浮点转浮点、整数转浮点、整数转整数的数据类型转换。 |
372| [Truncate](reg_vector_compute/type_conversion/Truncate.md) | 将源操作数中的浮点数元素截断为整数值(保留原数据类型),并存入目的操作数。 |393| [Truncate](reg_vector_compute/type_conversion/Truncate.md) | 将源操作数中的浮点数元素截断为整数值(保留原数据类型),并存入目的操作数。 |
373 394 
374### 归约计算395### 归约计算
396+ 
375| 接口名 | 功能描述 |397| 接口名 | 功能描述 |
376| --- | --- |398| --- | --- |
377| [Reduce](reg_vector_compute/reduction_compute/Reduce.md) | 归约指令根据ReduceType,将数据集合简化为单一值或者更小的集合。 |399| [Reduce](reg_vector_compute/reduction_compute/Reduce.md) | 归约指令根据ReduceType,将数据集合简化为单一值或者更小的集合。 |
@@ -379,22 +401,26 @@
379| [PairReduceElem](reg_vector_compute/reduction_compute/PairReduceElem.md) | 将传入的srcReg中相邻两个数值相加,并将产生的结果保存在dstReg中的低位位置。 |401| [PairReduceElem](reg_vector_compute/reduction_compute/PairReduceElem.md) | 将传入的srcReg中相邻两个数值相加,并将产生的结果保存在dstReg中的低位位置。 |
380 402 
381### 数据填充403### 数据填充
404+ 
382| 接口名 | 功能描述 |405| 接口名 | 功能描述 |
383| --- | --- |406| --- | --- |
384| [Duplicate](reg_vector_compute/data_padding/Duplicate.md) | 支持Scalar和Tensor两种模式。 |407| [Duplicate](reg_vector_compute/data_padding/Duplicate.md) | 支持Scalar和Tensor两种模式。 |
385 408 
386### 离散操作409### 离散操作
410+ 
387| 接口名 | 功能描述 |411| 接口名 | 功能描述 |
388| --- | --- |412| --- | --- |
389| [Gather](reg_vector_compute/scatter_operations/Gather.md) | 该指令会根据索引值indexReg将源操作数srcReg按元素收集到目的操作数dstReg中。 |413| [Gather](reg_vector_compute/scatter_operations/Gather.md) | 该指令会根据索引值indexReg将源操作数srcReg按元素收集到目的操作数dstReg中。 |
390 414 
391### 数据重排415### 数据重排
416+ 
392| 接口名 | 功能描述 |417| 接口名 | 功能描述 |
393| --- | --- |418| --- | --- |
394| [Interleave](reg_vector_compute/data_reorder/Interleave.md) | 给定源操作数寄存器srcReg0和srcReg1,将srcReg0和srcReg1中的元素交织存入结果操作数dstReg0和dstReg1中。 |419| [Interleave](reg_vector_compute/data_reorder/Interleave.md) | 给定源操作数寄存器srcReg0和srcReg1,将srcReg0和srcReg1中的元素交织存入结果操作数dstReg0和dstReg1中。 |
395| [DeInterleave](reg_vector_compute/data_reorder/DeInterleave.md) | 给定源操作数寄存器srcReg0和srcReg1,将srcReg0和srcReg1中的元素解交织存入结果操作数dstReg0和dstReg1中。 |420| [DeInterleave](reg_vector_compute/data_reorder/DeInterleave.md) | 给定源操作数寄存器srcReg0和srcReg1,将srcReg0和srcReg1中的元素解交织存入结果操作数dstReg0和dstReg1中。 |
396 421 
397### 数据压缩422### 数据压缩
423+ 
398| 接口名 | 功能描述 |424| 接口名 | 功能描述 |
399| --- | --- |425| --- | --- |
400| [Unsqueeze](reg_vector_compute/data_compression/Unsqueeze.md) | 将dstReg中数据根据mask进行解压缩。解压缩方式:dstReg中第0个元素置为0,dstReg中的第i个元素等于mask中从第0个到第\(i-1\)个元素中1的数量。mask最高位被忽略不参与统计。 |426| [Unsqueeze](reg_vector_compute/data_compression/Unsqueeze.md) | 将dstReg中数据根据mask进行解压缩。解压缩方式:dstReg中第0个元素置为0,dstReg中的第i个元素等于mask中从第0个到第\(i-1\)个元素中1的数量。mask最高位被忽略不参与统计。 |
@@ -402,16 +428,19 @@
402| [UnPack](reg_vector_compute/data_compression/UnPack.md) | 对于无符号整型,将源操作数srcReg中低半部分或高半部分的元素以高位填0扩充位宽的方式写入dstReg。对于有符号整型,将源操作数srcReg中低半部分或高半部分的元素以保持符号位扩充位宽的方式写入dstReg。 |428| [UnPack](reg_vector_compute/data_compression/UnPack.md) | 对于无符号整型,将源操作数srcReg中低半部分或高半部分的元素以高位填0扩充位宽的方式写入dstReg。对于有符号整型,将源操作数srcReg中低半部分或高半部分的元素以保持符号位扩充位宽的方式写入dstReg。 |
403 429 
404### 直方图计算430### 直方图计算
431+ 
405| 接口名 | 功能描述 |432| 接口名 | 功能描述 |
406| --- | --- |433| --- | --- |
407| [Histograms](reg_vector_compute/histogram_compute/Histograms.md) | 对直方图数据进行统计,在目的操作数dstReg的基础数据上加上源操作数srcReg数据的统计结果,包括数据的频率统计和累计统计。 |434| [Histograms](reg_vector_compute/histogram_compute/Histograms.md) | 对直方图数据进行统计,在目的操作数dstReg的基础数据上加上源操作数srcReg数据的统计结果,包括数据的频率统计和累计统计。 |
408 435 
409### 索引操作436### 索引操作
437+ 
410| 接口名 | 功能描述 |438| 接口名 | 功能描述 |
411| --- | --- |439| --- | --- |
412| [Arange](reg_vector_compute/index_operations/Arange.md) | 该函数以传入的scalar的值为起始值,生成递增/递减的索引,并将索引保存在dstReg中。 |440| [Arange](reg_vector_compute/index_operations/Arange.md) | 该函数以传入的scalar的值为起始值,生成递增/递减的索引,并将索引保存在dstReg中。 |
413 441 
414### 同步控制442### 同步控制
443+ 
415| 接口名 | 功能描述 |444| 接口名 | 功能描述 |
416| --- | --- |445| --- | --- |
417| [LocalMemBar](reg_vector_compute/sync_control/LocalMemBar.md) | Reg矢量计算宏函数内不同流水线之间的同步指令。该同步指令指定src源流水线和dst目的流水线,目的流水线将等待源流水线上所有指令完成才进行执行。读写场景下,当读指令使用的寄存器和写指令使用的寄存器相同时,可以触发寄存器保序,指令将会按照代码顺序执行,不需要插入同步指令,而当使用的寄存器不同时,如果要确保读写指令顺序执行,则需要插入同步指令,写写场景同理。 |446| [LocalMemBar](reg_vector_compute/sync_control/LocalMemBar.md) | Reg矢量计算宏函数内不同流水线之间的同步指令。该同步指令指定src源流水线和dst目的流水线,目的流水线将等待源流水线上所有指令完成才进行执行。读写场景下,当读指令使用的寄存器和写指令使用的寄存器相同时,可以触发寄存器保序,指令将会按照代码顺序执行,不需要插入同步指令,而当使用的寄存器不同时,如果要确保读写指令顺序执行,则需要插入同步指令,写写场景同理。 |
@@ -424,11 +453,13 @@
424| [CrossCoreWaitFlag(ISASI)](sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md) | 在核间同步场景中,CrossCoreSetFlag接口和CrossCoreWaitFlag接口配对工作,具体功能请参考[CrossCoreSetFlag](sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md)。 |453| [CrossCoreWaitFlag(ISASI)](sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md) | 在核间同步场景中,CrossCoreSetFlag接口和CrossCoreWaitFlag接口配对工作,具体功能请参考[CrossCoreSetFlag](sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md)。 |
425 454 
426### 系统变量访问455### 系统变量访问
456+ 
427| 接口名 | 功能描述 |457| 接口名 | 功能描述 |
428| --- | --- |458| --- | --- |
429| [ClearSpr](reg_vector_compute/system_variable_access/ClearSpr.md) | 对指定的特殊寄存器进行清零。 |459| [ClearSpr](reg_vector_compute/system_variable_access/ClearSpr.md) | 对指定的特殊寄存器进行清零。 |
430 460 
431### 辅助数据类型461### 辅助数据类型
462+ 
432| 接口名 | 功能描述 |463| 接口名 | 功能描述 |
433| --- | --- |464| --- | --- |
434| [PostLiteral](reg_vector_compute/aux_data_types/PostLiteral.md) | enum class PostLiteral |465| [PostLiteral](reg_vector_compute/aux_data_types/PostLiteral.md) | enum class PostLiteral |
@@ -438,6 +469,7 @@
438| [RoundMode](reg_vector_compute/aux_data_types/RoundMode.md) | 控制舍入模式。 |469| [RoundMode](reg_vector_compute/aux_data_types/RoundMode.md) | 控制舍入模式。 |
439 470 
440## 标量计算471## 标量计算
472+ 
441| 接口名 | 功能描述 |473| 接口名 | 功能描述 |
442| --- | --- |474| --- | --- |
443| [GetBitCount](scalar_compute/GetBitCount.md) | 统计uint64_t类型数值的二进制表示中指定比特值(0或1)的出现次数。 |475| [GetBitCount](scalar_compute/GetBitCount.md) | 统计uint64_t类型数值的二进制表示中指定比特值(0或1)的出现次数。 |
@@ -452,6 +484,7 @@
452| [ReadGmByPassDCache(ISASI)](scalar_compute/ReadGmByPassDCache_ISASI.md) | 不经过DCache从GM地址上读数据。 |484| [ReadGmByPassDCache(ISASI)](scalar_compute/ReadGmByPassDCache_ISASI.md) | 不经过DCache从GM地址上读数据。 |
453 485 
454## 资源管理486## 资源管理
487+ 
455| 接口名 | 功能描述 |488| 接口名 | 功能描述 |
456| --- | --- |489| --- | --- |
457| [TPipe](resource_management/TPipe/TPipe.md) | TPipe是用来管理全局内存等资源的框架。通过TPipe类提供的接口可以完成内存等资源的分配管理操作。 |490| [TPipe](resource_management/TPipe/TPipe.md) | TPipe是用来管理全局内存等资源的框架。通过TPipe类提供的接口可以完成内存等资源的分配管理操作。 |
@@ -469,6 +502,7 @@
469| [PopStackBuffer](resource_management/PopStackBuffer.md) | 在指定position(逻辑位置)申请临时空间,空间大小为指定position的全部剩余空间。 |502| [PopStackBuffer](resource_management/PopStackBuffer.md) | 在指定position(逻辑位置)申请临时空间,空间大小为指定position的全部剩余空间。 |
470 503 
471## 同步控制504## 同步控制
505+ 
472| 接口名 | 功能描述 |506| 接口名 | 功能描述 |
473| --- | --- |507| --- | --- |
474| [TQueSync](sync_control/intra_core_sync/TQueSync_template_params.md) | TQueSync类提供同步控制接口,开发者可以使用这类API来自行完成同步控制。 |508| [TQueSync](sync_control/intra_core_sync/TQueSync_template_params.md) | TQueSync类提供同步控制接口,开发者可以使用这类API来自行完成同步控制。 |
@@ -482,6 +516,7 @@
482| [WaitPreTaskEnd](sync_control/inter_task_sync/WaitPreTaskEnd.md) | 在SuperKernel的子核函数(Kernel)中调用,调用前的指令可以和前序其他的子核函数(Kernel)实现并行,提升整体性能。SuperKernel按序调用子核函数(Kernel),为保证子核函数(Kernel)之间数据互不干扰,会在子核函数(Kernel)间插入算子间同步进行保序,子KernelN+1调用该接口之前的指令会和前序子KernelN实现并行。 |516| [WaitPreTaskEnd](sync_control/inter_task_sync/WaitPreTaskEnd.md) | 在SuperKernel的子核函数(Kernel)中调用,调用前的指令可以和前序其他的子核函数(Kernel)实现并行,提升整体性能。SuperKernel按序调用子核函数(Kernel),为保证子核函数(Kernel)之间数据互不干扰,会在子核函数(Kernel)间插入算子间同步进行保序,子KernelN+1调用该接口之前的指令会和前序子KernelN实现并行。 |
483 517 
484## 缓存控制518## 缓存控制
519+ 
485| 接口名 | 功能描述 |520| 接口名 | 功能描述 |
486| --- | --- |521| --- | --- |
487| [DataCachePreload](cache_control/DataCachePreload.md) | 从源地址所在的特定GM地址预加载数据到DCache中,每次调用只能预加载一个Cache Line大小的数据。 |522| [DataCachePreload](cache_control/DataCachePreload.md) | 从源地址所在的特定GM地址预加载数据到DCache中,每次调用只能预加载一个Cache Line大小的数据。 |
@@ -490,6 +525,7 @@
490| [GetICachePreloadStatus(ISASI)](cache_control/GetICachePreloadStatus_ISASI.md) | GetICachePreloadStatus为调试接口,在ICachePreLoad后调用,用于获取ICache的PreLoad的状态:当返回值为0时,说明ICache的PreLoad已完成;当返回值为1时,说明ICache的PreLoad未完成。 |525| [GetICachePreloadStatus(ISASI)](cache_control/GetICachePreloadStatus_ISASI.md) | GetICachePreloadStatus为调试接口,在ICachePreLoad后调用,用于获取ICache的PreLoad的状态:当返回值为0时,说明ICache的PreLoad已完成;当返回值为1时,说明ICache的PreLoad未完成。 |
491 526 
492## 原子操作527## 原子操作
528+ 
493| 接口名 | 功能描述 |529| 接口名 | 功能描述 |
494| --- | --- |530| --- | --- |
495| [SetAtomicAdd](atomic_operations/SetAtomicAdd.md) | 对后续目的地址为GM的数据搬运开启原子累加。原子累加过程:将待拷贝的内容和GM已有内容进行求和,然后将求和结果写入GM。SetAtomicAdd接口可通过模板参数设定不同的累加数据类型。 |531| [SetAtomicAdd](atomic_operations/SetAtomicAdd.md) | 对后续目的地址为GM的数据搬运开启原子累加。原子累加过程:将待拷贝的内容和GM已有内容进行求和,然后将求和结果写入GM。SetAtomicAdd接口可通过模板参数设定不同的累加数据类型。 |
@@ -506,6 +542,7 @@
506| [AtomicExch](atomic_operations/AtomicExch.md) | 在GM内存中执行原子交换操作。具体来说,它读取指定GM地址上的数据,并将新的值存储回同一地址。函数返回旧值。 |542| [AtomicExch](atomic_operations/AtomicExch.md) | 在GM内存中执行原子交换操作。具体来说,它读取指定GM地址上的数据,并将新的值存储回同一地址。函数返回旧值。 |
507 543 
508## 调试接口544## 调试接口
545+ 
509| 接口名 | 功能描述 |546| 接口名 | 功能描述 |
510| --- | --- |547| --- | --- |
511| [DumpTensor](debug_interface/onboard_print/DumpTensor.md) | 该接口可以打印Tensor的内容,同时支持打印自定义的标签(仅支持uint32_t数据类型的信息),比如打印当前行号等。 |548| [DumpTensor](debug_interface/onboard_print/DumpTensor.md) | 该接口可以打印Tensor的内容,同时支持打印自定义的标签(仅支持uint32_t数据类型的信息),比如打印当前行号等。 |
@@ -523,6 +560,7 @@
523| [MarkStamp](debug_interface/performance_stats/MarkStamp.md) | 用户通过调用接口,用于在算子执行过程中标记特定位置,便于后期通过流水图分析代码执行路径与性能热点。 |560| [MarkStamp](debug_interface/performance_stats/MarkStamp.md) | 用户通过调用接口,用于在算子执行过程中标记特定位置,便于后期通过流水图分析代码执行路径与性能热点。 |
524 561 
525## 工具接口562## 工具接口
563+ 
526| 接口名 | 功能描述 |564| 接口名 | 功能描述 |
527| --- | --- |565| --- | --- |
528| [Async](tool_interface/execution_mode/Async.md) | Async通过模板函数的方式对这种隔离模式进行了封装,提供了一个统一的接口,用于在不同执行单元(AIC或AIV)下执行特定函数,从而避免在代码中使用硬件条件分支。 |566| [Async](tool_interface/execution_mode/Async.md) | Async通过模板函数的方式对这种隔离模式进行了封装,提供了一个统一的接口,用于在不同执行单元(AIC或AIV)下执行特定函数,从而避免在代码中使用硬件条件分支。 |
@@ -550,6 +588,7 @@
550| [GetSubBlockIdx(ISASI)](tool_interface/system_resources_and_variables/GetSubBlockIdx_ISASI.md) | 在分离模式架构下,获取逻辑AI Core上Cube Core(AIC)或者Vector Core(AIV)的逻辑索引。 |588| [GetSubBlockIdx(ISASI)](tool_interface/system_resources_and_variables/GetSubBlockIdx_ISASI.md) | 在分离模式架构下,获取逻辑AI Core上Cube Core(AIC)或者Vector Core(AIV)的逻辑索引。 |
551 589 
552## Cube分组管理(ISASI)590## Cube分组管理(ISASI)
591+ 
553| 接口名 | 功能描述 |592| 接口名 | 功能描述 |
554| --- | --- |593| --- | --- |
555| [CreateCubeResGroup](cube_group_mgmt_ISASI/CubeResGroupHandle/CreateCubeResGroup.md) | 快速创建CubeResGroupHandle对象,内部完成消息队列空间和同步事件分配。推荐使用该接口,避免使用CubeResGroupHandle的构造函数创建对象,出现不同对象的消息队列空间冲突、同步事件错误等情况。 |594| [CreateCubeResGroup](cube_group_mgmt_ISASI/CubeResGroupHandle/CreateCubeResGroup.md) | 快速创建CubeResGroupHandle对象,内部完成消息队列空间和同步事件分配。推荐使用该接口,避免使用CubeResGroupHandle的构造函数创建对象,出现不同对象的消息队列空间冲突、同步事件错误等情况。 |
@@ -567,6 +606,7 @@
567| [GetKfcWorkspace](cube_group_mgmt_ISASI/KfcWorkspace/GetKfcWorkspace.md) | 获取用于CubeResGroupHandle消息通信区的内存地址。用户使用CubeResGroupHandle接口时,需要用此接口自主管理空间地址。 |606| [GetKfcWorkspace](cube_group_mgmt_ISASI/KfcWorkspace/GetKfcWorkspace.md) | 获取用于CubeResGroupHandle消息通信区的内存地址。用户使用CubeResGroupHandle接口时,需要用此接口自主管理空间地址。 |
568 607 
569## Kernel-Tiling608## Kernel-Tiling
609+ 
570| 接口名 | 功能描述 |610| 接口名 | 功能描述 |
571| --- | --- |611| --- | --- |
572| [GET_TILING_DATA](Kernel-Tiling/GET_TILING_DATA.md) | 用于获取算子kernel入口函数传入的Tiling信息,并填入注册的TilingData结构体中,此函数会以宏展开的方式进行编译。对应的算子host实现中需要定义TilingData结构体,实现并注册计算TilingData的Tiling函数。如果用户通过TilingData结构注册注册了多个TilingData结构体,使用该接口返回默认注册的结构体。 |612| [GET_TILING_DATA](Kernel-Tiling/GET_TILING_DATA.md) | 用于获取算子kernel入口函数传入的Tiling信息,并填入注册的TilingData结构体中,此函数会以宏展开的方式进行编译。对应的算子host实现中需要定义TilingData结构体,实现并注册计算TilingData的Tiling函数。如果用户通过TilingData结构注册注册了多个TilingData结构体,使用该接口返回默认注册的结构体。 |
@@ -583,6 +623,7 @@
583| [设置核函数(Kernel)类型](Kernel-Tiling/set_Kernel_type.md) | 用于用户自定义设置kernel类型,控制算子执行时只启动该类型的核,避免启动不需要工作的核,缩短核启动开销。 |623| [设置核函数(Kernel)类型](Kernel-Tiling/set_Kernel_type.md) | 用于用户自定义设置kernel类型,控制算子执行时只启动该类型的核,避免启动不需要工作的核,缩短核启动开销。 |
584 624 
585## 特殊寄存器访问625## 特殊寄存器访问
626+ 
586| 接口名 | 功能描述 |627| 接口名 | 功能描述 |
587| --- | --- |628| --- | --- |
588| [SetCtrlSpr(ISASI)](special_register_access/SetCtrlSpr_ISASI.md) | 对CTRL寄存器(控制寄存器)的特定比特位进行设置。 |629| [SetCtrlSpr(ISASI)](special_register_access/SetCtrlSpr_ISASI.md) | 对CTRL寄存器(控制寄存器)的特定比特位进行设置。 |
@@ -111,6 +111,7 @@ __aicore__ inline void LoadDataWithTranspose(const LocalTensor<T>& dst, const Lo
111| dstFracGap | 输入 | 每个迭代内目的操作数转置前一个分形结束地址与后一个分形起始地址的间隔,单位为512字节,仅在数据类型为float/int32_t/uint32_t/uint8_t/int8_t/int4b_t时有效。 |111| dstFracGap | 输入 | 每个迭代内目的操作数转置前一个分形结束地址与后一个分形起始地址的间隔,单位为512字节,仅在数据类型为float/int32_t/uint32_t/uint8_t/int8_t/int4b_t时有效。 |
112| srcFracGap | 输入 | 每个迭代内源操作数前一个分形结束地址与后一个分形起始地址的间隔,单位为512字节,仅在数据类型为float/int32_t/uint32_t/uint8_t/int8_t/int4b_t时有效。 |112| srcFracGap | 输入 | 每个迭代内源操作数前一个分形结束地址与后一个分形起始地址的间隔,单位为512字节,仅在数据类型为float/int32_t/uint32_t/uint8_t/int8_t/int4b_t时有效。 |
113| addrMode | 输入 | 控制地址更新方式,默认为false:<br>&nbsp;&nbsp;&bull; true:递减,每次迭代在前一个地址的基础上减去srcStride。<br>&nbsp;&nbsp;&bull; false:递增,每次迭代在前一个地址的基础上加上srcStride。 |113| addrMode | 输入 | 控制地址更新方式,默认为false:<br>&nbsp;&nbsp;&bull; true:递减,每次迭代在前一个地址的基础上减去srcStride。<br>&nbsp;&nbsp;&bull; false:递增,每次迭代在前一个地址的基础上加上srcStride。 |
114+ 
114<!-- end id13 -->115<!-- end id13 -->
115 116 
116## 数据类型<a id="zh-cn_topic_0000002543851571_section4219135304818"></a>117## 数据类型<a id="zh-cn_topic_0000002543851571_section4219135304818"></a>
@@ -264,6 +264,7 @@ LoadData(MX矩阵搬运)在搬运左右矩阵的时候,在不使能转置
264| LoadDataWithTranspose | L1 Buffer->L0B Buffer | b8(int8_t、uint8_t);<br>b16(half、bfloat16_t);<br>b32(int32_t、uint32_t、float)。 |264| LoadDataWithTranspose | L1 Buffer->L0B Buffer | b8(int8_t、uint8_t);<br>b16(half、bfloat16_t);<br>b32(int32_t、uint32_t、float)。 |
265| LoadData(卷积数据搬运) | L1 Buffer->L0A Buffer | b8(int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t);<br>b16(half、bfloat16_t);<br>b32(int32_t、uint32_t、float)。 |265| LoadData(卷积数据搬运) | L1 Buffer->L0A Buffer | b8(int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t);<br>b16(half、bfloat16_t);<br>b32(int32_t、uint32_t、float)。 |
266| LoadData(卷积数据搬运) | L1 Buffer->L0B Buffer | b8(int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t);<br>b16(half、bfloat16_t);<br>b32(int32_t、uint32_t、float)。 |266| LoadData(卷积数据搬运) | L1 Buffer->L0B Buffer | b8(int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t);<br>b16(half、bfloat16_t);<br>b32(int32_t、uint32_t、float)。 |
267+ 
267<!-- end id5 -->268<!-- end id5 -->
268 269 
269<!-- npu="950" id6 -->270<!-- npu="950" id6 -->
@@ -49,6 +49,7 @@
49| [DataCopy(GMToL1随路转换-DN2NZ搬运)](DataCopy_GMToL1_DN2NZ.md) | 从GM搬运至L1 Buffer,搬运同时完成DN到NZ格式的转换。 | GM->L1 Buffer | DN格式权重数据搬入L1 Buffer并转换为NZ格式。 |49| [DataCopy(GMToL1随路转换-DN2NZ搬运)](DataCopy_GMToL1_DN2NZ.md) | 从GM搬运至L1 Buffer,搬运同时完成DN到NZ格式的转换。 | GM->L1 Buffer | DN格式权重数据搬入L1 Buffer并转换为NZ格式。 |
50| [DataCopyPad(GMToL1非对齐数据搬运)](DataCopyPad_GMToL1.md) | 将数据从GM非对齐搬运至L1 Buffer,支持在数据左/右侧自行填充。 | GM->L1 Buffer | GM中非对齐数据搬入L1 Buffer时进行补齐。 |50| [DataCopyPad(GMToL1非对齐数据搬运)](DataCopyPad_GMToL1.md) | 将数据从GM非对齐搬运至L1 Buffer,支持在数据左/右侧自行填充。 | GM->L1 Buffer | GM中非对齐数据搬入L1 Buffer时进行补齐。 |
51| [LoadData(GMToL1-2D矩阵搬运V2)](LoadData_GMToL1_2DV2.md) | 使用2DV2指令以512B分形为单位搬运2D格式数据从GM到L1 Buffer。 | GM->L1 Buffer | 矩阵计算2D分形数据从GM搬入L1 Buffer。 |51| [LoadData(GMToL1-2D矩阵搬运V2)](LoadData_GMToL1_2DV2.md) | 使用2DV2指令以512B分形为单位搬运2D格式数据从GM到L1 Buffer。 | GM->L1 Buffer | 矩阵计算2D分形数据从GM搬入L1 Buffer。 |
52+ 
52<!-- end id2 -->53<!-- end id2 -->
53 54 
54## UB->L1 Buffer的接口分类与使用场景<a name="zh-cn_topic_0000002543771563_section_ub2l1"></a>55## UB->L1 Buffer的接口分类与使用场景<a name="zh-cn_topic_0000002543771563_section_ub2l1"></a>
@@ -87,6 +88,7 @@
87| 接口类别 | 主要功能 | 支持通路 | 典型应用场景 |88| 接口类别 | 主要功能 | 支持通路 | 典型应用场景 |
88| --- | --- | --- | --- |89| --- | --- | --- | --- |
89| [LoadDataWithSparse](LoadDataWithSparse.md) | 搬运4选2结构化稀疏矩阵计算所需的稠密化权重矩阵和索引矩阵。 | L1 Buffer->L0B Buffer | 稀疏矩阵乘法计算数据搬入。 |90| [LoadDataWithSparse](LoadDataWithSparse.md) | 搬运4选2结构化稀疏矩阵计算所需的稠密化权重矩阵和索引矩阵。 | L1 Buffer->L0B Buffer | 稀疏矩阵乘法计算数据搬入。 |
91+ 
90<!-- end id3 -->92<!-- end id3 -->
91 93 
92<!-- npu="950" id4 -->94<!-- npu="950" id4 -->
@@ -100,6 +102,7 @@
100| [LoadData(BitMode2D矩阵搬运)](LoadData_2D_BitMode.md) | LoadData(2D矩阵搬运V2)的bit模式变体,支持按位操作的数据搬运。 | L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer | 用于追求极致Scalar性能的普通矩阵数据搬运。 |102| [LoadData(BitMode2D矩阵搬运)](LoadData_2D_BitMode.md) | LoadData(2D矩阵搬运V2)的bit模式变体,支持按位操作的数据搬运。 | L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer | 用于追求极致Scalar性能的普通矩阵数据搬运。 |
101| [LoadData(MX矩阵搬运)](LoadData_2D_MX.md) | LoadData(2D矩阵搬运V2)的MX格式扩展,支持MX格式矩阵数据搬运。 | L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer | MX浮点格式的矩阵数据搬入。 |103| [LoadData(MX矩阵搬运)](LoadData_2D_MX.md) | LoadData(2D矩阵搬运V2)的MX格式扩展,支持MX格式矩阵数据搬运。 | L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer | MX浮点格式的矩阵数据搬入。 |
102| [LoadData(BitMode卷积数据搬运)](LoadData_3D_BitMode.md) | LoadData(卷积数据搬运)的bit模式变体,支持按位操作的3D数据搬运。 | L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer | 用于追求极致Scalar性能的卷积im2col展开与搬入。 |104| [LoadData(BitMode卷积数据搬运)](LoadData_3D_BitMode.md) | LoadData(卷积数据搬运)的bit模式变体,支持按位操作的3D数据搬运。 | L1 Buffer->L0A Buffer、L1 Buffer->L0B Buffer | 用于追求极致Scalar性能的卷积im2col展开与搬入。 |
105+ 
103<!-- end id4 -->106<!-- end id4 -->
104 107 
105## 辅助配置接口说明<a name="zh-cn_topic_0000002543771563_section_aux"></a>108## 辅助配置接口说明<a name="zh-cn_topic_0000002543771563_section_aux"></a>
@@ -117,6 +117,7 @@ DataCopy矩阵搬出接口支持多种随路能力的组合,需要设置不同
117| ---------- | ---------- |117| ---------- | ---------- |
118| float | int8_t、uint8_t、half、bfloat16_t、float。 |118| float | int8_t、uint8_t、half、bfloat16_t、float。 |
119| int32_t | int8_t、uint8_t、half、int32_t。 |119| int32_t | int8_t、uint8_t、half、int32_t。 |
120+ 
120<!-- end id17 -->121<!-- end id17 -->
121 122 
122<!-- npu="A3" id18 -->123<!-- npu="A3" id18 -->
@@ -126,6 +127,7 @@ DataCopy矩阵搬出接口支持多种随路能力的组合,需要设置不同
126| ---------- | ---------- |127| ---------- | ---------- |
127| float | int8_t、uint8_t、half、bfloat16_t。 |128| float | int8_t、uint8_t、half、bfloat16_t。 |
128| int32_t | int8_t、uint8_t、half。 |129| int32_t | int8_t、uint8_t、half。 |
130+ 
129<!-- end id18 -->131<!-- end id18 -->
130 132 
131<!-- npu="910b" id19 -->133<!-- npu="910b" id19 -->
@@ -135,6 +137,7 @@ DataCopy矩阵搬出接口支持多种随路能力的组合,需要设置不同
135| ---------- | ---------- |137| ---------- | ---------- |
136| float | int8_t、uint8_t、half、bfloat16_t。 |138| float | int8_t、uint8_t、half、bfloat16_t。 |
137| int32_t | int8_t、uint8_t、half。 |139| int32_t | int8_t、uint8_t、half。 |
140+ 
138<!-- end id19 -->141<!-- end id19 -->
139 142 
140<!-- npu="310b" id20 -->143<!-- npu="310b" id20 -->
@@ -144,6 +147,7 @@ DataCopy矩阵搬出接口支持多种随路能力的组合,需要设置不同
144| ---------- | ---------- |147| ---------- | ---------- |
145| float | int8_t、uint8_t、half、bfloat16_t。 |148| float | int8_t、uint8_t、half、bfloat16_t。 |
146| int32_t | int8_t、uint8_t、half。 |149| int32_t | int8_t、uint8_t、half。 |
150+ 
147<!-- end id20 -->151<!-- end id20 -->
148 152 
149## 返回值说明153## 返回值说明
@@ -187,6 +187,7 @@
187| ---------- | ---------- |187| ---------- | ---------- |
188| float | int8_t、uint8_t、hifloat8_t、fp8_e4m3fn_t、half、bfloat16_t、float。 |188| float | int8_t、uint8_t、hifloat8_t、fp8_e4m3fn_t、half、bfloat16_t、float。 |
189| int32_t | int8_t、uint8_t、half、bfloat16_t、int32_t。 |189| int32_t | int8_t、uint8_t、half、bfloat16_t、int32_t。 |
190+ 
190<!-- end id19 -->191<!-- end id19 -->
191 192 
192<!-- npu="A3" id20 -->193<!-- npu="A3" id20 -->
@@ -196,6 +197,7 @@
196| ---------- | ---------- |197| ---------- | ---------- |
197| float | int8_t、uint8_t、half、bfloat16_t、float。 |198| float | int8_t、uint8_t、half、bfloat16_t、float。 |
198| int32_t | int8_t、uint8_t、half、int32_t。 |199| int32_t | int8_t、uint8_t、half、int32_t。 |
200+ 
199<!-- end id20 -->201<!-- end id20 -->
200 202 
201<!-- npu="910b" id21 -->203<!-- npu="910b" id21 -->
@@ -205,6 +207,7 @@
205| ---------- | ---------- |207| ---------- | ---------- |
206| float | int8_t、uint8_t、half、bfloat16_t、float。 |208| float | int8_t、uint8_t、half、bfloat16_t、float。 |
207| int32_t | int8_t、uint8_t、half、int32_t。 |209| int32_t | int8_t、uint8_t、half、int32_t。 |
210+ 
208<!-- end id21 -->211<!-- end id21 -->
209 212 
210<!-- npu="310b" id22 -->213<!-- npu="310b" id22 -->
@@ -214,6 +217,7 @@
214| ---------- | ---------- |217| ---------- | ---------- |
215| float | int8_t、uint8_t、half、bfloat16_t、float。 |218| float | int8_t、uint8_t、half、bfloat16_t、float。 |
216| int32_t | int8_t、uint8_t、half、int32_t。 |219| int32_t | int8_t、uint8_t、half、int32_t。 |
220+ 
217<!-- end id22 -->221<!-- end id22 -->
218 222 
219<!-- npu="x90" id23 -->223<!-- npu="x90" id23 -->
@@ -223,6 +227,7 @@
223| ---------- | ---------- |227| ---------- | ---------- |
224| float | int8_t、half。 |228| float | int8_t、half。 |
225| int32_t | int8_t、half、int32_t。 |229| int32_t | int8_t、half、int32_t。 |
230+ 
226<!-- end id23 -->231<!-- end id23 -->
227 232 
228<!-- npu="9030" id24 -->233<!-- npu="9030" id24 -->
@@ -232,6 +237,7 @@
232| ---------- | ---------- |237| ---------- | ---------- |
233| float | half |238| float | half |
234| int32_t | half |239| int32_t | half |
240+ 
235<!-- end id24 -->241<!-- end id24 -->
236 242 
237## 返回值说明243## 返回值说明
@@ -154,6 +154,7 @@
154| ---------- | ---------- |154| ---------- | ---------- |
155| float | int8_t、uint8_t、hifloat8_t、fp8_e4m3fn_t、half、bfloat16_t、float。 |155| float | int8_t、uint8_t、hifloat8_t、fp8_e4m3fn_t、half、bfloat16_t、float。 |
156| int32_t | int8_t、uint8_t、half、bfloat16_t、int32_t。 |156| int32_t | int8_t、uint8_t、half、bfloat16_t、int32_t。 |
157+ 
157<!-- end id22 -->158<!-- end id22 -->
158 159 
159<!-- npu="A3" id23 -->160<!-- npu="A3" id23 -->
@@ -163,6 +164,7 @@
163| ---------- | ---------- |164| ---------- | ---------- |
164| float | int8_t、uint8_t、half、bfloat16_t。 |165| float | int8_t、uint8_t、half、bfloat16_t。 |
165| int32_t | int8_t、uint8_t、half。 |166| int32_t | int8_t、uint8_t、half。 |
167+ 
166<!-- end id23 -->168<!-- end id23 -->
167 169 
168<!-- npu="910b" id24 -->170<!-- npu="910b" id24 -->
@@ -172,6 +174,7 @@
172| ---------- | ---------- |174| ---------- | ---------- |
173| float | int8_t、uint8_t、half、bfloat16_t。 |175| float | int8_t、uint8_t、half、bfloat16_t。 |
174| int32_t | int8_t、uint8_t、half。 |176| int32_t | int8_t、uint8_t、half。 |
177+ 
175<!-- end id24 -->178<!-- end id24 -->
176 179 
177<!-- npu="x90" id25 -->180<!-- npu="x90" id25 -->
@@ -181,6 +184,7 @@
181| ---------- | ---------- |184| ---------- | ---------- |
182| float | int8_t、half。 |185| float | int8_t、half。 |
183| int32_t | int8_t、half。 |186| int32_t | int8_t、half。 |
187+ 
184<!-- end id25 -->188<!-- end id25 -->
185 189 
186<!-- npu="9030" id26 -->190<!-- npu="9030" id26 -->
@@ -190,6 +194,7 @@
190| ---------- | ---------- |194| ---------- | ---------- |
191| float | half |195| float | half |
192| int32_t | half |196| int32_t | half |
197+ 
193<!-- end id26 -->198<!-- end id26 -->
194 199 
195## 返回值说明200## 返回值说明
@@ -153,6 +153,7 @@ L0C Buffer到UB数据搬运提供矩阵搬出的组合接口Fixpipe,接口内
153| ---------- | ---------- |153| ---------- | ---------- |
154| float | int8_t、uint8_t、hifloat8_t、fp8_e4m3fn_t、half、bfloat16_t、float。 |154| float | int8_t、uint8_t、hifloat8_t、fp8_e4m3fn_t、half、bfloat16_t、float。 |
155| int32_t | int8_t、uint8_t、half、bfloat16_t、int32_t。 |155| int32_t | int8_t、uint8_t、half、bfloat16_t、int32_t。 |
156+ 
156<!-- end id14 -->157<!-- end id14 -->
157 158 
158<!-- npu="310b" id17 -->159<!-- npu="310b" id17 -->
@@ -162,6 +163,7 @@ L0C Buffer到UB数据搬运提供矩阵搬出的组合接口Fixpipe,接口内
162| ---------- | ---------- |163| ---------- | ---------- |
163| float | int8_t、uint8_t、half、bfloat16_t、float。 |164| float | int8_t、uint8_t、half、bfloat16_t、float。 |
164| int32_t | int8_t、uint8_t、half、int32_t。 |165| int32_t | int8_t、uint8_t、half、int32_t。 |
166+ 
165<!-- end id17 -->167<!-- end id17 -->
166 168 
167## 返回值说明169## 返回值说明
@@ -68,6 +68,7 @@ Atlas 200I/500 A2 推理产品
68| ndNum | 输入 | nd矩阵的数量,取值范围∈[1, 65535]。([具体含义图示参见NZ2ND介绍特性章节](../cube_store_key_features/NZ2ND.md)) |68| ndNum | 输入 | nd矩阵的数量,取值范围∈[1, 65535]。([具体含义图示参见NZ2ND介绍特性章节](../cube_store_key_features/NZ2ND.md)) |
69| srcNdStride | 输入 | 以分形大小为单位的源步长,源相邻nz矩阵的偏移(头与头)。当ndNum大于1时,取值范围∈[1, 512];当ndNum配置为1时,srcNdStride可配置为0,此时不生效。单位为1024B。 |69| srcNdStride | 输入 | 以分形大小为单位的源步长,源相邻nz矩阵的偏移(头与头)。当ndNum大于1时,取值范围∈[1, 512];当ndNum配置为1时,srcNdStride可配置为0,此时不生效。单位为1024B。 |
70| dstNdStride | 输入 | 目的相邻nd矩阵的偏移(头与头)。取值范围dstNdStride∈[1, 65535],单位为element元素。 |70| dstNdStride | 输入 | 目的相邻nd矩阵的偏移(头与头)。取值范围dstNdStride∈[1, 65535],单位为element元素。 |
71+ 
71<!-- end id11 -->72<!-- end id11 -->
72 73 
73<!-- npu="950" id15 -->74<!-- npu="950" id15 -->
@@ -80,6 +81,7 @@ Atlas 200I/500 A2 推理产品
80| ndNum | 输入 | nd矩阵的数量,取值范围∈[1, 65535]。([具体含义图示参见NZ2ND介绍特性章节](../cube_store_key_features/NZ2ND.md)) |81| ndNum | 输入 | nd矩阵的数量,取值范围∈[1, 65535]。([具体含义图示参见NZ2ND介绍特性章节](../cube_store_key_features/NZ2ND.md)) |
81| srcNdStride | 输入 | 以分形大小为单位的源步长,源相邻nz矩阵的偏移(头与头)。当ndNum配置为1时,srcNdStride配置为0即可,不生效。取值范围∈[0, 65535],单位为C0_SIZE。 |82| srcNdStride | 输入 | 以分形大小为单位的源步长,源相邻nz矩阵的偏移(头与头)。当ndNum配置为1时,srcNdStride配置为0即可,不生效。取值范围∈[0, 65535],单位为C0_SIZE。 |
82| dstNdStride | 输入 | 目的相邻nd矩阵的偏移(头与头)。取值范围dstNdStride∈[1, 2^32-1],单位为element元素。 |83| dstNdStride | 输入 | 目的相邻nd矩阵的偏移(头与头)。取值范围dstNdStride∈[1, 2^32-1],单位为element元素。 |
84+ 
83<!-- end id15 -->85<!-- end id15 -->
84 86 
85<!-- npu="x90,9030" id16 -->87<!-- npu="x90,9030" id16 -->
@@ -97,6 +99,7 @@ Kirin 9030 处理器系列产品
97| ndNum | 输入 | nd矩阵的数量,取值范围∈[1, 65535]。([具体含义图示参见NZ2ND介绍特性章节](../cube_store_key_features/NZ2ND.md)) |99| ndNum | 输入 | nd矩阵的数量,取值范围∈[1, 65535]。([具体含义图示参见NZ2ND介绍特性章节](../cube_store_key_features/NZ2ND.md)) |
98| srcNdStride | 输入 | 以分形大小为单位的源步长,源相邻nz矩阵的偏移(头与头)。当ndNum配置为1时,srcNdStride配置为0即可,不生效。取值范围∈[0, 65535],单位为C0_SIZE。 |100| srcNdStride | 输入 | 以分形大小为单位的源步长,源相邻nz矩阵的偏移(头与头)。当ndNum配置为1时,srcNdStride配置为0即可,不生效。取值范围∈[0, 65535],单位为C0_SIZE。 |
99| dstNdStride | 输入 | 目的相邻nd矩阵的偏移(头与头)。取值范围dstNdStride∈[0, 65535],单位为element元素。 |101| dstNdStride | 输入 | 目的相邻nd矩阵的偏移(头与头)。取值范围dstNdStride∈[0, 65535],单位为element元素。 |
102+ 
100<!-- end id16 -->103<!-- end id16 -->
101 104 
102## 数据类型105## 数据类型
@@ -56,6 +56,7 @@ VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,
56| &bull;(V)REQ8<br>&bull;(V)QF322B8_PRE<br>&bull;(V)DEQF16 | 37~45 | Offset | 9bit的整型数据,源数据乘以量化系数或者随路系数的计算结果,可以与Offset表示的整数值进行相加。若不使用offset,请置为0。<br>当模式为(V)DEQF16时,此变量为无效变量。 |56| &bull;(V)REQ8<br>&bull;(V)QF322B8_PRE<br>&bull;(V)DEQF16 | 37~45 | Offset | 9bit的整型数据,源数据乘以量化系数或者随路系数的计算结果,可以与Offset表示的整数值进行相加。若不使用offset,请置为0。<br>当模式为(V)DEQF16时,此变量为无效变量。 |
57| &bull;(V)REQ8<br>&bull;(V)QF322B8_PRE<br>&bull;(V)DEQF16 | 46 | Sign标志位 | 如果置为1,表明量化结果是signed(int8);如果置为0,表明量化结果是unsigned(uint8)。仅在(V)REQ8、(V)QF322B8_PRE中会用到。 |57| &bull;(V)REQ8<br>&bull;(V)QF322B8_PRE<br>&bull;(V)DEQF16 | 46 | Sign标志位 | 如果置为1,表明量化结果是signed(int8);如果置为0,表明量化结果是unsigned(uint8)。仅在(V)REQ8、(V)QF322B8_PRE中会用到。 |
58| &bull;(V)REQ8<br>&bull;(V)QF322B8_PRE<br>&bull;(V)DEQF16 | 47~63 | - | 无效比特位,用户无需关注。 |58| &bull;(V)REQ8<br>&bull;(V)QF322B8_PRE<br>&bull;(V)DEQF16 | 47~63 | - | 无效比特位,用户无需关注。 |
59+ 
59<!-- end id3 -->60<!-- end id3 -->
60 61 
61<!-- npu="950" id4 -->62<!-- npu="950" id4 -->
@@ -69,6 +70,7 @@ VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,
69| 同第一行 | 37~45 | Offset | 9bit整形数据,源数据乘以量化系数或者随路系数的计算结果,可以与Offset表示的整数值进行相加。若不使用offset,请置为0。当模式为(V)REQ8、(V)QF322B8_PRE时该变量生效。 |70| 同第一行 | 37~45 | Offset | 9bit整形数据,源数据乘以量化系数或者随路系数的计算结果,可以与Offset表示的整数值进行相加。若不使用offset,请置为0。当模式为(V)REQ8、(V)QF322B8_PRE时该变量生效。 |
70| 同第一行 | 46 | Sign标志位 | 如果置为1,表明量化结果是signed(int8);如果为置为0,表明量化结果是unsigned(uint8)。仅在(V)REQ8、(V)QF322B8_PRE中会用到。 |71| 同第一行 | 46 | Sign标志位 | 如果置为1,表明量化结果是signed(int8);如果为置为0,表明量化结果是unsigned(uint8)。仅在(V)REQ8、(V)QF322B8_PRE中会用到。 |
71| 同第一行 | 47~63 | - | 无效比特位,用户无需关注。 |72| 同第一行 | 47~63 | - | 无效比特位,用户无需关注。 |
73+ 
72<!-- end id4 -->74<!-- end id4 -->
73<!-- end id2 -->75<!-- end id2 -->
74 76 
@@ -12,6 +12,7 @@
12| ------------------ | --------- | ------------ |12| ------------------ | --------- | ------------ |
13| &bull;REQ8<br>&bull;DEQF16<br>&bull;QF322B8_PRE | M1=QUANT_PRE\[31:0\]<br>M2=QUANT_PRE\[31:0\]<br>M1、M2均为量化参数 | M1=QUANT_PRE\[31:0\]<br>M2=0<br>M1为量化参数、M2为Normal ReLU系数 |13| &bull;REQ8<br>&bull;DEQF16<br>&bull;QF322B8_PRE | M1=QUANT_PRE\[31:0\]<br>M2=QUANT_PRE\[31:0\]<br>M1、M2均为量化参数 | M1=QUANT_PRE\[31:0\]<br>M2=0<br>M1为量化参数、M2为Normal ReLU系数 |
14| &bull;VREQ8<br>&bull;VDEQF16<br>&bull;VQF322B8_PRE | M1=Quant_PRE_ADDR\[i\]\[31:0\]<br>M2=Quant_PRE_ADDR\[i\]\[31:0\]<br>M1、M2均为量化参数,i为原始矩阵的列索引 | M1=Quant_PRE_ADDR\[i\]\[31:0\]<br>M2=0<br>M1为量化参数,M2为Normal ReLU系数,i为原始矩阵的列索引 |14| &bull;VREQ8<br>&bull;VDEQF16<br>&bull;VQF322B8_PRE | M1=Quant_PRE_ADDR\[i\]\[31:0\]<br>M2=Quant_PRE_ADDR\[i\]\[31:0\]<br>M1、M2均为量化参数,i为原始矩阵的列索引 | M1=Quant_PRE_ADDR\[i\]\[31:0\]<br>M2=0<br>M1为量化参数,M2为Normal ReLU系数,i为原始矩阵的列索引 |
15+ 
15<!-- end id2 -->16<!-- end id2 -->
16 17 
17<!-- npu="950" id3 -->18<!-- npu="950" id3 -->
@@ -21,6 +22,7 @@
21| --- | --- | --- |22| --- | --- | --- |
22| &bull;REQ8<br>&bull;DEQF16<br>&bull;QF322B8_PRE<br>&bull;QF322FP8_PRE<br>&bull;QF322HIF8_PRE<br>&bull;QF322HIF8_PRE_HYBRID<br>&bull;QS322BF16_PRE<br>&bull;QF322F16_PRE<br>&bull;QF322BF16_PRE<br>&bull;QF322F32_PRE | M1=QUANT_PRE\[31:13\]<br>M2=QUANT_PRE\[31:13\]<br>M1、M2均为量化参数 | M1=QUANT_PRE\[31:13\]<br>M2=0<br>M1为量化参数、M2为Normal ReLU系数 |23| &bull;REQ8<br>&bull;DEQF16<br>&bull;QF322B8_PRE<br>&bull;QF322FP8_PRE<br>&bull;QF322HIF8_PRE<br>&bull;QF322HIF8_PRE_HYBRID<br>&bull;QS322BF16_PRE<br>&bull;QF322F16_PRE<br>&bull;QF322BF16_PRE<br>&bull;QF322F32_PRE | M1=QUANT_PRE\[31:13\]<br>M2=QUANT_PRE\[31:13\]<br>M1、M2均为量化参数 | M1=QUANT_PRE\[31:13\]<br>M2=0<br>M1为量化参数、M2为Normal ReLU系数 |
23| &bull;VREQ8<br>&bull;VDEQF16<br>&bull;VQF322B8_PRE<br>&bull;VQF322FP8_PRE<br>&bull;VQF322HIF8_PRE<br>&bull;VQF322HIF8_PRE_HYBRID<br>&bull;VQS322BF16_PRE<br>&bull;VQF322F16_PRE<br>&bull;VQF322BF16_PRE<br>&bull;VQF322F32_PRE | M1=Quant_PRE_ADDR\[i\]\[31:13\]<br>M2=Quant_PRE_ADDR\[i\]\[31:13\]<br>M1、M2均为量化参数,i为原始矩阵的列索引 | M1=Quant_PRE_ADDR\[i\]\[31:13\]<br>M2=0<br>M1为量化参数,M2为Normal ReLU系数,i为原始矩阵的列索引 |24| &bull;VREQ8<br>&bull;VDEQF16<br>&bull;VQF322B8_PRE<br>&bull;VQF322FP8_PRE<br>&bull;VQF322HIF8_PRE<br>&bull;VQF322HIF8_PRE_HYBRID<br>&bull;VQS322BF16_PRE<br>&bull;VQF322F16_PRE<br>&bull;VQF322BF16_PRE<br>&bull;VQF322F32_PRE | M1=Quant_PRE_ADDR\[i\]\[31:13\]<br>M2=Quant_PRE_ADDR\[i\]\[31:13\]<br>M1、M2均为量化参数,i为原始矩阵的列索引 | M1=Quant_PRE_ADDR\[i\]\[31:13\]<br>M2=0<br>M1为量化参数,M2为Normal ReLU系数,i为原始矩阵的列索引 |
25+ 
24<!-- end id3 -->26<!-- end id3 -->
25 27 
26注:M1为原始数据取值为正数时使用的随路系数,M2为原始数据取值为负数时使用的随路系数,N为右移位数,即量化系数;28注:M1为原始数据取值为正数时使用的随路系数,M2为原始数据取值为负数时使用的随路系数,N为右移位数,即量化系数;
@@ -212,6 +212,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品
212| fp8_e5m2_t | fp8_e4m3fn_t | float | float |212| fp8_e5m2_t | fp8_e4m3fn_t | float | float |
213| fp8_e5m2_t | fp8_e5m2_t | float | float |213| fp8_e5m2_t | fp8_e5m2_t | float | float |
214| hifloat8_t | hifloat8_t | float | float |214| hifloat8_t | hifloat8_t | float | float |
215+ 
215<!-- end id23 -->216<!-- end id23 -->
216 217 
217<!-- npu="A3,910b,310b" id24 -->218<!-- npu="A3,910b,310b" id24 -->
@@ -233,6 +234,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品
233| half | half | float | float |234| half | half | float | float |
234| float | float | float | float |235| float | float | float | float |
235| bfloat16_t | bfloat16_t | float | float |236| bfloat16_t | bfloat16_t | float | float |
237+ 
236<!-- end id24 -->238<!-- end id24 -->
237 239 
238<!-- npu="310p" id25 -->240<!-- npu="310p" id25 -->
@@ -246,6 +248,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品
246| half | half | half<br> 说明: <br>该精度类型组合,精度无法达到双千分之一,且后续处理器版本不支持该类型转换,建议直接使用half输入float输出。<br><br>双千分之一是指每个实际数据和真值数据之间的误差不超过千分之一,误差超过千分之一的数据总和不超过总数据数的千分之一。 |248| half | half | half<br> 说明: <br>该精度类型组合,精度无法达到双千分之一,且后续处理器版本不支持该类型转换,建议直接使用half输入float输出。<br><br>双千分之一是指每个实际数据和真值数据之间的误差不超过千分之一,误差超过千分之一的数据总和不超过总数据数的千分之一。 |
247| half | half | float |249| half | half | float |
248| int4b_t | int4b_t | int32_t |250| int4b_t | int4b_t | int32_t |
251+ 
249<!-- end id25 -->252<!-- end id25 -->
250 253 
251<!-- npu="910" id26 -->254<!-- npu="910" id26 -->
@@ -258,6 +261,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品
258| uint8_t | int8_t | int32_t |261| uint8_t | int8_t | int32_t |
259| half | half | half<br> 说明: <br>该精度类型组合,精度无法达到双千分之一,且后续处理器版本不支持该类型转换,建议直接使用half输入float输出。<br><br>双千分之一是指每个实际数据和真值数据之间的误差不超过千分之一,误差超过千分之一的数据总和不超过总数据数的千分之一。 |262| half | half | half<br> 说明: <br>该精度类型组合,精度无法达到双千分之一,且后续处理器版本不支持该类型转换,建议直接使用half输入float输出。<br><br>双千分之一是指每个实际数据和真值数据之间的误差不超过千分之一,误差超过千分之一的数据总和不超过总数据数的千分之一。 |
260| half | half | float |263| half | half | float |
264+ 
261<!-- end id26 -->265<!-- end id26 -->
262 266 
263<!-- npu="x90" id27 -->267<!-- npu="x90" id27 -->
@@ -267,6 +271,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品
267| --- | --- | --- | --- |271| --- | --- | --- | --- |
268| int8_t | int8_t | int32_t | int32_t |272| int8_t | int8_t | int32_t | int32_t |
269| half | half | half | half |273| half | half | half | half |
274+ 
270<!-- end id27 -->275<!-- end id27 -->
271 276 
272<!-- npu="9030" id28 -->277<!-- npu="9030" id28 -->
@@ -275,6 +280,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品
275| 左矩阵fm type | 右矩阵filter type | bias type | 结果矩阵dst type |280| 左矩阵fm type | 右矩阵filter type | bias type | 结果矩阵dst type |
276| --- | --- | --- | --- |281| --- | --- | --- | --- |
277| half | half | half | half |282| half | half | half | half |
283+ 
278<!-- end id28 -->284<!-- end id28 -->
279 285 
280## 返回值说明286## 返回值说明
@@ -44,6 +44,7 @@ void SetKernelMode(KernelMode mode)
44```44```
45 45 
46## 参数说明<a name="zh-cn_topic_0000001963639310_zh-cn_topic_0000001656094169_section158061867342"></a>46## 参数说明<a name="zh-cn_topic_0000001963639310_zh-cn_topic_0000001656094169_section158061867342"></a>
47+ 
47| 参数名称 | 输入/输出 | 描述 |48| 参数名称 | 输入/输出 | 描述 |
48| ------ | ------ | ------ |49| ------ | ------ | ------ |
49| mode | 输入 | 内核模式,用于AIC/AIV/MIX算子的CPU调试。<br>enum class KernelMode {&#10; MIX_MODE = 0,&#10; AIC_MODE,&#10; AIV_MODE&#10;}; |50| mode | 输入 | 内核模式,用于AIC/AIV/MIX算子的CPU调试。<br>enum class KernelMode {&#10; MIX_MODE = 0,&#10; AIC_MODE,&#10; AIV_MODE&#10;}; |
@@ -16,6 +16,7 @@ Vector计算单元专用于执行向量计算。如下图所示,高亮部分
16 | 存储单元 | 说明 | 16 | 存储单元 | 说明 |
17 | --- | --- |17 | --- | --- |
18 | Unified Buffer(UB) | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 |18 | Unified Buffer(UB) | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 |
19+ 
19<!-- end id1 -->20<!-- end id1 -->
20 21 
21<!-- npu="950" id2 -->22<!-- npu="950" id2 -->
@@ -31,6 +32,7 @@ Vector计算单元专用于执行向量计算。如下图所示,高亮部分
31 | --- | --- |32 | --- | --- |
32 | UB | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 |33 | UB | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 |
33 | SIMD Register File | AI Core内部物理存储单元,在SIMD程序中,数据从UB搬运到Register进行计算,产生的中间结果可以不用传回UB,直接在寄存器计算。 |34 | SIMD Register File | AI Core内部物理存储单元,在SIMD程序中,数据从UB搬运到Register进行计算,产生的中间结果可以不用传回UB,直接在寄存器计算。 |
35+ 
34<!-- end id2 -->36<!-- end id2 -->
35 37 
36## UB介绍<a name="ZH-CN_TOPIC_0000002574022839"></a>38## UB介绍<a name="ZH-CN_TOPIC_0000002574022839"></a>
@@ -81,6 +81,7 @@
81**表2** 参数说明81**表2** 参数说明
82 82 
83<a name="table8955841508"></a>83<a name="table8955841508"></a>
84+ 
84| 参数名称 | 输入/输出 | 含义 |85| 参数名称 | 输入/输出 | 含义 |
85| :--- | :--- | :--- |86| :--- | :--- | :--- |
86| dst | 输出 | 目的操作数。<br>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐 |87| dst | 输出 | 目的操作数。<br>类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。<br>LocalTensor的起始地址需要32字节对齐 |
@@ -185,6 +185,7 @@
185- 该接口需要与`SetDeqScale`配合使用,使用关系映射表如下:185- 该接口需要与`SetDeqScale`配合使用,使用关系映射表如下:
186 186 
187 **表** CastDequant与SetDeqScale使用关系映射表187 **表** CastDequant与SetDeqScale使用关系映射表
188+ 
188 |CastDequant使用场景|对应使用的SetDeqScale函数原型|189 |CastDequant使用场景|对应使用的SetDeqScale函数原型|
189 |---|---|190 |---|---|
190 |输入类型为int16_t,关闭向量量化模式|<br>\_\_aicore\_\_ inline void SetDeqScale(float scale, int16_t offset, bool signMode)|191 |输入类型为int16_t,关闭向量量化模式|<br>\_\_aicore\_\_ inline void SetDeqScale(float scale, int16_t offset, bool signMode)|
@@ -73,6 +73,7 @@ def CreateVecIndex(dst, firstValue, count):
73| T | 操作数数据类型。 |73| T | 操作数数据类型。 |
74 74 
75**表2** 接口参数说明75**表2** 接口参数说明
76+ 
76| 参数说明 | 输入/输出 | 含义 |77| 参数说明 | 输入/输出 | 含义 |
77| ------ | ------ | ------ |78| ------ | ------ | ------ |
78| dst | 输出 | 目的操作数,类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要按照32字节对齐。|79| dst | 输出 | 目的操作数,类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要按照32字节对齐。|
@@ -94,6 +94,7 @@ def Duplicate(scalarValue, dst, count):
94| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |94| isSetMask | 是否在接口内部设置mask。<br>&bull; true,表示在接口内部设置mask。<br>&bull; false,表示在接口外部设置mask,开发者需要使用[SetVectorMask](../mask_operations/SetVectorMask.md)接口设置mask值。这种模式下,接口入参中的mask值设置为占位符`MASK_PLACEHOLDER`,用于占位,无实际含义。 |
95 95 
96**表2** 接口参数说明96**表2** 接口参数说明
97+ 
97| 参数说明 | 输入/输出 | 含义 |98| 参数说明 | 输入/输出 | 含义 |
98| ------ | ------ | ------ |99| ------ | ------ | ------ |
99| dst | 输出 | 目的操作数,类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要按照32字节对齐。|100| dst | 输出 | 目的操作数,类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要按照32字节对齐。|
@@ -126,6 +126,7 @@
126 | `uint32_t` | `uint16_t`,`uint32_t` |126 | `uint32_t` | `uint16_t`,`uint32_t` |
127 | `half` | `half` |127 | `half` | `half` |
128 | `float` | `float` |128 | `float` | `float` |
129+ 
129<!-- end id18 -->130<!-- end id18 -->
130 131 
131<!-- npu="A3,910b,910,310p,310b,x90,9030" id19 -->132<!-- npu="A3,910b,910,310p,310b,x90,9030" id19 -->
@@ -69,6 +69,7 @@ __simd_callee__ inline void Pack(S& dstReg, V& srcReg)
69## 数据类型69## 数据类型
70 70 
71**表 3** 源操作数和目的操作数的数据类型对应表<a id="table3"></a>71**表 3** 源操作数和目的操作数的数据类型对应表<a id="table3"></a>
72+ 
72| T数据类型 | U数据类型 |73| T数据类型 | U数据类型 |
73| ------ | ------ |74| ------ | ------ |
74| uint8_t | int16_t |75| uint8_t | int16_t |
@@ -46,6 +46,7 @@ __simd_callee__ inline void UnPack(S& dstReg, V& srcReg)
46## 参数说明<a name="section622mcpsimp"></a>46## 参数说明<a name="section622mcpsimp"></a>
47 47 
48**表 1** 模板参数说明48**表 1** 模板参数说明
49+ 
49| 参数名称 | 描述 |50| 参数名称 | 描述 |
50| ------ | ------ |51| ------ | ------ |
51| T | 目的操作数数据类型。<br> 源操作数和目的操作数的数据类型约束参考见[表 源操作数和目的操作数的数据类型对应表](#table3)。|52| T | 目的操作数数据类型。<br> 源操作数和目的操作数的数据类型约束参考见[表 源操作数和目的操作数的数据类型对应表](#table3)。|
@@ -55,6 +56,7 @@ __simd_callee__ inline void UnPack(S& dstReg, V& srcReg)
55| V | 源操作数RegTensor类型。 |56| V | 源操作数RegTensor类型。 |
56 57 
57**表 2** 函数参数说明58**表 2** 函数参数说明
59+ 
58| 参数名称 | 描述 |60| 参数名称 | 描述 |
59| ------ | ------ |61| ------ | ------ |
60| dstReg | 目的操作数。<br> 类型为[RegTensor](../register_data_types/RegTensor.md)。|62| dstReg | 目的操作数。<br> 类型为[RegTensor](../register_data_types/RegTensor.md)。|
@@ -67,6 +69,7 @@ __simd_callee__ inline void UnPack(S& dstReg, V& srcReg)
67## 数据类型69## 数据类型
68 70 
69**表 3** 源操作数和目的操作数的数据类型对应表<a id="table3"></a> 71**表 3** 源操作数和目的操作数的数据类型对应表<a id="table3"></a>
72+ 
70| T数据类型 | U数据类型 |73| T数据类型 | U数据类型 |
71| ------ | ------ |74| ------ | ------ |
72| int16_t | int8_t |75| int16_t | int8_t |
@@ -75,6 +78,7 @@ __simd_callee__ inline void UnPack(S& dstReg, V& srcReg)
75| uint32_t | uint16_t |78| uint32_t | uint16_t |
76| int64_t | int32_t |79| int64_t | int32_t |
77| uint64_t | uint32_t |80| uint64_t | uint32_t |
81+ 
78## 约束说明<a name="section633mcpsimp"></a>82## 约束说明<a name="section633mcpsimp"></a>
79 83 
8084
@@ -79,6 +79,7 @@ __simd_callee__ inline void Histograms(V& dstReg, S& srcReg, MaskReg& mask)
79## 数据类型79## 数据类型
80 80 
81**表 3** 源操作数和目的操作数的数据类型对应表<a id="table3"></a> 81**表 3** 源操作数和目的操作数的数据类型对应表<a id="table3"></a>
82+ 
82| T数据类型 | U数据类型 |83| T数据类型 | U数据类型 |
83| ------ | ------ |84| ------ | ------ |
84| uint8_t | uint16_t |85| uint8_t | uint16_t |
@@ -38,6 +38,7 @@ VF融合的性能优化详细内容请参考[算子实践参考-VF融合优化](
38 38 
39## 数据搬运优化39## 数据搬运优化
40Reg矢量计算API提供了下表所示多种搬运指令,合理选择搬运接口以及利用接口能力进行优化。连续非对齐场景优化的性能优化详细内容请参考[算子实践参考-连续非对齐场景优化](../../../../../guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/continuous_unaligned_optimization.md)。40Reg矢量计算API提供了下表所示多种搬运指令,合理选择搬运接口以及利用接口能力进行优化。连续非对齐场景优化的性能优化详细内容请参考[算子实践参考-连续非对齐场景优化](../../../../../guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/continuous_unaligned_optimization.md)。
41+ 
41| 场景 | 描述 |42| 场景 | 描述 |
42| :-- | :-- | 43| :-- | :-- |
43| 连续对齐搬入(LoadAlign) | 能够实现数据从起始地址32B对齐的UB连续搬入RegTensor。 |44| 连续对齐搬入(LoadAlign) | 能够实现数据从起始地址32B对齐的UB连续搬入RegTensor。 |
@@ -171,6 +171,7 @@ RegTensor的模板参数regTrait支持RegTraitNumOne及RegTraitNumTwo,具体
171- 当RegTrait为RegTraitNumOne时,单搬出正常模式(DIST_NORM)下,若目的UB的剩余空间不足256B,需要配置mask,保证搬出的有效元素数据量不大于UB剩余空间,且UB剩余空间不得小于32B。171- 当RegTrait为RegTraitNumOne时,单搬出正常模式(DIST_NORM)下,若目的UB的剩余空间不足256B,需要配置mask,保证搬出的有效元素数据量不大于UB剩余空间,且UB剩余空间不得小于32B。
172- 单搬出模式:b64数据类型只支持StoreDist中的DIST_NORM和DIST_PACK_B64模式。172- 单搬出模式:b64数据类型只支持StoreDist中的DIST_NORM和DIST_PACK_B64模式。
173- 当RegTensor模板参数RegTrait为RegTraitNumOne和RegTraitNumTwo时,支持情况如下:173- 当RegTensor模板参数RegTrait为RegTraitNumOne和RegTraitNumTwo时,支持情况如下:
174+ 
174 | RegTensor模板参数RegTrait取值 | 支持的接口 | 支持的数据类型 |175 | RegTensor模板参数RegTrait取值 | 支持的接口 | 支持的数据类型 |
175 |-----|-----|-----|176 |-----|-----|-----|
176 | RegTraitNumOne | 所有单搬出接口和双搬出接口 | b8/b16/b32/b64 |177 | RegTraitNumOne | 所有单搬出接口和双搬出接口 | b8/b16/b32/b64 |
@@ -78,6 +78,7 @@ __aicore__ constexpr inline U Cast(T bVal)
78| ------ | ------ |78| ------ | ------ |
79| T | 操作数数据类型。 |79| T | 操作数数据类型。 |
80| U | 返回值数据类型。 |80| U | 返回值数据类型。 |
81+ 
81<!-- end id11 -->82<!-- end id11 -->
82 83 
83**表2** 接口参数说明84**表2** 接口参数说明
@@ -194,6 +194,7 @@ SyncAll硬件同步和软件同步接口的内部实现不同,约束条件也
194 | isAIVOnly=true | 14 | AIV:14 |194 | isAIVOnly=true | 14 | AIV:14 |
195 | isAIVOnly=false(核函数(Kernel)使用`__mix__(1, 1)`修饰时) | 11、12、13 | AIC:11、12、13;AIV:12、13 |195 | isAIVOnly=false(核函数(Kernel)使用`__mix__(1, 1)`修饰时) | 11、12、13 | AIC:11、12、13;AIV:12、13 |
196 | isAIVOnly=false(核函数(Kernel)使用`__mix__(1, 2)`修饰时) | 11、12、13、28、29 | AIC:11、12、13、28、29;AIV:12、13 |196 | isAIVOnly=false(核函数(Kernel)使用`__mix__(1, 2)`修饰时) | 11、12、13、28、29 | AIC:11、12、13、28、29;AIV:12、13 |
197+ 
197 <!-- end id28 -->198 <!-- end id28 -->
198 <!-- npu="A3,910b" id29 -->199 <!-- npu="A3,910b" id29 -->
199 - 针对[NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md),SyncAll硬件同步接口的flagId占用情况如表4所示:200 - 针对[NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md),SyncAll硬件同步接口的flagId占用情况如表4所示:
@@ -204,6 +205,7 @@ SyncAll硬件同步和软件同步接口的内部实现不同,约束条件也
204 | :--- | :--- | :--- |205 | :--- | :--- | :--- |
205 | isAIVOnly=true | 14 | AIV:14 |206 | isAIVOnly=true | 14 | AIV:14 |
206 | isAIVOnly=false | 11、12、13 | AIC:11、12、13;AIV:12、13 |207 | isAIVOnly=false | 11、12、13 | AIC:11、12、13;AIV:12、13 |
208+ 
207 <!-- end id29 -->209 <!-- end id29 -->
208 210 
209- 硬件同步接口和软件同步接口公共约束:使用该接口进行多核控制时,算子调用时指定的逻辑AI Core核数numBlocks必须保证不大于实际运行该算子的AI处理器核数,否则框架进行多轮调度时会插入异常同步,导致核函数(Kernel)“卡死”现象。211- 硬件同步接口和软件同步接口公共约束:使用该接口进行多核控制时,算子调用时指定的逻辑AI Core核数numBlocks必须保证不大于实际运行该算子的AI处理器核数,否则框架进行多轮调度时会插入异常同步,导致核函数(Kernel)“卡死”现象。
@@ -60,6 +60,7 @@
60| AIC | LoadData(卷积数据搬运)接口调用时Pad填充的数值 |60| AIC | LoadData(卷积数据搬运)接口调用时Pad填充的数值 |
61| AIV | Mask |61| AIV | Mask |
62| AIV | loop mode的参数 |62| AIV | loop mode的参数 |
63+ 
63<!-- end id8 -->64<!-- end id8 -->
64 65 
65<!-- npu="A3" id9 -->66<!-- npu="A3" id9 -->
@@ -72,6 +73,7 @@
72| AIC | LoadData(卷积数据搬运)接口调用时Pad填充的数值 |73| AIC | LoadData(卷积数据搬运)接口调用时Pad填充的数值 |
73| AIC | 使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值 |74| AIC | 使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值 |
74| AIV | Mask |75| AIV | Mask |
76+ 
75<!-- end id9 -->77<!-- end id9 -->
76 78 
77<!-- npu="910b" id10 -->79<!-- npu="910b" id10 -->
@@ -84,6 +86,7 @@
84| AIC | LoadData(卷积数据搬运)接口调用时Pad填充的数值 |86| AIC | LoadData(卷积数据搬运)接口调用时Pad填充的数值 |
85| AIC | 使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值 |87| AIC | 使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值 |
86| AIV | Mask |88| AIV | Mask |
89+ 
87<!-- end id10 -->90<!-- end id10 -->
88 91 
89<!-- npu="310p" id11 -->92<!-- npu="310p" id11 -->
@@ -92,6 +95,7 @@
92| 状态类别 | 初始化内容 |95| 状态类别 | 初始化内容 |
93| ---- | ---- |96| ---- | ---- |
94| 公共状态 | 原子累加状态 |97| 公共状态 | 原子累加状态 |
98+ 
95<!-- end id11 -->99<!-- end id11 -->
96 100 
97## 函数原型101## 函数原型
@@ -39,4 +39,5 @@
39| [asc_atomic_or](scalar_atomic/asc_atomic_or.md) | 对GM中的数据与指定数据执行原子或操作,即将val按位或到address指向的数据元素上。读取address指向的GM地址上的旧值(`old_value`),将旧值与输入标量值val进行按位或运算,将结果(`new_value`)写回GM地址,返回该地址修改前的值(`old_value`)。 |39| [asc_atomic_or](scalar_atomic/asc_atomic_or.md) | 对GM中的数据与指定数据执行原子或操作,即将val按位或到address指向的数据元素上。读取address指向的GM地址上的旧值(`old_value`),将旧值与输入标量值val进行按位或运算,将结果(`new_value`)写回GM地址,返回该地址修改前的值(`old_value`)。 |
40| [asc_atomic_sub](scalar_atomic/asc_atomic_sub.md) | 对GM中的数据与指定数据执行原子减操作,即将val从address指向的数据元素上减去。读取address指向的GM地址上的旧值(`old_value`),将旧值减去输入标量值val,将结果(`new_value`)写回GM地址,返回该地址修改前的值(`old_value`)。 |40| [asc_atomic_sub](scalar_atomic/asc_atomic_sub.md) | 对GM中的数据与指定数据执行原子减操作,即将val从address指向的数据元素上减去。读取address指向的GM地址上的旧值(`old_value`),将旧值减去输入标量值val,将结果(`new_value`)写回GM地址,返回该地址修改前的值(`old_value`)。 |
41| [asc_atomic_xor](scalar_atomic/asc_atomic_xor.md) | 对GM中的数据与指定数据执行原子异或操作,即将val按位异或到address指向的数据元素上。读取address指向的GM地址上的旧值(`old_value`),将旧值与输入标量值val进行按位异或运算,将结果(`new_value`)写回GM地址,返回该地址修改前的值(`old_value`)。 |41| [asc_atomic_xor](scalar_atomic/asc_atomic_xor.md) | 对GM中的数据与指定数据执行原子异或操作,即将val按位异或到address指向的数据元素上。读取address指向的GM地址上的旧值(`old_value`),将旧值与输入标量值val进行按位异或运算,将结果(`new_value`)写回GM地址,返回该地址修改前的值(`old_value`)。 |
42+ 
42<!-- end id1 -->43<!-- end id1 -->
@@ -39,6 +39,7 @@
39| --- | --- | --- | --- | --- | --- | --- |39| --- | --- | --- | --- | --- | --- | --- |
40| asc_mmad(不开启HF32) | float | float | 16 | 16 | 4 | 8 |40| asc_mmad(不开启HF32) | float | float | 16 | 16 | 4 | 8 |
41| asc_mmad(开启HF32) | float | float | 16 | 16 | 8 | 8 |41| asc_mmad(开启HF32) | float | float | 16 | 16 | 8 | 8 |
42+ 
42<!-- end id8 -->43<!-- end id8 -->
43 44 
44<!-- npu="950" id9 -->45<!-- npu="950" id9 -->
@@ -48,6 +49,7 @@
48| --- | --- | --- | --- | --- | --- | --- |49| --- | --- | --- | --- | --- | --- | --- |
49| asc_mmad(不开启HF32) | float | float | 16 | 16 | 1 | 8 |50| asc_mmad(不开启HF32) | float | float | 16 | 16 | 1 | 8 |
50| asc_mmad(开启HF32) | float | float | 16 | 16 | 8 | 8 |51| asc_mmad(开启HF32) | float | float | 16 | 16 | 8 | 8 |
52+ 
51<!-- end id9 -->53<!-- end id9 -->
52 54 
53性能计算公式如下:55性能计算公式如下:
@@ -189,6 +189,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
189| disable_gemv | 输入 | M为1时,配置是否关闭GEMV模式。<br>&nbsp;&nbsp;&bull; false:开启GEMV模式。<br>&nbsp;&nbsp;&bull; true:关闭GEMV模式。<br>M不为1时,该参数不生效。 |189| disable_gemv | 输入 | M为1时,配置是否关闭GEMV模式。<br>&nbsp;&nbsp;&bull; false:开启GEMV模式。<br>&nbsp;&nbsp;&bull; true:关闭GEMV模式。<br>M不为1时,该参数不生效。 |
190| c_matrix_source | 输入 | 仅不显式传入Bias起始地址的重载包含该参数。当参数`c_matrix_init_val`为false时,配置矩阵C的初始值来源。<br>&nbsp;&nbsp;&bull; false:矩阵C的初始值来源于L0C Buffer。<br>&nbsp;&nbsp;&bull; true:矩阵C的初始值来源于BiasTable Buffer,并固定从0地址开始读取。 |190| c_matrix_source | 输入 | 仅不显式传入Bias起始地址的重载包含该参数。当参数`c_matrix_init_val`为false时,配置矩阵C的初始值来源。<br>&nbsp;&nbsp;&bull; false:矩阵C的初始值来源于L0C Buffer。<br>&nbsp;&nbsp;&bull; true:矩阵C的初始值来源于BiasTable Buffer,并固定从0地址开始读取。 |
191| c_matrix_init_val | 输入 | 仅不显式传入Bias起始地址的重载包含该参数。配置是否将矩阵C的初始值设置为0。<br>&nbsp;&nbsp;&bull; true:将矩阵C的初始值设置为0,参数`c_matrix_source`不生效。<br>&nbsp;&nbsp;&bull; false:不执行清零操作,矩阵C的初始值由参数`c_matrix_source`配置。 |191| c_matrix_init_val | 输入 | 仅不显式传入Bias起始地址的重载包含该参数。配置是否将矩阵C的初始值设置为0。<br>&nbsp;&nbsp;&bull; true:将矩阵C的初始值设置为0,参数`c_matrix_source`不生效。<br>&nbsp;&nbsp;&bull; false:不执行清零操作,矩阵C的初始值由参数`c_matrix_source`配置。 |
192+ 
192<!-- end id14 -->193<!-- end id14 -->
193 194 
194<!-- npu="A3,910b" id15 -->195<!-- npu="A3,910b" id15 -->
@@ -206,6 +207,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
206| k_direction_align | 输入 | K方向对齐的核心功能是通过`k_direction_align`参数控制在使用float数据类型时,L0A Buffer和L0B Buffer矩阵在K方向上的对齐方式。<br>取值说明如下:<br>&nbsp;&nbsp;&bull; false:K方向对齐到`ceil(k / 8) * 8`<br>&nbsp;&nbsp;&bull; true:K方向对齐到`ceil(k / 16) * 16`。 |207| k_direction_align | 输入 | K方向对齐的核心功能是通过`k_direction_align`参数控制在使用float数据类型时,L0A Buffer和L0B Buffer矩阵在K方向上的对齐方式。<br>取值说明如下:<br>&nbsp;&nbsp;&bull; false:K方向对齐到`ceil(k / 8) * 8`<br>&nbsp;&nbsp;&bull; true:K方向对齐到`ceil(k / 16) * 16`。 |
207| c_matrix_source | 输入 | 当参数`c_matrix_init_val`为false时,配置矩阵C的初始值来源。<br>&nbsp;&nbsp;&bull; false:矩阵C的初始值来源于L0C Buffer。<br>&nbsp;&nbsp;&bull; true:矩阵C的初始值来源于BiasTable Buffer。 |208| c_matrix_source | 输入 | 当参数`c_matrix_init_val`为false时,配置矩阵C的初始值来源。<br>&nbsp;&nbsp;&bull; false:矩阵C的初始值来源于L0C Buffer。<br>&nbsp;&nbsp;&bull; true:矩阵C的初始值来源于BiasTable Buffer。 |
208| c_matrix_init_val | 输入 | 配置是否将矩阵C的初始值设置为0。<br>&nbsp;&nbsp;&bull; true:将矩阵C的初始值设置为0,参数`c_matrix_source`不生效。<br>&nbsp;&nbsp;&bull; false:不执行清零操作,矩阵C的初始值由参数`c_matrix_source`配置。 |209| c_matrix_init_val | 输入 | 配置是否将矩阵C的初始值设置为0。<br>&nbsp;&nbsp;&bull; true:将矩阵C的初始值设置为0,参数`c_matrix_source`不生效。<br>&nbsp;&nbsp;&bull; false:不执行清零操作,矩阵C的初始值由参数`c_matrix_source`配置。 |
210+ 
209<!-- end id15 -->211<!-- end id15 -->
210 212 
211## 返回值说明213## 返回值说明
@@ -86,6 +86,7 @@
86## 参数说明86## 参数说明
87 87 
88**表1** 2D格式参数说明88**表1** 2D格式参数说明
89+ 
89| 参数名 | 输入/输出 | 描述 |90| 参数名 | 输入/输出 | 描述 |
90| :--- | :--- | :--- |91| :--- | :--- | :--- |
91| dst | 输出 | 目的L0A Buffer地址。 |92| dst | 输出 | 目的L0A Buffer地址。 |
@@ -96,6 +97,7 @@
96| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |97| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |
97 98 
98**表2** 3D格式参数说明99**表2** 3D格式参数说明
100+ 
99| 参数名 | 输入/输出 | 描述 |101| 参数名 | 输入/输出 | 描述 |
100| :--- | :--- | :--- |102| :--- | :--- | :--- |
101| dst | 输出 | 目的L0A Buffer地址。 |103| dst | 输出 | 目的L0A Buffer地址。 |
@@ -80,6 +80,7 @@
80## 参数说明80## 参数说明
81 81 
82**表1** 2D格式参数说明82**表1** 2D格式参数说明
83+ 
83| 参数名 | 输入/输出 | 描述 |84| 参数名 | 输入/输出 | 描述 |
84| :--- | :--- | :--- |85| :--- | :--- | :--- |
85| dst | 输出 | 目的L0B Buffer地址。 |86| dst | 输出 | 目的L0B Buffer地址。 |
@@ -90,6 +91,7 @@
90| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |91| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |
91 92 
92**表2** 3D格式参数说明93**表2** 3D格式参数说明
94+ 
93| 参数名 | 输入/输出 | 描述 |95| 参数名 | 输入/输出 | 描述 |
94| :--- | :--- | :--- |96| :--- | :--- | :--- |
95| dst | 输出 | 目的L0B Buffer地址。 |97| dst | 输出 | 目的L0B Buffer地址。 |
@@ -47,6 +47,7 @@
47## 参数说明47## 参数说明
48 48 
49**表1** 参数说明49**表1** 参数说明
50+ 
50| 参数名 | 输入/输出 | 描述 |51| 参数名 | 输入/输出 | 描述 |
51| :--- | :--- | :--- |52| :--- | :--- | :--- |
52| dst | 输出 | 目的操作数在L0B Buffer的起始地址。 |53| dst | 输出 | 目的操作数在L0B Buffer的起始地址。 |
@@ -44,6 +44,7 @@ __aicore__ inline void asc_set_l0c2gm_config(uint64_t relu_pre, uint64_t quant_p
44| relu_pre | 输入 | ReLU操作前矢量的起始地址。|44| relu_pre | 输入 | ReLU操作前矢量的起始地址。|
45| quant_pre | 输入 | 量化操作前矢量的起始地址。|45| quant_pre | 输入 | 量化操作前矢量的起始地址。|
46| enable_unit_flag | 输入 | 是否启用unit_flag。unit_flag是一种矩阵计算指令和矩阵搬运指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。|46| enable_unit_flag | 输入 | 是否启用unit_flag。unit_flag是一种矩阵计算指令和矩阵搬运指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。|
47+ 
47## 返回值说明48## 返回值说明
48 49 
4950
@@ -185,6 +185,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
185| disable_gemv | 输入 | M为1时,配置是否关闭GEMV模式。<br>&nbsp;&nbsp;&bull; false:开启GEMV模式。<br>&nbsp;&nbsp;&bull; true:关闭GEMV模式。<br>M不为1时,该参数不生效。 |185| disable_gemv | 输入 | M为1时,配置是否关闭GEMV模式。<br>&nbsp;&nbsp;&bull; false:开启GEMV模式。<br>&nbsp;&nbsp;&bull; true:关闭GEMV模式。<br>M不为1时,该参数不生效。 |
186| c_matrix_source | 输入 | 当参数`c_matrix_init_val`为false时,配置矩阵C的初始值来源。<br>&nbsp;&nbsp;&bull; false:矩阵C的初始值来源于L0C Buffer。<br>&nbsp;&nbsp;&bull; true:矩阵C的初始值来源于BiasTable Buffer。 |186| c_matrix_source | 输入 | 当参数`c_matrix_init_val`为false时,配置矩阵C的初始值来源。<br>&nbsp;&nbsp;&bull; false:矩阵C的初始值来源于L0C Buffer。<br>&nbsp;&nbsp;&bull; true:矩阵C的初始值来源于BiasTable Buffer。 |
187| c_matrix_init_val | 输入 | 配置是否将矩阵C的初始值设置为0。<br>&nbsp;&nbsp;&bull; true:将矩阵C的初始值设置为0,参数`c_matrix_source`不生效。<br>&nbsp;&nbsp;&bull; false:不执行清零操作,矩阵C的初始值由参数`c_matrix_source`配置。 |187| c_matrix_init_val | 输入 | 配置是否将矩阵C的初始值设置为0。<br>&nbsp;&nbsp;&bull; true:将矩阵C的初始值设置为0,参数`c_matrix_source`不生效。<br>&nbsp;&nbsp;&bull; false:不执行清零操作,矩阵C的初始值由参数`c_matrix_source`配置。 |
188+ 
188<!-- end id14 -->189<!-- end id14 -->
189 190 
190<!-- npu="A3,910b" id21 -->191<!-- npu="A3,910b" id21 -->
@@ -205,6 +206,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
205| is_weight_offset | 输入 | 无效参数,用户无需关注,传入false即可。 |206| is_weight_offset | 输入 | 无效参数,用户无需关注,传入false即可。 |
206| c_matrix_source | 输入 | 当`c_matrix_init_val`为false时,配置矩阵C的初始值是否来自BiasTable Buffer。 |207| c_matrix_source | 输入 | 当`c_matrix_init_val`为false时,配置矩阵C的初始值是否来自BiasTable Buffer。 |
207| c_matrix_init_val | 输入 | 配置是否将矩阵C的初始值设置为0。 |208| c_matrix_init_val | 输入 | 配置是否将矩阵C的初始值设置为0。 |
209+ 
208<!-- end id21 -->210<!-- end id21 -->
209 211 
210## 返回值说明212## 返回值说明
@@ -66,6 +66,7 @@ __simd_callee__ inline void asc_mul_scalar(vector_half& dst,
66## 参数说明66## 参数说明
67 67 
68**表1** 参数说明68**表1** 参数说明
69+ 
69| 参数名 | 输入/输出 | 描述 |70| 参数名 | 输入/输出 | 描述 |
70| :----- | :------- | :------- |71| :----- | :------- | :------- |
71| dst | 输出 | 目的操作数(矢量数据寄存器)。 |72| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
@@ -70,6 +70,7 @@ __simd_callee__ inline void asc_gt_scalar(vector_bool& dst,
70## 参数说明70## 参数说明
71 71 
72**表1** 参数说明72**表1** 参数说明
73+ 
73| 参数名 | 输入/输出 | 描述 |74| 参数名 | 输入/输出 | 描述 |
74| ------ | -------- | -------------------------------- |75| ------ | -------- | -------------------------------- |
75| dst | 输出 | 目的操作数(掩码寄存器)。 |76| dst | 输出 | 目的操作数(掩码寄存器)。 |
@@ -61,6 +61,7 @@ __simd_callee__ inline void asc_axpy(vector_float& dst,
61## 参数说明61## 参数说明
62 62 
63**表1** 参数说明63**表1** 参数说明
64+ 
64| 参数名 | 输入/输出 | 描述 |65| 参数名 | 输入/输出 | 描述 |
65| ------- | --------- | ------------------------------------------------------------------------------------------------------------------ |66| ------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
66| dst | 输入/输出 | 目的操作数(矢量数据寄存器)。 |67| dst | 输入/输出 | 目的操作数(矢量数据寄存器)。 |
@@ -44,11 +44,13 @@ __simd_callee__ inline void asc_mem_bar(MEM_TYPE mem_type)
44## 参数说明44## 参数说明
45 45 
46**表1** 参数说明46**表1** 参数说明
47+ 
47| 参数名 | 输入/输出 | 描述 |48| 参数名 | 输入/输出 | 描述 |
48| :----- | :------- | :------- |49| :----- | :------- | :------- |
49| mem_type | 输入 | 同步流水线的类型,类型为`MEM_TYPE`,取值范围见表2 `mem_type`取值说明。 |50| mem_type | 输入 | 同步流水线的类型,类型为`MEM_TYPE`,取值范围见表2 `mem_type`取值说明。 |
50 51 
51**表2** 本接口支持的mem_type取值范围说明(源流水线/目的流水线表示的含义见表3 Reg计算流水线说明)52**表2** 本接口支持的mem_type取值范围说明(源流水线/目的流水线表示的含义见表3 Reg计算流水线说明)
53+ 
52| 值 | 源流水线 | 目的流水线 |54| 值 | 源流水线 | 目的流水线 |
53| ------ | -------- | -------- |55| ------ | -------- | -------- |
54| `VV_ALL` | `VEC_ALL` | `VEC_ALL` |56| `VV_ALL` | `VEC_ALL` | `VEC_ALL` |
@@ -65,6 +67,7 @@ __simd_callee__ inline void asc_mem_bar(MEM_TYPE mem_type)
65| `ST_VST` | `SCALAR_STORE` | `VEC_STORE` |67| `ST_VST` | `SCALAR_STORE` | `VEC_STORE` |
66 68 
67**表3** Reg计算流水线说明69**表3** Reg计算流水线说明
70+ 
68| 流水线 | 含义 |71| 流水线 | 含义 |
69| ------ | -------- |72| ------ | -------- |
70| `VEC_STORE` | `SIMD_VF`函数内矢量写UB流水线。<br>对应寄存器到UB的搬运指令,例如[asc_storealign](../store/asc_storealign.md)。 |73| `VEC_STORE` | `SIMD_VF`函数内矢量写UB流水线。<br>对应寄存器到UB的搬运指令,例如[asc_storealign](../store/asc_storealign.md)。 |
@@ -44,6 +44,7 @@
44| AIC | `asc_copy_l12l0a`进行3D格式搬运时的`Padding`填充值 | 设置为0。 |44| AIC | `asc_copy_l12l0a`进行3D格式搬运时的`Padding`填充值 | 设置为0。 |
45| AIV | `Mask` | 高位`Mask`和低位`Mask`均设置为`0xffffffffffffffff`。在`Normal`模式下,单次迭代内的所有元素均参与计算。 |45| AIV | `Mask` | 高位`Mask`和低位`Mask`均设置为`0xffffffffffffffff`。在`Normal`模式下,单次迭代内的所有元素均参与计算。 |
46| AIV | `GM->UB``UB->GM`搬运的循环次数 | 内层循环次数和外层循环次数均设置为1,恢复为普通搬运模式。 |46| AIV | `GM->UB``UB->GM`搬运的循环次数 | 内层循环次数和外层循环次数均设置为1,恢复为普通搬运模式。 |
47+ 
47<!-- end id8 -->48<!-- end id8 -->
48 49 
49<!-- npu="A3" id9 -->50<!-- npu="A3" id9 -->
@@ -55,6 +56,7 @@
55| AIV | 原子累加状态 | 清空原子累加状态,后续数据搬运不执行原子累加。 |56| AIV | 原子累加状态 | 清空原子累加状态,后续数据搬运不执行原子累加。 |
56| AIV | `Mask`工作模式 | 设置为`Normal`模式。 |57| AIV | `Mask`工作模式 | 设置为`Normal`模式。 |
57| AIV | `Mask` | 高位`Mask`和低位`Mask`均设置为`0xffffffffffffffff`。在`Normal`模式下,单次迭代内的所有元素均参与计算。 |58| AIV | `Mask` | 高位`Mask`和低位`Mask`均设置为`0xffffffffffffffff`。在`Normal`模式下,单次迭代内的所有元素均参与计算。 |
59+ 
58<!-- end id9 -->60<!-- end id9 -->
59 61 
60<!-- npu="910b" id10 -->62<!-- npu="910b" id10 -->
@@ -66,6 +68,7 @@
66| AIV | 原子累加状态 | 清空原子累加状态,后续数据搬运不执行原子累加。 |68| AIV | 原子累加状态 | 清空原子累加状态,后续数据搬运不执行原子累加。 |
67| AIV | `Mask`工作模式 | 设置为`Normal`模式。 |69| AIV | `Mask`工作模式 | 设置为`Normal`模式。 |
68| AIV | `Mask` | 高位`Mask`和低位`Mask`均设置为`0xffffffffffffffff`。在`Normal`模式下,单次迭代内的所有元素均参与计算。 |70| AIV | `Mask` | 高位`Mask`和低位`Mask`均设置为`0xffffffffffffffff`。在`Normal`模式下,单次迭代内的所有元素均参与计算。 |
71+ 
69<!-- end id10 -->72<!-- end id10 -->
70 73 
71## 函数原型74## 函数原型
@@ -69,6 +69,7 @@ __aicore__ inline void asc_exp_sync(__ubuf__ float* dst, __ubuf__ float* src, ui
69| dst_repeat_stride |输入| 目的操作数相邻迭代间相同DataBlock的地址步长。 |69| dst_repeat_stride |输入| 目的操作数相邻迭代间相同DataBlock的地址步长。 |
70| src_repeat_stride |输入| 源操作数相邻迭代间相同DataBlock的地址步长。 |70| src_repeat_stride |输入| 源操作数相邻迭代间相同DataBlock的地址步长。 |
71|count|输入|参与计算的元素个数。|71|count|输入|参与计算的元素个数。|
72+ 
72## 返回值说明73## 返回值说明
73 74 
7475
@@ -59,6 +59,7 @@ __aicore__ inline void asc_set_vector_mask(uint64_t mask_high, uint64_t mask_low
59| ------------ | ------------ | ------------ |59| ------------ | ------------ | ------------ |
60|mask_high|输入|高64位Mask值。|60|mask_high|输入|高64位Mask值。|
61|mask_low|输入|低64位Mask值。|61|mask_low|输入|低64位Mask值。|
62+ 
62<!-- end id12 -->63<!-- end id12 -->
63 64 
64<!-- npu="A3,910b" id13 -->65<!-- npu="A3,910b" id13 -->
@@ -68,6 +69,7 @@ __aicore__ inline void asc_set_vector_mask(uint64_t mask_high, uint64_t mask_low
68| ------------ | ------------ | ------------ |69| ------------ | ------------ | ------------ |
69|mask_high|输入|Normal模式:高位mask值。<br>Counter模式:需要置0,本入参不生效。|70|mask_high|输入|Normal模式:高位mask值。<br>Counter模式:需要置0,本入参不生效。|
70|mask_low|输入|Normal模式:低位mask值。<br>Counter模式:整个矢量计算过程中,参与计算的元素个数。|71|mask_low|输入|Normal模式:低位mask值。<br>Counter模式:整个矢量计算过程中,参与计算的元素个数。|
72+ 
71<!-- end id13 -->73<!-- end id13 -->
72 74 
73## 返回值说明75## 返回值说明
@@ -53,6 +53,7 @@ __aicore__ inline void asc_copy_ub2ub_sync(__ubuf__ void* dst, __ubuf__ void* sr
53## 参数说明53## 参数说明
54 54 
55**表1** 参数说明55**表1** 参数说明
56+ 
56| 参数名 | 输入/输出 | 描述 |57| 参数名 | 输入/输出 | 描述 |
57| :--- | :--- | :--- |58| :--- | :--- | :--- |
58| dst | 输出 | 目的UB地址。 |59| dst | 输出 | 目的UB地址。 |
@@ -32,6 +32,7 @@
32本功能最多能处理5个维度,每个维度都可以单独配置Stride,且支持随路Padding功能。相关配置参数有很多,需要通过不同的接口传入。32本功能最多能处理5个维度,每个维度都可以单独配置Stride,且支持随路Padding功能。相关配置参数有很多,需要通过不同的接口传入。
33 33 
34**表1** Stride配置涉及的所有参数及其传入接口,其中i表示第i维,可取值[0,4]34**表1** Stride配置涉及的所有参数及其传入接口,其中i表示第i维,可取值[0,4]
35+ 
35| 参数 | 传入接口 | 描述 |36| 参数 | 传入接口 | 描述 |
36| :--- | :------- | :--- |37| :--- | :------- | :--- |
37| loopi_size | 本接口 | 表示每个维度内,处理的元素个数(不包含Padding元素)。<br> 单位为元素个数,取值范围为[1, 2^20-1]。 |38| loopi_size | 本接口 | 表示每个维度内,处理的元素个数(不包含Padding元素)。<br> 单位为元素个数,取值范围为[1, 2^20-1]。 |
@@ -39,6 +40,7 @@
39| loopi_dst_stride | [asc_set_ndim_loopi_stride](asc_set_ndim_loop_stride.md) | 表示每个维度内,该目的操作数元素与下一个元素间的间隔。<br> 单位为元素个数,取值范围为[0, 2^20-1]。 |40| loopi_dst_stride | [asc_set_ndim_loopi_stride](asc_set_ndim_loop_stride.md) | 表示每个维度内,该目的操作数元素与下一个元素间的间隔。<br> 单位为元素个数,取值范围为[0, 2^20-1]。 |
40 41 
41**表2** Padding配置涉及的所有参数及其传入接口,其中i表示第i维,可取值[0,4]42**表2** Padding配置涉及的所有参数及其传入接口,其中i表示第i维,可取值[0,4]
43+ 
42| 参数 | 传入接口 | 描述 |44| 参数 | 传入接口 | 描述 |
43| :--- | :------- | :--- |45| :--- | :------- | :--- |
44| padding_mode | 本接口 | 表示Padding值填取方式,类型为bool。<br>&bull; true:使用常数填充方式,即所有Padding值为固定值pad_value。<br>&bull; false:使用最近值填充方式,即左右Padding值会选取当前维度最左或最右的值进行填充。 |46| padding_mode | 本接口 | 表示Padding值填取方式,类型为bool。<br>&bull; true:使用常数填充方式,即所有Padding值为固定值pad_value。<br>&bull; false:使用最近值填充方式,即左右Padding值会选取当前维度最左或最右的值进行填充。 |
@@ -28,6 +28,7 @@ Ascend C API的操作数通常为[GlobalTensor](basic_api/data_structures/Global
28**表1** TPosition与物理内存映射关系28**表1** TPosition与物理内存映射关系
29 29 
30<a name="table07372185712"></a>30<a name="table07372185712"></a>
31+ 
31| TPosition | 物理内存 |32| TPosition | 物理内存 |
32| --- | --- |33| --- | --- |
33| GM | Global Memory |34| GM | Global Memory |
@@ -53,6 +54,7 @@ AI Core上的存储单元用于存储矢量计算、矩阵计算的源操作数
53**表2** 不同存储单元的对齐要求54**表2** 不同存储单元的对齐要求
54 55 
55<a name="table16278354141117"></a>56<a name="table16278354141117"></a>
57+ 
56| 存储单元 | 对齐要求 |58| 存储单元 | 对齐要求 |
57| --- | --- |59| --- | --- |
58| Global Memory | 无对齐要求。 |60| Global Memory | 无对齐要求。 |
@@ -47,6 +47,7 @@ size_t __cvta_generic_to_global(const void* ptr)
47 47 
48输入指针指向Global Memory内存空间的地址值。48输入指针指向Global Memory内存空间的地址值。
49该接口不校验输入地址是否为可安全访问的有效地址。只有当`ptr`实际指向Global Memory内存空间时,返回值才是有效的Global Memory地址值。特殊场景说明如下:49该接口不校验输入地址是否为可安全访问的有效地址。只有当`ptr`实际指向Global Memory内存空间时,返回值才是有效的Global Memory地址值。特殊场景说明如下:
50+ 
50| 输入场景 | 返回值 |51| 输入场景 | 返回值 |
51| --- | --- |52| --- | --- |
52| `ptr``nullptr` | 返回`0`。 |53| `ptr``nullptr` | 返回`0`。 |
@@ -47,6 +47,7 @@ size_t __cvta_generic_to_local(const void* ptr)
47 47 
48输入指针指向栈空间的地址值。48输入指针指向栈空间的地址值。
49该接口不校验输入地址是否为可安全访问的有效地址。只有当`ptr`实际指向栈空间时,返回值才是有效的栈空间地址值,特殊场景说明如下:49该接口不校验输入地址是否为可安全访问的有效地址。只有当`ptr`实际指向栈空间时,返回值才是有效的栈空间地址值,特殊场景说明如下:
50+ 
50| 输入场景 | 返回值 |51| 输入场景 | 返回值 |
51| --- | --- |52| --- | --- |
52| `ptr`为Global Memory指针 | 未定义行为,返回值不是有效栈空间地址。 |53| `ptr`为Global Memory指针 | 未定义行为,返回值不是有效栈空间地址。 |
@@ -47,6 +47,7 @@ unsigned int __isGlobal(const void* ptr)
47 47 
48如果输入的指针指向Global Memory内存空间的地址,则返回1,否则返回0。 48如果输入的指针指向Global Memory内存空间的地址,则返回1,否则返回0。
49该接口根据输入指针的地址空间信息进行分类判断,不校验该指针是否为可安全访问的有效地址。`__isGlobal()`返回1仅表示该指针被分类为Global Memory地址,不代表该地址一定可以安全访问。特殊场景说明如下: 49该接口根据输入指针的地址空间信息进行分类判断,不校验该指针是否为可安全访问的有效地址。`__isGlobal()`返回1仅表示该指针被分类为Global Memory地址,不代表该地址一定可以安全访问。特殊场景说明如下:
50+ 
50| 输入场景 | 返回值 |51| 输入场景 | 返回值 |
51| --- | --- |52| --- | --- |
52| `ptr`为有效UB指针 | 0 |53| `ptr`为有效UB指针 | 0 |
@@ -47,6 +47,7 @@ unsigned int __isLocal(const void* ptr)
47 47 
48如果输入的指针指向栈空间的地址,则返回1,否则返回0。 48如果输入的指针指向栈空间的地址,则返回1,否则返回0。
49该接口根据输入指针的地址空间信息进行分类判断,不校验该指针是否为可安全访问的有效地址。`__isLocal`返回1仅表示该指针被分类为栈空间地址,不代表该地址一定可以安全访问。特殊场景说明如下: 49该接口根据输入指针的地址空间信息进行分类判断,不校验该指针是否为可安全访问的有效地址。`__isLocal`返回1仅表示该指针被分类为栈空间地址,不代表该地址一定可以安全访问。特殊场景说明如下:
50+ 
50| 输入场景 | 返回值 |51| 输入场景 | 返回值 |
51| --- | --- |52| --- | --- |
52| `ptr`为有效Global Memory指针 | 0 |53| `ptr`为有效Global Memory指针 | 0 |
@@ -47,6 +47,7 @@ unsigned int __isUbuf(const void* ptr)
47 47 
48如果输入的指针指向UB内存空间的地址,则返回1,否则返回0。<br>48如果输入的指针指向UB内存空间的地址,则返回1,否则返回0。<br>
49该接口根据输入指针的地址空间信息进行分类判断,不校验该指针是否为可安全访问的有效地址。`__isUbuf()`返回1仅表示该指针被分类为UB地址,不代表该地址一定可以安全访问。特殊场景说明如下:<br>49该接口根据输入指针的地址空间信息进行分类判断,不校验该指针是否为可安全访问的有效地址。`__isUbuf()`返回1仅表示该指针被分类为UB地址,不代表该地址一定可以安全访问。特殊场景说明如下:<br>
50+ 
50| 输入场景 | 返回值 |51| 输入场景 | 返回值 |
51| --- | --- |52| --- | --- |
52| `ptr`为有效Global Memory指针 | 0 |53| `ptr`为有效Global Memory指针 | 0 |
@@ -14,6 +14,7 @@ OpParamDef &ValueDepend(Option value_depend, DependScope scope)
14## 参数说明<a name="zh-cn_topic_0000001626329929_zh-cn_topic_0000001576875005_zh-cn_topic_0000001525424352_section75395119104"></a>14## 参数说明<a name="zh-cn_topic_0000001626329929_zh-cn_topic_0000001576875005_zh-cn_topic_0000001525424352_section75395119104"></a>
15 15 
16<a name="zh-cn_topic_0000001626329929_zh-cn_topic_0000001576875005_zh-cn_topic_0000001575944081_table111938719446"></a>16<a name="zh-cn_topic_0000001626329929_zh-cn_topic_0000001576875005_zh-cn_topic_0000001575944081_table111938719446"></a>
17+ 
17| 参数 | 输入/输出 | 说明 |18| 参数 | 输入/输出 | 说明 |
18| --- | --- | --- |19| --- | --- | --- |
19| `value_depend` | 输入 | `REQUIRED`:表示算子的输入必须是Const类型。在调用算子的[SetCheckSupport](../OpAICoreDef/SetCheckSupport.md)时,会校验算子的输入是否是Const类型。若校验通过,则将此输入的值下发到算子;否则报错。`OPTIONAL`:表示算子的输入可以是Const类型,也可以不是Const类型。如果输入是Const类型,则将输入的值下发到算子,否则不下发。 |20| `value_depend` | 输入 | `REQUIRED`:表示算子的输入必须是Const类型。在调用算子的[SetCheckSupport](../OpAICoreDef/SetCheckSupport.md)时,会校验算子的输入是否是Const类型。若校验通过,则将此输入的值下发到算子;否则报错。`OPTIONAL`:表示算子的输入可以是Const类型,也可以不是Const类型。如果输入是Const类型,则将输入的值下发到算子,否则不下发。 |
@@ -107,6 +107,7 @@ __simd_callee__ inline void asc_dump(__ubuf__ T* input, uint32_t desc, uint32_t
107## 参数说明107## 参数说明
108 108 
109**表1** 参数说明109**表1** 参数说明
110+ 
110| 参数名 | 输入/输出 | 描述 |111| 参数名 | 输入/输出 | 描述 |
111| --- | --- | --- |112| --- | --- | --- |
112| T | 输入 | 待dump的数据类型。 |113| T | 输入 | 待dump的数据类型。 |
@@ -19,6 +19,7 @@
19**表1** Memory矢量计算API流水类型汇总19**表1** Memory矢量计算API流水类型汇总
20 20 
21<a name="table132070121817"></a>21<a name="table132070121817"></a>
22+ 
22| API类型 | API接口名称 | 执行核(AIC/AIV) | 流水类型 |23| API类型 | API接口名称 | 执行核(AIC/AIV) | 流水类型 |
23| --- | --- | --- | --- |24| --- | --- | --- | --- |
24| 基础算术 | Exp | AIV | PIPE_V |25| 基础算术 | Exp | AIV | PIPE_V |
@@ -119,6 +120,7 @@
119**表2** Cube API流水类型汇总120**表2** Cube API流水类型汇总
120 121 
121<a name="table12311219174812"></a>122<a name="table12311219174812"></a>
123+ 
122| API接口名称 | 执行核(AIC/AIV) | 流水类型 |124| API接口名称 | 执行核(AIC/AIV) | 流水类型 |
123| --- | --- | --- |125| --- | --- | --- |
124| DataCopy(GM->L1) | AIC | PIPE_MTE2 |126| DataCopy(GM->L1) | AIC | PIPE_MTE2 |
@@ -171,6 +173,7 @@
171**表4** 同步指令流水类型汇总173**表4** 同步指令流水类型汇总
172 174 
173<a name="table1054353913238"></a>175<a name="table1054353913238"></a>
176+ 
174| API接口名称 | 流水类型 |177| API接口名称 | 流水类型 |
175| --- | --- |178| --- | --- |
176| SetFlag/WaitFlag | PIPE_S |179| SetFlag/WaitFlag | PIPE_S |
@@ -187,6 +190,7 @@
187**表5** 原子操作流水类型汇总190**表5** 原子操作流水类型汇总
188 191 
189<a name="table25871912193814"></a>192<a name="table25871912193814"></a>
193+ 
190| API接口名称 | 流水类型 |194| API接口名称 | 流水类型 |
191| --- | --- |195| --- | --- |
192| SetAtomicAdd | PIPE_S |196| SetAtomicAdd | PIPE_S |
@@ -205,6 +209,7 @@
205**表6** 工具接口流水类型汇总209**表6** 工具接口流水类型汇总
206 210 
207<a name="table1147331317457"></a>211<a name="table1147331317457"></a>
212+ 
208| API接口名称 | 流水类型 |213| API接口名称 | 流水类型 |
209| --- | --- |214| --- | --- |
210| InitSocState | PIPE_S |215| InitSocState | PIPE_S |
@@ -28,6 +28,7 @@
28**表1** SetAtomicAdd特殊值/边界值输入的计算结果28**表1** SetAtomicAdd特殊值/边界值输入的计算结果
29 29 
30<a name="table15675934145714"></a>30<a name="table15675934145714"></a>
31+ 
31| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |32| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
32| --- | --- | --- | --- | --- |33| --- | --- | --- | --- | --- |
33| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -inf | **-65504.0** |34| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -inf | **-65504.0** |
@@ -57,6 +58,7 @@
57**表2** SetAtomicMax特殊值/边界值输入的计算结果58**表2** SetAtomicMax特殊值/边界值输入的计算结果
58 59 
59<a name="table57228341577"></a>60<a name="table57228341577"></a>
61+ 
60| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |62| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
61| --- | --- | --- | --- | --- |63| --- | --- | --- | --- | --- |
62| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -65504.0 | -65504.0 |64| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -65504.0 | -65504.0 |
@@ -83,6 +85,7 @@
83**表3** SetAtomicMin特殊值/边界值输入的计算结果说明85**表3** SetAtomicMin特殊值/边界值输入的计算结果说明
84 86 
85<a name="table673793455714"></a>87<a name="table673793455714"></a>
88+ 
86| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(寄存器非饱和模式) | dst的元素取值<br>(寄存器饱和模式) |89| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(寄存器非饱和模式) | dst的元素取值<br>(寄存器饱和模式) |
87| --- | --- | --- | --- | --- |90| --- | --- | --- | --- | --- |
88| half | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/0.0/-0.0/inf | -65504.0 | -65504.0 |91| half | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/0.0/-0.0/inf | -65504.0 | -65504.0 |
@@ -48,6 +48,7 @@ $$
48| Mmad | float | float | 16 | 16 | 4 | 8 |48| Mmad | float | float | 16 | 16 | 4 | 8 |
49| Mmad(开启[HF32](../SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/HF32.md)) | float | float | 16 | 16 | 8 | 8 |49| Mmad(开启[HF32](../SIMD-API/basic_api/cube_compute_ISASI/mmad_compute_key_features/HF32.md)) | float | float | 16 | 16 | 8 | 8 |
50| [MmadWithSparse](../SIMD-API/basic_api/cube_compute_ISASI/mmad_compute/MmadWithSparse.md) | int8_t | int8_t | 16 | 16 | 32 | 32 |50| [MmadWithSparse](../SIMD-API/basic_api/cube_compute_ISASI/mmad_compute/MmadWithSparse.md) | int8_t | int8_t | 16 | 16 | 32 | 32 |
51+ 
51<!-- end id5 -->52<!-- end id5 -->
52 53 
53<!-- npu="950" id6 -->54<!-- npu="950" id6 -->
@@ -73,6 +74,7 @@ $$
73| MmadMx | fp8_e4m3fn_t | fp8_e5m2_t | 16 | 16 | 32 | 32 |74| MmadMx | fp8_e4m3fn_t | fp8_e5m2_t | 16 | 16 | 32 | 32 |
74| MmadMx | fp8_e5m2_t | fp8_e4m3fn_t | 16 | 16 | 32 | 32 |75| MmadMx | fp8_e5m2_t | fp8_e4m3fn_t | 16 | 16 | 32 | 32 |
75| MmadMx | fp8_e5m2_t | fp8_e5m2_t | 16 | 16 | 32 | 32 |76| MmadMx | fp8_e5m2_t | fp8_e5m2_t | 16 | 16 | 32 | 32 |
77+ 
76<!-- end id6 -->78<!-- end id6 -->
77 79 
78## 矩阵计算搬入类指令理论性能汇总80## 矩阵计算搬入类指令理论性能汇总
@@ -117,6 +119,7 @@ $$
117| 2、4、8 | 1 | $\left[\frac{512}{(strideW \times 2)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2 + 2)}\right]$(最小不会低于$\left[\frac{512}{16+2}\right]$) |119| 2、4、8 | 1 | $\left[\frac{512}{(strideW \times 2)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2 + 2)}\right]$(最小不会低于$\left[\frac{512}{16+2}\right]$) |
118| 2、4、8 | 大于1 | $\left[\frac{512}{(strideW \times 2 + n)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2 + 2 + n)}\right]$(最小不会低于$\left[\frac{512}{16+2}\right]$) |120| 2、4、8 | 大于1 | $\left[\frac{512}{(strideW \times 2 + n)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2 + 2 + n)}\right]$(最小不会低于$\left[\frac{512}{16+2}\right]$) |
119| 大于1,且不等于2、4、8 | 任意值 | 32 | $\left[\frac{512}{16+2}\right]$ |121| 大于1,且不等于2、4、8 | 任意值 | 32 | $\left[\frac{512}{16+2}\right]$ |
122+ 
120<!-- end id7 -->123<!-- end id7 -->
121 124 
122<!-- npu="950" id8 -->125<!-- npu="950" id8 -->
@@ -162,6 +165,7 @@ $$
162| 2、4、8 | 1 | $\left[\frac{512}{(strideW \times 2)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2)}\right]$(最小不会低于32) |165| 2、4、8 | 1 | $\left[\frac{512}{(strideW \times 2)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2)}\right]$(最小不会低于32) |
163| 2、4、8 | 大于1 | $\left[\frac{512}{(strideW \times 2 + n)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2 + n)}\right]$(最小不会低于32) |166| 2、4、8 | 大于1 | $\left[\frac{512}{(strideW \times 2 + n)}\right]$(最小不会低于32) | $\left[\frac{512}{(strideW \times 2 + n)}\right]$(最小不会低于32) |
164| 大于1,且不等于2、4、8 | 任意值 | 32 | 32 |167| 大于1,且不等于2、4、8 | 任意值 | 32 | 32 |
168+ 
165<!-- end id8 -->169<!-- end id8 -->
166 170 
167## 矩阵计算搬出类指令理论性能汇总171## 矩阵计算搬出类指令理论性能汇总
@@ -194,6 +198,7 @@ $$
194| L0C Buffer->L1 Buffer | float | (V)QF322B8_PRE | NZ2NZ + Channel Merge | int8_t/uint8_t | 64 | 64 |198| L0C Buffer->L1 Buffer | float | (V)QF322B8_PRE | NZ2NZ + Channel Merge | int8_t/uint8_t | 64 | 64 |
195| L0C Buffer->L1 Buffer | int32_t | (V)DEQF16 | NZ2NZ | half | 64 | 128 |199| L0C Buffer->L1 Buffer | int32_t | (V)DEQF16 | NZ2NZ | half | 64 | 128 |
196| L0C Buffer->L1 Buffer | int32_t | (V)REQ8 | NZ2NZ + Channel Merge | int8_t/uint8_t | 64 | 64 |200| L0C Buffer->L1 Buffer | int32_t | (V)REQ8 | NZ2NZ + Channel Merge | int8_t/uint8_t | 64 | 64 |
201+ 
197<!-- end id9 -->202<!-- end id9 -->
198 203 
199<!-- npu="950" id10 -->204<!-- npu="950" id10 -->
@@ -31,6 +31,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
31**表1** 浮点数计算输出inf/nan的场景31**表1** 浮点数计算输出inf/nan的场景
32 32 
33<a name="table1645210351498"></a>33<a name="table1645210351498"></a>
34+ 
34| 场景描述 | 浮点数计算输出结果 | 说明 |35| 场景描述 | 浮点数计算输出结果 | 说明 |
35| --- | --- | --- |36| --- | --- | --- |
36| **输入包含inf**<br>例外场景:<br>&bull; exp(-inf)=0<br>&bull; inf * 0 = nan<br>&bull; inf + (-inf) = nan | inf | inf区分+inf和-inf |37| **输入包含inf**<br>例外场景:<br>&bull; exp(-inf)=0<br>&bull; inf * 0 = nan<br>&bull; inf + (-inf) = nan | inf | inf区分+inf和-inf |
@@ -47,6 +48,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
47**表2** Exp特殊值/边界值输入的计算结果48**表2** Exp特殊值/边界值输入的计算结果
48 49 
49<a name="table864650154918"></a>50<a name="table864650154918"></a>
51+ 
50| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |52| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
51| --- | --- | --- | --- |53| --- | --- | --- | --- |
52| half | -65504.0(MIN) | 0.0 | 0.0 |54| half | -65504.0(MIN) | 0.0 | 0.0 |
@@ -69,6 +71,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
69**表3** Ln特殊值/边界值输入的计算结果71**表3** Ln特殊值/边界值输入的计算结果
70 72 
71<a name="table10972164142410"></a>73<a name="table10972164142410"></a>
74+ 
72| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |75| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
73| --- | --- | --- | --- |76| --- | --- | --- | --- |
74| half | -65504.0(MIN) | nan | **0.0** |77| half | -65504.0(MIN) | nan | **0.0** |
@@ -91,6 +94,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
91**表4** Abs特殊值/边界值输入的计算结果94**表4** Abs特殊值/边界值输入的计算结果
92 95 
93<a name="table1975185932512"></a>96<a name="table1975185932512"></a>
97+ 
94| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |98| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
95| --- | --- | --- | --- |99| --- | --- | --- | --- |
96| half | -65504.0(MIN) | 65504.0 | 65504.0 |100| half | -65504.0(MIN) | 65504.0 | 65504.0 |
@@ -113,6 +117,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
113**表5** Reciprocal特殊值/边界值输入的计算结果117**表5** Reciprocal特殊值/边界值输入的计算结果
114 118 
115<a name="table1046894562620"></a>119<a name="table1046894562620"></a>
120+ 
116| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |121| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
117| --- | --- | --- | --- |122| --- | --- | --- | --- |
118| half | -65504.0(MIN) | -0.000015 | -0.000015 |123| half | -65504.0(MIN) | -0.000015 | -0.000015 |
@@ -135,6 +140,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
135**表6** Sqrt特殊值/边界值输入的计算结果140**表6** Sqrt特殊值/边界值输入的计算结果
136 141 
137<a name="table1648943062718"></a>142<a name="table1648943062718"></a>
143+ 
138| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |144| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
139| --- | --- | --- | --- |145| --- | --- | --- | --- |
140| half | -65504.0(MIN) | nan | **0.0** |146| half | -65504.0(MIN) | nan | **0.0** |
@@ -157,6 +163,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
157**表7** Rsqrt特殊值/边界值输入的计算结果163**表7** Rsqrt特殊值/边界值输入的计算结果
158 164 
159<a name="table12701922112818"></a>165<a name="table12701922112818"></a>
166+ 
160| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |167| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
161| --- | --- | --- | --- |168| --- | --- | --- | --- |
162| half | -65504.0(MIN) | nan | **0.0** |169| half | -65504.0(MIN) | nan | **0.0** |
@@ -179,6 +186,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
179**表8** Relu特殊值/边界值输入的计算结果186**表8** Relu特殊值/边界值输入的计算结果
180 187 
181<a name="table135522523284"></a>188<a name="table135522523284"></a>
189+ 
182| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |190| src/dst的数据类型 | src的元素取值 | dst的元素取值(INF/NAN模式) | dst的元素取值(饱和模式) |
183| --- | --- | --- | --- |191| --- | --- | --- | --- |
184| half | -65504.0(MIN) | 0.0 | 0.0 |192| half | -65504.0(MIN) | 0.0 | 0.0 |
@@ -203,6 +211,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
203**表9** Add特殊值/边界值输入的计算结果211**表9** Add特殊值/边界值输入的计算结果
204 212 
205<a name="table071981613"></a>213<a name="table071981613"></a>
214+ 
206| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |215| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
207| --- | --- | --- | --- | --- |216| --- | --- | --- | --- | --- |
208| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -inf | **-65504.0** |217| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -inf | **-65504.0** |
@@ -259,6 +268,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
259**表10** Sub特殊值/边界值输入的计算结果268**表10** Sub特殊值/边界值输入的计算结果
260 269 
261<a name="table12357151012179"></a>270<a name="table12357151012179"></a>
271+ 
262| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |272| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
263| --- | --- | --- | --- | --- |273| --- | --- | --- | --- | --- |
264| half | -65504.0(MIN) | -65504.0(MIN) | 0.0 | 0.0 |274| half | -65504.0(MIN) | -65504.0(MIN) | 0.0 | 0.0 |
@@ -325,6 +335,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
325**表11** Mul特殊值/边界值输入的计算结果335**表11** Mul特殊值/边界值输入的计算结果
326 336 
327<a name="table89442511309"></a>337<a name="table89442511309"></a>
338+ 
328| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |339| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
329| --- | --- | --- | --- | --- |340| --- | --- | --- | --- | --- |
330| half | -65504.0(MIN) | -65504.0(MIN) | inf | **65504.0** |341| half | -65504.0(MIN) | -65504.0(MIN) | inf | **65504.0** |
@@ -383,6 +394,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
383**表12** Div特殊值/边界值输入的计算结果394**表12** Div特殊值/边界值输入的计算结果
384 395 
385<a name="table118329223319"></a>396<a name="table118329223319"></a>
397+ 
386| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |398| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
387| --- | --- | --- | --- | --- |399| --- | --- | --- | --- | --- |
388| half | -65504.0(MIN) | -65504.0(MIN) | 1.0 | 1.0 |400| half | -65504.0(MIN) | -65504.0(MIN) | 1.0 | 1.0 |
@@ -445,6 +457,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
445**表13** Max特殊值/边界值输入的计算结果457**表13** Max特殊值/边界值输入的计算结果
446 458 
447<a name="table172607531318"></a>459<a name="table172607531318"></a>
460+ 
448| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |461| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
449| --- | --- | --- | --- | --- |462| --- | --- | --- | --- | --- |
450| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -65504.0 | -65504.0 |463| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -65504.0 | -65504.0 |
@@ -495,6 +508,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
495**表14** Min特殊值/边界值输入的计算结果说明508**表14** Min特殊值/边界值输入的计算结果说明
496 509 
497<a name="table179652226325"></a>510<a name="table179652226325"></a>
511+ 
498| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(寄存器非饱和模式) | dst的元素取值<br>(寄存器饱和模式) |512| src/dst的数据类型 | src0的元素取值 | src1的元素取值 | dst的元素取值<br>(寄存器非饱和模式) | dst的元素取值<br>(寄存器饱和模式) |
499| --- | --- | --- | --- | --- |513| --- | --- | --- | --- | --- |
500| half | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/0.0/-0.0/inf | -65504.0 | -65504.0 |514| half | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/0.0/-0.0/inf | -65504.0 | -65504.0 |
@@ -545,6 +559,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
545**表15** Adds特殊值/边界值输入的计算结果559**表15** Adds特殊值/边界值输入的计算结果
546 560 
547<a name="table15619175083314"></a>561<a name="table15619175083314"></a>
562+ 
548| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |563| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
549| --- | --- | --- | --- | --- |564| --- | --- | --- | --- | --- |
550| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -inf | **-65504.0** |565| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -inf | **-65504.0** |
@@ -601,6 +616,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
601**表16** Muls特殊值/边界值输入的计算结果616**表16** Muls特殊值/边界值输入的计算结果
602 617 
603<a name="table1510462203414"></a>618<a name="table1510462203414"></a>
619+ 
604| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |620| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
605| --- | --- | --- | --- | --- |621| --- | --- | --- | --- | --- |
606| half | -65504.0(MIN) | -65504.0(MIN) | inf | **65504.0** |622| half | -65504.0(MIN) | -65504.0(MIN) | inf | **65504.0** |
@@ -659,6 +675,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
659**表17** Maxs特殊值/边界值输入的计算结果675**表17** Maxs特殊值/边界值输入的计算结果
660 676 
661<a name="table825085423412"></a>677<a name="table825085423412"></a>
678+ 
662| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |679| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
663| --- | --- | --- | --- | --- |680| --- | --- | --- | --- | --- |
664| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -65504.0 | -65504.0 |681| half | -65504.0(MIN) | -65504.0(MIN)/-inf | -65504.0 | -65504.0 |
@@ -709,6 +726,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
709**表18** Mins特殊值/边界值输入的计算结果726**表18** Mins特殊值/边界值输入的计算结果
710 727 
711<a name="table714843013511"></a>728<a name="table714843013511"></a>
729+ 
712| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |730| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
713| --- | --- | --- | --- | --- |731| --- | --- | --- | --- | --- |
714| half | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/0.0/-0.0/inf | -65504.0 | -65504.0 |732| half | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/0.0/-0.0/inf | -65504.0 | -65504.0 |
@@ -759,6 +777,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
759**表19** LeakyRelu特殊值/边界值输入的计算结果777**表19** LeakyRelu特殊值/边界值输入的计算结果
760 778 
761<a name="table2399171617392"></a>779<a name="table2399171617392"></a>
780+ 
762| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |781| src/dst的数据类型 | src的元素取值 | scalarValue取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
763| --- | --- | --- | --- | --- |782| --- | --- | --- | --- | --- |
764| half | -65504.0(MIN) | -65504.0(MIN) | inf | **65504.0** |783| half | -65504.0(MIN) | -65504.0(MIN) | inf | **65504.0** |
@@ -805,6 +824,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
805**表20** Axpy特殊值/边界值输入的计算结果824**表20** Axpy特殊值/边界值输入的计算结果
806 825 
807<a name="table1819218568247"></a>826<a name="table1819218568247"></a>
827+ 
808| src取值/scalarValue取值 | 中间阶段(src*scalarValue) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |828| src取值/scalarValue取值 | 中间阶段(src*scalarValue) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
809| --- | --- | --- | --- | --- | --- |829| --- | --- | --- | --- | --- | --- |
810| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 |830| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 |
@@ -862,6 +882,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
862**表21** MulAddDst特殊值/边界值输入的计算结果882**表21** MulAddDst特殊值/边界值输入的计算结果
863 883 
864<a name="table1042313583406"></a>884<a name="table1042313583406"></a>
885+ 
865| src0取值/src1取值 | 中间阶段(src0*src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |886| src0取值/src1取值 | 中间阶段(src0*src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
866| --- | --- | --- | --- | --- | --- |887| --- | --- | --- | --- | --- | --- |
867| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 |888| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 |
@@ -919,6 +940,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
919**表22** FusedMulAdd特殊值/边界值输入的计算结果940**表22** FusedMulAdd特殊值/边界值输入的计算结果
920 941 
921<a name="table1158211814515"></a>942<a name="table1158211814515"></a>
943+ 
922| src0取值/dst取值 | 中间阶段(src0*dst) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | src1取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |944| src0取值/dst取值 | 中间阶段(src0*dst) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | src1取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
923| --- | --- | --- | --- | --- | --- |945| --- | --- | --- | --- | --- | --- |
924| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 |946| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 |
@@ -976,6 +998,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
976**表23** MulAddRelu特殊值/边界值输入的计算结果998**表23** MulAddRelu特殊值/边界值输入的计算结果
977 999 
978<a name="table126194714473"></a>1000<a name="table126194714473"></a>
1001+ 
979| src0取值/dst取值 | 中间阶段1(src0*dst) | 中间阶段1(饱和模式,仅输出为half数据类型时支持) | src1取值 | 中间阶段2(INF/NAN模式) | 中间阶段2(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |1002| src0取值/dst取值 | 中间阶段1(src0*dst) | 中间阶段1(饱和模式,仅输出为half数据类型时支持) | src1取值 | 中间阶段2(INF/NAN模式) | 中间阶段2(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
980| --- | --- | --- | --- | --- | --- | --- | --- |1003| --- | --- | --- | --- | --- | --- | --- | --- |
981| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 | +0 | +0 |1004| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | +0 | +0 | +0 | +0 | +0 |
@@ -1033,6 +1056,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1033**表24** AddRelu特殊值/边界值输入的计算结果1056**表24** AddRelu特殊值/边界值输入的计算结果
1034 1057 
1035<a name="table143801137164310"></a>1058<a name="table143801137164310"></a>
1059+ 
1036| src0取值/src1取值 | 中间阶段(src0+src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |1060| src0取值/src1取值 | 中间阶段(src0+src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
1037| --- | --- | --- | --- | --- |1061| --- | --- | --- | --- | --- |
1038| +0/+0<br>+0/-0 | +0 | +0 | +0 | +0 |1062| +0/+0<br>+0/-0 | +0 | +0 | +0 | +0 |
@@ -1048,6 +1072,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1048**表25** SubRelu特殊值/边界值输入的计算结果1072**表25** SubRelu特殊值/边界值输入的计算结果
1049 1073 
1050<a name="table7783335111811"></a>1074<a name="table7783335111811"></a>
1075+ 
1051| src0取值/src1取值 | 中间阶段(src0-src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |1076| src0取值/src1取值 | 中间阶段(src0-src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
1052| --- | --- | --- | --- | --- |1077| --- | --- | --- | --- | --- |
1053| +0/+0<br>+0/-0 | +0 | +0 | +0 | +0 |1078| +0/+0<br>+0/-0 | +0 | +0 | +0 | +0 |
@@ -1063,6 +1088,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1063**表26** AddReluCast特殊值/边界值输入的计算结果1088**表26** AddReluCast特殊值/边界值输入的计算结果
1064 1089 
1065<a name="table494414452367"></a>1090<a name="table494414452367"></a>
1091+ 
1066| src0数据类型/src1数据类型/dst数据类型 | src0取值/src1取值 | 中间阶段1(src0+src1)(INF/NAN模式) | 中间阶段2(INF/NAN模式) | dst输出(INF/NAN模式) |1092| src0数据类型/src1数据类型/dst数据类型 | src0取值/src1取值 | 中间阶段1(src0+src1)(INF/NAN模式) | 中间阶段2(INF/NAN模式) | dst输出(INF/NAN模式) |
1067| --- | --- | --- | --- | --- |1093| --- | --- | --- | --- | --- |
1068| float/float/half | +0/+0<br>+0/-0 | +0 | +0 | +0 |1094| float/float/half | +0/+0<br>+0/-0 | +0 | +0 | +0 |
@@ -1088,6 +1114,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1088**表27** SubReluCast特殊值/边界值输入的计算结果1114**表27** SubReluCast特殊值/边界值输入的计算结果
1089 1115 
1090<a name="table1418126172917"></a>1116<a name="table1418126172917"></a>
1117+ 
1091| src0数据类型/src1数据类型/dst数据类型 | src0取值/src1取值 | 中间阶段1(src0-src1)(INF/NAN模式) | 中间阶段2(INF/NAN模式) | dst输出(INF/NAN模式) |1118| src0数据类型/src1数据类型/dst数据类型 | src0取值/src1取值 | 中间阶段1(src0-src1)(INF/NAN模式) | 中间阶段2(INF/NAN模式) | dst输出(INF/NAN模式) |
1092| --- | --- | --- | --- | --- |1119| --- | --- | --- | --- | --- |
1093| float/float/half | +0/+0<br>+0/-0<br>-0/-0 | +0 | +0 | +0 |1120| float/float/half | +0/+0<br>+0/-0<br>-0/-0 | +0 | +0 | +0 |
@@ -1113,6 +1140,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1113**表28** MulCast特殊值/边界值输入的计算结果1140**表28** MulCast特殊值/边界值输入的计算结果
1114 1141 
1115<a name="table1698216295159"></a>1142<a name="table1698216295159"></a>
1143+ 
1116| src0取值/src1取值 | 中间阶段(src0*src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |1144| src0取值/src1取值 | 中间阶段(src0*src1) | 中间阶段(饱和模式,仅输出为half数据类型时支持) | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
1117| --- | --- | --- | --- | --- |1145| --- | --- | --- | --- | --- |
1118| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | 0 | 0 |1146| +0/+0<br>-0/-0<br>+0/MAX<br>-0/MIN | +0 | +0 | 0 | 0 |
@@ -1128,6 +1156,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1128**表29** CastDequant特殊值/边界值输入的计算结果(MAX/MIN对应操作数对应数据类型下的最大值和最小值,scale=1,offset=0)1156**表29** CastDequant特殊值/边界值输入的计算结果(MAX/MIN对应操作数对应数据类型下的最大值和最小值,scale=1,offset=0)
1129 1157 
1130<a name="table18277108174810"></a>1158<a name="table18277108174810"></a>
1159+ 
1131| src数据类型/dst数据类型 | src取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |1160| src数据类型/dst数据类型 | src取值 | dst输出(INF/NAN模式) | dst输出(饱和模式,仅输出为half数据类型时支持) |
1132| --- | --- | --- | --- |1161| --- | --- | --- | --- |
1133| int32_t/half | 0 | 0 | 0 |1162| int32_t/half | 0 | 0 | 0 |
@@ -1150,6 +1179,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1150**表30** Compare特殊值/边界值输入的计算结果1179**表30** Compare特殊值/边界值输入的计算结果
1151 1180 
1152<a name="table1961220798"></a>1181<a name="table1961220798"></a>
1182+ 
1153| src数据类型/src1数据类型 | cmpMode比较模式 | src0数据类型 | src1数据类型 | dst输出数据(INF/NAN模式) | dst输出数据(饱和模式) |1183| src数据类型/src1数据类型 | cmpMode比较模式 | src0数据类型 | src1数据类型 | dst输出数据(INF/NAN模式) | dst输出数据(饱和模式) |
1154| --- | --- | --- | --- | --- | --- |1184| --- | --- | --- | --- | --- | --- |
1155| half/half | CMPMODE::EQ | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/+0/-0/nan/+inf/-inf | 1/0/0/0/0/0/0 | 1/0/0/0/0/0/0 |1185| half/half | CMPMODE::EQ | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/+0/-0/nan/+inf/-inf | 1/0/0/0/0/0/0 | 1/0/0/0/0/0/0 |
@@ -1250,6 +1280,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1250**表31** Compares特殊值/边界值输入的计算结果1280**表31** Compares特殊值/边界值输入的计算结果
1251 1281 
1252<a name="table1126411512176"></a>1282<a name="table1126411512176"></a>
1283+ 
1253| src数据类型/src1数据类型 | cmpMode比较模式 | src0数据类型 | scalar数据类型 | dst输出数据(INF/NAN模式) | dst输出数据(饱和模式) |1284| src数据类型/src1数据类型 | cmpMode比较模式 | src0数据类型 | scalar数据类型 | dst输出数据(INF/NAN模式) | dst输出数据(饱和模式) |
1254| --- | --- | --- | --- | --- | --- |1285| --- | --- | --- | --- | --- | --- |
1255| half/half | CMPMODE::EQ | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/+0/-0/nan/+inf/-inf | 1/0/0/0/0/0/0 | 1/0/0/0/0/0/0 |1286| half/half | CMPMODE::EQ | -65504.0(MIN) | -65504.0(MIN)/65504.0(MAX)/+0/-0/nan/+inf/-inf | 1/0/0/0/0/0/0 | 1/0/0/0/0/0/0 |
@@ -1354,6 +1385,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1354**表32** Cast特殊值/边界值输入的计算结果1385**表32** Cast特殊值/边界值输入的计算结果
1355 1386 
1356<a name="table1225292414418"></a>1387<a name="table1225292414418"></a>
1388+ 
1357| src数据类型/dst数据类型 | src输入数据 | dst输出数据(INF/NAN模式) | dst输出数据(饱和模式,仅输出数据类型为half、bfloat16有效) |1389| src数据类型/dst数据类型 | src输入数据 | dst输出数据(INF/NAN模式) | dst输出数据(饱和模式,仅输出数据类型为half、bfloat16有效) |
1358| --- | --- | --- | --- |1390| --- | --- | --- | --- |
1359| int4b_t/half | MIN | -8 | -8 |1391| int4b_t/half | MIN | -8 | -8 |
@@ -1480,6 +1512,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1480**表33** ReduceDataBlock<MAX\>特殊值/边界值输入的计算结果1512**表33** ReduceDataBlock<MAX\>特殊值/边界值输入的计算结果
1481 1513 
1482<a name="table2883162019243"></a>1514<a name="table2883162019243"></a>
1515+ 
1483| src/dst的数据类型 | src(1个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1516| src/dst的数据类型 | src(1个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1484| --- | --- | --- | --- |1517| --- | --- | --- | --- |
1485| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |1518| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |
@@ -1516,6 +1549,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1516**表34** ReduceDataBlock<MIN\>特殊值/边界值输入的计算结果1549**表34** ReduceDataBlock<MIN\>特殊值/边界值输入的计算结果
1517 1550 
1518<a name="table6602183015217"></a>1551<a name="table6602183015217"></a>
1552+ 
1519| src/dst的数据类型 | src(1个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1553| src/dst的数据类型 | src(1个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1520| --- | --- | --- | --- |1554| --- | --- | --- | --- |
1521| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |1555| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |
@@ -1552,6 +1586,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1552**表35** ReduceDataBlock<SUM\>特殊值/边界值输入的计算结果1586**表35** ReduceDataBlock<SUM\>特殊值/边界值输入的计算结果
1553 1587 
1554<a name="table47791758122218"></a>1588<a name="table47791758122218"></a>
1589+ 
1555| src/dst的数据类型 | src(1个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1590| src/dst的数据类型 | src(1个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1556| --- | --- | --- | --- |1591| --- | --- | --- | --- |
1557| half | 全为-65504.0(MIN) | -inf | -65504.0 |1592| half | 全为-65504.0(MIN) | -inf | -65504.0 |
@@ -1588,6 +1623,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1588**表36** ReduceRepeat<MAX\>特殊值/边界值输入的计算结果1623**表36** ReduceRepeat<MAX\>特殊值/边界值输入的计算结果
1589 1624 
1590<a name="table818992302819"></a>1625<a name="table818992302819"></a>
1626+ 
1591| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1627| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1592| --- | --- | --- | --- |1628| --- | --- | --- | --- |
1593| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |1629| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |
@@ -1624,6 +1660,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1624**表37** ReduceRepeat<MIN\>特殊值/边界值输入的计算结果1660**表37** ReduceRepeat<MIN\>特殊值/边界值输入的计算结果
1625 1661 
1626<a name="table11721236104119"></a>1662<a name="table11721236104119"></a>
1663+ 
1627| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1664| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1628| --- | --- | --- | --- |1665| --- | --- | --- | --- |
1629| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |1666| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |
@@ -1660,6 +1697,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1660**表38** ReduceRepeat<SUM\>特殊值/边界值输入的计算结果1697**表38** ReduceRepeat<SUM\>特殊值/边界值输入的计算结果
1661 1698 
1662<a name="table9281103820417"></a>1699<a name="table9281103820417"></a>
1700+ 
1663| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1701| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1664| --- | --- | --- | --- |1702| --- | --- | --- | --- |
1665| half | 全为-65504.0(MIN) | -inf | -65504.0 |1703| half | 全为-65504.0(MIN) | -inf | -65504.0 |
@@ -1696,6 +1734,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1696**表39** ReduceMax特殊值/边界值输入的计算结果1734**表39** ReduceMax特殊值/边界值输入的计算结果
1697 1735 
1698<a name="table491948105210"></a>1736<a name="table491948105210"></a>
1737+ 
1699| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1738| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1700| --- | --- | --- | --- |1739| --- | --- | --- | --- |
1701| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |1740| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |
@@ -1732,6 +1771,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1732**表40** ReduceMin特殊值/边界值输入的计算结果1771**表40** ReduceMin特殊值/边界值输入的计算结果
1733 1772 
1734<a name="table144621256001"></a>1773<a name="table144621256001"></a>
1774+ 
1735| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1775| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1736| --- | --- | --- | --- |1776| --- | --- | --- | --- |
1737| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |1777| half | 全为-65504.0(MIN) | -65504.0 | -65504.0 |
@@ -1768,6 +1808,7 @@ Memory矢量计算接口在边界值输入下,有两类输出结果:
1768**表41** ReduceSum特殊值/边界值输入的计算结果1808**表41** ReduceSum特殊值/边界值输入的计算结果
1769 1809 
1770<a name="table16600131416"></a>1810<a name="table16600131416"></a>
1811+ 
1771| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |1812| src/dst的数据类型 | src(8个DataBlock)的元素取值 | dst的元素取值<br>(INF/NAN模式) | dst的元素取值<br>(饱和模式) |
1772| --- | --- | --- | --- |1813| --- | --- | --- | --- |
1773| half | 全为-65504.0(MIN) | -inf | -65504.0 |1814| half | 全为-65504.0(MIN) | -inf | -65504.0 |
@@ -15,6 +15,7 @@
15**表1** Mmad特殊值/边界值输入的计算结果说明15**表1** Mmad特殊值/边界值输入的计算结果说明
16 16 
17<a name="table7822641411"></a>17<a name="table7822641411"></a>
18+ 
18| C矩阵的数据类型 | Mmad子阶段 | A矩阵的元素取值 | B矩阵的元素取值 | dst的元素取值<br>(INF/NAN模式) |19| C矩阵的数据类型 | Mmad子阶段 | A矩阵的元素取值 | B矩阵的元素取值 | dst的元素取值<br>(INF/NAN模式) |
19| --- | --- | --- | --- | --- |20| --- | --- | --- | --- | --- |
20| float | 乘法阶段 | +inf | norm(> 0.0)/+inf | +inf |21| float | 乘法阶段 | +inf | norm(> 0.0)/+inf | +inf |
@@ -22,6 +22,7 @@
22**表1** 数据排布转换类指令理论性能汇总22**表1** 数据排布转换类指令理论性能汇总
23 23 
24<a id="table1"></a>24<a id="table1"></a>
25+ 
25| 接口 | 理论并行度(bytes/cycle) |26| 接口 | 理论并行度(bytes/cycle) |
26| --- | --- |27| --- | --- |
27| Transpose | 256 |28| Transpose | 256 |
@@ -29,6 +30,7 @@
29**表2** 排序组合类指令理论性能汇总30**表2** 排序组合类指令理论性能汇总
30 31 
31<a id="table2"></a>32<a id="table2"></a>
33+ 
32| 接口 | 输入数据类型 | 输出数据类型 | 理论并行度(elements/cycle) |34| 接口 | 输入数据类型 | 输出数据类型 | 理论并行度(elements/cycle) |
33| --- | --- | --- | --- |35| --- | --- | --- | --- |
34| Sort32 | half | half | 2 |36| Sort32 | half | half | 2 |
@@ -39,6 +41,7 @@
39**表3** 数据搬运类指令理论性能汇总41**表3** 数据搬运类指令理论性能汇总
40 42 
41<a id="table3"></a>43<a id="table3"></a>
44+ 
42| 接口 | 理论并行度(bytes/cycle) |45| 接口 | 理论并行度(bytes/cycle) |
43| --- | --- |46| --- | --- |
44| DataCopy(UB->UB) | 256 |47| DataCopy(UB->UB) | 256 |
@@ -46,6 +49,7 @@
46**表4** 标量计算类指令理论性能汇总49**表4** 标量计算类指令理论性能汇总
47 50 
48<a id="table4"></a>51<a id="table4"></a>
52+ 
49| 接口 | 输入数据类型 | 输出数据类型 | CPI(cycles/instruction) |53| 接口 | 输入数据类型 | 输出数据类型 | CPI(cycles/instruction) |
50| --- | --- | --- | --- |54| --- | --- | --- | --- |
51| GetBitCount | uint64_t | int64_t | 1 |55| GetBitCount | uint64_t | int64_t | 1 |
@@ -60,6 +64,7 @@
60**表5** 工具接口类指令理论性能汇总64**表5** 工具接口类指令理论性能汇总
61 65 
62<a id="table5"></a>66<a id="table5"></a>
67+ 
63| 接口 | CPI(cycles/instruction) |68| 接口 | CPI(cycles/instruction) |
64| --- | --- |69| --- | --- |
65| InitSocState | 软仿指令,不涉及理论性能 |70| InitSocState | 软仿指令,不涉及理论性能 |
@@ -77,6 +82,7 @@
77| GetUBSizeInBytes | 静态编译,无消耗,与直接使用立即数行为一致。 |82| GetUBSizeInBytes | 静态编译,无消耗,与直接使用立即数行为一致。 |
78| GetRuntimeUBSize | 软仿指令,不涉及理论性能 |83| GetRuntimeUBSize | 软仿指令,不涉及理论性能 |
79| NumericLimits类接口 | 软仿指令,不涉及理论性能 |84| NumericLimits类接口 | 软仿指令,不涉及理论性能 |
85+ 
80<!-- end id5 -->86<!-- end id5 -->
81 87 
82<!-- npu="A3,910b" id6 -->88<!-- npu="A3,910b" id6 -->
@@ -91,6 +97,7 @@
91**表6** 基础算术类指令理论性能汇总97**表6** 基础算术类指令理论性能汇总
92 98 
93<a id="table6"></a>99<a id="table6"></a>
100+ 
94| 接口 | 输入/输出数据类型 | 理论并行度(elements/cycle) |101| 接口 | 输入/输出数据类型 | 理论并行度(elements/cycle) |
95| --- | --- | --- |102| --- | --- | --- |
96| Add | half | 128 |103| Add | half | 128 |
@@ -153,6 +160,7 @@
153**表7** 逻辑计算类指令理论性能汇总160**表7** 逻辑计算类指令理论性能汇总
154 161 
155<a id="table7"></a>162<a id="table7"></a>
163+ 
156| 接口 | src数据类型 | 理论并行度(elements/cycle) |164| 接口 | src数据类型 | 理论并行度(elements/cycle) |
157| --- | --- | --- |165| --- | --- | --- |
158| Not | int16_t/uint16_t | 128 |166| Not | int16_t/uint16_t | 128 |
@@ -166,6 +174,7 @@
166**表8** 复合计算类指令理论性能汇总174**表8** 复合计算类指令理论性能汇总
167 175 
168<a id="table8"></a>176<a id="table8"></a>
177+ 
169| 接口 | src0数据类型 | scalar/src1数据类型 | dst数据类型 | 理论并行度(elements/cycle) |178| 接口 | src0数据类型 | scalar/src1数据类型 | dst数据类型 | 理论并行度(elements/cycle) |
170| --- | --- | --- | --- | --- |179| --- | --- | --- | --- | --- |
171| Axpy | half | half | half | 128 |180| Axpy | half | half | half | 128 |
@@ -199,6 +208,7 @@
199**表9** 比较与选择类指令理论性能汇总208**表9** 比较与选择类指令理论性能汇总
200 209 
201<a id="table9"></a>210<a id="table9"></a>
211+ 
202| 接口 | src0数据类型 | scalar/src1数据类型 | dst数据类型 | 理论并行度(elements/cycle) |212| 接口 | src0数据类型 | scalar/src1数据类型 | dst数据类型 | 理论并行度(elements/cycle) |
203| --- | --- | --- | --- | --- |213| --- | --- | --- | --- | --- |
204| Compare | half | half | uint8_t、int8_t | 128 |214| Compare | half | half | uint8_t、int8_t | 128 |
@@ -224,6 +234,7 @@
224**表10** 类型转换类指令理论性能汇总234**表10** 类型转换类指令理论性能汇总
225 235 
226<a id="table10"></a>236<a id="table10"></a>
237+ 
227| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |238| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |
228| --- | --- | --- | --- |239| --- | --- | --- | --- |
229| Cast | int4b_t | half | 128 |240| Cast | int4b_t | half | 128 |
@@ -244,6 +255,7 @@
244**表11** 归约计算类指令理论性能汇总255**表11** 归约计算类指令理论性能汇总
245 256 
246<a id="table11"></a>257<a id="table11"></a>
258+ 
247| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |259| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |
248| --- | --- | --- | --- |260| --- | --- | --- | --- |
249| ReduceDataBlock | half | half | 128/7 |261| ReduceDataBlock | half | half | 128/7 |
@@ -257,6 +269,7 @@
257**表12** 数据排布转换类指令理论性能汇总269**表12** 数据排布转换类指令理论性能汇总
258 270 
259<a id="table12"></a>271<a id="table12"></a>
272+ 
260| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |273| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |
261| --- | --- | --- | --- |274| --- | --- | --- | --- |
262| Transpose | int8_t/uint8_t | int8_t/uint8_t | 256 |275| Transpose | int8_t/uint8_t | int8_t/uint8_t | 256 |
@@ -269,6 +282,7 @@
269**表13** 数据填充类指令理论性能汇总282**表13** 数据填充类指令理论性能汇总
270 283 
271<a id="table13"></a>284<a id="table13"></a>
285+ 
272| 接口 | src数据类型 | dst数据类型 | 理论输入并行度(elements/cycle) | 理论输出并行度(elements/cycle) |286| 接口 | src数据类型 | dst数据类型 | 理论输入并行度(elements/cycle) | 理论输出并行度(elements/cycle) |
273| --- | --- | --- | --- | --- |287| --- | --- | --- | --- | --- |
274| Brcb | int16_t/uint16_t/half/bfloat16_t | int16_t/uint16_t/half/bfloat16_t | 8 | 128 |288| Brcb | int16_t/uint16_t/half/bfloat16_t | int16_t/uint16_t/half/bfloat16_t | 8 | 128 |
@@ -281,6 +295,7 @@
281**表14** 排序组合类指令理论性能汇总295**表14** 排序组合类指令理论性能汇总
282 296 
283<a id="table14"></a>297<a id="table14"></a>
298+ 
284| 接口 | dst数据类型 | 理论并行度(elements/cycle) |299| 接口 | dst数据类型 | 理论并行度(elements/cycle) |
285| --- | --- | --- |300| --- | --- | --- |
286| Sort32 | half | 2 |301| Sort32 | half | 2 |
@@ -291,6 +306,7 @@
291**表15** 离散与聚合类指令理论性能汇总306**表15** 离散与聚合类指令理论性能汇总
292 307 
293<a id="table15"></a>308<a id="table15"></a>
309+ 
294| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |310| 接口 | src数据类型 | dst数据类型 | 理论并行度(elements/cycle) |
295| --- | --- | --- | --- |311| --- | --- | --- | --- |
296| Gather | int16_t/uint16_t/half/bfloat16_t/int32_t/uint32_t/float | int16_t/uint16_t/half/bfloat16_t/int32_t/uint32_t/float | 5 |312| Gather | int16_t/uint16_t/half/bfloat16_t/int32_t/uint32_t/float | int16_t/uint16_t/half/bfloat16_t/int32_t/uint32_t/float | 5 |
@@ -300,6 +316,7 @@
300**表16** 掩码操作类指令理论性能汇总316**表16** 掩码操作类指令理论性能汇总
301 317 
302<a id="table16"></a>318<a id="table16"></a>
319+ 
303| 接口 | 输入数据类型 | 理论并行度(elements/cycle) |320| 接口 | 输入数据类型 | 理论并行度(elements/cycle) |
304| --- | --- | --- |321| --- | --- | --- |
305| SetMaskCount | - | 1 |322| SetMaskCount | - | 1 |
@@ -311,6 +328,7 @@
311**表17** 标量计算类指令理论性能汇总328**表17** 标量计算类指令理论性能汇总
312 329 
313<a id="table17"></a>330<a id="table17"></a>
331+ 
314| 接口 | 输入数据类型 | 输出数据类型 | CPI(cycles/instruction) |332| 接口 | 输入数据类型 | 输出数据类型 | CPI(cycles/instruction) |
315| --- | --- | --- | --- |333| --- | --- | --- | --- |
316| GetBitCount | uint64_t | int64_t | 1 |334| GetBitCount | uint64_t | int64_t | 1 |
@@ -324,6 +342,7 @@
324**表18** 工具接口类指令理论性能汇总342**表18** 工具接口类指令理论性能汇总
325 343 
326<a id="table18"></a>344<a id="table18"></a>
345+ 
327| 接口 | CPI(cycles/instruction) |346| 接口 | CPI(cycles/instruction) |
328| --- | --- |347| --- | --- |
329| InitSocState | 软仿指令,不涉及理论性能 |348| InitSocState | 软仿指令,不涉及理论性能 |
@@ -338,4 +357,5 @@
338| GetSystemCycle | 1 |357| GetSystemCycle | 1 |
339| GetProgramCounter | 软仿指令,不涉及理论性能 |358| GetProgramCounter | 软仿指令,不涉及理论性能 |
340| GetArchVersion | 软仿指令,不涉及理论性能 |359| GetArchVersion | 软仿指令,不涉及理论性能 |
360+ 
341<!-- end id6 -->361<!-- end id6 -->
@@ -40,6 +40,7 @@ $$
40 __aicore__ inline void Axpy(const LocalTensor<T>& dstTensor, const LocalTensor<U>& srcTensor, const U scalarValue, const LocalTensor<uint8_t>& sharedTmpBuffer, const uint32_t calCount)40 __aicore__ inline void Axpy(const LocalTensor<T>& dstTensor, const LocalTensor<U>& srcTensor, const U scalarValue, const LocalTensor<uint8_t>& sharedTmpBuffer, const uint32_t calCount)
41 ```41 ```
42 模板参数说明42 模板参数说明
43+ 
43 | 参数名 | 描述 |44 | 参数名 | 描述 |
44 | ----------- | ----------- |45 | ----------- | ----------- |
45 | T | 目的操作数数据类型,支持数据类型为half/float。 |46 | T | 目的操作数数据类型,支持数据类型为half/float。 |
@@ -47,6 +48,7 @@ $$
47 | isReuseSource | 该参数预留,传入默认值false即可。 |48 | isReuseSource | 该参数预留,传入默认值false即可。 |
48 49 
49 接口参数说明50 接口参数说明
51+ 
50 | 参数名 | 输入/输出 | 描述 |52 | 参数名 | 输入/输出 | 描述 |
51 | ----------- | ----------- |----------- |53 | ----------- | ----------- |----------- |
52 | dstTensor | 输出 | 目的操作数。 |54 | dstTensor | 输出 | 目的操作数。 |
@@ -54,6 +56,7 @@ $$
54 | scalarValue | 输入 |scalar标量。支持的数据类型为half/float。scalar操作数的类型需要和srcTensor保持一致。 |56 | scalarValue | 输入 |scalar标量。支持的数据类型为half/float。scalar操作数的类型需要和srcTensor保持一致。 |
55 | sharedTmpBuffer | 输入 | 临时缓存。类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。由于该接口的内部实现需要额外的临时空间来存储计算过程中的中间变量。临时空间需要开发者通过sharedTmpBuffer入参传入。 |57 | sharedTmpBuffer | 输入 | 临时缓存。类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。由于该接口的内部实现需要额外的临时空间来存储计算过程中的中间变量。临时空间需要开发者通过sharedTmpBuffer入参传入。 |
56 | calCount | 输入 | 参与计算的元素个数。 | 58 | calCount | 输入 | 参与计算的元素个数。 |
59+ 
57- Tiling侧60- Tiling侧
58 61 
59 核函数(Kernel)侧接口的计算需要开发者预留/申请临时空间,该临时空间的大小需要在Tiling侧根据获取到的源操作数shape大小,计算高阶API所需的最大(maxValue)临时空间和最小临时空间(minValue)的大小。因此在Tiling侧提供一个用于计算maxValue和minValue的接口。接口的输入参数包括源操作数Tensor的shape大小和源操作数数据类型所占字节数,shape大小的参数使用AscendC::TensorShape类型,数据类型所占的字节数使用`uint32_t`类型,输出参数包括minValue和maxValue。与Axpy接口中的isReuseSource参数系统,Tiling接口中的isReuseSource为预留参数。62 核函数(Kernel)侧接口的计算需要开发者预留/申请临时空间,该临时空间的大小需要在Tiling侧根据获取到的源操作数shape大小,计算高阶API所需的最大(maxValue)临时空间和最小临时空间(minValue)的大小。因此在Tiling侧提供一个用于计算maxValue和minValue的接口。接口的输入参数包括源操作数Tensor的shape大小和源操作数数据类型所占字节数,shape大小的参数使用AscendC::TensorShape类型,数据类型所占的字节数使用`uint32_t`类型,输出参数包括minValue和maxValue。与Axpy接口中的isReuseSource参数系统,Tiling接口中的isReuseSource为预留参数。
@@ -61,6 +64,7 @@ $$
61 void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue);64 void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue);
62 ```65 ```
63 接口参数说明66 接口参数说明
67+ 
64 | 参数名 | 输入/输出 | 描述 |68 | 参数名 | 输入/输出 | 描述 |
65 | ----------- | ----------- |----------- |69 | ----------- | ----------- |----------- |
66 | srcShape | 输入 | 输入的shape信息。 |70 | srcShape | 输入 | 输入的shape信息。 |
@@ -68,6 +72,7 @@ $$
68 | isReuseSource | 输入 | 预留参数。 |72 | isReuseSource | 输入 | 预留参数。 |
69 | maxValue | 输出 | Axpy接口能完成计算所需的最大临时空间大小,超出该值的空间不会被接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间申请,最大空间大小为0表示计算不需要临时空间。 |73 | maxValue | 输出 | Axpy接口能完成计算所需的最大临时空间大小,超出该值的空间不会被接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间申请,最大空间大小为0表示计算不需要临时空间。 |
70 | minValue | 输出 | Axpy接口能完成计算所需的最小临时空间大小。为保证功能正确,接口计算时申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | 74 | minValue | 输出 | Axpy接口能完成计算所需的最小临时空间大小。为保证功能正确,接口计算时申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 |
75+ 
71### 开发API76### 开发API
72#### 编写API对外接口77#### 编写API对外接口
73- 核函数(Kernel)侧接口78- 核函数(Kernel)侧接口
@@ -17,6 +17,7 @@
17- 搬运单元<a name="section_2201_to_3510_data_move_unit_changes"></a>17- 搬运单元<a name="section_2201_to_3510_data_move_unit_changes"></a>
18 18 
19 **表1** 搬运单元变更19 **表1** 搬运单元变更
20+ 
20 | 3510变更 | 产生的影响 | 影响的API接口 |21 | 3510变更 | 产生的影响 | 影响的API接口 |
21 |----------|------------|---------------|22 |----------|------------|---------------|
22 | 删除L1 Buffer到GM的数据通路。 | 现有接口不支持从L1 Buffer直接搬运数据到GM。开发者需要在L1 Buffer分配一块空间存放单位矩阵,利用MMAD矩阵乘法计算输出到L0C Buffer,从L0C Buffer通过[Fixpipe(L0C到GM数据搬运)](../../../api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)将数据搬运到GM。 | DataCopy/DumpTensor |23 | 删除L1 Buffer到GM的数据通路。 | 现有接口不支持从L1 Buffer直接搬运数据到GM。开发者需要在L1 Buffer分配一块空间存放单位矩阵,利用MMAD矩阵乘法计算输出到L0C Buffer,从L0C Buffer通过[Fixpipe(L0C到GM数据搬运)](../../../api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)将数据搬运到GM。 | DataCopy/DumpTensor |
@@ -33,6 +34,7 @@
33- 计算单元<a name="section_2201_to_3510_compute_unit_changes"></a>34- 计算单元<a name="section_2201_to_3510_compute_unit_changes"></a>
34 35 
35 **表2** 计算单元变更36 **表2** 计算单元变更
37+ 
36 | 3510变更 | 产生的影响 | 影响的API接口 |38 | 3510变更 | 产生的影响 | 影响的API接口 |
37 |----------|------------|---------------|39 |----------|------------|---------------|
38 | Cube计算单元不支持s4类型。 | 对于int4b_t数据类型的矩阵乘计算,开发者需要先将int4b_t的数据Cast转换为int8_t类型,再进行Cube计算。 | Mmad |40 | Cube计算单元不支持s4类型。 | 对于int4b_t数据类型的矩阵乘计算,开发者需要先将int4b_t的数据Cast转换为int8_t类型,再进行Cube计算。 | Mmad |
@@ -33,6 +33,7 @@ Matmul量化/反量化包含两种模式:同一系数的量化/反量化模式
33**表2** Matmul量化/反量化支持的数据类型33**表2** Matmul量化/反量化支持的数据类型
34 34 
35<a name="zh-cn_topic_0000002298767893_table1996113269499"></a>35<a name="zh-cn_topic_0000002298767893_table1996113269499"></a>
36+ 
36| A矩阵 | B矩阵 | C矩阵 | 支持平台 |37| A矩阵 | B矩阵 | C矩阵 | 支持平台 |
37| --- | --- | --- | --- |38| --- | --- | --- | --- |
38| half | half | int8_t | <!-- npu="950" id1 -->Ascend 950PR/Ascend 950DT<br><br><!-- end id1 --><!-- npu="A3" id2 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><br><!-- end id2 --><!-- npu="910b" id3 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id3 --> |39| half | half | int8_t | <!-- npu="950" id1 -->Ascend 950PR/Ascend 950DT<br><br><!-- end id1 --><!-- npu="A3" id2 -->Atlas A3 训练系列产品/Atlas A3 推理系列产品<br><br><!-- end id2 --><!-- npu="910b" id3 -->Atlas A2 训练系列产品/Atlas A2 推理系列产品<!-- end id3 --> |
@@ -22,6 +22,7 @@ MX格式的数据类型包含多种,例如MXFP8、MXFP4、MXFP16、MXINT4等
22**表1** MxMatmul支持MX格式的数据类型22**表1** MxMatmul支持MX格式的数据类型
23 23 
24<a name="zh-cn_topic_0000002270097206_table5383144710452"></a>24<a name="zh-cn_topic_0000002270097206_table5383144710452"></a>
25+ 
25| 数据类型 | 私有元素数据类型 | 私有元素位宽(d) | 块大小(k) | 共享缩放因子数据类型 | 共享缩放因子位宽(w) |26| 数据类型 | 私有元素数据类型 | 私有元素位宽(d) | 块大小(k) | 共享缩放因子数据类型 | 共享缩放因子位宽(w) |
26| --- | --- | --- | --- | --- | --- |27| --- | --- | --- | --- | --- | --- |
27| MXFP8 | fp8_e5m2_t | 8 | 32 | fp8_e8m0_t | 8 |28| MXFP8 | fp8_e5m2_t | 8 | 32 | fp8_e8m0_t | 8 |
@@ -207,6 +208,7 @@ Host侧自动获取Tiling参数的关键步骤介绍如下:
207**表3** MatmulTypeWithScale参数说明208**表3** MatmulTypeWithScale参数说明
208 209 
209<a name="zh-cn_topic_0000002270097206_table14759942142014"></a>210<a name="zh-cn_topic_0000002270097206_table14759942142014"></a>
211+ 
210| 参数 | 说明 |212| 参数 | 说明 |
211| --- | --- |213| --- | --- |
212| POSITION | 左右矩阵的内存逻辑位置。<!-- npu="950" id2 --><br><br>针对Ascend 950PR/Ascend 950DT:<br><br>A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br><br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<!-- end id2 --><br><br>注意:A、B矩阵设置为TPosition::TSCM时,对应的Format仅支持CubeFormat::NZ。 |214| POSITION | 左右矩阵的内存逻辑位置。<!-- npu="950" id2 --><br><br>针对Ascend 950PR/Ascend 950DT:<br><br>A矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<br><br>B矩阵可设置为TPosition::GM,TPosition::VECOUT,TPosition::TSCM<!-- end id2 --><br><br>注意:A、B矩阵设置为TPosition::TSCM时,对应的Format仅支持CubeFormat::NZ。 |
@@ -85,6 +85,7 @@ for (uint16_t i = 0; i < 32; ++i) { // VLoop-2
85| :-- | :-- | :-- | :-- |85| :-- | :-- | :-- | :-- |
86| 手动展开VF循环 | / | &bull;自主可控;<br>&bull;能处理复杂循环或src/dst寄存器复用等场景; | &bull;代码复杂度高;|86| 手动展开VF循环 | / | &bull;自主可控;<br>&bull;能处理复杂循环或src/dst寄存器复用等场景; | &bull;代码复杂度高;|
87| 编译器自动展开 | #pragma unroll number (number表示展开层数)| &bull;代码复杂度低;| &bull;src/dst寄存器复用时无法展开。 |87| 编译器自动展开 | #pragma unroll number (number表示展开层数)| &bull;代码复杂度低;| &bull;src/dst寄存器复用时无法展开。 |
88+ 
88>[!NOTE]说明89>[!NOTE]说明
89>90>
90> 循环展开通过消除指令依赖,提升指令双发能力来优化VF性能,需根据实际计算过程使用,不保证产生收益。展开时,若寄存器超出数量上限,可能会造成性能劣化或其他非预期行为。91> 循环展开通过消除指令依赖,提升指令双发能力来优化VF性能,需根据实际计算过程使用,不保证产生收益。展开时,若寄存器超出数量上限,可能会造成性能劣化或其他非预期行为。
@@ -84,6 +84,7 @@ gather_strided_kernel<<<64, MAX_THREAD_NUM, 0, stream>>>(
84 84 
85 85 
86上述两种写法的性能数据汇总如下:86上述两种写法的性能数据汇总如下:
87+ 
87| 写法 | 线程块数量 | Task Duration(us) | 88| 写法 | 线程块数量 | Task Duration(us) |
88| :--: | :-------: | :---------------: | 89| :--: | :-------: | :---------------: |
89| **单线程多数据** | **64** | **58.583** | 90| **单线程多数据** | **64** | **58.583** |
@@ -5,6 +5,7 @@ SIMD与SIMT混合编程涉及多种类型的函数,它们之间遵循严格的
5SIMD与SIMT混合编程中涉及的函数类型如下表所示:5SIMD与SIMT混合编程中涉及的函数类型如下表所示:
6 6 
7<a name="zh-cn_topic_0000002571578013_table1818191292017"></a>7<a name="zh-cn_topic_0000002571578013_table1818191292017"></a>
8+ 
8| 修饰符 | 函数功能 | 调用方式 |9| 修饰符 | 函数功能 | 调用方式 |
9| --- | --- | --- |10| --- | --- | --- |
10| `__global__ __aicore__` | 算子入口,协调VF执行。若只有在AIV核内执行的SIMD与SIMT混合编程场景,可使用__global__ __vector__来标识只启动AIV核。 | Host侧通过`<<<...>>>`调用 |11| `__global__ __aicore__` | 算子入口,协调VF执行。若只有在AIV核内执行的SIMD与SIMT混合编程场景,可使用__global__ __vector__来标识只启动AIV核。 | Host侧通过`<<<...>>>`调用 |
@@ -37,6 +38,7 @@ __global__ __vector__ void kernel_name(__gm__ type* param1, __gm__ type* param2,
37关键修饰符说明如下:38关键修饰符说明如下:
38 39 
39<a name="zh-cn_topic_0000002571578013_table4811406341"></a>40<a name="zh-cn_topic_0000002571578013_table4811406341"></a>
41+ 
40| 修饰符 | 作用 | 必需性 |42| 修饰符 | 作用 | 必需性 |
41| --- | --- | --- |43| --- | --- | --- |
42| `__global__` | 标识核函数(Kernel),表明可在Host侧通过`<<<...>>>`调用 | 必需 |44| `__global__` | 标识核函数(Kernel),表明可在Host侧通过`<<<...>>>`调用 | 必需 |
@@ -57,6 +59,7 @@ kernel_name<<<block_num, dyn_ub_size, stream>>>(args...);
57核函数(Kernel)调用符内的配置参数说明如下:59核函数(Kernel)调用符内的配置参数说明如下:
58 60 
59<a name="zh-cn_topic_0000002571578013_table942016184315"></a>61<a name="zh-cn_topic_0000002571578013_table942016184315"></a>
62+ 
60| 参数 | 类型 | 说明 | 约束 |63| 参数 | 类型 | 说明 | 约束 |
61| --- | --- | --- | --- |64| --- | --- | --- | --- |
62| `block_num` | `uint32_t` | 设置核函数(Kernel)启用的核数 | 取值范围[1, 65535] |65| `block_num` | `uint32_t` | 设置核函数(Kernel)启用的核数 | 取值范围[1, 65535] |
@@ -77,6 +80,7 @@ __simt_vf__ __launch_bounds__(MAX_THREAD_COUNT) inline void function_name(
77SIMT VF函数定义中的关键修饰符说明如下:80SIMT VF函数定义中的关键修饰符说明如下:
78 81 
79<a name="zh-cn_topic_0000002571578013_table7661145014492"></a>82<a name="zh-cn_topic_0000002571578013_table7661145014492"></a>
83+ 
80| 修饰符 | 作用 |84| 修饰符 | 作用 |
81| --- | --- |85| --- | --- |
82| `__simt_vf__` | 函数标识符,标识SIMT VF函数 |86| `__simt_vf__` | 函数标识符,标识SIMT VF函数 |
@@ -21,6 +21,7 @@ Cache Line是Cache加载、失效、写回的最小操作粒度。例如访问GM
21| AIC DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 32KB |21| AIC DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 32KB |
22| AIV DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 32KB |22| AIV DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 32KB |
23| SIMT DCache | SIMT数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 128B | 32KB~128KB |23| SIMT DCache | SIMT数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 128B | 32KB~128KB |
24+ 
24<!-- end id15 -->25<!-- end id15 -->
25 26 
26<!-- npu="A3,910b" id20 -->27<!-- npu="A3,910b" id20 -->
@@ -33,6 +34,7 @@ Cache Line是Cache加载、失效、写回的最小操作粒度。例如访问GM
33| AIV ICache | Scalar取指缓存 | 只读,不考虑多个核之间的数据不一致问题 | 128B | 16KB |34| AIV ICache | Scalar取指缓存 | 只读,不考虑多个核之间的数据不一致问题 | 128B | 16KB |
34| AIC DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 16KB |35| AIC DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 16KB |
35| AIV DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 32KB |36| AIV DCache | Scalar数据缓存 | 每个核独立缓存,需要考虑多个核之间的数据一致性问题 | 64B | 32KB |
37+ 
36<!-- end id20 -->38<!-- end id20 -->
37 39 
38同一份数据可能同时存在于GM、L2 Cache、DCache<!-- npu="950" id2 -->、SIMT DCache<!-- end id2 -->等多个位置。对于每个核独立维护的Cache,同一地址或同一Cache Line可能在不同核内形成不同副本:40同一份数据可能同时存在于GM、L2 Cache、DCache<!-- npu="950" id2 -->、SIMT DCache<!-- end id2 -->等多个位置。对于每个核独立维护的Cache,同一地址或同一Cache Line可能在不同核内形成不同副本:
@@ -97,6 +97,7 @@
97 **表3** 参数说明97 **表3** 参数说明
98 98 
99 <a name="table121952819427"></a>99 <a name="table121952819427"></a>
100+ 
100 | 参数(区分大小写) | 可选/必选 | 说明 |101 | 参数(区分大小写) | 可选/必选 | 说明 |
101 | ---- | ---- | ---- |102 | ---- | ---- | ---- |
102 | `--list-elf <elf_file>`,`-l` | 必选 | 获取ELF文件中包含的device信息文件列表,并打印显示。<br>`<elf_file>`表示待打印的ELF文件路径,如`/home/op_api/lib_api.so`。 |103 | `--list-elf <elf_file>`,`-l` | 必选 | 获取ELF文件中包含的device信息文件列表,并打印显示。<br>`<elf_file>`表示待打印的ELF文件路径,如`/home/op_api/lib_api.so`。 |
@@ -134,6 +135,7 @@
134**表6** kernel type信息135**表6** kernel type信息
135 136 
136<a name="table187419221164"></a>137<a name="table187419221164"></a>
138+ 
137| KERNEL_TYPE | 说明 |139| KERNEL_TYPE | 说明 |
138| ---- | ---- |140| ---- | ---- |
139| `AICORE` | **该参数为预留参数,当前版本暂不支持。**<br>算子执行时仅会启动AI Core,比如用户在host侧设置blocknum为5,则会启动5个AI Core。 |141| `AICORE` | **该参数为预留参数,当前版本暂不支持。**<br>算子执行时仅会启动AI Core,比如用户在host侧设置blocknum为5,则会启动5个AI Core。 |
@@ -136,6 +136,7 @@ optype_collector工具用于采集内置/自定义算子包中指定AI处理器
136## 返回值<a name="section_optype_collector_return_code"></a>136## 返回值<a name="section_optype_collector_return_code"></a>
137 137 
138<a name="table_optype_collector_return_code"></a>138<a name="table_optype_collector_return_code"></a>
139+ 
139| 返回值 | 说明 |140| 返回值 | 说明 |
140| ---- | ---- |141| ---- | ---- |
141| `0` | 执行成功,且冲突检测模式下未发现OpType重名冲突。 |142| `0` | 执行成功,且冲突检测模式下未发现OpType重名冲突。 |
@@ -147,6 +148,7 @@ optype_collector工具用于采集内置/自定义算子包中指定AI处理器
147工具执行后会根据命令模式输出如下信息。148工具执行后会根据命令模式输出如下信息。
148 149 
149<a name="table_optype_collector_output"></a>150<a name="table_optype_collector_output"></a>
151+ 
150| 输出项 | 说明 |152| 输出项 | 说明 |
151| ---- | ---- |153| ---- | ---- |
152| `[Scan Info]` | 展示本次扫描的AI处理器版本、`ASCEND_HOME_PATH``ASCEND_CUSTOM_OPP_PATH`。 |154| `[Scan Info]` | 展示本次扫描的AI处理器版本、`ASCEND_HOME_PATH``ASCEND_CUSTOM_OPP_PATH`。 |
@@ -88,6 +88,7 @@ AI Core SIMT的基本编译流程如下:Host代码使用Host编译器编译成
88![aicore simt编译流程示意图](../../../figures/aicore_simt_comilation.png)88![aicore simt编译流程示意图](../../../figures/aicore_simt_comilation.png)
89 89 
90## 基本编译命令汇总90## 基本编译命令汇总
91+ 
91|编译方式|AI Core SIMD编译命令| AI Core SIMT编译命令|92|编译方式|AI Core SIMD编译命令| AI Core SIMT编译命令|
92|-|-|-|93|-|-|-|
93|异构编译| bisheng <source_file>.asc -o \<output_file\> --npu-arch=dav-\<npu architecture\> | bisheng <source_file>.asc -o <output_file> --npu-arch=dav-\<npu architecture\> **--enable-simt**|94|异构编译| bisheng <source_file>.asc -o \<output_file\> --npu-arch=dav-\<npu architecture\> | bisheng <source_file>.asc -o <output_file> --npu-arch=dav-\<npu architecture\> **--enable-simt**|
@@ -97,6 +98,7 @@ AI Core SIMT的基本编译流程如下:Host代码使用Host编译器编译成
97 98 
98 99 
99## 常用的编译选项<a name="ZH-CN_TOPIC_0000002462746461"></a>100## 常用的编译选项<a name="ZH-CN_TOPIC_0000002462746461"></a>
101+ 
100| 选项 | 是否必需 | 说明 |102| 选项 | 是否必需 | 说明 |
101|------|----------|------|103|------|----------|------|
102| -help | 否 | 查看帮助。 |104| -help | 否 | 查看帮助。 |
@@ -244,6 +246,7 @@ add_executable(demo
244 )246 )
245 ```247 ```
246**表1常用的CMAKE配置变量说明**248**表1常用的CMAKE配置变量说明**
249+ 
247| 变量名称 | 配置说明 |250| 变量名称 | 配置说明 |
248|--|--|251|--|--|
249| CMAKE_BUILD_TYPE | 编译模式选项,可配置为:Release或Debug。Release版本,不包含调试信息,编译最终发布的版本。Debug版本,包含调试信息,便于开发者开发和调试。配置其他值时CMake会发出警告,但不中止构建。 |252| CMAKE_BUILD_TYPE | 编译模式选项,可配置为:Release或Debug。Release版本,不包含调试信息,编译最终发布的版本。Debug版本,包含调试信息,便于开发者开发和调试。配置其他值时CMake会发出警告,但不中止构建。 |
@@ -319,6 +322,7 @@ add_executable(demo
319### 内置链接库<a name="section57020345148"></a>322### 内置链接库<a name="section57020345148"></a>
320 323 
321毕昇编译器默认链接的库文件,列表如下:324毕昇编译器默认链接的库文件,列表如下:
325+ 
322| 名称 | 作用描述 |326| 名称 | 作用描述 |
323|------|----------|327|------|----------|
324| libascendc_runtime.a | Ascend C算子参数等组装库。 |328| libascendc_runtime.a | Ascend C算子参数等组装库。 |
@@ -333,6 +337,7 @@ add_executable(demo
333 337 
334### 高阶API常用链接库338### 高阶API常用链接库
335在使用高阶API时,必须链接以下库,因为这些库是高阶API功能所依赖的。在其他场景下,可以根据具体需求选择是否链接这些库。339在使用高阶API时,必须链接以下库,因为这些库是高阶API功能所依赖的。在其他场景下,可以根据具体需求选择是否链接这些库。
340+ 
336|链接库名称|作用描述|使用场景|动态库路径|341|链接库名称|作用描述|使用场景|动态库路径|
337|--|--|--|--|342|--|--|--|--|
338|libtiling_api.a|Tiling函数相关库。|使用高阶API相关的Tiling接口时需要链接。|${ASCEND_HOME_PATH}/lib64|343|libtiling_api.a|Tiling函数相关库。|使用高阶API相关的Tiling接口时需要链接。|${ASCEND_HOME_PATH}/lib64|
@@ -17,6 +17,7 @@
17<!-- end id4 -->17<!-- end id4 -->
18 18 
19毕昇编译器支持的源码文件核头文件如下:19毕昇编译器支持的源码文件核头文件如下:
20+ 
20| 文件扩展名 | 描述 | 内容 |21| 文件扩展名 | 描述 | 内容 |
21|--|--|--|22|--|--|--|
22|.c| C源码文件 | Host-only代码 | 23|.c| C源码文件 | Host-only代码 |
@@ -222,6 +222,7 @@
222 └──visualize_data.bin # MindStudio Insight呈现文件222 └──visualize_data.bin # MindStudio Insight呈现文件
223 ```223 ```
224**表4 msopprof simulator文件介绍**224**表4 msopprof simulator文件介绍**
225+ 
225| 名称 | 说明 |226| 名称 | 说明 |
226|--|--|227|--|--|
227| dump文件夹 | 原始仿真生成的dump数据存放文件夹。 |228| dump文件夹 | 原始仿真生成的dump数据存放文件夹。 |
@@ -441,6 +441,7 @@ __ubuf__ int * __gm__ ptr;
441## 内置常量<a name="section784531219338"></a>441## 内置常量<a name="section784531219338"></a>
442 442 
443**表2** 内置常量443**表2** 内置常量
444+ 
444| 常量名 | 取值 | 功能 |445| 常量名 | 取值 | 功能 |
445|--------|------|------|446|--------|------|------|
446| constexpr int32_t g_coreType | AscendC::AIC<br>AscendC::AIV | 常量值由框架自动设置,AIC核下,配置为AscendC::AIC,AIV核下,配置为AscendC::AIV。可以通过对该常量值的判断,来实现了AIV与AIC核代码的区分和隔离。功能等同于直接使用ASCEND_IS_AIV、ASCEND_IS_AIC。 |447| constexpr int32_t g_coreType | AscendC::AIC<br>AscendC::AIV | 常量值由框架自动设置,AIC核下,配置为AscendC::AIC,AIV核下,配置为AscendC::AIV。可以通过对该常量值的判断,来实现了AIV与AIC核代码的区分和隔离。功能等同于直接使用ASCEND_IS_AIV、ASCEND_IS_AIC。 |
@@ -34,6 +34,7 @@ SIMT会提供内置的宏方便用户编写程序。预定义宏一节着重介
34**表1** 函数执行空间限定符概览34**表1** 函数执行空间限定符概览
35 35 
36<a name="table121121062614"></a>36<a name="table121121062614"></a>
37+ 
37| 函数执行空间限定符 | 执行空间(Host) | 执行空间(Device) | 允许调用函数空间(Host) | 允许调用函数空间(Device) |38| 函数执行空间限定符 | 执行空间(Host) | 执行空间(Device) | 允许调用函数空间(Host) | 允许调用函数空间(Device) |
38| --- | --- | --- | --- | --- |39| --- | --- | --- | --- | --- |
39| \_\_host\_\_,无限定符 | √ | x | √ | x |40| \_\_host\_\_,无限定符 | √ | x | √ | x |
@@ -72,6 +73,7 @@ SIMT会提供内置的宏方便用户编写程序。预定义宏一节着重介
72## 内置常量<a name="section784531219338"></a>73## 内置常量<a name="section784531219338"></a>
73 74 
74<a name="table878553753515"></a>75<a name="table878553753515"></a>
76+ 
75| 常量名 | 取值 | 功能 |77| 常量名 | 取值 | 功能 |
76| --- | --- | --- |78| --- | --- | --- |
77| constexpr uint64_t ASC_UB_SIZE | 取值由当前AI处理器决定,若该AI处理器不存在这块空间,则默认配置为0。 | 表示当前AI处理器架构下UB的容量,可用于编译期获取UB资源大小。 |79| constexpr uint64_t ASC_UB_SIZE | 取值由当前AI处理器决定,若该AI处理器不存在这块空间,则默认配置为0。 | 表示当前AI处理器架构下UB的容量,可用于编译期获取UB资源大小。 |
@@ -154,6 +156,7 @@ SIMT会提供内置的宏方便用户编写程序。预定义宏一节着重介
154**表2** 标量数据类型156**表2** 标量数据类型
155 157 
156<a name="table114921244133211"></a>158<a name="table114921244133211"></a>
159+ 
157| 类型 | 数据类型 | 描述 | Size(bit) | 取值范围 |160| 类型 | 数据类型 | 描述 | Size(bit) | 取值范围 |
158| --- | --- | --- | --- | --- |161| --- | --- | --- | --- | --- |
159| 布尔型 | bool | 全0代表false,否则代表true。 | 8 | true, false |162| 布尔型 | bool | 全0代表false,否则代表true。 | 8 | true, false |
@@ -175,6 +178,7 @@ SIMT会提供内置的宏方便用户编写程序。预定义宏一节着重介
175短向量数据类型分为Vector X2、Vector X3、Vector X4,表示一个短向量变量有2、3、4个元素,当前支持的类型分布如下:178短向量数据类型分为Vector X2、Vector X3、Vector X4,表示一个短向量变量有2、3、4个元素,当前支持的类型分布如下:
176 179 
177<a name="table49986503175"></a>180<a name="table49986503175"></a>
181+ 
178| 元素数据类型 | Vector X2 | Vector X3 | Vector X4 |182| 元素数据类型 | Vector X2 | Vector X3 | Vector X4 |
179| --- | --- | --- | --- |183| --- | --- | --- | --- |
180| unsigned char | uchar2 | uchar3 | uchar4 |184| unsigned char | uchar2 | uchar3 | uchar4 |
@@ -199,6 +203,7 @@ SIMT会提供内置的宏方便用户编写程序。预定义宏一节着重介
199**表3** 短向量数据类型203**表3** 短向量数据类型
200 204 
201<a name="table13856144241"></a>205<a name="table13856144241"></a>
206+ 
202| 数据类型 | 内存大小(字节) | 地址对齐(字节) |207| 数据类型 | 内存大小(字节) | 地址对齐(字节) |
203| --- | --- | --- |208| --- | --- | --- |
204| char2、 uchar2 | 2 | 2 |209| char2、 uchar2 | 2 | 2 |
@@ -224,6 +229,7 @@ SIMT编程提供了一系列运算符,用于执行数学运算。以下是支
224**表4** SIMT编程支持的运算符列表229**表4** SIMT编程支持的运算符列表
225 230 
226<a name="table11745172843710"></a>231<a name="table11745172843710"></a>
232+ 
227| 类别 | 运算符 | bool | int8_t/uint8_t/int16_t/uint16_t/int32_t/uint32_t/int64_t/uint64_t | half/bfloat16_t/float | half2/bfloat16x2_t | hifloat8_t |233| 类别 | 运算符 | bool | int8_t/uint8_t/int16_t/uint16_t/int32_t/uint32_t/int64_t/uint64_t | half/bfloat16_t/float | half2/bfloat16x2_t | hifloat8_t |
228| --- | --- | --- | --- | --- | --- | --- |234| --- | --- | --- | --- | --- | --- | --- |
229| 算术运算符 | + | x | √ | √ | √ | x |235| 算术运算符 | + | x | √ | √ | √ | x |
@@ -21,6 +21,7 @@ AI Core中的计算单元主要包括Scalar、Vector和Cube三类。
21**表1** 计算单元21**表1** 计算单元
22 22 
23<a name="zh-cn_topic_0000001588832845_table14884154362"></a>23<a name="zh-cn_topic_0000001588832845_table14884154362"></a>
24+ 
24| 组件名称 | 组件功能 | 对应编程概念 |25| 组件名称 | 组件功能 | 对应编程概念 |
25| --- | --- | --- |26| --- | --- | --- |
26| Scalar | 执行地址计算、循环控制等标量计算工作,并把矢量计算、矩阵计算、数据搬运、同步指令发射给对应单元执行。 | 核函数(Kernel)中的控制逻辑、同步控制API。 |27| Scalar | 执行地址计算、循环控制等标量计算工作,并把矢量计算、矩阵计算、数据搬运、同步指令发射给对应单元执行。 | 核函数(Kernel)中的控制逻辑、同步控制API。 |
@@ -211,6 +211,7 @@ AI Core内部的执行单元(如MTE2数据搬运单元、Vector计算单元等
211> 📌 提示:上例描述为主要路径,当`Scalar`执行单元读写GM或者UB时,也需要考虑`Scalar`流水与其他流水的同步。211> 📌 提示:上例描述为主要路径,当`Scalar`执行单元读写GM或者UB时,也需要考虑`Scalar`流水与其他流水的同步。
212 212 
213AI Core上的执行单元分别属于不同的执行流水,同步即是保证不同执行流水间能够正确执行,如下为AI Core内的主要执行流水。213AI Core上的执行单元分别属于不同的执行流水,同步即是保证不同执行流水间能够正确执行,如下为AI Core内的主要执行流水。
214+ 
214| 流水类型 | 含义 |215| 流水类型 | 含义 |
215|---------|------|216|---------|------|
216| **PIPE_S** | 标量流水线 |217| **PIPE_S** | 标量流水线 |
@@ -124,6 +124,7 @@ C语言编程提供了`asc_set_gm2l1_nz_para`和`asc_copy_gm2l1_nd2nz`接口来
124开发者通过配置参数控制搬运路径、起始位置、长度等信息,充分利用硬件能力,最大化算子性能。每种数据通路对应特定的存储层级和访问特性。124开发者通过配置参数控制搬运路径、起始位置、长度等信息,充分利用硬件能力,最大化算子性能。每种数据通路对应特定的存储层级和访问特性。
125 125 
126结合上述数据流和分形知识,C语言编程提供以下矩阵搬入能力(完整接口见API参考手册):126结合上述数据流和分形知识,C语言编程提供以下矩阵搬入能力(完整接口见API参考手册):
127+ 
127| 数据通路 | 功能 | C语言编程接口 | 分行支持情况 |128| 数据通路 | 功能 | C语言编程接口 | 分行支持情况 |
128|---------|---------|---------------|-------------|129|---------|---------|---------------|-------------|
129| Global Memory → L1 Buffer | 随路转换ND2NZ搬运 | `asc_copy_gm2l1_nd2nz` | ![ND->Nz](../../../../figures/ND_Nz.png) |130| Global Memory → L1 Buffer | 随路转换ND2NZ搬运 | `asc_copy_gm2l1_nd2nz` | ![ND->Nz](../../../../figures/ND_Nz.png) |
@@ -261,6 +262,7 @@ __aicore__ inline void asc_set_l0c2gm_lrelu_alpha(half& config);
261![950矩阵计算分形格式示意图](../../../../figures/mmad_950.png)262![950矩阵计算分形格式示意图](../../../../figures/mmad_950.png)
262 263 
263表 矩阵计算矩阵A、B、C解释说明([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md))264表 矩阵计算矩阵A、B、C解释说明([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md))
265+ 
264| 矩阵计算逻辑 | 矩阵计算物理位置 | 维度 | 输入/输出数据格式 | 数据类型 |266| 矩阵计算逻辑 | 矩阵计算物理位置 | 维度 | 输入/输出数据格式 | 数据类型 |
265|-------------|-----------------|------|------------------|---------|267|-------------|-----------------|------|------------------|---------|
266| A | L0A Buffer | M × K | Nz | 数据类型 |268| A | L0A Buffer | M × K | Nz | 数据类型 |
@@ -1160,6 +1160,7 @@ __global__ __mix__ void mix_kernel(__gm__ float* x, __gm__ float* y, __gm__ floa
1160| --- | --- |1160| --- | --- |
1161| 基础API | AddDeqRelu、Select |1161| 基础API | AddDeqRelu、Select |
1162| 高阶API | Digamma、Lgamma、Power、Sign、LayerNorm、DropOut、SelectWithBytesMask |1162| 高阶API | Digamma、Lgamma、Power、Sign、LayerNorm、DropOut、SelectWithBytesMask |
1163+ 
1163<!-- end id5 -->1164<!-- end id5 -->
1164 1165 
1165<!-- npu="950" id6 -->1166<!-- npu="950" id6 -->
@@ -1178,4 +1179,5 @@ __global__ __mix__ void mix_kernel(__gm__ float* x, __gm__ float* y, __gm__ floa
1178| 基础API > Kernel-Tiling | GET_TILING_DATA、GET_TILING_DATA_WITH_STRUCT、GET_TILING_DATA_MEMBER |1179| 基础API > Kernel-Tiling | GET_TILING_DATA、GET_TILING_DATA_WITH_STRUCT、GET_TILING_DATA_MEMBER |
1179| Utils API > 调测接口(SIMD VF) | printf、asc_dump_reg、asc_dump、asc_dump_ubuf |1180| Utils API > 调测接口(SIMD VF) | printf、asc_dump_reg、asc_dump、asc_dump_ubuf |
1180| 高阶API | AscendAntiQuant、AdjustSoftMaxRes、TopK |1181| 高阶API | AscendAntiQuant、AdjustSoftMaxRes、TopK |
1182+ 
1181<!-- end id6 -->1183<!-- end id6 -->
@@ -943,6 +943,7 @@
943| --- | --- |943| --- | --- |
944| 基础API | AddDeqRelu、Select |944| 基础API | AddDeqRelu、Select |
945| 高阶API | Digamma、Lgamma、Power、Sign、LayerNorm、DropOut、SelectWithBytesMask |945| 高阶API | Digamma、Lgamma、Power、Sign、LayerNorm、DropOut、SelectWithBytesMask |
946+ 
946<!-- end id5 -->947<!-- end id5 -->
947 948 
948<!-- npu="950" id6 -->949<!-- npu="950" id6 -->
@@ -961,4 +962,5 @@
961| 基础API > Kernel-Tiling | GET_TILING_DATA、GET_TILING_DATA_WITH_STRUCT、GET_TILING_DATA_MEMBER |962| 基础API > Kernel-Tiling | GET_TILING_DATA、GET_TILING_DATA_WITH_STRUCT、GET_TILING_DATA_MEMBER |
962| Utils API > 调测接口(SIMD VF) | printf、asc_dump_reg、asc_dump、asc_dump_ubuf |963| Utils API > 调测接口(SIMD VF) | printf、asc_dump_reg、asc_dump、asc_dump_ubuf |
963| 高阶API | AscendAntiQuant、AdjustSoftMaxRes、TopK |964| 高阶API | AscendAntiQuant、AdjustSoftMaxRes、TopK |
965+ 
964<!-- end id6 -->966<!-- end id6 -->