已合并
同步ub和kernel #5145
maohp_hw创建于 4 天前
同步ub和kernel #5145
已合并
共 789 个文件变更+2431-2419
| @@ -27,11 +27,11 @@ $$ | |||
| 27 | dstTensor_i = srcTensor_i \times scalarValue+dstTensor_i | 27 | dstTensor_i = srcTensor_i \times scalarValue+dstTensor_i |
| 28 | $$ | 28 | $$ |
| 29 | 29 | ||
| 30 | -- Kernel Side | 30 | +- Kernel Function Side |
| 31 | 31 | ||
| 32 | - Consider the data flow during operator execution. Host side applies for GlobalMemory space and writes data into it. Kernel side moves data from GlobalMemory to LocalMemory. Compute unit fetches data from LocalMemory for computation, writes results back to LocalMemory, and finally moves computation results from LocalMemory to GlobalMemory. High-level API completes the computation part, so high-level API source operands and destination operands are both in LocalMemory. That is, high-level API interface parameters include LocalTensor with already moved-in data and other parameters. | 32 | + Consider the data flow during operator execution. Host side applies for GlobalMemory space and writes data into it. On the kernel function side, data is moved from GlobalMemory to LocalMemory. Compute unit fetches data from LocalMemory for computation, writes results back to LocalMemory, and finally moves computation results from LocalMemory to GlobalMemory. High-level API completes the computation part, so high-level API source operands and destination operands are both in LocalMemory. That is, high-level API interface parameters include LocalTensor with already moved-in data and other parameters. |
| 33 | 33 | ||
| 34 | - From `Axpy` formula, the interface needs input parameters `srcTensor` and `scalarValue`, output parameter `dstTensor`, and also needs an input parameter `calCount` indicating the number of elements participating in computation. Since intermediate results of multiplication are generated during this computation, extra LocalMemory space needs to be allocated for storing intermediate computation results. To pass this temporary buffer space in the interface, add a `shardTmpBuffer` input parameter. To extend API supported data types, define two template parameters as source operand and destination operand data types. The template parameter `isReuseSource` is a reserved parameter and can be omitted during development. After analyzing and determining all interface parameters based on API algorithm function or formula, the following Kernel side function prototype is obtained. | 34 | + From `Axpy` formula, the interface needs input parameters `srcTensor` and `scalarValue`, output parameter `dstTensor`, and also needs an input parameter `calCount` indicating the number of elements participating in computation. Since intermediate results of multiplication are generated during this computation, extra LocalMemory space needs to be allocated for storing intermediate computation results. To pass this temporary buffer space in the interface, add a `shardTmpBuffer` input parameter. To extend API supported data types, define two template parameters as source operand and destination operand data types. The template parameter `isReuseSource` is a reserved parameter and can be omitted during development. After analyzing and determining all interface parameters based on API algorithm function or formula, the following kernel function prototype is obtained. |
| 35 | 35 | ||
| 36 | After defining the function prototype, analyze and determine the basic APIs used in API implementation. The multiplication operation between Tensor and Scalar in `Axpy` formula can be implemented using Ascend C provided basic API `Muls`. The addition operation between two Tensors can be implemented using Ascend C provided basic API `Add`. | 36 | After defining the function prototype, analyze and determine the basic APIs used in API implementation. The multiplication operation between Tensor and Scalar in `Axpy` formula can be implemented using Ascend C provided basic API `Muls`. The addition operation between two Tensors can be implemented using Ascend C provided basic API `Add`. |
| 37 | 37 | ||
| @@ -56,7 +56,7 @@ $$ | |||
| 56 | | calCount | Input | Number of elements participating in computation. | | 56 | | calCount | Input | Number of elements participating in computation. | |
| 57 | - Tiling Side | 57 | - Tiling Side |
| 58 | 58 | ||
| 59 | - Kernel side interface computation requires developer 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. | 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. |
| 60 | ```c++ | 60 | ```c++ |
| 61 | void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue); | 61 | void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue); |
| 62 | ``` | 62 | ``` |
| @@ -66,11 +66,11 @@ $$ | |||
| 66 | | srcShape | Input | Input shape information. | | 66 | | srcShape | Input | Input shape information. | |
| 67 | | typeSize | Input | Operator input data type size, in bytes. For example, if operator input data type is half, pass 2 here. | | 67 | | typeSize | Input | Operator input data type size, in bytes. For example, if operator input data type is half, pass 2 here. | |
| 68 | | isReuseSource | Input | Reserved parameter. | | 68 | | 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, kernel side interface computation performance will have certain optimization improvement. 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. | | 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. | |
| 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. | | 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. | |
| 71 | ### Develop API | 71 | ### Develop API |
| 72 | #### Write API External Interface | 72 | #### Write API External Interface |
| 73 | -- Kernel Side Interface | 73 | +- Kernel Function Side Interface |
| 74 | 74 | ||
| 75 | In the corresponding category directory under `include/adv_api/`, add new file [axpy.h](../../include/adv_api/math/axpy.h). Based on the above analyzed and designed API function prototype, write external interface code. Function implementation calls AxpyImpl implementation. | 75 | In the corresponding category directory under `include/adv_api/`, add new file [axpy.h](../../include/adv_api/math/axpy.h). Based on the above analyzed and designed API function prototype, write external interface code. Function implementation calls AxpyImpl implementation. |
| 76 | ```c++ | 76 | ```c++ |
| @@ -106,9 +106,9 @@ $$ | |||
| 106 | ``` | 106 | ``` |
| 107 | 107 | ||
| 108 | #### Write API Internal Implementation | 108 | #### Write API Internal Implementation |
| 109 | -- Kernel Side Implementation | 109 | +- Kernel Function Side Implementation |
| 110 | 110 | ||
| 111 | - In Kernel interface implementation file path [impl/adv_api/detail](../../impl/adv_api/detail) corresponding category directory (this case is `math`), add new `axpy` directory. In this directory, add new interface implementation file [axpy_common_impl.h](../../impl/adv_api/detail/math/axpy/axpy_common_impl.h), then write interface implementation code in this implementation file. | 111 | + In the kernel function interface implementation path [impl/adv_api/detail](../../impl/adv_api/detail), add a new `axpy` directory under the corresponding category directory (`math` in this case). In this directory, add new interface implementation file [axpy_common_impl.h](../../impl/adv_api/detail/math/axpy/axpy_common_impl.h), then write interface implementation code in this implementation file. |
| 112 | 112 | ||
| 113 | First, include necessary header files. | 113 | First, include necessary header files. |
| 114 | ```c++ | 114 | ```c++ |
| @@ -311,7 +311,7 @@ After completing API coding, developers can write corresponding test cases and t | |||
| 311 | #### UT Testing | 311 | #### UT Testing |
| 312 | UT testing uses gTest as testing framework, generally verifies interface compilation is normal and cannot guard interface function. | 312 | UT testing uses gTest as testing framework, generally verifies interface compilation is normal and cannot guard interface function. |
| 313 | ##### UT Coding | 313 | ##### UT Coding |
| 314 | -###### Kernel Side | 314 | +###### Kernel Function Side |
| 315 | 315 | ||
| 316 | In UT directory [tests/api/adv_api/math](../../tests/api/adv_api/math), add new directory `axpy`, file [test_operator_axpy.cpp](../../tests/api/adv_api/math/axpy/test_operator_axpy.cpp). UT implementation mainly includes the following three parts: | 316 | In UT directory [tests/api/adv_api/math](../../tests/api/adv_api/math), add new directory `axpy`, file [test_operator_axpy.cpp](../../tests/api/adv_api/math/axpy/test_operator_axpy.cpp). UT implementation mainly includes the following three parts: |
| 317 | 1. Include header files | 317 | 1. Include header files |
| @@ -422,7 +422,7 @@ TEST_F(TestTiling, TestAxpyTiling) | |||
| 422 | } | 422 | } |
| 423 | ``` | 423 | ``` |
| 424 | ##### Modify cmake file | 424 | ##### Modify cmake file |
| 425 | -Before executing UT cases, need to modify [CMakeLists.txt](../../tests/api/adv_api/CMakeLists.txt) file. Since Kernel side and Tiling side UT execution objects are different, need to add test files under different targets. Using Kernel side UT for Atlas A2 training series products/Atlas A2 inference series products as example, add UT test file path to case source file list `ASCENDC_TEST_ASCEND910B1_AIV_CASE_SRC_PART_FILES`, that is add new file path `${ASCENDC_TESTS_DIR}/math/axpy/test_operator_axpy.cpp`. Same for Tiling side, need to add test file to `ASCENDC_TILING_TEST_SRC_FILES` list. | 425 | +Before executing UT cases, modify the [CMakeLists.txt](../../tests/api/adv_api/CMakeLists.txt) file. Since kernel function-side UTs and Tiling-side UTs have different test targets, add the test files to their respective targets. Using the kernel function-side UT for Atlas A2 training series products/Atlas A2 inference series products as an example, add the UT test file path to the case source file list `ASCENDC_TEST_ASCEND910B1_AIV_CASE_SRC_PART_FILES`, that is, add the new file path `${ASCENDC_TESTS_DIR}/math/axpy/test_operator_axpy.cpp`. For the Tiling-side UT, add the test file to the `ASCENDC_TILING_TEST_SRC_FILES` list. |
| 426 | ##### Execute UT | 426 | ##### Execute UT |
| 427 | - Execute all UT cases | 427 | - Execute all UT cases |
| 428 | 428 | ||
| @@ -436,7 +436,7 @@ Before executing UT cases, need to modify [CMakeLists.txt](../../tests/api/adv_a | |||
| 436 | ```c++ | 436 | ```c++ |
| 437 | ::testing::GTEST_FLAG(filter) = "*Axpy*"; | 437 | ::testing::GTEST_FLAG(filter) = "*Axpy*"; |
| 438 | ``` | 438 | ``` |
| 439 | - Modify [build.sh](../../build.sh), change all to needed UT target. Using Kernel side Ascend 910B1 UT as example, target is ascendc_utest_ascend910B1_AIV. | 439 | + Modify [build.sh](../../build.sh), change all to needed UT target. Using the Ascend 910B1 kernel function-side UT as an example, the target is ascendc_utest_ascend910B1_AIV. |
| 440 | ``` | 440 | ``` |
| 441 | function build_test() { | 441 | function build_test() { |
| 442 | cmake_config | 442 | cmake_config |
| @@ -733,7 +733,7 @@ dataCopyParams provides the header file directory of its data type and a detaile | |||
| 733 | 733 | ||
| 734 | | Parameter | Input/Output | Description | | 734 | | Parameter | Input/Output | Description | |
| 735 | | :--- | :---: | :--- | | 735 | | :--- | :---: | :--- | |
| 736 | -| dst | Output | Destination operand, type is [LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md), storage location is Unified Buffer, destination address must be 32-byte aligned. | | 736 | +| dst | Output | Destination operand, type is [LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md), storage location is Unified Buffer (UB), destination address must be 32-byte aligned. | |
| 737 | | src | Input | Source operand, type is [GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md), storage location is Global Memory, source address must be 1-byte aligned. | | 737 | | src | Input | Source operand, type is [GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md), storage location is Global Memory, source address must be 1-byte aligned. | |
| 738 | | dataCopyParams | Input | Transfer parameters. DataCopyExtParams type, for specific parameter descriptions, refer to [Table 3](#table_gm2ub_pad_3). | | 738 | | dataCopyParams | Input | Transfer parameters. DataCopyExtParams type, for specific parameter descriptions, refer to [Table 3](#table_gm2ub_pad_3). | |
| 739 | | padParams | Input | When transferring data from Global Memory to Local Memory, data can be padded on the left or right according to developer needs. padParams is the parameter used to control the data padding process. DataCopyPadExtParams type, for specific parameters, refer to [Table 4](#table_gm2ub_pad_4). | | 739 | | padParams | Input | When transferring data from Global Memory to Local Memory, data can be padded on the left or right according to developer needs. padParams is the parameter used to control the data padding process. DataCopyPadExtParams type, for specific parameters, refer to [Table 4](#table_gm2ub_pad_4). | |
| @@ -892,7 +892,7 @@ The return value is true/false. true indicates that the maximum and minimum temp | |||
| 892 | - Whether there are aspects in API usage, parameter configuration, or calculation result layout that developers may easily misunderstand or confuse. | 892 | - Whether there are aspects in API usage, parameter configuration, or calculation result layout that developers may easily misunderstand or confuse. |
| 893 | - Consider the impact of the interface on the current environment: after calling this interface, whether other APIs need to be called to restore the current environment. | 893 | - Consider the impact of the interface on the current environment: after calling this interface, whether other APIs need to be called to restore the current environment. |
| 894 | - Whether the API has differences in support for special data types (such as int4_t) and what to note when using them. | 894 | - Whether the API has differences in support for special data types (such as int4_t) and what to note when using them. |
| 895 | - - Whether the API has constraints on development methods, and whether both Kernel direct call and project-based development are supported. | 895 | + - Whether the API has constraints on development methods, and whether both direct kernel function calls and project-based development are supported. |
| 896 | - Whether the API has performance constraints, such as reduce fp16 performance being worse than fp32. | 896 | - Whether the API has performance constraints, such as reduce fp16 performance being worse than fp32. |
| 897 | 897 | ||
| 898 | Interface constraints must be comprehensive to ensure documentation completeness. | 898 | Interface constraints must be comprehensive to ensure documentation completeness. |
| @@ -978,7 +978,7 @@ For a detailed example, refer to [ReduceMax Sample](../../examples/01_simd_cpp_a | |||
| 978 | 978 | ||
| 979 | [Level] Mandatory | 979 | [Level] Mandatory |
| 980 | 980 | ||
| 981 | -[Description] Usage examples must not be strongly coupled to operator development methods (Kernel direct call development and project-based development). APIs that can only be used in one development method are exceptions. | 981 | +[Description] Usage examples must not be strongly coupled to operator development methods (direct kernel function calls and project-based development). APIs that can only be used in one development method are exceptions. |
| 982 | 982 | ||
| 983 | ### API-EXAMPLE-06 Sample Code Must Use Standard Namespace and Macro Definitions | 983 | ### API-EXAMPLE-06 Sample Code Must Use Standard Namespace and Macro Definitions |
| 984 | 984 | ||
| @@ -54,7 +54,7 @@ C API uses a **pointer-based programming model**: | |||
| 54 | ```cpp | 54 | ```cpp |
| 55 | // C API programming example | 55 | // C API programming example |
| 56 | constexpr uint32_t count = 64; | 56 | constexpr uint32_t count = 64; |
| 57 | -__ubuf__ half dst[count]; // Unified Buffer memory | 57 | +__ubuf__ half dst[count]; // Unified Buffer (UB) memory |
| 58 | __ubuf__ half src0[count]; | 58 | __ubuf__ half src0[count]; |
| 59 | __ubuf__ half src1[count]; | 59 | __ubuf__ half src1[count]; |
| 60 | 60 | ||
| @@ -410,4 +410,4 @@ ASCENDC_ASSERT(count <= ASC_CAPI_MAX_COUNT, | |||
| 410 | #endif | 410 | #endif |
| 411 | ``` | 411 | ``` |
| 412 | 412 | ||
| 413 | ---- | 413 | +--- |
| @@ -202,7 +202,7 @@ For Ascend 950PR/Ascend 950DT products: | |||
| 202 | 202 | ||
| 203 | **Requirements**: | 203 | **Requirements**: |
| 204 | - When different products use different layout formats (e.g., Zz vs Nz), **separate tables are required** | 204 | - When different products use different layout formats (e.g., Zz vs Nz), **separate tables are required** |
| 205 | -- Physical location uses Buffer names (L0A/L0B/L0C/UB, etc.) | 205 | +- Physical location uses Buffer names, such as L0A Buffer, L0B Buffer, L0C Buffer, and Unified Buffer (UB) |
| 206 | - Format uses fractal layout names (Zz/Zn/Nz/ND, etc.) | 206 | - Format uses fractal layout names (Zz/Zn/Nz/ND, etc.) |
| 207 | - If a bias matrix exists, annotate in the C matrix row: "Can support bias matrix Bias initialization, dimension 1 x N" | 207 | - If a bias matrix exists, annotate in the C matrix row: "Can support bias matrix Bias initialization, dimension 1 x N" |
| 208 | 208 | ||
| @@ -97,6 +97,8 @@ Establish a **unified terminology mapping table** (independent appendix file) sh | |||
| 97 | 97 | ||
| 98 | **Specific Requirements**: | 98 | **Specific Requirements**: |
| 99 | - Any code name / abbreviation that appears in the documentation must be annotated with its full name on first occurrence and linked to the mapping table | 99 | - Any code name / abbreviation that appears in the documentation must be annotated with its full name on first occurrence and linked to the mapping table |
| 100 | +- Use the term "kernel function" consistently in prose; keep code identifiers, API names, and link targets unchanged | ||
| 101 | +- On the first mention of Unified Buffer in each document, use "Unified Buffer (UB)", and use "UB" thereafter. API names, document titles, navigation or feature lists, compact table entries or headers, and data path labels may use "UB" as appropriate and do not count as the term's first occurrence. Keep code identifiers and link targets unchanged | ||
| 100 | - The same concept may use different-level names in different documents, but must have an equivalence relationship in the terminology mapping table | 102 | - The same concept may use different-level names in different documents, but must have an equivalence relationship in the terminology mapping table |
| 101 | - Terminology groups that must be mapped: DMA/MTE/DataCopy (three-layer name for the same transfer function), Local Memory/L1/`__cbuf__` (three-layer name for the same storage), etc. | 103 | - Terminology groups that must be mapped: DMA/MTE/DataCopy (three-layer name for the same transfer function), Local Memory/L1/`__cbuf__` (three-layer name for the same storage), etc. |
| 102 | 104 | ||
| @@ -153,6 +155,17 @@ Similar-named or hierarchically confusable concepts must be **explicitly disting | |||
| 153 | 155 | ||
| 154 | --- | 156 | --- |
| 155 | 157 | ||
| 158 | +### Clear Separation Between the Host Side and Kernel Function Side | ||
| 159 | + | ||
| 160 | +API documentation must clearly label and separate the Host side and kernel function side: | ||
| 161 | + | ||
| 162 | +- Each API page identifies its applicable side: Host side, kernel function side, or both. | ||
| 163 | +- Host-side APIs, such as Tiling calculation and workspace allocation, are presented separately from kernel function-side APIs, such as computation interfaces and data transfer. | ||
| 164 | +- The Programming Guide provides an overview of the division of responsibility between the Host side and kernel function side. | ||
| 165 | +- Concepts involving cross-side data transfer, such as workspace and Tiling, provide end-to-end call chain diagrams. | ||
| 166 | + | ||
| 167 | +--- | ||
| 168 | + | ||
| 156 | ## Completeness | 169 | ## Completeness |
| 157 | 170 | ||
| 158 | ### Content Completeness per Document Type | 171 | ### Content Completeness per Document Type |
| @@ -220,4 +233,4 @@ All version constraints in the documentation use unified annotation formats to e | |||
| 220 | | Constraints | Constraints appear at first concept mention | Not deferred to later chapters | | 233 | | Constraints | Constraints appear at first concept mention | Not deferred to later chapters | |
| 221 | | ISA | Hardware parameters consistent with ISA specs | Buffer sizes, alignment, and value ranges match specifications | | 234 | | ISA | Hardware parameters consistent with ISA specs | Buffer sizes, alignment, and value ranges match specifications | |
| 222 | | Examples | Code examples match current API signatures | No outdated parameter names or removed interfaces | | 235 | | Examples | Code examples match current API signatures | No outdated parameter names or removed interfaces | |
| 223 | -| Terminology | New terms added to terminology mapping table | No undocumented abbreviations or code names | | 236 | +| Terminology | New terms added to terminology mapping table | No undocumented abbreviations or code names | |
| @@ -111,7 +111,7 @@ EngineType engine // Compute engine | |||
| 111 | | `__in_pipe__(V)` | pipeline input annotation | `__aicore__ inline __in_pipe__(V) void Copy(...)` | | 111 | | `__in_pipe__(V)` | pipeline input annotation | `__aicore__ inline __in_pipe__(V) void Copy(...)` | |
| 112 | | `__out_pipe__(V)` | pipeline output annotation | `__aicore__ inline __out_pipe__(MTE3) void Copy(...)` | | 112 | | `__out_pipe__(V)` | pipeline output annotation | `__aicore__ inline __out_pipe__(MTE3) void Copy(...)` | |
| 113 | | `__BLOCK_LOCAL__ __inline__` | block-level thread-local variable | `__BLOCK_LOCAL__ __inline__ TPipe* g_tPipePtr` | | 113 | | `__BLOCK_LOCAL__ __inline__` | block-level thread-local variable | `__BLOCK_LOCAL__ __inline__ TPipe* g_tPipePtr` | |
| 114 | -| `__ubuf__` | Unified Buffer address space | `__ubuf__ half* dst` | | 114 | +| `__ubuf__` | UB address space | `__ubuf__ half* dst` | |
| 115 | 115 | ||
| 116 | --- | 116 | --- |
| 117 | 117 | ||
| @@ -119,7 +119,7 @@ EngineType engine // Compute engine | |||
| 119 | 119 | ||
| 120 | ### Interface Naming | 120 | ### Interface Naming |
| 121 | 121 | ||
| 122 | -Kernel-side `Axpy` ↔ Tiling-side `GetAxpyMaxMinTmpSize`: | 122 | +Kernel function `Axpy` ↔ Tiling function `GetAxpyMaxMinTmpSize`: |
| 123 | 123 | ||
| 124 | ```text | 124 | ```text |
| 125 | Get<ApiName>MaxMinTmpSize | 125 | Get<ApiName>MaxMinTmpSize |
| @@ -267,9 +267,9 @@ examples/ | |||
| 267 | │ ├── 02_features/ # Advanced features | 267 | │ ├── 02_features/ # Advanced features |
| 268 | │ ├── 03_basic_api/ # Basic API examples | 268 | │ ├── 03_basic_api/ # Basic API examples |
| 269 | │ │ └── 00_data_movement/ | 269 | │ │ └── 00_data_movement/ |
| 270 | -│ │ └── copy_ub2ub/ # UB to UB copy example | 270 | +│ │ └── copy_ub2ub/ # Unified Buffer (UB) to UB copy example |
| 271 | │ │ ├── CMakeLists.txt | 271 | │ │ ├── CMakeLists.txt |
| 272 | -│ │ ├── copy.asc # Kernel source (.asc extension) | 272 | +│ │ ├── copy.asc # Kernel function source (.asc extension) |
| 273 | │ │ ├── data_utils.h # Test data utilities | 273 | │ │ ├── data_utils.h # Test data utilities |
| 274 | │ │ └── README.md | 274 | │ │ └── README.md |
| 275 | │ ├── 04_advanced_api/ # High-level API examples | 275 | │ ├── 04_advanced_api/ # High-level API examples |
| @@ -287,7 +287,7 @@ examples/ | |||
| 287 | 287 | ||
| 288 | - Typical directory organization: `<api_type>/<category>/<api_name>/`, with some categories having deeper levels | 288 | - Typical directory organization: `<api_type>/<category>/<api_name>/`, with some categories having deeper levels |
| 289 | - Numeric prefixes ensure ordering: `00_introduction/`, `01_utilities/` | 289 | - Numeric prefixes ensure ordering: `00_introduction/`, `01_utilities/` |
| 290 | -- Kernel source files use `.asc` extension | 290 | +- Kernel function source files use `.asc` extension |
| 291 | - Each example must have its own `CMakeLists.txt` | 291 | - Each example must have its own `CMakeLists.txt` |
| 292 | - Each example is recommended to include `README.md` | 292 | - Each example is recommended to include `README.md` |
| 293 | 293 | ||
| @@ -90,7 +90,7 @@ tests/ | |||
| 90 | 90 | ||
| 91 | --- | 91 | --- |
| 92 | 92 | ||
| 93 | -## Kernel-Side UT Writing Standards | 93 | +## Kernel Function UT Writing Standards |
| 94 | 94 | ||
| 95 | ### File Structure (Three-Part) | 95 | ### File Structure (Three-Part) |
| 96 | 96 | ||
| @@ -99,7 +99,7 @@ tests/ | |||
| 99 | #include <gtest/gtest.h> | 99 | #include <gtest/gtest.h> |
| 100 | #include "kernel_operator.h" | 100 | #include "kernel_operator.h" |
| 101 | 101 | ||
| 102 | -// Part 2: Define test parameter struct and Kernel function | 102 | +// Part 2: Define test parameter struct and kernel function |
| 103 | struct AxpyTestParams { | 103 | struct AxpyTestParams { |
| 104 | int32_t dataSize; | 104 | int32_t dataSize; |
| 105 | int32_t dataBitSize; | 105 | int32_t dataBitSize; |
| @@ -110,7 +110,7 @@ struct AxpyTestParams { | |||
| 110 | template <typename T, typename U> | 110 | template <typename T, typename U> |
| 111 | void AxpyKernel(uint8_t* srcGm, uint8_t* dstGm, int32_t dataSize) | 111 | void AxpyKernel(uint8_t* srcGm, uint8_t* dstGm, int32_t dataSize) |
| 112 | { | 112 | { |
| 113 | - // Kernel implementation (see Kernel Function Implementation Template below) | 113 | + // Kernel function implementation (see Kernel Function Implementation Template below) |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | // Golden computation: element-wise dst = src * scalar + dst per T/U type | 116 | // Golden computation: element-wise dst = src * scalar + dst per T/U type |
| @@ -312,7 +312,7 @@ Then run `bash build.sh -t`. | |||
| 312 | 312 | ||
| 313 | ### Single Operator Testing | 313 | ### Single Operator Testing |
| 314 | 314 | ||
| 315 | -After completing the kernel-side code, perform end-to-end testing by setting up a custom operator project. See [Ascend C Programming Guide](https://www.hiascend.com/document/redirect/CannCommunityOpdevAscendC). | 315 | +After completing the kernel function code, perform end-to-end testing by setting up a custom operator project. See [Ascend C Programming Guide](https://www.hiascend.com/document/redirect/CannCommunityOpdevAscendC). |
| 316 | 316 | ||
| 317 | --- | 317 | --- |
| 318 | 318 | ||
| @@ -322,7 +322,7 @@ After completing the kernel-side code, perform end-to-end testing by setting up | |||
| 322 | 322 | ||
| 323 | | Scenario | Requirement | | 323 | | Scenario | Requirement | |
| 324 | |------|------| | 324 | |------|------| |
| 325 | -| New API | Must include kernel-side UT | | 325 | +| New API | Must include kernel function UT | |
| 326 | | New API (requires temporary space) | Must include tiling-side UT | | 326 | | New API (requires temporary space) | Must include tiling-side UT | |
| 327 | | Bug fix | Should add regression test cases | | 327 | | Bug fix | Should add regression test cases | |
| 328 | | New public header file | Must add Header Checker | | 328 | | New public header file | Must add Header Checker | |
| @@ -41,7 +41,7 @@ DataStoreBarrier(void) | |||
| 41 | 41 | ||
| 42 | ## 调用示例<a name="section82241477610"></a> | 42 | ## 调用示例<a name="section82241477610"></a> |
| 43 | 43 | ||
| 44 | -在AI CPU算子Kernel侧实现代码中调用AscendC::DataStoreBarrier\(\),确保AI CPU算子对Tiling数据的修改写入内存,使得AI Core算子能够正确读取Tiling数据: | 44 | +在AI CPU算子核函数(Kernel)侧实现代码中调用AscendC::DataStoreBarrier\(\),确保AI CPU算子对Tiling数据的修改写入内存,使得AI Core算子能够正确读取Tiling数据: |
| 45 | 45 | ||
| 46 | ``` | 46 | ``` |
| 47 | namespace KernelInfo { | 47 | namespace KernelInfo { |
| @@ -11,12 +11,12 @@ | |||
| 11 | </thead> | 11 | </thead> |
| 12 | <tbody><tr id="row19403174252116"><td class="cellrowborder" valign="top" width="37.419999999999995%" headers="mcps1.2.3.1.1 "><p id="p2040314420218"><a name="p2040314420218"></a><a name="p2040314420218"></a><a href="printf.md">printf</a></p> | 12 | <tbody><tr id="row19403174252116"><td class="cellrowborder" valign="top" width="37.419999999999995%" headers="mcps1.2.3.1.1 "><p id="p2040314420218"><a name="p2040314420218"></a><a name="p2040314420218"></a><a href="printf.md">printf</a></p> |
| 13 | </td> | 13 | </td> |
| 14 | -<td class="cellrowborder" valign="top" width="62.580000000000005%" headers="mcps1.2.3.1.2 "><p id="p340494292115"><a name="p340494292115"></a><a name="p340494292115"></a><span id="ph15404164211219"><a name="ph15404164211219"></a><a name="ph15404164211219"></a>该接口提供AI CPU算子Kernel调试场景下的格式化输出功能,默认将输出内容解析并打印在屏幕上。</span></p> | 14 | +<td class="cellrowborder" valign="top" width="62.580000000000005%" headers="mcps1.2.3.1.2 "><p id="p340494292115"><a name="p340494292115"></a><a name="p340494292115"></a><span id="ph15404164211219"><a name="ph15404164211219"></a><a name="ph15404164211219"></a>该接口提供AI CPU算子核函数(Kernel)调试场景下的格式化输出功能,默认将输出内容解析并打印在屏幕上。</span></p> |
| 15 | </td> | 15 | </td> |
| 16 | </tr> | 16 | </tr> |
| 17 | <tr id="row10404124212210"><td class="cellrowborder" valign="top" width="37.419999999999995%" headers="mcps1.2.3.1.1 "><p id="p129831814226"><a name="p129831814226"></a><a name="p129831814226"></a><a href="assert.md">assert</a></p> | 17 | <tr id="row10404124212210"><td class="cellrowborder" valign="top" width="37.419999999999995%" headers="mcps1.2.3.1.1 "><p id="p129831814226"><a name="p129831814226"></a><a name="p129831814226"></a><a href="assert.md">assert</a></p> |
| 18 | </td> | 18 | </td> |
| 19 | -<td class="cellrowborder" valign="top" width="62.580000000000005%" headers="mcps1.2.3.1.2 "><p id="p1404204252114"><a name="p1404204252114"></a><a name="p1404204252114"></a><span id="ph040464220211"><a name="ph040464220211"></a><a name="ph040464220211"></a>该接口实现AI CPU算子Kernel调试场景下的assert断言功能。</span></p> | 19 | +<td class="cellrowborder" valign="top" width="62.580000000000005%" headers="mcps1.2.3.1.2 "><p id="p1404204252114"><a name="p1404204252114"></a><a name="p1404204252114"></a><span id="ph040464220211"><a name="ph040464220211"></a><a name="ph040464220211"></a>该接口实现AI CPU算子核函数(Kernel)调试场景下的assert断言功能。</span></p> |
| 20 | </td> | 20 | </td> |
| 21 | </tr> | 21 | </tr> |
| 22 | <tr id="row1568314516298"><td class="cellrowborder" valign="top" width="37.419999999999995%" headers="mcps1.2.3.1.1 "><p id="p86839512291"><a name="p86839512291"></a><a name="p86839512291"></a><a href="DataStoreBarrier.md">DataStoreBarrier</a></p> | 22 | <tr id="row1568314516298"><td class="cellrowborder" valign="top" width="37.419999999999995%" headers="mcps1.2.3.1.1 "><p id="p86839512291"><a name="p86839512291"></a><a name="p86839512291"></a><a href="DataStoreBarrier.md">DataStoreBarrier</a></p> |
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | ## 功能说明<a name="section259105813316"></a> | 14 | ## 功能说明<a name="section259105813316"></a> |
| 15 | 15 | ||
| 16 | -该接口实现AI CPU算子Kernel调试场景下的assert断言功能。 | 16 | +该接口实现AI CPU算子核函数(Kernel)调试场景下的assert断言功能。 |
| 17 | 17 | ||
| 18 | 算子执行中,如果assert内部条件判断不为真,则输出assert条件、触发文件名、行号等信息。 | 18 | 算子执行中,如果assert内部条件判断不为真,则输出assert条件、触发文件名、行号等信息。 |
| 19 | 19 | ||
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | ## 功能说明<a name="section259105813316"></a> | 14 | ## 功能说明<a name="section259105813316"></a> |
| 15 | 15 | ||
| 16 | -该接口提供AI CPU算子Kernel调试场景下的格式化输出功能,默认将输出内容解析并打印在屏幕上。 | 16 | +该接口提供AI CPU算子核函数(Kernel)调试场景下的格式化输出功能,默认将输出内容解析并打印在屏幕上。 |
| 17 | 17 | ||
| 18 | ## 需要包含的头文件<a name="section78885814919"></a> | 18 | ## 需要包含的头文件<a name="section78885814919"></a> |
| 19 | 19 | ||
| @@ -77,7 +77,7 @@ void printf(const char* fmt, ...) | |||
| 77 | 77 | ||
| 78 | ## 调用示例<a name="section82241477610"></a> | 78 | ## 调用示例<a name="section82241477610"></a> |
| 79 | 79 | ||
| 80 | -在算子Kernel侧实现代码中需要输出日志信息的地方调用printf接口打印相关内容。样例如下: | 80 | +在算子核函数(Kernel)侧实现代码中需要输出日志信息的地方调用printf接口打印相关内容。样例如下: |
| 81 | 81 | ||
| 82 | ``` | 82 | ``` |
| 83 | #include "aicpu_api.h" | 83 | #include "aicpu_api.h" |
| @@ -815,7 +815,7 @@ | |||
| 815 | - [REGISTER\_TILING\_DEFAULT](SIMD-API/basic_api/Kernel-Tiling/REGISTER_TILING_DEFAULT.md) | 815 | - [REGISTER\_TILING\_DEFAULT](SIMD-API/basic_api/Kernel-Tiling/REGISTER_TILING_DEFAULT.md) |
| 816 | - [REGISTER\_TILING\_FOR\_TILINGKEY](SIMD-API/basic_api/Kernel-Tiling/REGISTER_TILING_FOR_TILINGKEY.md) | 816 | - [REGISTER\_TILING\_FOR\_TILINGKEY](SIMD-API/basic_api/Kernel-Tiling/REGISTER_TILING_FOR_TILINGKEY.md) |
| 817 | - [REGISTER\_NONE\_TILING](SIMD-API/basic_api/Kernel-Tiling/REGISTER_NONE_TILING.md) | 817 | - [REGISTER\_NONE\_TILING](SIMD-API/basic_api/Kernel-Tiling/REGISTER_NONE_TILING.md) |
| 818 | - - [设置Kernel类型](SIMD-API/basic_api/Kernel-Tiling/set_Kernel_type.md) | 818 | + - [设置核函数(Kernel)类型](SIMD-API/basic_api/Kernel-Tiling/set_Kernel_type.md) |
| 819 | 819 | ||
| 820 | - [特殊寄存器访问](SIMD-API/basic_api/special_register_access/special_register_access.md) | 820 | - [特殊寄存器访问](SIMD-API/basic_api/special_register_access/special_register_access.md) |
| 821 | - [GetSpr](SIMD-API/basic_api/special_register_access/GetSpr.md) | 821 | - [GetSpr](SIMD-API/basic_api/special_register_access/GetSpr.md) |
| @@ -1597,7 +1597,7 @@ | |||
| 1597 | - [更多样例](SIMD-API/adv_api/math_compute/more_examples.md) | 1597 | - [更多样例](SIMD-API/adv_api/math_compute/more_examples.md) |
| 1598 | 1598 | ||
| 1599 | - [矩阵计算](SIMD-API/adv_api/cube_compute/cube_compute.md) | 1599 | - [矩阵计算](SIMD-API/adv_api/cube_compute/cube_compute.md) |
| 1600 | - - [Matmul Kernel侧接口](SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_Kernel.md) | 1600 | + - [Matmul核函数(Kernel)侧接口](SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_Kernel.md) |
| 1601 | - [Matmul使用说明](SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_usage.md) | 1601 | - [Matmul使用说明](SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_usage.md) |
| 1602 | - [Matmul模板参数](SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_template_params.md) | 1602 | - [Matmul模板参数](SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_template_params.md) |
| 1603 | - [MatmulConfig](SIMD-API/adv_api/cube_compute/Matmul_Kernel/MatmulConfig.md) | 1603 | - [MatmulConfig](SIMD-API/adv_api/cube_compute/Matmul_Kernel/MatmulConfig.md) |
| @@ -1874,7 +1874,7 @@ | |||
| 1874 | - [Fill](SIMD-API/adv_api/tensor_transform/Fill.md) | 1874 | - [Fill](SIMD-API/adv_api/tensor_transform/Fill.md) |
| 1875 | 1875 | ||
| 1876 | - [HCCL通信类](SIMD-API/adv_api/HCCL_communication/HCCL_communication.md) | 1876 | - [HCCL通信类](SIMD-API/adv_api/HCCL_communication/HCCL_communication.md) |
| 1877 | - - [HCCL Kernel侧接口](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_Kernel.md) | 1877 | + - [HCCL核函数(Kernel)侧接口](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_Kernel.md) |
| 1878 | - [HCCL使用说明](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_usage.md) | 1878 | - [HCCL使用说明](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_usage.md) |
| 1879 | - [HCCL模板参数](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_template_params.md) | 1879 | - [HCCL模板参数](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_template_params.md) |
| 1880 | - [InitV2](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/InitV2.md) | 1880 | - [InitV2](SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/InitV2.md) |
| @@ -1926,7 +1926,7 @@ | |||
| 1926 | - [GetHcclContext](SIMD-API/adv_api/HCCL_communication/HCCL-Context/GetHcclContext.md) | 1926 | - [GetHcclContext](SIMD-API/adv_api/HCCL_communication/HCCL-Context/GetHcclContext.md) |
| 1927 | 1927 | ||
| 1928 | - [卷积计算](SIMD-API/adv_api/convolution_compute/convolution_compute.md) | 1928 | - [卷积计算](SIMD-API/adv_api/convolution_compute/convolution_compute.md) |
| 1929 | - - [Conv3D Kernel侧接口](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Conv3d_Kernel.md) | 1929 | + - [Conv3D核函数(Kernel)侧接口](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Conv3d_Kernel.md) |
| 1930 | - [Conv3D使用说明](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Conv3D_usage.md) | 1930 | - [Conv3D使用说明](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Conv3D_usage.md) |
| 1931 | - [Conv3D模板参数](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Conv3D_template_params.md) | 1931 | - [Conv3D模板参数](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Conv3D_template_params.md) |
| 1932 | - [Init](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Init.md) | 1932 | - [Init](SIMD-API/adv_api/convolution_compute/Conv3D_Kernel/Init.md) |
| @@ -1956,7 +1956,7 @@ | |||
| 1956 | - [SetStride](SIMD-API/adv_api/convolution_compute/Conv3D_Tiling/SetStride.md) | 1956 | - [SetStride](SIMD-API/adv_api/convolution_compute/Conv3D_Tiling/SetStride.md) |
| 1957 | - [SetGroups](SIMD-API/adv_api/convolution_compute/Conv3D_Tiling/SetGroups.md) | 1957 | - [SetGroups](SIMD-API/adv_api/convolution_compute/Conv3D_Tiling/SetGroups.md) |
| 1958 | 1958 | ||
| 1959 | - - [Conv3DBackpropInput Kernel侧接口](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Conv3DBackpropInput_Kernel.md) | 1959 | + - [Conv3DBackpropInput核函数(Kernel)侧接口](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Conv3DBackpropInput_Kernel.md) |
| 1960 | - [Conv3DBackpropInput使用说明](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Conv3DBackpropInput_usage.md) | 1960 | - [Conv3DBackpropInput使用说明](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Conv3DBackpropInput_usage.md) |
| 1961 | - [Init](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Init.md) | 1961 | - [Init](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Init.md) |
| 1962 | - [SetGradOutput](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/SetGradOutput.md) | 1962 | - [SetGradOutput](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/SetGradOutput.md) |
| @@ -1983,7 +1983,7 @@ | |||
| 1983 | - [SetDilation](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/SetDilation.md) | 1983 | - [SetDilation](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/SetDilation.md) |
| 1984 | - [SetOutputPadding](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/SetOutputPadding.md) | 1984 | - [SetOutputPadding](SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/SetOutputPadding.md) |
| 1985 | 1985 | ||
| 1986 | - - [Conv3DBackpropFilter Kernel侧接口](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_Kernel.md) | 1986 | + - [Conv3DBackpropFilter核函数(Kernel)侧接口](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_Kernel.md) |
| 1987 | - [Conv3DBackpropFilter使用说明](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_usage.md) | 1987 | - [Conv3DBackpropFilter使用说明](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_usage.md) |
| 1988 | - [Init](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Init.md) | 1988 | - [Init](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Init.md) |
| 1989 | - [SetInput](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/SetInput.md) | 1989 | - [SetInput](SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/SetInput.md) |
| @@ -2022,7 +2022,7 @@ | |||
| 2022 | - [内置数据类型](SIMT-API/SIMT_programming_intro/extended_syntax/builtin_data_types.md) | 2022 | - [内置数据类型](SIMT-API/SIMT_programming_intro/extended_syntax/builtin_data_types.md) |
| 2023 | - [内置变量](SIMT-API/SIMT_programming_intro/extended_syntax/builtin_variables.md) | 2023 | - [内置变量](SIMT-API/SIMT_programming_intro/extended_syntax/builtin_variables.md) |
| 2024 | - [内置宏](SIMT-API/SIMT_programming_intro/extended_syntax/builtin_macros.md) | 2024 | - [内置宏](SIMT-API/SIMT_programming_intro/extended_syntax/builtin_macros.md) |
| 2025 | - - [核函数配置](SIMT-API/SIMT_programming_intro/extended_syntax/kernel_function_config.md) | 2025 | + - [核函数(Kernel)配置](SIMT-API/SIMT_programming_intro/extended_syntax/kernel_function_config.md) |
| 2026 | 2026 | ||
| 2027 | - [API列表](SIMT-API/SIMT_programming_intro/api_list.md) | 2027 | - [API列表](SIMT-API/SIMT_programming_intro/api_list.md) |
| 2028 | 2028 | ||
| @@ -2034,7 +2034,7 @@ | |||
| 2034 | - [内置数据类型](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_data_types.md) | 2034 | - [内置数据类型](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_data_types.md) |
| 2035 | - [内置变量](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_variables.md) | 2035 | - [内置变量](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_variables.md) |
| 2036 | - [内置宏](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_macros.md) | 2036 | - [内置宏](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_macros.md) |
| 2037 | - - [核函数配置](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/kernel_function_config.md) | 2037 | + - [核函数(Kernel)配置](SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/kernel_function_config.md) |
| 2038 | 2038 | ||
| 2039 | - [API列表](SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md) | 2039 | - [API列表](SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md) |
| 2040 | 2040 | ||
| @@ -1,4 +1,4 @@ | |||
| 1 | -# HCCL Kernel侧接口 | 1 | +# HCCL核函数(Kernel)侧接口 |
| 2 | 2 | ||
| 3 | - **[HCCL使用说明](HCCL_usage.md)** | 3 | - **[HCCL使用说明](HCCL_usage.md)** |
| 4 | 4 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # HCCL使用说明 | 1 | # HCCL使用说明 |
| 2 | 2 | ||
| 3 | -Ascend C提供一组HCCL通信类高阶API,方便算子Kernel开发用户在AI Core侧灵活管理通算融合算子中计算与通信任务的执行顺序。 | 3 | +Ascend C提供一组HCCL通信类高阶API,方便算子核函数(Kernel)开发用户在AI Core侧灵活管理通算融合算子中计算与通信任务的执行顺序。 |
| 4 | 4 | ||
| 5 | HCCL为**集合通信任务客户端**,主要对外提供了集合通信原语接口(以下统称为Prepare接口),对标[集合通信C++接口](https://gitcode.com/cann/hccl/blob/master/docs/zh/api_ref/comm_op_interface/README.md),当前支持[AllReduce](AllReduce.md)、[AllGather](AllGather.md)、[ReduceScatter](ReduceScatter.md)、[AlltoAll](AlltoAll.md)、[AlltoAllV](AlltoAllV.md)、[AlltoAllvWrite](AlltoAllvWrite.md)、[BatchWrite](BatchWrite.md)接口。本章的所有接口运行在AI Core上,且不执行通信任务,而是由用户调用Prepare接口将对应类型的通信任务信息发送给AI CPU或CCU服务端,并在合适的时机通过[Commit](Commit.md)接口通知AI CPU或CCU上的服务端执行对应的通信任务。<!-- npu="950" id1 -->注意,当前Ascend 950PR/Ascend 950DT上仅支持CCU服务端。<!-- end id1 --> | 5 | HCCL为**集合通信任务客户端**,主要对外提供了集合通信原语接口(以下统称为Prepare接口),对标[集合通信C++接口](https://gitcode.com/cann/hccl/blob/master/docs/zh/api_ref/comm_op_interface/README.md),当前支持[AllReduce](AllReduce.md)、[AllGather](AllGather.md)、[ReduceScatter](ReduceScatter.md)、[AlltoAll](AlltoAll.md)、[AlltoAllV](AlltoAllV.md)、[AlltoAllvWrite](AlltoAllvWrite.md)、[BatchWrite](BatchWrite.md)接口。本章的所有接口运行在AI Core上,且不执行通信任务,而是由用户调用Prepare接口将对应类型的通信任务信息发送给AI CPU或CCU服务端,并在合适的时机通过[Commit](Commit.md)接口通知AI CPU或CCU上的服务端执行对应的通信任务。<!-- npu="950" id1 -->注意,当前Ascend 950PR/Ascend 950DT上仅支持CCU服务端。<!-- end id1 --> |
| 6 | 6 | ||
| @@ -39,7 +39,7 @@ HCCL为**集合通信任务客户端**,主要对外提供了集合通信原语 | |||
| 39 | hccl.InitV2(contextGM, &tilingData); | 39 | hccl.InitV2(contextGM, &tilingData); |
| 40 | ``` | 40 | ``` |
| 41 | 41 | ||
| 42 | - 当调用InitV2接口时,必须使用标准C++语法定义TilingData结构体的开发方式。如上示例代码中的tilingGM为host侧传入的、作为核函数入参的算子TilingData的GM地址,通过[GET\_TILING\_DATA\_WITH\_STRUCT](../../../basic_api/Kernel-Tiling/GET_TILING_DATA_WITH_STRUCT.md)获取TilingData。调用[InitV2](InitV2.md)初始化接口时,需要传入通信上下文信息,可以通过框架提供的获取通信上下文的接口[GetHcclContext](../HCCL-Context/GetHcclContext.md)获取。 | 42 | + 当调用InitV2接口时,必须使用标准C++语法定义TilingData结构体的开发方式。如上示例代码中的tilingGM为host侧传入的、作为核函数(Kernel)入参的算子TilingData的GM地址,通过[GET\_TILING\_DATA\_WITH\_STRUCT](../../../basic_api/Kernel-Tiling/GET_TILING_DATA_WITH_STRUCT.md)获取TilingData。调用[InitV2](InitV2.md)初始化接口时,需要传入通信上下文信息,可以通过框架提供的获取通信上下文的接口[GetHcclContext](../HCCL-Context/GetHcclContext.md)获取。 |
| 43 | 43 | ||
| 44 | 2. 设置对应通信算法的Tiling地址。 | 44 | 2. 设置对应通信算法的Tiling地址。 |
| 45 | 45 | ||
| @@ -39,7 +39,7 @@ __aicore__ inline void InitV2(GM_ADDR context, const void* initTiling) | |||
| 39 | | 参数名 | 输入/输出 | 描述 | | 39 | | 参数名 | 输入/输出 | 描述 | |
| 40 | | --- | --- | --- | | 40 | | --- | --- | --- | |
| 41 | | context | 输入 | 通信上下文,包含rankDim,rankID等相关信息。通过框架提供的获取通信上下文的接口[GetHcclContext](../HCCL-Context/GetHcclContext.md)获取context。 | | 41 | | context | 输入 | 通信上下文,包含rankDim,rankID等相关信息。通过框架提供的获取通信上下文的接口[GetHcclContext](../HCCL-Context/GetHcclContext.md)获取context。 | |
| 42 | -| initTiling | 输入 | 通信域初始化[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)的地址。[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)在Host侧计算得出,具体请参考[表1 Mc2InitTiling参数说明](../HCCL_Tiling/TilingData_struct.md#table4835205712588),由框架传递到Kernel函数中使用。 | | 42 | +| initTiling | 输入 | 通信域初始化[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)的地址。[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)在Host侧计算得出,具体请参考[表1 Mc2InitTiling参数说明](../HCCL_Tiling/TilingData_struct.md#table4835205712588),由框架传递到核函数(Kernel)中使用。 | |
| 43 | 43 | ||
| 44 | ## 返回值说明 | 44 | ## 返回值说明 |
| 45 | 45 | ||
| @@ -42,7 +42,7 @@ __aicore__ inline void Init(GM_ADDR context, __gm__ void* initTiling = nullptr) | |||
| 42 | | 参数名 | 输入/输出 | 描述 | | 42 | | 参数名 | 输入/输出 | 描述 | |
| 43 | | --- | --- | --- | | 43 | | --- | --- | --- | |
| 44 | | context | 输入 | 通信上下文,包含rankDim,rankID等相关信息。 | | 44 | | context | 输入 | 通信上下文,包含rankDim,rankID等相关信息。 | |
| 45 | -| initTiling | 输入 | 可选参数,通信域初始化[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)的地址。[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)在Host侧计算得出,具体请参考[表1 Mc2InitTiling参数说明](../HCCL_Tiling/TilingData_struct.md#table4835205712588),由框架传递到Kernel函数中使用,完整示例请参考[8.13.1.2-调用示例](HCCL_template_params.md#调用示例)。 | | 45 | +| initTiling | 输入 | 可选参数,通信域初始化[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)的地址。[Mc2InitTiling](../HCCL_Tiling/TilingData_struct.md#table4835205712588)在Host侧计算得出,具体请参考[表1 Mc2InitTiling参数说明](../HCCL_Tiling/TilingData_struct.md#table4835205712588),由框架传递到核函数(Kernel)中使用,完整示例请参考[8.13.1.2-调用示例](HCCL_template_params.md#调用示例)。 | |
| 46 | 46 | ||
| 47 | ## 返回值说明 | 47 | ## 返回值说明 |
| 48 | 48 | ||
| @@ -4,7 +4,7 @@ | |||
| 4 | >本章节详述通信算子必需的TilingData结构体。本章节提供了三个版本的TilingData,建议使用[TilingData结构体](TilingData_struct.md),不推荐使用[v1版本TilingData(废弃)](v1_TilingData_deprecated.md)和[v2版本TilingData(废弃)](v2_TilingData_deprecated.md)。 | 4 | >本章节详述通信算子必需的TilingData结构体。本章节提供了三个版本的TilingData,建议使用[TilingData结构体](TilingData_struct.md),不推荐使用[v1版本TilingData(废弃)](v1_TilingData_deprecated.md)和[v2版本TilingData(废弃)](v2_TilingData_deprecated.md)。 |
| 5 | >对于[TilingData结构体](TilingData_struct.md),在定义通算融合算子的Tiling结构体时,[Mc2InitTiling](TilingData_struct.md#table4835205712588)必须定义为算子Tiling结构体的第一个参数,[Mc2CcTiling](TilingData_struct.md#table678914014562)对于在算子Tiling结构体中被定义的位置没有要求。 | 5 | >对于[TilingData结构体](TilingData_struct.md),在定义通算融合算子的Tiling结构体时,[Mc2InitTiling](TilingData_struct.md#table4835205712588)必须定义为算子Tiling结构体的第一个参数,[Mc2CcTiling](TilingData_struct.md#table678914014562)对于在算子Tiling结构体中被定义的位置没有要求。 |
| 6 | 6 | ||
| 7 | -Ascend C提供一组HCCL Tiling API,方便用户获取HCCL Kernel计算时所需的Tiling参数。您只需要传入通信的相关信息,调用API接口,即可获取通信相关的Tiling参数。 | 7 | +Ascend C提供一组HCCL Tiling API,方便用户获取HCCL核函数(Kernel)计算时所需的Tiling参数。您只需要传入通信的相关信息,调用API接口,即可获取通信相关的Tiling参数。 |
| 8 | 8 | ||
| 9 | HCCL Tiling API获取Tiling参数的流程如下: | 9 | HCCL Tiling API获取Tiling参数的流程如下: |
| 10 | 10 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -在算子实现中,由Tiling组装通信配置项,核函数实现时将Tiling配置项通过入参传递给Kernel侧通信API做通信计算。本节TilingData结构体包括[Mc2InitTiling](#table4835205712588)和[Mc2CcTiling](#table678914014562),这两个结构体均通过调用[GetTiling](GetTiling.md)接口返回。其中,[Mc2CcTiling](#table678914014562)为具体每个通信任务的参数配置,当算子中有多个通信任务时,可定义多个[Mc2CcTiling](#table678914014562)参数(最多支持定义8个)。 | 5 | +在算子实现中,由Tiling组装通信配置项,核函数(Kernel)实现时将Tiling配置项通过入参传递给核函数(Kernel)侧通信API做通信计算。本节TilingData结构体包括[Mc2InitTiling](#table4835205712588)和[Mc2CcTiling](#table678914014562),这两个结构体均通过调用[GetTiling](GetTiling.md)接口返回。其中,[Mc2CcTiling](#table678914014562)为具体每个通信任务的参数配置,当算子中有多个通信任务时,可定义多个[Mc2CcTiling](#table678914014562)参数(最多支持定义8个)。 |
| 6 | 6 | ||
| 7 | ## 参数说明 | 7 | ## 参数说明 |
| 8 | 8 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # HCCL通信类 | 1 | # HCCL通信类 |
| 2 | 2 | ||
| 3 | -- **[HCCL Kernel侧接口](HCCL_Kernel/HCCL_Kernel.md)** | 3 | +- **[HCCL核函数(Kernel)侧接口](HCCL_Kernel/HCCL_Kernel.md)** |
| 4 | 4 | ||
| 5 | - **[HCCL Tiling侧接口](HCCL_Tiling/HCCL_Tiling.md)** | 5 | - **[HCCL Tiling侧接口](HCCL_Tiling/HCCL_Tiling.md)** |
| 6 | 6 | ||
| @@ -22,7 +22,7 @@ void GetGeGLUMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | |
| 25 | -| maxValue | 输出 | GeGLU接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | GeGLU接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | GeGLU接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | GeGLU接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -9,19 +9,19 @@ kernel侧Gelu、FasterGelu、FasterGeluV2接口的计算需要开发者预留/ | |||
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| 12 | -- 获取Kernel接口计算所需最大临时空间大小的接口 | 12 | +- 获取核函数(Kernel)接口计算所需最大临时空间大小的接口 |
| 13 | 13 | ||
| 14 | ``` | 14 | ``` |
| 15 | uint32_t GetGeluMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize) | 15 | uint32_t GetGeluMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize) |
| 16 | ``` | 16 | ``` |
| 17 | 17 | ||
| 18 | -- 获取Kernel接口计算所需最小临时空间大小 | 18 | +- 获取核函数(Kernel)接口计算所需最小临时空间大小 |
| 19 | 19 | ||
| 20 | ``` | 20 | ``` |
| 21 | uint32_t GetGeluMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize) | 21 | uint32_t GetGeluMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize) |
| 22 | ``` | 22 | ``` |
| 23 | 23 | ||
| 24 | -- 获取Kernel接口计算所需最大/最小临时空间的接口 | 24 | +- 获取核函数(Kernel)接口计算所需最大/最小临时空间的接口 |
| 25 | 25 | ||
| 26 | ``` | 26 | ``` |
| 27 | void GetGeluMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, uint32_t& maxValue, uint32_t& minValue) | 27 | void GetGeluMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t typeSize, uint32_t& maxValue, uint32_t& minValue) |
| @@ -35,7 +35,7 @@ kernel侧Gelu、FasterGelu、FasterGeluV2接口的计算需要开发者预留/ | |||
| 35 | | --- | --- | --- | | 35 | | --- | --- | --- | |
| 36 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 36 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 37 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 37 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 38 | -| maxValue | 输出 | Gelu、FasterGelu、FasterGeluV2接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 38 | +| maxValue | 输出 | Gelu、FasterGelu、FasterGeluV2接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 39 | | minValue | 输出 | Gelu、FasterGelu、FasterGeluV2接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 39 | | minValue | 输出 | Gelu、FasterGelu、FasterGeluV2接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 40 | 40 | ||
| 41 | ## 返回值说明 | 41 | ## 返回值说明 |
| @@ -9,7 +9,7 @@ kernel侧LogSoftMax接口的计算需要开发者预留/申请临时空间,以 | |||
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| 12 | -- 获取Kernel接口计算所需最大/最小临时空间的接口 | 12 | +- 获取核函数(Kernel)接口计算所需最大/最小临时空间的接口 |
| 13 | 13 | ||
| 14 | ``` | 14 | ``` |
| 15 | uint32_t GetLogSoftMaxMaxTmpSize(const AscendC::TensorShape srcShape, const uint32_t dataTypeSize, const bool isReuseSource) | 15 | uint32_t GetLogSoftMaxMaxTmpSize(const AscendC::TensorShape srcShape, const uint32_t dataTypeSize, const bool isReuseSource) |
| @@ -71,6 +71,6 @@ bool isReuseSource = false; | |||
| 71 | 71 | ||
| 72 | // 获取计算所需最大临时空间 | 72 | // 获取计算所需最大临时空间 |
| 73 | const uint32_t tmpsize = AscendC::GetLogSoftMaxMaxTmpSize(shape, dtypesize, isReuseSource); | 73 | const uint32_t tmpsize = AscendC::GetLogSoftMaxMaxTmpSize(shape, dtypesize, isReuseSource); |
| 74 | -// 计算最优分片策略并填充到tilingData结构体中,供Kernel端使用。 | 74 | +// 计算最优分片策略并填充到tilingData结构体中,供核函数(Kernel)端使用。 |
| 75 | AscendC::LogSoftMaxTilingFunc(shape, dtypesize, tmpsize, tilingData); | 75 | AscendC::LogSoftMaxTilingFunc(shape, dtypesize, tmpsize, tilingData); |
| 76 | ``` | 76 | ``` |
| @@ -22,7 +22,7 @@ void GetReGluMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | |
| 25 | -| maxValue | 输出 | ReGlu接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | ReGlu接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | ReGlu接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | ReGlu接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetSigmoidMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_ | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sigmoid接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sigmoid接口一致。 | |
| 25 | -| maxValue | 输出 | Sigmoid接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Sigmoid接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Sigmoid接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Sigmoid接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -19,7 +19,7 @@ inline void GetSiluTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 19 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 19 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 20 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2,即sizeof(half)。 | | 20 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2,即sizeof(half)。 | |
| 21 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | | 21 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | |
| 22 | -| maxValue | 输出 | Silu接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 22 | +| maxValue | 输出 | Silu接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 23 | | minValue | 输出 | Silu接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 23 | | minValue | 输出 | Silu接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 24 | 24 | ||
| 25 | ## 返回值说明 | 25 | ## 返回值说明 |
Mdocs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftMax-SimpleSoftMax-Tiling.md+1-1
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| 9 | -- 获取Kernel接口计算所需最大/最小临时空间的接口 | 9 | +- 获取核函数(Kernel)接口计算所需最大/最小临时空间的接口 |
| 10 | 10 | ||
| 11 | ``` | 11 | ``` |
| 12 | uint32_t GetSoftMaxMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize, const bool isReuseSource) | 12 | uint32_t GetSoftMaxMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize, const bool isReuseSource) |
| @@ -85,7 +85,7 @@ Ascend C提供一组SoftMax Tiling API,方便用户获取SoftMax kernel计算 | |||
| 85 | } // namespace optiling | 85 | } // namespace optiling |
| 86 | ``` | 86 | ``` |
| 87 | 87 | ||
| 88 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的SoftMax Tiling信息传入SoftMax接口参与计算。完整的kernel侧样例请参考[调用示例](SoftMax.md#调用示例)。 | 88 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的SoftMax Tiling信息传入SoftMax接口参与计算。完整的kernel侧样例请参考[调用示例](SoftMax.md#调用示例)。 |
| 89 | 89 | ||
| 90 | ``` | 90 | ``` |
| 91 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) | 91 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) |
Mdocs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftmaxFlashV2_Tiling_interface.md+1-1
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| 9 | -- 获取Kernel接口计算所需最小/最大临时空间的接口 | 9 | +- 获取核函数(Kernel)接口计算所需最小/最大临时空间的接口 |
| 10 | 10 | ||
| 11 | ``` | 11 | ``` |
| 12 | uint32_t GetSoftMaxFlashV2MinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize1, const uint32_t dataTypeSize2, const bool isUpdate, const bool isBasicBlock = false, const bool isFlashOutputBrc = false) | 12 | uint32_t GetSoftMaxFlashV2MinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize1, const uint32_t dataTypeSize2, const bool isUpdate, const bool isBasicBlock = false, const bool isFlashOutputBrc = false) |
Mdocs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftmaxFlashV3_Tiling_interface.md+8-8
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| 9 | -- 获取Kernel接口计算所需最小/最大临时空间的接口 | 9 | +- 获取核函数(Kernel)接口计算所需最小/最大临时空间的接口 |
| 10 | 10 | ||
| 11 | ``` | 11 | ``` |
| 12 | void GetSoftMaxFlashV3MaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize1, const uint32_t dataTypeSize2, uint32_t& maxValue, uint32_t& minValue, const bool isUpdate, const bool isBasicBlock = false) | 12 | void GetSoftMaxFlashV3MaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize1, const uint32_t dataTypeSize2, uint32_t& maxValue, uint32_t& minValue, const bool isUpdate, const bool isBasicBlock = false) |
| @@ -32,11 +32,11 @@ | |||
| 32 | | 参数名 | 输入/输出 | 功能 | | 32 | | 参数名 | 输入/输出 | 功能 | |
| 33 | | --- | --- | --- | | 33 | | --- | --- | --- | |
| 34 | | srcShape | 输入 | 输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 34 | | srcShape | 输入 | 输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 35 | -| dataTypeSize1 | 输入 | 输入srcTensor的数据类型大小,即对应SoftMaxFlashV3 Kernel函数中模板参数T的数据类型大小。当前模板参数T仅支持half类型,故此参数只支持取值为2。 | | 35 | +| dataTypeSize1 | 输入 | 输入srcTensor的数据类型大小,即对应SoftMaxFlashV3核函数(Kernel)中模板参数T的数据类型大小。当前模板参数T仅支持half类型,故此参数只支持取值为2。 | |
| 36 | -| dataTypeSize2 | 输入 | 输入inMeanTensor、inExpSumTensor、inMaxTensor的数据类型大小,即对应SoftMaxFlashV3 Kernel函数中模板参数U的数据类型大小。当前模板参数U仅支持float类型,故此参数只支持取值为4。 | | 36 | +| dataTypeSize2 | 输入 | 输入inMeanTensor、inExpSumTensor、inMaxTensor的数据类型大小,即对应SoftMaxFlashV3核函数(Kernel)中模板参数U的数据类型大小。当前模板参数U仅支持float类型,故此参数只支持取值为4。 | |
| 37 | -| maxValue | 输出 | SoftMaxFlashV3接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 37 | +| maxValue | 输出 | SoftMaxFlashV3接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 38 | | minValue | 输出 | SoftMaxFlashV3接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 38 | | minValue | 输出 | SoftMaxFlashV3接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 39 | -| isUpdate | 输入 | 是否开启SoftMaxFlashV3 update为true的公式计算。该参数取值与SoftmaxFlashV3 Kernel接口的模板参数isUpdate保持一致。 | | 39 | +| isUpdate | 输入 | 是否开启SoftMaxFlashV3 update为true的公式计算。该参数取值与SoftmaxFlashV3核函数(Kernel)接口的模板参数isUpdate保持一致。 | |
| 40 | | isBasicBlock | 输入 | 预留参数,暂未启用,必须使用默认值false。 | | 40 | | isBasicBlock | 输入 | 预留参数,暂未启用,必须使用默认值false。 | |
| 41 | 41 | ||
| 42 | **表2** SoftMaxFlashV3TilingFunc接口参数列表 | 42 | **表2** SoftMaxFlashV3TilingFunc接口参数列表 |
| @@ -44,10 +44,10 @@ | |||
| 44 | | 参数名 | 输入/输出 | 功能 | | 44 | | 参数名 | 输入/输出 | 功能 | |
| 45 | | --- | --- | --- | | 45 | | --- | --- | --- | |
| 46 | | srcShape | 输入 | 输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 46 | | srcShape | 输入 | 输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 47 | -| dataTypeSize1 | 输入 | 输入srcTensor的数据类型大小,即对应SoftMaxFlashV3 Kernel函数中模板参数T的数据类型大小。当前模板参数T仅支持half类型,故此参数只支持取值为2。 | | 47 | +| dataTypeSize1 | 输入 | 输入srcTensor的数据类型大小,即对应SoftMaxFlashV3核函数(Kernel)中模板参数T的数据类型大小。当前模板参数T仅支持half类型,故此参数只支持取值为2。 | |
| 48 | -| dataTypeSize2 | 输入 | 输入inMeanTensor、inExpSumTensor、inMaxTensor的数据类型大小,即对应SoftMaxFlashV3 Kernel函数中模板参数U的数据类型大小。当前模板参数U仅支持float类型,故此参数只支持取值为4。 | | 48 | +| dataTypeSize2 | 输入 | 输入inMeanTensor、inExpSumTensor、inMaxTensor的数据类型大小,即对应SoftMaxFlashV3核函数(Kernel)中模板参数U的数据类型大小。当前模板参数U仅支持float类型,故此参数只支持取值为4。 | |
| 49 | | localWorkSpaceSize | 输入 | 剩余的可供SoftmaxFlashV3接口计算的空间大小。localWorkSpaceSize的取值必须大于GetSoftMaxFlashV3MaxMinTmpSize接口返回的计算所需的最小临时空间大小。 | | 49 | | localWorkSpaceSize | 输入 | 剩余的可供SoftmaxFlashV3接口计算的空间大小。localWorkSpaceSize的取值必须大于GetSoftMaxFlashV3MaxMinTmpSize接口返回的计算所需的最小临时空间大小。 | |
| 50 | -| isUpdate | 输入 | 是否开启SoftMaxFlashV3 update为true的公式计算。与SoftmaxFlashV3 Kernel接口的模板参数isUpdate保持一致。 | | 50 | +| isUpdate | 输入 | 是否开启SoftMaxFlashV3 update为true的公式计算。与SoftmaxFlashV3核函数(Kernel)接口的模板参数isUpdate保持一致。 | |
| 51 | | isBasicBlock | 输入 | 预留参数,暂未启用,必须使用默认值false。 | | 51 | | isBasicBlock | 输入 | 预留参数,暂未启用,必须使用默认值false。 | |
| 52 | | softmaxFlashV3Tiling | 输出 | 输出SoftMaxFlashV3接口所需的Tiling信息,支持optiling::SoftMaxTiling形式入参和AscendC::tiling::SoftMaxTiling形式入参。 | | 52 | | softmaxFlashV3Tiling | 输出 | 输出SoftMaxFlashV3接口所需的Tiling信息,支持optiling::SoftMaxTiling形式入参和AscendC::tiling::SoftMaxTiling形式入参。 | |
| 53 | 53 | ||
Mdocs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftmaxFlash_Tiling_interface.md+1-1
| @@ -8,7 +8,7 @@ | |||
| 8 | 8 | ||
| 9 | ## 函数原型 | 9 | ## 函数原型 |
| 10 | 10 | ||
| 11 | -- 获取Kernel接口计算所需最小/最大临时空间的接口 | 11 | +- 获取核函数(Kernel)接口计算所需最小/最大临时空间的接口 |
| 12 | 12 | ||
| 13 | ``` | 13 | ``` |
| 14 | uint32_t GetSoftMaxFlashMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize, const bool isUpdate, const bool isReuseSource) | 14 | uint32_t GetSoftMaxFlashMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize, const bool isUpdate, const bool isReuseSource) |
Mdocs/zh/api/SIMD-API/adv_api/activation_functions/SoftMax_interface/SoftmaxGrad_Tiling_interface.md+1-1
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| 9 | -- 获取Kernel接口计算所需最小/最大临时空间的接口 | 9 | +- 获取核函数(Kernel)接口计算所需最小/最大临时空间的接口 |
| 10 | 10 | ||
| 11 | ``` | 11 | ``` |
| 12 | uint32_t GetSoftMaxGradMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize, const bool isFront, const bool isReuseSource) | 12 | uint32_t GetSoftMaxGradMaxTmpSize(const AscendC::TensorShape& srcShape, const uint32_t dataTypeSize, const bool isFront, const bool isReuseSource) |
| @@ -21,7 +21,7 @@ void GetSwiGLUMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 21 | | --- | --- | --- | | 21 | | --- | --- | --- | |
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | -| maxValue | 输出 | SwiGLU接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 24 | +| maxValue | 输出 | SwiGLU接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 25 | | minValue | 输出 | SwiGLU接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 25 | | minValue | 输出 | SwiGLU接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | |
| 27 | 27 | ||
| @@ -19,7 +19,7 @@ inline void GetSwishTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 19 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 19 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 20 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2,即sizeof(half)。 | | 20 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2,即sizeof(half)。 | |
| 21 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | | 21 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | |
| 22 | -| maxValue | 输出 | Swish接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 22 | +| maxValue | 输出 | Swish接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 23 | | minValue | 输出 | Swish接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 23 | | minValue | 输出 | Swish接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 24 | 24 | ||
| 25 | ## 返回值说明 | 25 | ## 返回值说明 |
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_Kernel.md+1-1
| @@ -1,4 +1,4 @@ | |||
| 1 | -# Conv3DBackpropFilter Kernel侧接口 | 1 | +# Conv3DBackpropFilter核函数(Kernel)侧接口 |
| 2 | 2 | ||
| 3 | - **[Conv3DBackpropFilter使用说明](Conv3DBackpropFilter_usage.md)** | 3 | - **[Conv3DBackpropFilter使用说明](Conv3DBackpropFilter_usage.md)** |
| 4 | 4 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_usage.md+1-1
| @@ -18,7 +18,7 @@ Conv3dBackpropFilter的计算公式为: | |||
| 18 | **图2** 卷积反向权重计算过程示意图<a name="fig25291917533"></a> | 18 | **图2** 卷积反向权重计算过程示意图<a name="fig25291917533"></a> |
| 19 |  | 19 |  |
| 20 | 20 | ||
| 21 | -Kernel侧实现Conv3DBackpropFilter求解反向传播误差运算的步骤概括为: | 21 | +核函数(Kernel)侧实现Conv3DBackpropFilter求解反向传播误差运算的步骤概括为: |
| 22 | 22 | ||
| 23 | 1. 创建Conv3DBackpropFilter对象。 | 23 | 1. 创建Conv3DBackpropFilter对象。 |
| 24 | 2. 初始化操作。 | 24 | 2. 初始化操作。 |
| @@ -38,7 +38,7 @@ __aicore__ inline void Init(const TConv3DBpFilterTiling* __restrict tiling) | |||
| 38 | 38 | ||
| 39 | | 参数名 | 输入/输出 | 描述 | | 39 | | 参数名 | 输入/输出 | 描述 | |
| 40 | | --- | --- | --- | | 40 | | --- | --- | --- | |
| 41 | -| tiling | 输入 | Conv3DBackpropFilter对象的Tiling参数,Conv3DBackpropFilterTilingData结构体定义请参见[TConv3DBpFilterTiling结构体](../Conv3DBackpropFilter_Tiling/TConv3DBpFilterTiling_struct.md)。<br><br>Tiling参数可以通过Host侧[GetTiling](../Conv3DBackpropFilter_Tiling/GetTiling.md)接口获取,并传递到Kernel侧使用。 | | 41 | +| tiling | 输入 | Conv3DBackpropFilter对象的Tiling参数,Conv3DBackpropFilterTilingData结构体定义请参见[TConv3DBpFilterTiling结构体](../Conv3DBackpropFilter_Tiling/TConv3DBpFilterTiling_struct.md)。<br><br>Tiling参数可以通过Host侧[GetTiling](../Conv3DBackpropFilter_Tiling/GetTiling.md)接口获取,并传递到核函数(Kernel)侧使用。 | |
| 42 | 42 | ||
| 43 | ## 返回值说明 | 43 | ## 返回值说明 |
| 44 | 44 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Tiling/Conv3DBackpropFilter_Tiling_usage.md+1-1
| @@ -1,6 +1,6 @@ | |||
| 1 | # Conv3DBackpropFilter Tiling使用说明 | 1 | # Conv3DBackpropFilter Tiling使用说明 |
| 2 | 2 | ||
| 3 | -Ascend C提供一组Conv3DBackpropFilter Tiling API,方便用户获取Conv3DBackpropFilter Kernel计算时所需的Tiling参数。用户只需要传入Input/GradOutput/GradWeight的Position位置、Format格式和DType数据类型及相关参数等信息,调用API接口,即可获取[Init](../Conv3DBackpropFilter_Kernel/Init.md)中TConv3DBpFilterTiling结构体中的相关参数。 | 3 | +Ascend C提供一组Conv3DBackpropFilter Tiling API,方便用户获取Conv3DBackpropFilter核函数(Kernel)计算时所需的Tiling参数。用户只需要传入Input/GradOutput/GradWeight的Position位置、Format格式和DType数据类型及相关参数等信息,调用API接口,即可获取[Init](../Conv3DBackpropFilter_Kernel/Init.md)中TConv3DBpFilterTiling结构体中的相关参数。 |
| 4 | 4 | ||
| 5 | Conv3DBackpropFilter Tiling API提供一个GetTiling接口获取Tiling参数,获取Tiling参数的流程如下: | 5 | Conv3DBackpropFilter Tiling API提供一个GetTiling接口获取Tiling参数,获取Tiling参数的流程如下: |
| 6 | 6 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Tiling/SetGradOutputType.md+1-1
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置GradOutput的位置、数据格式、数据类型信息,这些信息必须与Kernel侧的设置保持一致。 | 5 | +设置GradOutput的位置、数据格式、数据类型信息,这些信息必须与核函数(Kernel)侧的设置保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置特征矩阵Input的位置、数据格式、数据类型信息,这些信息必须与Kernel侧的设置保持一致。 | 5 | +设置特征矩阵Input的位置、数据格式、数据类型信息,这些信息必须与核函数(Kernel)侧的设置保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置权重矩阵Weight的位置、数据格式、数据类型信息,这些信息必须与Kernel侧的设置保持一致。 | 5 | +设置权重矩阵Weight的位置、数据格式、数据类型信息,这些信息必须与核函数(Kernel)侧的设置保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropFilter_Tiling/TConv3DBpFilterTiling_struct.md+1-1
| @@ -1,6 +1,6 @@ | |||
| 1 | # TConv3DBpFilterTiling结构体 | 1 | # TConv3DBpFilterTiling结构体 |
| 2 | 2 | ||
| 3 | -TConv3DBpFilterTiling结构体包含Conv3dBackpropFilter算子规格信息及Tiling切分算法的相关参数,被传递给Conv3dBackpropFilter Kernel侧,用于数据切分、数据搬运和计算等。TConv3DBpFilterTiling结构体的参数说明见[表1](#table1563162142915)。 | 3 | +TConv3DBpFilterTiling结构体包含Conv3dBackpropFilter算子规格信息及Tiling切分算法的相关参数,被传递给Conv3dBackpropFilter核函数(Kernel)侧,用于数据切分、数据搬运和计算等。TConv3DBpFilterTiling结构体的参数说明见[表1](#table1563162142915)。 |
| 4 | 4 | ||
| 5 | 用户通过调用[GetTiling](GetTiling.md)接口获取TConv3DBpFilterTiling结构体,具体流程请参考[使用说明](Conv3DBackpropFilter_Tiling_usage.md)。当前暂不支持用户自定义配置TConv3DBpFilterTiling结构体中的参数。 | 5 | 用户通过调用[GetTiling](GetTiling.md)接口获取TConv3DBpFilterTiling结构体,具体流程请参考[使用说明](Conv3DBackpropFilter_Tiling_usage.md)。当前暂不支持用户自定义配置TConv3DBpFilterTiling结构体中的参数。 |
| 6 | 6 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Conv3DBackpropInput_Kernel.md+1-1
| @@ -1,4 +1,4 @@ | |||
| 1 | -# Conv3DBackpropInput Kernel侧接口 | 1 | +# Conv3DBackpropInput核函数(Kernel)侧接口 |
| 2 | 2 | ||
| 3 | - **[Conv3DBackpropInput使用说明](Conv3DBackpropInput_usage.md)** | 3 | - **[Conv3DBackpropInput使用说明](Conv3DBackpropInput_usage.md)** |
| 4 | 4 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Kernel/Conv3DBackpropInput_usage.md+2-2
| @@ -7,7 +7,7 @@ Conv3DBackpropInput的计算公式为: | |||
| 7 |  | 7 |  |
| 8 | 8 | ||
| 9 | - ∂L/∂Y为卷积正向损失函数对输出Y的梯度GradOutput,作为求反向传播误差∂L/∂X的输入。 | 9 | - ∂L/∂Y为卷积正向损失函数对输出Y的梯度GradOutput,作为求反向传播误差∂L/∂X的输入。 |
| 10 | -- W为卷积正向Weight权重,即矩阵核Kernel,也是滤波器Filter,作为求反向传播误差∂L/∂X的输入,W<sup>T</sup>表示W的转置。 | 10 | +- W为卷积正向Weight权重,即矩阵核核函数(Kernel),也是滤波器Filter,作为求反向传播误差∂L/∂X的输入,W<sup>T</sup>表示W的转置。 |
| 11 | - ∂L/∂X为特征矩阵的反向传播误差GradInput。 | 11 | - ∂L/∂X为特征矩阵的反向传播误差GradInput。 |
| 12 | 12 | ||
| 13 | **图1** 卷积层的前后向传播示意图<a name="fig1069918872512"></a> | 13 | **图1** 卷积层的前后向传播示意图<a name="fig1069918872512"></a> |
| @@ -16,7 +16,7 @@ Conv3DBackpropInput的计算公式为: | |||
| 16 | **图2** 反向传播误差计算示意图<a name="fig1953483815252"></a> | 16 | **图2** 反向传播误差计算示意图<a name="fig1953483815252"></a> |
| 17 |  | 17 |  |
| 18 | 18 | ||
| 19 | -Kernel侧实现Conv3DBackpropInput求解反向传播误差运算的步骤概括为: | 19 | +核函数(Kernel)侧实现Conv3DBackpropInput求解反向传播误差运算的步骤概括为: |
| 20 | 20 | ||
| 21 | 1. 创建Conv3DBackpropInput对象。 | 21 | 1. 创建Conv3DBackpropInput对象。 |
| 22 | 2. 初始化操作。 | 22 | 2. 初始化操作。 |
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/Conv3DBackpropInput_Tiling_usage.md+1-1
| @@ -1,6 +1,6 @@ | |||
| 1 | # Conv3DBackpropInput Tiling使用说明 | 1 | # Conv3DBackpropInput Tiling使用说明 |
| 2 | 2 | ||
| 3 | -Ascend C提供一组Conv3DBackpropInput Tiling API,方便用户获取Conv3DBackpropInput Kernel计算时所需的Tiling参数。用户只需要传入Input/GradOutput/Weight的Position位置、Format格式和DType数据类型及相关参数等信息,调用API接口,即可获取[Init](../Conv3DBackpropInput_Kernel/Init.md)中TConv3DBackpropInputTiling结构体中的相关参数。 | 3 | +Ascend C提供一组Conv3DBackpropInput Tiling API,方便用户获取Conv3DBackpropInput核函数(Kernel)计算时所需的Tiling参数。用户只需要传入Input/GradOutput/Weight的Position位置、Format格式和DType数据类型及相关参数等信息,调用API接口,即可获取[Init](../Conv3DBackpropInput_Kernel/Init.md)中TConv3DBackpropInputTiling结构体中的相关参数。 |
| 4 | 4 | ||
| 5 | Conv3DBackpropInput Tiling API提供一个GetTiling接口获取Tiling参数,获取Tiling参数的流程如下: | 5 | Conv3DBackpropInput Tiling API提供一个GetTiling接口获取Tiling参数,获取Tiling参数的流程如下: |
| 6 | 6 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/SetGradOutputType.md+1-1
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置GradOutput的位置、数据格式、数据类型信息,这些信息必须与Kernel侧的设置保持一致。 | 5 | +设置GradOutput的位置、数据格式、数据类型信息,这些信息必须与核函数(Kernel)侧的设置保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置特征矩阵Input的位置、数据格式、数据类型信息,这些信息必须与Kernel侧的设置保持一致。 | 5 | +设置特征矩阵Input的位置、数据格式、数据类型信息,这些信息必须与核函数(Kernel)侧的设置保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置权重矩阵Weight的位置、数据格式、数据类型信息,这些信息必须与Kernel侧的设置保持一致。 | 5 | +设置权重矩阵Weight的位置、数据格式、数据类型信息,这些信息必须与核函数(Kernel)侧的设置保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
Mdocs/zh/api/SIMD-API/adv_api/convolution_compute/Conv3DBackpropInput_Tiling/TConv3DBackpropInputTiling_struct.md+1-1
| @@ -1,6 +1,6 @@ | |||
| 1 | # TConv3DBackpropInputTiling结构体 | 1 | # TConv3DBackpropInputTiling结构体 |
| 2 | 2 | ||
| 3 | -TConv3DBackpropInputTiling结构体包含Conv3DBackpropInput算子规格信息及Tiling切分算法的相关参数,被传递给Conv3DBackpropInput Kernel侧,用于数据切分、数据搬运和计算等。TConv3DBackpropInputTiling结构体的参数说明见下表。 | 3 | +TConv3DBackpropInputTiling结构体包含Conv3DBackpropInput算子规格信息及Tiling切分算法的相关参数,被传递给Conv3DBackpropInput核函数(Kernel)侧,用于数据切分、数据搬运和计算等。TConv3DBackpropInputTiling结构体的参数说明见下表。 |
| 4 | 4 | ||
| 5 | 用户通过调用[GetTiling](GetTiling.md)接口获取TConv3DBackpropInputTiling结构体,具体流程请参考[Conv3DBackpropInput Tiling使用说明](Conv3DBackpropInput_Tiling_usage.md)。当前暂不支持用户自定义配置TConv3DBackpropInputTiling结构体中的参数。 | 5 | 用户通过调用[GetTiling](GetTiling.md)接口获取TConv3DBackpropInputTiling结构体,具体流程请参考[Conv3DBackpropInput Tiling使用说明](Conv3DBackpropInput_Tiling_usage.md)。当前暂不支持用户自定义配置TConv3DBackpropInputTiling结构体中的参数。 |
| 6 | 6 | ||
| @@ -31,7 +31,7 @@ Ascend C提供一组Conv3D高阶API,方便用户快速实现3维卷积正向 | |||
| 31 | **图4** 卷积3D正向Dilation示意图<a name="fig1015315044111"></a> | 31 | **图4** 卷积3D正向Dilation示意图<a name="fig1015315044111"></a> |
| 32 |  | 32 |  |
| 33 | 33 | ||
| 34 | -Kernel侧实现Conv3D运算的步骤概括为: | 34 | +核函数(Kernel)侧实现Conv3D运算的步骤概括为: |
| 35 | 35 | ||
| 36 | 1. 创建Conv3D对象。 | 36 | 1. 创建Conv3D对象。 |
| 37 | 2. 初始化操作。 | 37 | 2. 初始化操作。 |
| @@ -1,4 +1,4 @@ | |||
| 1 | -# Conv3D Kernel侧接口 | 1 | +# Conv3D核函数(Kernel)侧接口 |
| 2 | 2 | ||
| 3 | - **[Conv3D使用说明](Conv3D_usage.md)** | 3 | - **[Conv3D使用说明](Conv3D_usage.md)** |
| 4 | 4 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # Conv3D Tiling使用说明 | 1 | # Conv3D Tiling使用说明 |
| 2 | 2 | ||
| 3 | -Ascend C提供一组Conv3D Tiling API,方便用户获取Conv3D正向算子Kernel计算时所需的Tiling参数。用户只需要传入Input/Weight/Bias/Output的Position位置、Format格式和DType数据类型及相关参数等信息,调用API接口,即可获取[Init](../Conv3D_Kernel/Init.md)中TConv3DApiTiling结构体中的相关参数。 | 3 | +Ascend C提供一组Conv3D Tiling API,方便用户获取Conv3D正向算子核函数(Kernel)计算时所需的Tiling参数。用户只需要传入Input/Weight/Bias/Output的Position位置、Format格式和DType数据类型及相关参数等信息,调用API接口,即可获取[Init](../Conv3D_Kernel/Init.md)中TConv3DApiTiling结构体中的相关参数。 |
| 4 | 4 | ||
| 5 | Conv3D Tiling API提供Conv3D单核Tiling接口,用于Conv3D单核计算场景,获取Tiling参数的流程如下: | 5 | Conv3D Tiling API提供Conv3D单核Tiling接口,用于Conv3D单核计算场景,获取Tiling参数的流程如下: |
| 6 | 6 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # TConv3DApiTiling结构体 | 1 | # TConv3DApiTiling结构体 |
| 2 | 2 | ||
| 3 | -TConv3DApiTiling结构体包含Conv3D算子规格信息及Tiling切分算法的相关参数,被传递给Conv3D Kernel侧,用于数据切分、数据搬运和计算等。TConv3DApiTiling结构体的参数说明见[表1](#table18244199192620)。 | 3 | +TConv3DApiTiling结构体包含Conv3D算子规格信息及Tiling切分算法的相关参数,被传递给Conv3D核函数(Kernel)侧,用于数据切分、数据搬运和计算等。TConv3DApiTiling结构体的参数说明见[表1](#table18244199192620)。 |
| 4 | 4 | ||
| 5 | 用户通过调用[GetTiling](GetTiling.md)接口获取TConv3DApiTiling结构体,具体流程请参考[Conv3D Tiling使用说明](Conv3D_Tiling_usage.md)。当前暂不支持用户自定义配置TConv3DApiTiling结构体中的参数。 | 5 | 用户通过调用[GetTiling](GetTiling.md)接口获取TConv3DApiTiling结构体,具体流程请参考[Conv3D Tiling使用说明](Conv3D_Tiling_usage.md)。当前暂不支持用户自定义配置TConv3DApiTiling结构体中的参数。 |
| 6 | 6 | ||
| @@ -1,14 +1,14 @@ | |||
| 1 | # 卷积计算 | 1 | # 卷积计算 |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | -- **[Conv3D Kernel侧接口](Conv3D_Kernel/Conv3d_Kernel.md)** | 4 | +- **[Conv3D核函数(Kernel)侧接口](Conv3D_Kernel/Conv3d_Kernel.md)** |
| 5 | 5 | ||
| 6 | - **[Conv3D Tiling侧接口](Conv3D_Tiling/Conv3d_Tiling.md)** | 6 | - **[Conv3D Tiling侧接口](Conv3D_Tiling/Conv3d_Tiling.md)** |
| 7 | 7 | ||
| 8 | -- **[Conv3DBackpropInput Kernel侧接口](Conv3DBackpropInput_Kernel/Conv3DBackpropInput_Kernel.md)** | 8 | +- **[Conv3DBackpropInput核函数(Kernel)侧接口](Conv3DBackpropInput_Kernel/Conv3DBackpropInput_Kernel.md)** |
| 9 | 9 | ||
| 10 | - **[Conv3DBackpropInput Tiling侧接口](Conv3DBackpropInput_Tiling/Conv3DBackpropInput_Tiling.md)** | 10 | - **[Conv3DBackpropInput Tiling侧接口](Conv3DBackpropInput_Tiling/Conv3DBackpropInput_Tiling.md)** |
| 11 | 11 | ||
| 12 | -- **[Conv3DBackpropFilter Kernel侧接口](Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_Kernel.md)** | 12 | +- **[Conv3DBackpropFilter核函数(Kernel)侧接口](Conv3DBackpropFilter_Kernel/Conv3DBackpropFilter_Kernel.md)** |
| 13 | 13 | ||
| 14 | - **[Conv3DBackpropFilter Tiling侧接口](Conv3DBackpropFilter_Tiling/Conv3DBackpropFilter_Tiling.md)** | 14 | - **[Conv3DBackpropFilter Tiling侧接口](Conv3DBackpropFilter_Tiling/Conv3DBackpropFilter_Tiling.md)** |
| @@ -49,14 +49,14 @@ __aicore__ constexpr MatmulConfig GetMDLConfig(const bool intrinsicsLimit = fals | |||
| 49 | | intrinsicsLimit | 输入 | 用于设置参数intrinsicsCheck。<br><br>当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id13 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id13 --> | | 49 | | intrinsicsLimit | 输入 | 用于设置参数intrinsicsCheck。<br><br>当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id13 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id13 --> | |
| 50 | | batchLoop | 输入 | 用于设置参数isNBatch。<br><br>是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。<br>true:开启多Batch。 | | 50 | | batchLoop | 输入 | 用于设置参数isNBatch。<br><br>是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。<br>true:开启多Batch。 | |
| 51 | | doMTE2Preload | 输入 | 用于设置参数doMTE2Preload。<br><br>在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下:<br>0:不开启(默认值)。1:开启M方向preload。2:开启N方向preload。<br><br>注意:开启M/N方向的预加载功能时需保证K全载且M/N方向开启DoubleBuffer;其中,M方向的K全载条件为:singleCoreK/baseK <= stepKa;N方向的K全载条件为:singleCoreK/baseK <= stepKb。 | | 51 | | doMTE2Preload | 输入 | 用于设置参数doMTE2Preload。<br><br>在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下:<br>0:不开启(默认值)。1:开启M方向preload。2:开启N方向preload。<br><br>注意:开启M/N方向的预加载功能时需保证K全载且M/N方向开启DoubleBuffer;其中,M方向的K全载条件为:singleCoreK/baseK <= stepKa;N方向的K全载条件为:singleCoreK/baseK <= stepKb。 | |
| 52 | -| isVecND2NZ | 输入 | 用于设置参数enVecND2NZ。<br><br>开启通过vector指令进行ND2NZ。开启时需要设置[SetLocalWorkspace](SetLocalWorkspace.md)。参数取值如下:<br>false:不开启通过vector指令进行ND2NZ(默认值)。<br>true:开启通过vector指令进行ND2NZ。<!-- npu="310p" id14 --><br><br>针对Atlas 推理系列产品AI Core,在Unified Buffer空间足够的条件下(Unified Buffer空间大于2倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),建议优先开启,搬运性能更好。<!-- end id14 --><!-- npu="950" id15 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id15 --> | | 52 | +| isVecND2NZ | 输入 | 用于设置参数enVecND2NZ。<br><br>开启通过vector指令进行ND2NZ。开启时需要设置[SetLocalWorkspace](SetLocalWorkspace.md)。参数取值如下:<br>false:不开启通过vector指令进行ND2NZ(默认值)。<br>true:开启通过vector指令进行ND2NZ。<!-- npu="310p" id14 --><br><br>针对Atlas 推理系列产品AI Core,在Unified Buffer(UB)空间足够的条件下(UB空间大于2倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),建议优先开启,搬运性能更好。<!-- end id14 --><!-- npu="950" id15 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id15 --> | |
| 53 | | isPerTensor | 输入 | 用于设置参数isPerTensor。<br><br>A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否为per tensor。<br>true:per tensor量化。<br>false:per channel量化。<!-- npu="950" id16 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id16 --> | | 53 | | isPerTensor | 输入 | 用于设置参数isPerTensor。<br><br>A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否为per tensor。<br>true:per tensor量化。<br>false:per channel量化。<!-- npu="950" id16 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id16 --> | |
| 54 | | hasAntiQuantOffset | 输入 | 用于设置参数hasAntiQuantOffset。<br><br>A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否使用offset系数。<!-- npu="950" id17 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id17 --> | | 54 | | hasAntiQuantOffset | 输入 | 用于设置参数hasAntiQuantOffset。<br><br>A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否使用offset系数。<!-- npu="950" id17 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id17 --> | |
| 55 | | enUnitFlag | 输入 | 用于设置参数enUnitFlag。<br><br>开启UnitFlag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认开启,MDL下默认不开启。参数取值如下:<br>false:不开启UnitFlag功能。<br>true:开启UnitFlag功能。<!-- npu="950" id18 --><br><br>注意:对于Ascend 950PR/Ascend 950DT的MxMatmul场景,仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式,输出到GM场景下,开启UnitFlag功能有性能收益。<!-- end id18 --> | | 55 | | enUnitFlag | 输入 | 用于设置参数enUnitFlag。<br><br>开启UnitFlag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认开启,MDL下默认不开启。参数取值如下:<br>false:不开启UnitFlag功能。<br>true:开启UnitFlag功能。<!-- npu="950" id18 --><br><br>注意:对于Ascend 950PR/Ascend 950DT的MxMatmul场景,仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式,输出到GM场景下,开启UnitFlag功能有性能收益。<!-- end id18 --> | |
| 56 | | isMsgReuse | 输入 | 用于设置参数enableReuse。<br><br>[SetSelfDefineData](SetSelfDefineData.md)函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下:<br>true:直接传递计算数据,仅限单个值。<br>false:传递GM上存储的数据地址信息。<!-- npu="950" id19 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。<!-- end id19 --> | | 56 | | isMsgReuse | 输入 | 用于设置参数enableReuse。<br><br>[SetSelfDefineData](SetSelfDefineData.md)函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下:<br>true:直接传递计算数据,仅限单个值。<br>false:传递GM上存储的数据地址信息。<!-- npu="950" id19 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。<!-- end id19 --> | |
| 57 | -| enableUBReuse | 输入 | 用于设置参数enableUBReuse。<br><br>是否开启Unified Buffer复用。在Unified Buffer空间足够的条件下(Unified Buffer空间大于4倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),设置开启Unified Buffer复用后,Unified Buffer空间分为互不重叠的两份,分别存储Matmul计算相邻前后两轮迭代的数据,后一轮迭代数据的搬入将不必等待前一轮迭代的Unified Buffer空间释放,从而优化流水。参数取值如下:<br>true:开启Unified Buffer复用。<br>false:不开启Unified Buffer复用。<!-- npu="950" id20 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id20 --><!-- npu="A3" id21 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id21 --><!-- npu="910b" id22 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id22 --><!-- npu="310p" id23 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id23 --><!-- npu="310b" id24 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id24 --><!-- npu="x90" id3 --><br><br>Kirin X90不支持此参数。<!-- end id3 --> | | 57 | +| enableUBReuse | 输入 | 用于设置参数enableUBReuse。<br><br>是否开启UB复用。在UB空间足够的条件下(UB空间大于4倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),设置开启UB复用后,UB空间分为互不重叠的两份,分别存储Matmul计算相邻前后两轮迭代的数据,后一轮迭代数据的搬入将不必等待前一轮迭代的UB空间释放,从而优化流水。参数取值如下:<br>true:开启UB复用。<br>false:不开启UB复用。<!-- npu="950" id20 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id20 --><!-- npu="A3" id21 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id21 --><!-- npu="910b" id22 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id22 --><!-- npu="310p" id23 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id23 --><!-- npu="310b" id24 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id24 --><!-- npu="x90" id3 --><br><br>Kirin X90不支持此参数。<!-- end id3 --> | |
| 58 | -| enableL1CacheUB | 输入 | 用于设置参数enableL1CacheUB 。<br><br>是否开启L1 Buffer缓存Unified Buffer计算块。建议在MTE3和MTE2流水串行较多的场景使用。参数取值如下:<br>true:开启L1 Buffer缓存Unified Buffer计算块。<br>false:不开启L1 Buffer缓存Unified Buffer计算块。<br><br>若要开启L1 Buffer缓存Unified Buffer计算块,必须在Tiling实现中调用[SetMatmulConfigParams](../Matmul_Tiling/SetMatmulConfigParams.md)接口将参数enableL1CacheUBIn设置为true。<!-- npu="950" id25 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id25 --><!-- npu="A3" id26 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id26 --><!-- npu="910b" id27 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id27 --><!-- npu="310p" id28 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id28 --><!-- npu="310b" id29 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id29 --><!-- npu="x90" id4 --><br><br>Kirin X90不支持此参数。<!-- end id4 --> | | 58 | +| enableL1CacheUB | 输入 | 用于设置参数enableL1CacheUB 。<br><br>是否开启L1 Buffer缓存UB计算块。建议在MTE3和MTE2流水串行较多的场景使用。参数取值如下:<br>true:开启L1 Buffer缓存UB计算块。<br>false:不开启L1 Buffer缓存UB计算块。<br><br>若要开启L1 Buffer缓存UB计算块,必须在Tiling实现中调用[SetMatmulConfigParams](../Matmul_Tiling/SetMatmulConfigParams.md)接口将参数enableL1CacheUBIn设置为true。<!-- npu="950" id25 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id25 --><!-- npu="A3" id26 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id26 --><!-- npu="910b" id27 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id27 --><!-- npu="310p" id28 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id28 --><!-- npu="310b" id29 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id29 --><!-- npu="x90" id4 --><br><br>Kirin X90不支持此参数。<!-- end id4 --> | |
| 59 | -| enableMixDualMaster | 输入 | 用于设置参数enableMixDualMaster。<br><br>是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true:<br>核函数的类型为MIX,同时AIC核数 : AIV核数为1:1。<br>核函数的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启[IBSHARE](Matmul_usage.md#table1188045714378)参数。<br><br>注意,开启MixDualMaster场景,需要满足:<br>同一算子中所有Matmul对象的该参数取值必须保持一致。<br>A/B/Bias矩阵只支持从GM搬入。<br>获取矩阵计算结果只支持调用[IterateAll](IterateAll.md)接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用[GetTensorC](GetTensorC.md)等接口获取结果。<!-- npu="950" id30 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id30 --><!-- npu="A3" id31 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id31 --><!-- npu="910b" id32 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id32 --><!-- npu="310p" id33 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id33 --><!-- npu="310b" id34 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id34 --><!-- npu="x90" id5 --><br><br>Kirin X90不支持此参数。<!-- end id5 --> | | 59 | +| enableMixDualMaster | 输入 | 用于设置参数enableMixDualMaster。<br><br>是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true:<br>核函数(Kernel)的类型为MIX,同时AIC核数 : AIV核数为1:1。<br>核函数(Kernel)的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启[IBSHARE](Matmul_usage.md#table1188045714378)参数。<br><br>注意,开启MixDualMaster场景,需要满足:<br>同一算子中所有Matmul对象的该参数取值必须保持一致。<br>A/B/Bias矩阵只支持从GM搬入。<br>获取矩阵计算结果只支持调用[IterateAll](IterateAll.md)接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用[GetTensorC](GetTensorC.md)等接口获取结果。<!-- npu="950" id30 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id30 --><!-- npu="A3" id31 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id31 --><!-- npu="910b" id32 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id32 --><!-- npu="310p" id33 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id33 --><!-- npu="310b" id34 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id34 --><!-- npu="x90" id5 --><br><br>Kirin X90不支持此参数。<!-- end id5 --> | |
| 60 | | enableKdimReorderLoad | 输入 | 用于设置参数enableKdimReorderLoad。<br><br>是否开启K轴错峰加载数据。基于相同Tiling参数,执行Matmul计算时,如果多核的左矩阵或者右矩阵相同,且存储于Global Memory,多个核一般会同时访问相同地址以加载矩阵数据,引发同地址访问冲突,影响性能。开启K轴错峰加载数据后,多核执行Matmul时,将尽量在相同时间访问矩阵的不同Global Memory地址,减少地址访问冲突概率,提升性能。该参数功能只支持MDL模板,建议K轴较大且左矩阵和右矩阵均非全载场景开启该功能。参数取值如下。<br>false:默认值,关闭K轴错峰加载数据的功能。<br>true:开启K轴错峰加载数据的功能。<!-- npu="950" id35 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id35 --><!-- npu="A3" id36 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id36 --><!-- npu="910b" id37 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id37 --><!-- npu="310p" id38 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id38 --><!-- npu="310b" id39 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id39 --><!-- npu="x90" id6 --><br><br>Kirin X90支持此参数。<!-- end id6 --> | | 60 | | enableKdimReorderLoad | 输入 | 用于设置参数enableKdimReorderLoad。<br><br>是否开启K轴错峰加载数据。基于相同Tiling参数,执行Matmul计算时,如果多核的左矩阵或者右矩阵相同,且存储于Global Memory,多个核一般会同时访问相同地址以加载矩阵数据,引发同地址访问冲突,影响性能。开启K轴错峰加载数据后,多核执行Matmul时,将尽量在相同时间访问矩阵的不同Global Memory地址,减少地址访问冲突概率,提升性能。该参数功能只支持MDL模板,建议K轴较大且左矩阵和右矩阵均非全载场景开启该功能。参数取值如下。<br>false:默认值,关闭K轴错峰加载数据的功能。<br>true:开启K轴错峰加载数据的功能。<!-- npu="950" id35 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id35 --><!-- npu="A3" id36 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id36 --><!-- npu="910b" id37 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id37 --><!-- npu="310p" id38 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id38 --><!-- npu="310b" id39 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id39 --><!-- npu="x90" id6 --><br><br>Kirin X90支持此参数。<!-- end id6 --> | |
| 61 | 61 | ||
| 62 | ## 返回值说明 | 62 | ## 返回值说明 |
| @@ -31,7 +31,7 @@ | |||
| 31 | 31 | ||
| 32 | Matmul Tiling常量化功能为在编译期期间获取常量化的Matmul Tiling参数并进行算子编译,从而减少Scalar计算开销,提升算子整体性能。具体为,在获取[Matmul模板](Matmul_template_params.md)时,可以确定[MatmulConfig](MatmulConfig.md)的singleCore Shape([MatmulConfig](MatmulConfig.md)中的singleCoreM/singleCoreN/singleCoreK)和Base Shape([MatmulConfig](MatmulConfig.md)中的basicM/basicN/basicK)参数,或者只确定Base Shape参数;通过指定获取模板的接口中的singleCore Shape和Base Shape参数,或者只指定Base Shape参数,获取自定义模板;然后调用本接口,得到常量化的Matmul Tiling参数。 | 32 | Matmul Tiling常量化功能为在编译期期间获取常量化的Matmul Tiling参数并进行算子编译,从而减少Scalar计算开销,提升算子整体性能。具体为,在获取[Matmul模板](Matmul_template_params.md)时,可以确定[MatmulConfig](MatmulConfig.md)的singleCore Shape([MatmulConfig](MatmulConfig.md)中的singleCoreM/singleCoreN/singleCoreK)和Base Shape([MatmulConfig](MatmulConfig.md)中的basicM/basicN/basicK)参数,或者只确定Base Shape参数;通过指定获取模板的接口中的singleCore Shape和Base Shape参数,或者只指定Base Shape参数,获取自定义模板;然后调用本接口,得到常量化的Matmul Tiling参数。 |
| 33 | 33 | ||
| 34 | -当在调用[获取MatmulConfig模板的接口](MatmulConfig.md)时,只将\(baseM, baseN, baseK\)设置为常数值时,称为部分常量化,此时\(singleCoreM, singleCoreN, singleCoreK\)都保持默认值0,部分常量化场景在Kernel侧使用[REGIST\_MATMUL\_OBJ](REGIST_MATMUL_OBJ.md)初始化Matmul对象时,仍需要使用Tiling;将\(baseM, baseN, baseK, singleCoreM, singleCoreN, singleCoreK\)都设置为常数值时,称为全量常量化,这时可以在[REGIST\_MATMUL\_OBJ](REGIST_MATMUL_OBJ.md)的入参传递Tiling参数的位置,使用空指针替代。 | 34 | +当在调用[获取MatmulConfig模板的接口](MatmulConfig.md)时,只将\(baseM, baseN, baseK\)设置为常数值时,称为部分常量化,此时\(singleCoreM, singleCoreN, singleCoreK\)都保持默认值0,部分常量化场景在核函数(Kernel)侧使用[REGIST\_MATMUL\_OBJ](REGIST_MATMUL_OBJ.md)初始化Matmul对象时,仍需要使用Tiling;将\(baseM, baseN, baseK, singleCoreM, singleCoreN, singleCoreK\)都设置为常数值时,称为全量常量化,这时可以在[REGIST\_MATMUL\_OBJ](REGIST_MATMUL_OBJ.md)的入参传递Tiling参数的位置,使用空指针替代。 |
| 35 | 35 | ||
| 36 | 经过上述部分常量化或全部常量化后,将得到带有常量化参数的MatmulConfig模板,然后使用本接口将Tiling参数常量化。本接口的返回值包含常量化的Matmul Tiling参数和MatmulConfig模板。 | 36 | 经过上述部分常量化或全部常量化后,将得到带有常量化参数的MatmulConfig模板,然后使用本接口将Tiling参数常量化。本接口的返回值包含常量化的Matmul Tiling参数和MatmulConfig模板。 |
| 37 | 37 | ||
| @@ -48,13 +48,13 @@ __aicore__ constexpr MatmulConfig GetNormalConfig(const bool intrinsicsLimit = f | |||
| 48 | | --- | --- | --- | | 48 | | --- | --- | --- | |
| 49 | | intrinsicsLimit | 输入 | 用于设置参数intrinsicsCheck。<br><br>当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id12 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id12 --> | | 49 | | intrinsicsLimit | 输入 | 用于设置参数intrinsicsCheck。<br><br>当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id12 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id12 --> | |
| 50 | | batchLoop | 输入 | 用于设置参数isNBatch。<br><br>是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。<br>true:开启多Batch。 | | 50 | | batchLoop | 输入 | 用于设置参数isNBatch。<br><br>是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。<br>true:开启多Batch。 | |
| 51 | -| isVecND2NZ | 输入 | 用于设置参数enVecND2NZ。<br><br>开启通过vector指令进行ND2NZ。开启时需要设置[SetLocalWorkspace](SetLocalWorkspace.md)。参数取值如下:<br>false:不开启通过vector指令进行ND2NZ(默认值)。<br>true:开启通过vector指令进行ND2NZ。<!-- npu="310p" id13 --><br><br>针对Atlas 推理系列产品AI Core,在Unified Buffer空间足够的条件下(Unified Buffer空间大于2倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),建议优先开启,搬运性能更好。<!-- end id13 --><!-- npu="950" id14 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id14 --> | | 51 | +| isVecND2NZ | 输入 | 用于设置参数enVecND2NZ。<br><br>开启通过vector指令进行ND2NZ。开启时需要设置[SetLocalWorkspace](SetLocalWorkspace.md)。参数取值如下:<br>false:不开启通过vector指令进行ND2NZ(默认值)。<br>true:开启通过vector指令进行ND2NZ。<!-- npu="310p" id13 --><br><br>针对Atlas 推理系列产品AI Core,在Unified Buffer(UB)空间足够的条件下(UB空间大于2倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),建议优先开启,搬运性能更好。<!-- end id13 --><!-- npu="950" id14 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id14 --> | |
| 52 | | bmmMode | 输入 | 用于设置参数batchMode。该参数用于BatchMatmul场景。<br><br>BatchMatmul场景中Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:<br>BatchMode::BATCH_LESS_THAN_L1:多batch数据总和<L1 Buffer Size;<br>BatchMode::BATCH_LARGE_THAN_L1:多batch数据总和>L1 Buffer Size;<br>BatchMode::SINGLE_LARGE_THAN_L1:单batch数据总和>L1 Buffer Size。 | | 52 | | bmmMode | 输入 | 用于设置参数batchMode。该参数用于BatchMatmul场景。<br><br>BatchMatmul场景中Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:<br>BatchMode::BATCH_LESS_THAN_L1:多batch数据总和<L1 Buffer Size;<br>BatchMode::BATCH_LARGE_THAN_L1:多batch数据总和>L1 Buffer Size;<br>BatchMode::SINGLE_LARGE_THAN_L1:单batch数据总和>L1 Buffer Size。 | |
| 53 | | isMsgReuse | 输入 | 用于设置参数enableReuse。<br><br>[SetSelfDefineData](SetSelfDefineData.md)函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下:<br>true:直接传递计算数据,仅限单个值。<br>false:传递GM上存储的数据地址信息。<!-- npu="950" id15 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。<!-- end id15 --> | | 53 | | isMsgReuse | 输入 | 用于设置参数enableReuse。<br><br>[SetSelfDefineData](SetSelfDefineData.md)函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下:<br>true:直接传递计算数据,仅限单个值。<br>false:传递GM上存储的数据地址信息。<!-- npu="950" id15 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。<!-- end id15 --> | |
| 54 | | iterateOrder | 输入 | 用于设置参数iterateOrder。<br><br>Matmul做矩阵运算的循环迭代顺序,与[表1](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT时,本参数生效。参数取值如下:<br><br>ORDER_M:先往M轴方向偏移再往N轴方向偏移。<br><br>ORDER_N:先往N轴方向偏移再往M轴方向偏移。<br><br>UNDEF:当前无效。<br><br>注:Norm模板的Matmul场景、MDL模板使用时,若IterateOrder取值ORDER_M,[TCubeTiling结构](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。MxMatmul仅支持MDL模板。<!-- npu="A3" id16 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id16 --><!-- npu="910b" id17 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id17 --><!-- npu="310p" id18 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id18 --><!-- npu="310b" id19 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id19 --><!-- npu="x90" id3 --><br><br>Kirin X90支持此参数。<!-- end id3 --> | | 54 | | iterateOrder | 输入 | 用于设置参数iterateOrder。<br><br>Matmul做矩阵运算的循环迭代顺序,与[表1](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT时,本参数生效。参数取值如下:<br><br>ORDER_M:先往M轴方向偏移再往N轴方向偏移。<br><br>ORDER_N:先往N轴方向偏移再往M轴方向偏移。<br><br>UNDEF:当前无效。<br><br>注:Norm模板的Matmul场景、MDL模板使用时,若IterateOrder取值ORDER_M,[TCubeTiling结构](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。MxMatmul仅支持MDL模板。<!-- npu="A3" id16 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id16 --><!-- npu="910b" id17 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id17 --><!-- npu="310p" id18 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id18 --><!-- npu="310b" id19 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id19 --><!-- npu="x90" id3 --><br><br>Kirin X90支持此参数。<!-- end id3 --> | |
| 55 | | scheduleType | 输入 | 用于设置参数scheduleType。<br><br>配置Matmul数据搬运模式。参数取值如下:<br>ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运;<br>ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运;设置该取值后,需要与IterateOrder参数配合使用。该配置当前只在BatchMatmul场景(开启Norm模板)或Matmul场景(开启MDL模板或Norm模板)生效。<br>若IterateOrder取值ORDER_M,则N方向循环搬运(在singleCoreN大于baseN场景可能有性能提升),即B矩阵的MTE1搬运并行;<br>若IterateOrder取值ORDER_N,则M方向循环搬运(在singleCoreM大于baseM场景可能有性能提升),即A矩阵的MTE1搬运并行;<br>不能同时开启M方向和N方向循环搬运;<br><br>注:<br>Norm模板的Batch Matmul场景或者MDL模板中,singleCoreK>baseK时,不能设置为ScheduleType::OUTER_PRODUCT取值,需使用默认模式。<br>Norm模板或MDL模板的Matmul场景,仅支持在纯Cube模式(只有矩阵计算)下配置ScheduleType::OUTER_PRODUCT。<br>MDL模板仅在调用[IterateAll](IterateAll.md)计算的场景支持配置ScheduleType::OUTER_PRODUCT。<br>仅在C矩阵输出至GM时,支持配置ScheduleType::OUTER_PRODUCT。<!-- npu="950" id20 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id20 --><!-- npu="A3" id21 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id21 --><!-- npu="910b" id22 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id22 --><!-- npu="310p" id23 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id23 --><!-- npu="310b" id24 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id24 --><!-- npu="x90" id4 --><br><br>Kirin X90支持此参数。<!-- end id4 --> | | 55 | | scheduleType | 输入 | 用于设置参数scheduleType。<br><br>配置Matmul数据搬运模式。参数取值如下:<br>ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运;<br>ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运;设置该取值后,需要与IterateOrder参数配合使用。该配置当前只在BatchMatmul场景(开启Norm模板)或Matmul场景(开启MDL模板或Norm模板)生效。<br>若IterateOrder取值ORDER_M,则N方向循环搬运(在singleCoreN大于baseN场景可能有性能提升),即B矩阵的MTE1搬运并行;<br>若IterateOrder取值ORDER_N,则M方向循环搬运(在singleCoreM大于baseM场景可能有性能提升),即A矩阵的MTE1搬运并行;<br>不能同时开启M方向和N方向循环搬运;<br><br>注:<br>Norm模板的Batch Matmul场景或者MDL模板中,singleCoreK>baseK时,不能设置为ScheduleType::OUTER_PRODUCT取值,需使用默认模式。<br>Norm模板或MDL模板的Matmul场景,仅支持在纯Cube模式(只有矩阵计算)下配置ScheduleType::OUTER_PRODUCT。<br>MDL模板仅在调用[IterateAll](IterateAll.md)计算的场景支持配置ScheduleType::OUTER_PRODUCT。<br>仅在C矩阵输出至GM时,支持配置ScheduleType::OUTER_PRODUCT。<!-- npu="950" id20 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id20 --><!-- npu="A3" id21 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id21 --><!-- npu="910b" id22 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id22 --><!-- npu="310p" id23 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id23 --><!-- npu="310b" id24 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id24 --><!-- npu="x90" id4 --><br><br>Kirin X90支持此参数。<!-- end id4 --> | |
| 56 | | enUnitFlag | 输入 | 用于设置参数enUnitFlag。<br><br>开启UnitFlag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认开启,MDL下默认不开启。参数取值如下:<br>false:不开启UnitFlag功能。<br>true:开启UnitFlag功能。<!-- npu="950" id30 --><br><br>注意:对于Ascend 950PR/Ascend 950DT的MxMatmul场景,仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式,输出到GM场景下,开启UnitFlag功能有性能收益。<!-- end id30 --> | | 56 | | enUnitFlag | 输入 | 用于设置参数enUnitFlag。<br><br>开启UnitFlag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认开启,MDL下默认不开启。参数取值如下:<br>false:不开启UnitFlag功能。<br>true:开启UnitFlag功能。<!-- npu="950" id30 --><br><br>注意:对于Ascend 950PR/Ascend 950DT的MxMatmul场景,仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式,输出到GM场景下,开启UnitFlag功能有性能收益。<!-- end id30 --> | |
| 57 | -| enableMixDualMaster | 输入 | 用于设置参数enableMixDualMaster。<br><br>是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true:<br>核函数的类型为MIX,同时AIC核数 : AIV核数为1:1。<br>核函数的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启[IBSHARE](Matmul_usage.md#table1188045714378)参数。<br><br>注意,开启MixDualMaster场景,需要满足:<br>同一算子中所有Matmul对象的该参数取值必须保持一致。<br>A/B/Bias矩阵只支持从GM搬入。<br>获取矩阵计算结果只支持调用[IterateAll](IterateAll.md)接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用[GetTensorC](GetTensorC.md)等接口获取结果。<!-- npu="950" id25 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id25 --><!-- npu="A3" id26 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id26 --><!-- npu="910b" id27 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id27 --><!-- npu="310p" id28 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id28 --><!-- npu="310b" id29 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id29 --><!-- npu="x90" id5 --><br><br>Kirin X90不支持此参数。<!-- end id5 --> | | 57 | +| enableMixDualMaster | 输入 | 用于设置参数enableMixDualMaster。<br><br>是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true:<br>核函数(Kernel)的类型为MIX,同时AIC核数 : AIV核数为1:1。<br>核函数(Kernel)的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启[IBSHARE](Matmul_usage.md#table1188045714378)参数。<br><br>注意,开启MixDualMaster场景,需要满足:<br>同一算子中所有Matmul对象的该参数取值必须保持一致。<br>A/B/Bias矩阵只支持从GM搬入。<br>获取矩阵计算结果只支持调用[IterateAll](IterateAll.md)接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用[GetTensorC](GetTensorC.md)等接口获取结果。<!-- npu="950" id25 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id25 --><!-- npu="A3" id26 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id26 --><!-- npu="910b" id27 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id27 --><!-- npu="310p" id28 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id28 --><!-- npu="310b" id29 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id29 --><!-- npu="x90" id5 --><br><br>Kirin X90不支持此参数。<!-- end id5 --> | |
| 58 | | bmmOutMode | 输入 | 预留参数。 | | 58 | | bmmOutMode | 输入 | 预留参数。 | |
| 59 | 59 | ||
| 60 | ## 返回值说明 | 60 | ## 返回值说明 |
| @@ -30,7 +30,7 @@ | |||
| 30 | 30 | ||
| 31 | ## 功能说明 | 31 | ## 功能说明 |
| 32 | 32 | ||
| 33 | -Iterate后,获取一块或者两块C矩阵片,可以直接输出到GM tensor中,也可以输出到UB(VECIN)tensor中。当[MatmulConfig](MatmulConfig.md#matmulconfig-params)参数中的ScheduleType取值为ScheduleType::INNER\_PRODUCT时,获取一块C矩阵片;当[MatmulConfig](MatmulConfig.md#matmulconfig-params)参数中的ScheduleType取值为ScheduleType::OUTER\_PRODUCT时,获取两块C矩阵片。 | 33 | +Iterate后,获取一块或者两块C矩阵片,可以直接输出到GM tensor中,也可以输出到Unified Buffer(UB,VECIN)tensor中。当[MatmulConfig](MatmulConfig.md#matmulconfig-params)参数中的ScheduleType取值为ScheduleType::INNER\_PRODUCT时,获取一块C矩阵片;当[MatmulConfig](MatmulConfig.md#matmulconfig-params)参数中的ScheduleType取值为ScheduleType::OUTER\_PRODUCT时,获取两块C矩阵片。 |
| 34 | 34 | ||
| 35 | 该接口和[Iterate](Iterate.md)接口配合使用,用于在调用Iterate完成迭代计算后,根据[MatmulConfig](MatmulConfig.md#matmulconfig-params)参数中的ScheduleType取值获取一块或两块baseM \* baseN大小的矩阵分片。 | 35 | 该接口和[Iterate](Iterate.md)接口配合使用,用于在调用Iterate完成迭代计算后,根据[MatmulConfig](MatmulConfig.md#matmulconfig-params)参数中的ScheduleType取值获取一块或两块baseM \* baseN大小的矩阵分片。 |
| 36 | 36 | ||
| @@ -80,7 +80,7 @@ Iterate后,获取一块或者两块C矩阵片,可以直接输出到GM tensor | |||
| 80 | 80 | ||
| 81 | C矩阵输出到UB(VECIN)时,分配给UB(VECIN)的空间大小会影响Matmul计算的力度,分配给UB(VECIN)的空间过小时,无法充分利用硬件算力。提供该接口支持返回缓存在Workspace上的C矩阵,由开发者自行控制后续使用过程。 | 81 | C矩阵输出到UB(VECIN)时,分配给UB(VECIN)的空间大小会影响Matmul计算的力度,分配给UB(VECIN)的空间过小时,无法充分利用硬件算力。提供该接口支持返回缓存在Workspace上的C矩阵,由开发者自行控制后续使用过程。 |
| 82 | 82 | ||
| 83 | - 注意,在初始化时,C矩阵的逻辑位置应设置为TPosition::VECIN,调用该接口获取缓存的C矩阵后,自行拷贝到Unified Buffer。 | 83 | + 注意,在初始化时,C矩阵的逻辑位置应设置为TPosition::VECIN,调用该接口获取缓存的C矩阵后,自行拷贝到UB。 |
| 84 | 84 | ||
| 85 | ``` | 85 | ``` |
| 86 | template <bool sync = true> | 86 | template <bool sync = true> |
| @@ -72,7 +72,7 @@ | |||
| 72 | __aicore__ inline void IterateBatch(const GlobalTensor<DstT>& gm, uint32_t batchA, uint32_t batchB, bool enSequentialWrite, const uint32_t matrixStrideA = 0, const uint32_t matrixStrideB = 0, const uint32_t matrixStrideC = 0, const bool enPartialSum = false, const uint8_t enAtomic = 0) | 72 | __aicore__ inline void IterateBatch(const GlobalTensor<DstT>& gm, uint32_t batchA, uint32_t batchB, bool enSequentialWrite, const uint32_t matrixStrideA = 0, const uint32_t matrixStrideB = 0, const uint32_t matrixStrideC = 0, const bool enPartialSum = false, const uint8_t enAtomic = 0) |
| 73 | ``` | 73 | ``` |
| 74 | 74 | ||
| 75 | - - 输出至UB(VECIN) | 75 | + - 输出至Unified Buffer(UB,VECIN) |
| 76 | 76 | ||
| 77 | ``` | 77 | ``` |
| 78 | template <bool sync = true> | 78 | template <bool sync = true> |
| @@ -112,7 +112,7 @@ | |||
| 112 | | ubCmatrix | 输出 | C矩阵。类型为[LocalTensor](../../../basic_api/data_structures/LocalTensor/LocalTensor.md)。不同型号支持的数据类型请参考[支持的数据类型](#li12616155731722)。 | | 112 | | ubCmatrix | 输出 | C矩阵。类型为[LocalTensor](../../../basic_api/data_structures/LocalTensor/LocalTensor.md)。不同型号支持的数据类型请参考[支持的数据类型](#li12616155731722)。 | |
| 113 | | batchA | 输入 | 左矩阵的batch数。 | | 113 | | batchA | 输入 | 左矩阵的batch数。 | |
| 114 | | batchB | 输入 | 右矩阵的batch数。在batchA/batchB不相同的情况下,默认做broadcast操作。<br><br>多batch计算支持在G轴上做输入broadcast和输出reduce,左矩阵、右矩阵G轴维度必须是整数倍的关系。 | | 114 | | batchB | 输入 | 右矩阵的batch数。在batchA/batchB不相同的情况下,默认做broadcast操作。<br><br>多batch计算支持在G轴上做输入broadcast和输出reduce,左矩阵、右矩阵G轴维度必须是整数倍的关系。 | |
| 115 | -| enSequentialWrite | 输入 | 输出是否[连续存放](GetTensorC.md#fig580415103338)数据,即是否开启连续写模式(连续写,写入[baseM, baseN];非连续写,写入[singleCoreM, singleCoreN]中对应的位置)。<br>左右矩阵和输出矩阵的存储位置为Unified Buffer,则enSequentialWrite参数应配置为true;<br>输出矩阵的存储位置为GM,则enSequentialWrite参数应配置为false。 | | 115 | +| enSequentialWrite | 输入 | 输出是否[连续存放](GetTensorC.md#fig580415103338)数据,即是否开启连续写模式(连续写,写入[baseM, baseN];非连续写,写入[singleCoreM, singleCoreN]中对应的位置)。<br>左右矩阵和输出矩阵的存储位置为UB,则enSequentialWrite参数应配置为true;<br>输出矩阵的存储位置为GM,则enSequentialWrite参数应配置为false。 | |
| 116 | | matrixStrideA | 输入 | A矩阵源操作数相邻nd矩阵起始地址间的偏移,单位是元素,默认值是0。 | | 116 | | matrixStrideA | 输入 | A矩阵源操作数相邻nd矩阵起始地址间的偏移,单位是元素,默认值是0。 | |
| 117 | | matrixStrideB | 输入 | B矩阵源操作数相邻nd矩阵起始地址间的偏移,单位是元素,默认值是0。 | | 117 | | matrixStrideB | 输入 | B矩阵源操作数相邻nd矩阵起始地址间的偏移,单位是元素,默认值是0。 | |
| 118 | | matrixStrideC | 输入 | 该参数预留,保持默认值0即可。 | | 118 | | matrixStrideC | 输入 | 该参数预留,保持默认值0即可。 | |
| @@ -129,8 +129,8 @@ | |||
| 129 | - 使用该接口时,A、B矩阵的Layout格式必须相同。 | 129 | - 使用该接口时,A、B矩阵的Layout格式必须相同。 |
| 130 | - 对于BSNGD、SBNGD、BNGS1S2 Layout格式,输入A、B矩阵按分形对齐后的多Batch数据总和应小于L1 Buffer的大小;对于NORMAL Layout格式没有这种限制,但需通过MatmulConfig配置输入A、B矩阵多Batch数据大小与L1 Buffer的大小关系; | 130 | - 对于BSNGD、SBNGD、BNGS1S2 Layout格式,输入A、B矩阵按分形对齐后的多Batch数据总和应小于L1 Buffer的大小;对于NORMAL Layout格式没有这种限制,但需通过MatmulConfig配置输入A、B矩阵多Batch数据大小与L1 Buffer的大小关系; |
| 131 | - 对于BSNGD、SBNGD、BNGS1S2 Layout格式,称左矩阵、右矩阵的G轴分别为ALayoutInfoG、BLayoutInfoG,则ALayoutInfoG / batchA = BLayoutInfoG / batchB;对于NORMAL Layout格式,batchA、batchB必须满足倍数关系。 | 131 | - 对于BSNGD、SBNGD、BNGS1S2 Layout格式,称左矩阵、右矩阵的G轴分别为ALayoutInfoG、BLayoutInfoG,则ALayoutInfoG / batchA = BLayoutInfoG / batchB;对于NORMAL Layout格式,batchA、batchB必须满足倍数关系。 |
| 132 | -- 如果接口输出到Unified Buffer上,输出C矩阵大小BaseM\*BaseN应小于分配的Unified Buffer内存大小。 | 132 | +- 如果接口输出到UB上,输出C矩阵大小BaseM\*BaseN应小于分配的UB内存大小。 |
| 133 | -- 如果接口输出到Unified Buffer上,且单核计算的N方向大小singleCoreN非32字节对齐,C矩阵的CubeFormat仅支持ND\_ALIGN格式,输出C矩阵片时,自动将singleCoreN方向上的数据补齐至32字节。 | 133 | +- 如果接口输出到UB上,且单核计算的N方向大小singleCoreN非32字节对齐,C矩阵的CubeFormat仅支持ND\_ALIGN格式,输出C矩阵片时,自动将singleCoreN方向上的数据补齐至32字节。 |
| 134 | - 对于BSNGD、SBNGD Layout格式,输入输出只支持ND格式数据。对于BNGS1S2、NORMAL Layout格式,输入支持ND/NZ格式数据。 | 134 | - 对于BSNGD、SBNGD Layout格式,输入输出只支持ND格式数据。对于BNGS1S2、NORMAL Layout格式,输入支持ND/NZ格式数据。 |
| 135 | - 对于BSNGD、SBNGD Layout格式,不支持连续写模式。 | 135 | - 对于BSNGD、SBNGD Layout格式,不支持连续写模式。 |
| 136 | - 该接口不支持量化模式,即不支持SetQuantScalar、SetQuantVector接口。 | 136 | - 该接口不支持量化模式,即不支持SetQuantScalar、SetQuantVector接口。 |
| @@ -30,7 +30,7 @@ | |||
| 30 | | basicK | 与[TCubeTiling结构体](../Matmul_Tiling/TCubeTiling_struct.md)中的baseK参数含义相同,Matmul计算时base块K轴长度,以元素为单位。 | BasicBlock、SpecialBasicBlock | | 30 | | basicK | 与[TCubeTiling结构体](../Matmul_Tiling/TCubeTiling_struct.md)中的baseK参数含义相同,Matmul计算时base块K轴长度,以元素为单位。 | BasicBlock、SpecialBasicBlock | |
| 31 | | intrinsicsCheck | 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id60 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id60 --><!-- npu="9030" id4 --><br><br>Kirin 9030不支持此参数。<!-- end id4 --> | 所有模板 | | 31 | | intrinsicsCheck | 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:<br>false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。<br>true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。<!-- npu="950" id60 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id60 --><!-- npu="9030" id4 --><br><br>Kirin 9030不支持此参数。<!-- end id4 --> | 所有模板 | |
| 32 | | isNBatch | 是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。true:开启多Batch。<!-- npu="950" id61 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id61 --><!-- npu="9030" id5 --><br><br>Kirin 9030不支持此参数。<!-- end id5 --> | Norm | | 32 | | isNBatch | 是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用[IterateNBatch](IterateNBatch.md)实现多Batch输入多Batch输出。参数取值如下:<br>false:不开启多Batch(默认值)。true:开启多Batch。<!-- npu="950" id61 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id61 --><!-- npu="9030" id5 --><br><br>Kirin 9030不支持此参数。<!-- end id5 --> | Norm | |
| 33 | -| enVecND2NZ | 开启通过vector指令进行ND2NZ。开启时需要设置[SetLocalWorkspace](SetLocalWorkspace.md)。参数取值如下:<br>false:不开启通过vector指令进行ND2NZ(默认值)。<br>true:开启通过vector指令进行ND2NZ。<!-- npu="310p" id128 --><br><br>针对Atlas 推理系列产品AI Core,在Unified Buffer空间足够的条件下(Unified Buffer空间大于2倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),建议优先开启,搬运性能更好。<!-- end id128 --><!-- npu="950" id62 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id62 --><!-- npu="A3" id92 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id92 --><!-- npu="910b" id110 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id110 --><!-- npu="310b" id146 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id146 --><!-- npu="9030" id6 --><br><br>Kirin 9030不支持此参数。<!-- end id6 --> | 所有模板 | | 33 | +| enVecND2NZ | 开启通过vector指令进行ND2NZ。开启时需要设置[SetLocalWorkspace](SetLocalWorkspace.md)。参数取值如下:<br>false:不开启通过vector指令进行ND2NZ(默认值)。<br>true:开启通过vector指令进行ND2NZ。<!-- npu="310p" id128 --><br><br>针对Atlas 推理系列产品AI Core,在Unified Buffer(UB)空间足够的条件下(UB空间大于2倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),建议优先开启,搬运性能更好。<!-- end id128 --><!-- npu="950" id62 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id62 --><!-- npu="A3" id92 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id92 --><!-- npu="910b" id110 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id110 --><!-- npu="310b" id146 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id146 --><!-- npu="9030" id6 --><br><br>Kirin 9030不支持此参数。<!-- end id6 --> | 所有模板 | |
| 34 | | doSpecialBasicBlock | 开启SpecialBasicBlock模板。参数取值如下:<br>true:开启SpecialBasicBlock模板。false:不开启SpecialBasicBlock模板。<br><br>本质上也是BasicBlock模板,但消除了头开销Scalar计算。<!-- npu="950" id63 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id63 --> | SpecialBasicBlock | | 34 | | doSpecialBasicBlock | 开启SpecialBasicBlock模板。参数取值如下:<br>true:开启SpecialBasicBlock模板。false:不开启SpecialBasicBlock模板。<br><br>本质上也是BasicBlock模板,但消除了头开销Scalar计算。<!-- npu="950" id63 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id63 --> | SpecialBasicBlock | |
| 35 | | doMTE2Preload | 在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下:<br>0:不开启(默认值)。<br>1:开启M方向preload。<br>2:开启N方向preload。<br><br>注意:开启M/N方向的预加载功能时需保证K全载且M/N方向开启DoubleBuffer;其中,M方向的K全载条件为:singleCoreK/baseK <= stepKa;N方向的K全载条件为:singleCoreK/baseK <= stepKb。<!-- npu="9030" id7 --><br><br>Kirin 9030仅支持默认值。<!-- end id7 --> | MDL | | 35 | | doMTE2Preload | 在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下:<br>0:不开启(默认值)。<br>1:开启M方向preload。<br>2:开启N方向preload。<br><br>注意:开启M/N方向的预加载功能时需保证K全载且M/N方向开启DoubleBuffer;其中,M方向的K全载条件为:singleCoreK/baseK <= stepKa;N方向的K全载条件为:singleCoreK/baseK <= stepKb。<!-- npu="9030" id7 --><br><br>Kirin 9030仅支持默认值。<!-- end id7 --> | MDL | |
| 36 | | singleCoreM | 单核内M轴shape大小,以元素为单位。 | SpecialBasicBlock | | 36 | | singleCoreM | 单核内M轴shape大小,以元素为单位。 | SpecialBasicBlock | |
| @@ -56,8 +56,8 @@ | |||
| 56 | | enableSetDefineData | 启用模板参数MatmulCallBack(自定义回调函数)时,用于允许/禁止设置回调函数需要的计算数据或在GM上存储的数据地址等信息。<br><br>参数取值如下:<br>true:允许设置(默认值)。<br>false:不允许设置。SetSelfDefineData处理相关的代码都会在编译期删除,从而优化性能。<!-- npu="950" id71 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id71 --><!-- npu="9030" id22 --><br><br>Kirin 9030仅支持true。<!-- end id22 --> | Norm、MDL | | 56 | | enableSetDefineData | 启用模板参数MatmulCallBack(自定义回调函数)时,用于允许/禁止设置回调函数需要的计算数据或在GM上存储的数据地址等信息。<br><br>参数取值如下:<br>true:允许设置(默认值)。<br>false:不允许设置。SetSelfDefineData处理相关的代码都会在编译期删除,从而优化性能。<!-- npu="950" id71 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。<!-- end id71 --><!-- npu="9030" id22 --><br><br>Kirin 9030仅支持true。<!-- end id22 --> | Norm、MDL | |
| 57 | | iterateMode | 用于优化Matmul计算的头开销。具体为,对Iterate系列接口(包括[Iterate](Iterate.md)、[IterateAll](IterateAll.md)、[IterateBatch](IterateBatch.md)、[IterateNBatch](IterateNBatch.md))的优化,当开启某种模式时,表示Matmul计算过程中只调用该种模式对应的一个Iterate系列接口,其它Iterate系列接口相关的代码都会在编译期删除,从而优化性能。该参数为IterateMode类型。参数取值如下:<br>ITERATE_MODE_NORMAL:对于Iterate系列接口,Matmul计算过程中只调用[Iterate](Iterate.md)接口。<br>ITERATE_MODE_ALL:对于Iterate系列接口,Matmul计算过程中只调用[IterateAll](IterateAll.md)接口。<br>ITERATE_MODE_BATCH:对于Iterate系列接口,Matmul计算过程中只调用[IterateBatch](IterateBatch.md)接口。<br>ITERATE_MODE_N_BATCH:对于Iterate系列接口,Matmul计算过程中只调用[IterateNBatch](IterateNBatch.md)接口。<br>ITERATE_MODE_DEFAULT:默认值,不限定调用Iterate系列接口的个数,不开启计算头开销的优化。<!-- npu="950" id72 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id72 --><!-- npu="A3" id93 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id93 --><!-- npu="910b" id111 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id111 --><!-- npu="310p" id129 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id129 --><!-- npu="310b" id147 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id147 --><!-- npu="x90" id23 --><br><br>Kirin X90支持该参数。<!-- end id23 --><!-- npu="9030" id24 --><br><br>Kirin 9030仅支持默认值。<!-- end id24 --> | 所有模板 | | 57 | | iterateMode | 用于优化Matmul计算的头开销。具体为,对Iterate系列接口(包括[Iterate](Iterate.md)、[IterateAll](IterateAll.md)、[IterateBatch](IterateBatch.md)、[IterateNBatch](IterateNBatch.md))的优化,当开启某种模式时,表示Matmul计算过程中只调用该种模式对应的一个Iterate系列接口,其它Iterate系列接口相关的代码都会在编译期删除,从而优化性能。该参数为IterateMode类型。参数取值如下:<br>ITERATE_MODE_NORMAL:对于Iterate系列接口,Matmul计算过程中只调用[Iterate](Iterate.md)接口。<br>ITERATE_MODE_ALL:对于Iterate系列接口,Matmul计算过程中只调用[IterateAll](IterateAll.md)接口。<br>ITERATE_MODE_BATCH:对于Iterate系列接口,Matmul计算过程中只调用[IterateBatch](IterateBatch.md)接口。<br>ITERATE_MODE_N_BATCH:对于Iterate系列接口,Matmul计算过程中只调用[IterateNBatch](IterateNBatch.md)接口。<br>ITERATE_MODE_DEFAULT:默认值,不限定调用Iterate系列接口的个数,不开启计算头开销的优化。<!-- npu="950" id72 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id72 --><!-- npu="A3" id93 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id93 --><!-- npu="910b" id111 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id111 --><!-- npu="310p" id129 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id129 --><!-- npu="310b" id147 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id147 --><!-- npu="x90" id23 --><br><br>Kirin X90支持该参数。<!-- end id23 --><!-- npu="9030" id24 --><br><br>Kirin 9030仅支持默认值。<!-- end id24 --> | 所有模板 | |
| 58 | | enableReuse | [SetSelfDefineData](SetSelfDefineData.md)函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下:<br>true:直接传递计算数据,仅限单个值。<br>false:传递GM上存储的数据地址信息。<!-- npu="950" id73 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。<!-- end id73 --><!-- npu="9030" id25 --><br><br>Kirin 9030仅支持默认值。<!-- end id25 --> | Norm、MDL | | 58 | | enableReuse | [SetSelfDefineData](SetSelfDefineData.md)函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下:<br>true:直接传递计算数据,仅限单个值。<br>false:传递GM上存储的数据地址信息。<!-- npu="950" id73 --><br><br>对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。<!-- end id73 --><!-- npu="9030" id25 --><br><br>Kirin 9030仅支持默认值。<!-- end id25 --> | Norm、MDL | |
| 59 | -| enableUBReuse | 是否开启Unified Buffer复用。在Unified Buffer空间足够的条件下(Unified Buffer空间大于4倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),设置开启Unified Buffer复用后,Unified Buffer空间分为互不重叠的两份,分别存储Matmul计算相邻前后两轮迭代的数据,后一轮迭代数据的搬入将不必等待前一轮迭代的Unified Buffer空间释放,从而优化流水。参数取值如下:<br>true:开启Unified Buffer复用。<br>false:不开启Unified Buffer复用。<!-- npu="950" id74 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id74 --><!-- npu="A3" id94 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id94 --><!-- npu="910b" id112 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id112 --><!-- npu="310p" id130 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id130 --><!-- npu="310b" id148 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id148 --><!-- npu="x90" id26 --><br><br>Kirin X90不支持此参数。<!-- end id26 --><!-- npu="9030" id27 --><br><br>Kirin 9030不支持此参数。<!-- end id27 --> | MDL | | 59 | +| enableUBReuse | 是否开启UB复用。在UB空间足够的条件下(UB空间大于4倍TCubeTiling的[transLength](../Matmul_Tiling/TCubeTiling_struct.md#p1620315053211)参数),设置开启UB复用后,UB空间分为互不重叠的两份,分别存储Matmul计算相邻前后两轮迭代的数据,后一轮迭代数据的搬入将不必等待前一轮迭代的UB空间释放,从而优化流水。参数取值如下:<br>true:开启UB复用。<br>false:不开启UB复用。<!-- npu="950" id74 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id74 --><!-- npu="A3" id94 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id94 --><!-- npu="910b" id112 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id112 --><!-- npu="310p" id130 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id130 --><!-- npu="310b" id148 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id148 --><!-- npu="x90" id26 --><br><br>Kirin X90不支持此参数。<!-- end id26 --><!-- npu="9030" id27 --><br><br>Kirin 9030不支持此参数。<!-- end id27 --> | MDL | |
| 60 | -| enableL1CacheUB | 是否开启L1 Buffer缓存Unified Buffer计算块。建议在MTE3和MTE2流水串行较多的场景使用。参数取值如下:<br>true:开启L1 Buffer缓存Unified Buffer计算块。<br>false:不开启L1 Buffer缓存Unified Buffer计算块。<br><br>若要开启L1 Buffer缓存Unified Buffer计算块,必须在Tiling实现中调用[SetMatmulConfigParams](../Matmul_Tiling/SetMatmulConfigParams.md)接口将参数enableL1CacheUBIn设置为true。<!-- npu="950" id75 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id75 --><!-- npu="A3" id95 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id95 --><!-- npu="910b" id113 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id113 --><!-- npu="310p" id131 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id131 --><!-- npu="310b" id149 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id149 --><!-- npu="x90" id28 --><br><br>Kirin X90不支持此参数。<!-- end id28 --><!-- npu="9030" id29 --><br><br>Kirin 9030不支持此参数。<!-- end id29 --> | MDL | | 60 | +| enableL1CacheUB | 是否开启L1 Buffer缓存UB计算块。建议在MTE3和MTE2流水串行较多的场景使用。参数取值如下:<br>true:开启L1 Buffer缓存UB计算块。<br>false:不开启L1 Buffer缓存UB计算块。<br><br>若要开启L1 Buffer缓存UB计算块,必须在Tiling实现中调用[SetMatmulConfigParams](../Matmul_Tiling/SetMatmulConfigParams.md)接口将参数enableL1CacheUBIn设置为true。<!-- npu="950" id75 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id75 --><!-- npu="A3" id95 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id95 --><!-- npu="910b" id113 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id113 --><!-- npu="310p" id131 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id131 --><!-- npu="310b" id149 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id149 --><!-- npu="x90" id28 --><br><br>Kirin X90不支持此参数。<!-- end id28 --><!-- npu="9030" id29 --><br><br>Kirin 9030不支持此参数。<!-- end id29 --> | MDL | |
| 61 | | intraBlockPartSum | 用于分离模式下的Vector、Cube计算融合场景,开启两个AIV核的一次计算结果(baseM * baseN大小的矩阵分片)在L0C Buffer上累加,参数取值如下:<br>false:不开启两个AIV核的计算结果在L0C Buffer上的累加(默认值)。<br>true:开启两个AIV核的计算结果在L0C Buffer上的累加。<!-- npu="950" id76 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id76 --><!-- npu="A3" id96 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id96 --><!-- npu="910b" id114 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id114 --><!-- npu="310p" id132 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id132 --><!-- npu="310b" id150 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id150 --><!-- npu="x90" id30 --><br><br>Kirin X90不支持此参数。<!-- end id30 --><!-- npu="9030" id31 --><br><br>Kirin 9030不支持此参数。<!-- end id31 --> | Norm | | 61 | | intraBlockPartSum | 用于分离模式下的Vector、Cube计算融合场景,开启两个AIV核的一次计算结果(baseM * baseN大小的矩阵分片)在L0C Buffer上累加,参数取值如下:<br>false:不开启两个AIV核的计算结果在L0C Buffer上的累加(默认值)。<br>true:开启两个AIV核的计算结果在L0C Buffer上的累加。<!-- npu="950" id76 --><br><br>包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。<!-- end id76 --><!-- npu="A3" id96 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id96 --><!-- npu="910b" id114 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id114 --><!-- npu="310p" id132 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id132 --><!-- npu="310b" id150 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id150 --><!-- npu="x90" id30 --><br><br>Kirin X90不支持此参数。<!-- end id30 --><!-- npu="9030" id31 --><br><br>Kirin 9030不支持此参数。<!-- end id31 --> | Norm | |
| 62 | | iterateOrder | Matmul做矩阵运算的循环迭代顺序,与[表1](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT时,本参数生效。参数取值如下:<br><br>ORDER_M:先往M轴方向偏移再往N轴方向偏移。<br><br>ORDER_N:先往N轴方向偏移再往M轴方向偏移。<br><br>UNDEF:当前无效。<br><br>注:Norm模板的Matmul场景、MDL模板使用时,若IterateOrder取值ORDER_M,[TCubeTiling结构](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。<br>MxMatmul仅支持MDL模板。<!-- npu="950" id77 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id77 --><!-- npu="A3" id97 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id97 --><!-- npu="910b" id115 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id115 --><!-- npu="310p" id133 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id133 --><!-- npu="310b" id151 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id151 --><!-- npu="x90" id32 --><br><br>Kirin X90支持此参数。<!-- end id32 --><!-- npu="9030" id33 --><br><br>Kirin 9030仅支持ORDER_M。<!-- end id33 --> | Norm、MDL | | 62 | | iterateOrder | Matmul做矩阵运算的循环迭代顺序,与[表1](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT时,本参数生效。参数取值如下:<br><br>ORDER_M:先往M轴方向偏移再往N轴方向偏移。<br><br>ORDER_N:先往N轴方向偏移再往M轴方向偏移。<br><br>UNDEF:当前无效。<br><br>注:Norm模板的Matmul场景、MDL模板使用时,若IterateOrder取值ORDER_M,[TCubeTiling结构](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。<br>MxMatmul仅支持MDL模板。<!-- npu="950" id77 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id77 --><!-- npu="A3" id97 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id97 --><!-- npu="910b" id115 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id115 --><!-- npu="310p" id133 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id133 --><!-- npu="310b" id151 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id151 --><!-- npu="x90" id32 --><br><br>Kirin X90支持此参数。<!-- end id32 --><!-- npu="9030" id33 --><br><br>Kirin 9030仅支持ORDER_M。<!-- end id33 --> | Norm、MDL | |
| 63 | | scheduleType | 配置Matmul数据搬运模式。参数取值如下:<br>ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运;<br>ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运;设置该取值后,需要与IterateOrder参数配合使用。该配置当前只在BatchMatmul场景(开启Norm模板)或Matmul场景(开启MDL模板或Norm模板)生效。<br>若IterateOrder取值ORDER_M,则N方向循环搬运(在singleCoreN大于baseN场景可能有性能提升),即B矩阵的MTE1搬运并行;<br>若IterateOrder取值ORDER_N,则M方向循环搬运(在singleCoreM大于baseM场景可能有性能提升),即A矩阵的MTE1搬运并行;<br>不能同时开启M方向和N方向循环搬运;<br><br>注:<br>Norm模板的Batch Matmul场景或者MDL模板中,singleCoreK>baseK时,不能设置为ScheduleType::OUTER_PRODUCT取值,需使用默认模式。<br>Norm模板或MDL模板的Matmul场景,仅支持在纯Cube模式(只有矩阵计算)下配置ScheduleType::OUTER_PRODUCT。<br>MDL模板仅在调用[IterateAll](IterateAll.md)计算的场景支持配置ScheduleType::OUTER_PRODUCT。<br>仅在C矩阵输出至GM时,支持配置ScheduleType::OUTER_PROD<!-- npu="950" id78 --><br><br>对于Ascend 950PR/Ascend 950DT的MxMatmul场景仅支持MDL模板。<!-- end id78 --><!-- npu="950" id79 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id79 --><!-- npu="A3" id98 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id98 --><!-- npu="910b" id116 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id116 --><!-- npu="310p" id134 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id134 --><!-- npu="310b" id152 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id152 --><!-- npu="x90" id34 --><br><br>Kirin X90支持此参数。<!-- end id34 --><!-- npu="9030" id35 --><br><br>Kirin 9030仅支持INNER_PRODUCT 。<!-- end id35 --> | Norm、MDL | | 63 | | scheduleType | 配置Matmul数据搬运模式。参数取值如下:<br>ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运;<br>ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运;设置该取值后,需要与IterateOrder参数配合使用。该配置当前只在BatchMatmul场景(开启Norm模板)或Matmul场景(开启MDL模板或Norm模板)生效。<br>若IterateOrder取值ORDER_M,则N方向循环搬运(在singleCoreN大于baseN场景可能有性能提升),即B矩阵的MTE1搬运并行;<br>若IterateOrder取值ORDER_N,则M方向循环搬运(在singleCoreM大于baseM场景可能有性能提升),即A矩阵的MTE1搬运并行;<br>不能同时开启M方向和N方向循环搬运;<br><br>注:<br>Norm模板的Batch Matmul场景或者MDL模板中,singleCoreK>baseK时,不能设置为ScheduleType::OUTER_PRODUCT取值,需使用默认模式。<br>Norm模板或MDL模板的Matmul场景,仅支持在纯Cube模式(只有矩阵计算)下配置ScheduleType::OUTER_PRODUCT。<br>MDL模板仅在调用[IterateAll](IterateAll.md)计算的场景支持配置ScheduleType::OUTER_PRODUCT。<br>仅在C矩阵输出至GM时,支持配置ScheduleType::OUTER_PROD<!-- npu="950" id78 --><br><br>对于Ascend 950PR/Ascend 950DT的MxMatmul场景仅支持MDL模板。<!-- end id78 --><!-- npu="950" id79 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id79 --><!-- npu="A3" id98 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id98 --><!-- npu="910b" id116 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id116 --><!-- npu="310p" id134 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id134 --><!-- npu="310b" id152 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id152 --><!-- npu="x90" id34 --><br><br>Kirin X90支持此参数。<!-- end id34 --><!-- npu="9030" id35 --><br><br>Kirin 9030仅支持INNER_PRODUCT 。<!-- end id35 --> | Norm、MDL | |
| @@ -65,12 +65,12 @@ | |||
| 65 | | isBiasBatch | 批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下:<br>true:Bias带有Batch轴,Bias大小为Batch * N(默认值)。<br>false:Bias不带Batch轴,Bias大小为N,多Batch计算Matmul时,会复用Bias。<br>注意:BatchMode::SINGLE_LARGE_THAN_L1场景仅支持设置为true。<!-- npu="950" id81 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id81 --><!-- npu="910b" id117 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id117 --><!-- npu="A3" id99 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id99 --><!-- npu="310p" id135 --><br><br>Atlas 推理系列产品AI Core不支持设置为false。<!-- end id135 --><!-- npu="310b" id153 --><br><br>Atlas 200I/500 A2 推理产品不支持设置为false。<!-- end id153 --><!-- npu="x90" id38 --><br><br>Kirin X90支持此参数。<!-- end id38 --><!-- npu="9030" id39 --><br><br>Kirin 9030不支持此参数。<!-- end id39 --> | Norm | | 65 | | isBiasBatch | 批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下:<br>true:Bias带有Batch轴,Bias大小为Batch * N(默认值)。<br>false:Bias不带Batch轴,Bias大小为N,多Batch计算Matmul时,会复用Bias。<br>注意:BatchMode::SINGLE_LARGE_THAN_L1场景仅支持设置为true。<!-- npu="950" id81 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id81 --><!-- npu="910b" id117 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id117 --><!-- npu="A3" id99 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id99 --><!-- npu="310p" id135 --><br><br>Atlas 推理系列产品AI Core不支持设置为false。<!-- end id135 --><!-- npu="310b" id153 --><br><br>Atlas 200I/500 A2 推理产品不支持设置为false。<!-- end id153 --><!-- npu="x90" id38 --><br><br>Kirin X90支持此参数。<!-- end id38 --><!-- npu="9030" id39 --><br><br>Kirin 9030不支持此参数。<!-- end id39 --> | Norm | |
| 66 | | enableStaticPadZeros | 使用常量化的Tiling参数时,在左矩阵和右矩阵搬运到L1 Buffer的过程中,是否自动按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小补零。关于常量化Tiling参数的详细内容请参考[GetMatmulApiTiling](GetMatmulApiTiling.md)。<br><br>仅支持GM输入的ND2NZ格式的补零,其他场景需要用户自行补零。参数取值如下:<br>false:搬运时不自动补零,需要用户自行补零(默认值)。<br>true:搬运时按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小自动补零。<!-- npu="9030" id40 --><br><br>Kirin 9030仅支持false。<!-- end id40 --> | Norm、MDL、IBShare | | 66 | | enableStaticPadZeros | 使用常量化的Tiling参数时,在左矩阵和右矩阵搬运到L1 Buffer的过程中,是否自动按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小补零。关于常量化Tiling参数的详细内容请参考[GetMatmulApiTiling](GetMatmulApiTiling.md)。<br><br>仅支持GM输入的ND2NZ格式的补零,其他场景需要用户自行补零。参数取值如下:<br>false:搬运时不自动补零,需要用户自行补零(默认值)。<br>true:搬运时按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小自动补零。<!-- npu="9030" id40 --><br><br>Kirin 9030仅支持false。<!-- end id40 --> | Norm、MDL、IBShare | |
| 67 | | isPartialOutput | 是否开启PartialOutput功能,即控制Matmul顺序输出K方向的基本块计算方式:Matmul一次Iterate计算的K轴是否进行累加计算。参数取值如下:<br>true:开启PartialOutput功能,一次Iterate的K轴不进行累加计算,Matmul每次计算输出局部baseK的baseM * baseN大小的矩阵分片。<br>false:不开启PartialOutput功能,一次Iterate的K轴进行累加计算,Matmul每次计算输出SingleCoreK长度的baseM * baseN大小的矩阵分片。<!-- npu="950" id82 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id82 --><!-- npu="A3" id100 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id100 --><!-- npu="910b" id118 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id118 --><!-- npu="310p" id136 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id136 --><!-- npu="310b" id154 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id154 --><!-- npu="x90" id41 --><br><br>Kirin X90支持此参数。<!-- end id41 --><!-- npu="9030" id42 --><br><br>Kirin 9030不支持此参数。<!-- end id42 --> | MDL | | 67 | | isPartialOutput | 是否开启PartialOutput功能,即控制Matmul顺序输出K方向的基本块计算方式:Matmul一次Iterate计算的K轴是否进行累加计算。参数取值如下:<br>true:开启PartialOutput功能,一次Iterate的K轴不进行累加计算,Matmul每次计算输出局部baseK的baseM * baseN大小的矩阵分片。<br>false:不开启PartialOutput功能,一次Iterate的K轴进行累加计算,Matmul每次计算输出SingleCoreK长度的baseM * baseN大小的矩阵分片。<!-- npu="950" id82 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id82 --><!-- npu="A3" id100 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id100 --><!-- npu="910b" id118 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id118 --><!-- npu="310p" id136 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id136 --><!-- npu="310b" id154 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id154 --><!-- npu="x90" id41 --><br><br>Kirin X90支持此参数。<!-- end id41 --><!-- npu="9030" id42 --><br><br>Kirin 9030不支持此参数。<!-- end id42 --> | MDL | |
| 68 | -| enableMixDualMaster | 是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true:<br>核函数的类型为MIX,同时AIC核数 : AIV核数为1:1。<br>核函数的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启[IBSHARE](Matmul_usage.md#table1188045714378)参数。<br><br>注意,开启MixDualMaster场景,需要满足:<br>同一算子中所有Matmul对象的该参数取值必须保持一致。<br>A/B/Bias矩阵只支持从GM搬入。<br>获取矩阵计算结果只支持调用[IterateAll](IterateAll.md)接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用[GetTensorC](GetTensorC.md)等接口获取结果。<!-- npu="950" id83 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id83 --><!-- npu="A3" id101 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id101 --><!-- npu="910b" id119 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id119 --><!-- npu="310p" id137 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id137 --><!-- npu="310b" id155 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id155 --><!-- npu="x90" id43 --><br><br>Kirin X90不支持此参数。<!-- end id43 --><!-- npu="9030" id44 --><br><br>Kirin 9030不支持此参数。<!-- end id44 --> | Norm | | 68 | +| enableMixDualMaster | 是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true:<br>核函数(Kernel)的类型为MIX,同时AIC核数 : AIV核数为1:1。<br>核函数(Kernel)的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启[IBSHARE](Matmul_usage.md#table1188045714378)参数。<br><br>注意,开启MixDualMaster场景,需要满足:<br>同一算子中所有Matmul对象的该参数取值必须保持一致。<br>A/B/Bias矩阵只支持从GM搬入。<br>获取矩阵计算结果只支持调用[IterateAll](IterateAll.md)接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用[GetTensorC](GetTensorC.md)等接口获取结果。<!-- npu="950" id83 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id83 --><!-- npu="A3" id101 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id101 --><!-- npu="910b" id119 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id119 --><!-- npu="310p" id137 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id137 --><!-- npu="310b" id155 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id155 --><!-- npu="x90" id43 --><br><br>Kirin X90不支持此参数。<!-- end id43 --><!-- npu="9030" id44 --><br><br>Kirin 9030不支持此参数。<!-- end id44 --> | Norm | |
| 69 | | isA2B2Shared | 是否开启A2和B2的全局管理,即控制所有Matmul对象是否共用A2和B2的double buffer机制。该配置为全局配置,所有Matmul对象取值必须保持一致。注意,开启时,A矩阵、B矩阵的基本块大小均不能超过32KB。<br><br>参数取值如下:<br>true:开启。false:关闭(默认值)。<!-- npu="A3" id102 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id102 --><!-- npu="910b" id120 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id120 --><!-- npu="310p" id138 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id138 --><!-- npu="310b" id156 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id156 --><!-- npu="950" id84 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id84 --><!-- npu="x90" id45 --><br><br>Kirin X90支持此参数。<!-- end id45 --><!-- npu="9030" id46 --><br><br>Kirin 9030不支持此参数。<!-- end id46 --><br><br>该参数取值为true时,建议同时设置enUnitFlag参数为true,使搬运与计算流水并行,提高性能。 | Norm、MDL | | 69 | | isA2B2Shared | 是否开启A2和B2的全局管理,即控制所有Matmul对象是否共用A2和B2的double buffer机制。该配置为全局配置,所有Matmul对象取值必须保持一致。注意,开启时,A矩阵、B矩阵的基本块大小均不能超过32KB。<br><br>参数取值如下:<br>true:开启。false:关闭(默认值)。<!-- npu="A3" id102 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id102 --><!-- npu="910b" id120 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id120 --><!-- npu="310p" id138 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id138 --><!-- npu="310b" id156 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id156 --><!-- npu="950" id84 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id84 --><!-- npu="x90" id45 --><br><br>Kirin X90支持此参数。<!-- end id45 --><!-- npu="9030" id46 --><br><br>Kirin 9030不支持此参数。<!-- end id46 --><br><br>该参数取值为true时,建议同时设置enUnitFlag参数为true,使搬运与计算流水并行,提高性能。 | Norm、MDL | |
| 70 | | isEnableChannelSplit | 是否开启channel_split功能。正常情况下,Matmul计算出的CubeFormat::NZ格式的C矩阵分形为16\*16,假设此时的分形个数为x,channel_split功能是使获得的C矩阵分形为16\*8,同时分形个数变为2x。注意,当前仅在Matmul计算结果C矩阵的Format为CubeFormat::NZ,TYPE为float类型,矩阵乘结果L0C Buffer(CO1)为float类型,输出到Global Memory的场景,支持开启该参数。参数取值如下:<br>false:默认值,不开启channel_split功能,输出的分形为16\*16。<br>true:开启channel_split功能,输出的分形为16\*8。<!-- npu="950" id85 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id85 --><!-- npu="A3" id103 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id103 --><!-- npu="910b" id121 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id121 --><!-- npu="310p" id139 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id139 --><!-- npu="310b" id157 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id157 --><!-- npu="x90" id47 --><br><br>Kirin X90不支持此参数。<!-- end id47 --><!-- npu="9030" id48 --><br><br>Kirin 9030不支持此参数。<!-- end id48 --> | 所有模板 | | 70 | | isEnableChannelSplit | 是否开启channel_split功能。正常情况下,Matmul计算出的CubeFormat::NZ格式的C矩阵分形为16\*16,假设此时的分形个数为x,channel_split功能是使获得的C矩阵分形为16\*8,同时分形个数变为2x。注意,当前仅在Matmul计算结果C矩阵的Format为CubeFormat::NZ,TYPE为float类型,矩阵乘结果L0C Buffer(CO1)为float类型,输出到Global Memory的场景,支持开启该参数。参数取值如下:<br>false:默认值,不开启channel_split功能,输出的分形为16\*16。<br>true:开启channel_split功能,输出的分形为16\*8。<!-- npu="950" id85 --><br><br>Ascend 950PR/Ascend 950DT支持该参数。<!-- end id85 --><!-- npu="A3" id103 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id103 --><!-- npu="910b" id121 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id121 --><!-- npu="310p" id139 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id139 --><!-- npu="310b" id157 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id157 --><!-- npu="x90" id47 --><br><br>Kirin X90不支持此参数。<!-- end id47 --><!-- npu="9030" id48 --><br><br>Kirin 9030不支持此参数。<!-- end id48 --> | 所有模板 | |
| 71 | | enableKdimReorderLoad | 是否开启K轴错峰加载数据。基于相同Tiling参数,执行Matmul计算时,如果多核的左矩阵或者右矩阵相同,且存储于Global Memory,多个核一般会同时访问相同地址以加载矩阵数据,引发同地址访问冲突,影响性能。开启K轴错峰加载数据后,多核执行Matmul时,将尽量在相同时间访问矩阵的不同Global Memory地址,减少地址访问冲突概率,提升性能。该参数功能只支持MDL模板,建议K轴较大且左矩阵和右矩阵均非全载场景开启该功能。参数取值如下。<br>false:默认值,关闭K轴错峰加载数据的功能。<br>true:开启K轴错峰加载数据的功能。<!-- npu="950" id86 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id86 --><!-- npu="A3" id104 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id104 --><!-- npu="910b" id122 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id122 --><!-- npu="310p" id140 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id140 --><!-- npu="310b" id158 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id158 --><!-- npu="x90" id49 --><br><br>Kirin X90支持此参数。<!-- end id49 --><!-- npu="9030" id50 --><br><br>Kirin 9030不支持此参数。<!-- end id50 --> | MDL | | 71 | | enableKdimReorderLoad | 是否开启K轴错峰加载数据。基于相同Tiling参数,执行Matmul计算时,如果多核的左矩阵或者右矩阵相同,且存储于Global Memory,多个核一般会同时访问相同地址以加载矩阵数据,引发同地址访问冲突,影响性能。开启K轴错峰加载数据后,多核执行Matmul时,将尽量在相同时间访问矩阵的不同Global Memory地址,减少地址访问冲突概率,提升性能。该参数功能只支持MDL模板,建议K轴较大且左矩阵和右矩阵均非全载场景开启该功能。参数取值如下。<br>false:默认值,关闭K轴错峰加载数据的功能。<br>true:开启K轴错峰加载数据的功能。<!-- npu="950" id86 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id86 --><!-- npu="A3" id104 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。<!-- end id104 --><!-- npu="910b" id122 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。<!-- end id122 --><!-- npu="310p" id140 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id140 --><!-- npu="310b" id158 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id158 --><!-- npu="x90" id49 --><br><br>Kirin X90支持此参数。<!-- end id49 --><!-- npu="9030" id50 --><br><br>Kirin 9030不支持此参数。<!-- end id50 --> | MDL | |
| 72 | | isCO1Shared | 是否开启L0C Buffer(CO1)内存共享,由该参数与sharedCO1BufferSize参数指定L0C Buffer(CO1)划分块数,缓存到L0C Buffer(CO1)中的数据块数不能超过L0C Buffer(CO1)划分的块数,即未被GetTensorC获取的Iterate计算生成的结果个数不能超过L0C Buffer(CO1)划分的块数。该配置为全局配置,所有Matmul对象取值必须保持一致。参数取值如下:<br>true:开启L0C Buffer(CO1)内存共享。<br>false:默认值,关闭L0C Buffer(CO1)内存共享。<!-- npu="950" id87 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id87 --><!-- npu="A3" id105 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id105 --><!-- npu="910b" id123 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id123 --><!-- npu="310p" id141 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id141 --><!-- npu="310b" id159 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id159 --><!-- npu="x90" id51 --><br><br>Kirin X90不支持此参数。<!-- end id51 --><!-- npu="9030" id52 --><br><br>Kirin 9030不支持此参数。<!-- end id52 --> | Norm、IBShare | | 72 | | isCO1Shared | 是否开启L0C Buffer(CO1)内存共享,由该参数与sharedCO1BufferSize参数指定L0C Buffer(CO1)划分块数,缓存到L0C Buffer(CO1)中的数据块数不能超过L0C Buffer(CO1)划分的块数,即未被GetTensorC获取的Iterate计算生成的结果个数不能超过L0C Buffer(CO1)划分的块数。该配置为全局配置,所有Matmul对象取值必须保持一致。参数取值如下:<br>true:开启L0C Buffer(CO1)内存共享。<br>false:默认值,关闭L0C Buffer(CO1)内存共享。<!-- npu="950" id87 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id87 --><!-- npu="A3" id105 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id105 --><!-- npu="910b" id123 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id123 --><!-- npu="310p" id141 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id141 --><!-- npu="310b" id159 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id159 --><!-- npu="x90" id51 --><br><br>Kirin X90不支持此参数。<!-- end id51 --><!-- npu="9030" id52 --><br><br>Kirin 9030不支持此参数。<!-- end id52 --> | Norm、IBShare | |
| 73 | | sharedCO1BufferSize | 指定L0C Buffer(CO1)共享的一份Buffer大小。uint32_t类型,支持的取值为32\*1024、64\*1024、128\*1024。<!-- npu="950" id88 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id88 --><!-- npu="A3" id106 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id106 --><!-- npu="910b" id124 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id124 --><!-- npu="310p" id142 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id142 --><!-- npu="310b" id160 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id160 --><!-- npu="x90" id53 --><br><br>Kirin X90不支持此参数。<!-- end id53 --><!-- npu="9030" id54 --><br><br>Kirin 9030不支持此参数。<!-- end id54 --> | Norm、IBShare | | 73 | | sharedCO1BufferSize | 指定L0C Buffer(CO1)共享的一份Buffer大小。uint32_t类型,支持的取值为32\*1024、64\*1024、128\*1024。<!-- npu="950" id88 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id88 --><!-- npu="A3" id106 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id106 --><!-- npu="910b" id124 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id124 --><!-- npu="310p" id142 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id142 --><!-- npu="310b" id160 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id160 --><!-- npu="x90" id53 --><br><br>Kirin X90不支持此参数。<!-- end id53 --><!-- npu="9030" id54 --><br><br>Kirin 9030不支持此参数。<!-- end id54 --> | Norm、IBShare | |
| 74 | | bmmOutMode | 预留参数,默认值为BatchOutMode::SINGLE_BATCH。 | 预留参数 | | 74 | | bmmOutMode | 预留参数,默认值为BatchOutMode::SINGLE_BATCH。 | 预留参数 | |
| 75 | -| enableL1BankConflictOptimise<a name="p84588523128"></a> | 是否开启L1上的Bank冲突优化。在Tiling侧调用[EnableL1BankConflictOptimise](../Matmul_Tiling/EnableL1BankConflictOptimise.md)接口获取能否开启该优化的结果,并与TilingKey机制配合使用,在Kernel侧增加代码实现分支。若开启该优化,基于相同Tiling参数执行Matmul计算时,对A、B矩阵和MxMatmul场景的ScaleA、ScaleB矩阵不再连续分配L1 Buffer的空间,在DoubleBuffer场景下,并行计算的数据分别被分配在L1 Buffer的上半部空间和下半部空间,非DoubleBuf场景,数据被分配在L1 Buffer的上半部空间;另外,Bias被分配在L1 Buffer的上半部空间,向量的量化/反量化场景的量化系数被分配在L1 Buffer的下半部空间。参数取值如下。<br>false:默认值,关闭L1 Bank冲突优化。true:开启L1 Bank冲突优化。<!-- npu="950" id89 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id89 --><!-- npu="A3" id107 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id107 --><!-- npu="910b" id125 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id125 --><!-- npu="310p" id143 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id143 --><!-- npu="310b" id161 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id161 --><!-- npu="x90" id55 --><br><br>Kirin X90不支持此参数。<!-- end id55 --><!-- npu="9030" id56 --><br><br>Kirin 9030不支持此参数。<!-- end id56 --> | MDL | | 75 | +| enableL1BankConflictOptimise<a name="p84588523128"></a> | 是否开启L1上的Bank冲突优化。在Tiling侧调用[EnableL1BankConflictOptimise](../Matmul_Tiling/EnableL1BankConflictOptimise.md)接口获取能否开启该优化的结果,并与TilingKey机制配合使用,在核函数(Kernel)侧增加代码实现分支。若开启该优化,基于相同Tiling参数执行Matmul计算时,对A、B矩阵和MxMatmul场景的ScaleA、ScaleB矩阵不再连续分配L1 Buffer的空间,在DoubleBuffer场景下,并行计算的数据分别被分配在L1 Buffer的上半部空间和下半部空间,非DoubleBuf场景,数据被分配在L1 Buffer的上半部空间;另外,Bias被分配在L1 Buffer的上半部空间,向量的量化/反量化场景的量化系数被分配在L1 Buffer的下半部空间。参数取值如下。<br>false:默认值,关闭L1 Bank冲突优化。true:开启L1 Bank冲突优化。<!-- npu="950" id89 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id89 --><!-- npu="A3" id107 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id107 --><!-- npu="910b" id125 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id125 --><!-- npu="310p" id143 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id143 --><!-- npu="310b" id161 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id161 --><!-- npu="x90" id55 --><br><br>Kirin X90不支持此参数。<!-- end id55 --><!-- npu="9030" id56 --><br><br>Kirin 9030不支持此参数。<!-- end id56 --> | MDL | |
| 76 | | enableRelu | 是否开启对矩阵乘的输出矩阵C做Relu修正。开启该功能后,输出矩阵中负数值被修正为0。参数取值如下。<br>false:默认值,关闭对输出矩阵C的Relu修正功能。true:开启对输出矩阵C的Relu修正功能。<!-- npu="950" id90 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id90 --><!-- npu="A3" id108 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id108 --><!-- npu="910b" id126 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id126 --><!-- npu="310p" id144 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id144 --><!-- npu="310b" id162 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id162 --><!-- npu="x90" id57 --><br><br>Kirin X90不支持此参数。<!-- end id57 --><!-- npu="9030" id58 --><br><br>Kirin 9030不支持此参数。<!-- end id58 --> | 所有模板 | | 76 | | enableRelu | 是否开启对矩阵乘的输出矩阵C做Relu修正。开启该功能后,输出矩阵中负数值被修正为0。参数取值如下。<br>false:默认值,关闭对输出矩阵C的Relu修正功能。true:开启对输出矩阵C的Relu修正功能。<!-- npu="950" id90 --><br><br>除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。<!-- end id90 --><!-- npu="A3" id108 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id108 --><!-- npu="910b" id126 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id126 --><!-- npu="310p" id144 --><br><br>Atlas 推理系列产品AI Core不支持该参数。<!-- end id144 --><!-- npu="310b" id162 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id162 --><!-- npu="x90" id57 --><br><br>Kirin X90不支持此参数。<!-- end id57 --><!-- npu="9030" id58 --><br><br>Kirin 9030不支持此参数。<!-- end id58 --> | 所有模板 | |
| @@ -142,14 +142,14 @@ | |||
| 142 | 142 | ||
| 143 | - SplitMMatmulPolicy(SplitM模板策略) | 143 | - SplitMMatmulPolicy(SplitM模板策略) |
| 144 | 144 | ||
| 145 | - Matmul一次[Iterate](Iterate.md)的计算结果从L0C Buffer搬到Unified Buffer时,采用双输出模式,即在分离模式下,AIC核与AIV核的核数比为1:2时,在调用[GetTensorC](GetTensorC.md)接口后,Matmul一次Iterate的计算结果在矩阵的M方向一分为二,将被切分后的两块结果数据分别搬运到两个AIV核的Unified Buffer。模板策略示意图如下所示。 | 145 | + Matmul一次[Iterate](Iterate.md)的计算结果从L0C Buffer搬到Unified Buffer(UB)时,采用双输出模式,即在分离模式下,AIC核与AIV核的核数比为1:2时,在调用[GetTensorC](GetTensorC.md)接口后,Matmul一次Iterate的计算结果在矩阵的M方向一分为二,将被切分后的两块结果数据分别搬运到两个AIV核的UB。模板策略示意图如下所示。 |
| 146 | 146 | ||
| 147 | **图5** SplitM模板策略示意图 | 147 | **图5** SplitM模板策略示意图 |
| 148 |  | 148 |  |
| 149 | 149 | ||
| 150 | - SplitNMatmulPolicy(SplitN模板策略) | 150 | - SplitNMatmulPolicy(SplitN模板策略) |
| 151 | 151 | ||
| 152 | - Matmul一次[Iterate](Iterate.md)的计算结果从L0C Buffer搬到Unified Buffer时,采用双输出模式,即在分离模式下,AIC核与AIV核的核数比为1:2时,在调用[GetTensorC](GetTensorC.md)接口后,Matmul一次Iterate的计算结果在矩阵的N方向一分为二,将被切分后的两块结果数据分别搬运到两个AIV核的Unified Buffer。模板策略示意图如下所示。 | 152 | + Matmul一次[Iterate](Iterate.md)的计算结果从L0C Buffer搬到UB时,采用双输出模式,即在分离模式下,AIC核与AIV核的核数比为1:2时,在调用[GetTensorC](GetTensorC.md)接口后,Matmul一次Iterate的计算结果在矩阵的N方向一分为二,将被切分后的两块结果数据分别搬运到两个AIV核的UB。模板策略示意图如下所示。 |
| 153 | 153 | ||
| 154 | **图6** SplitN模板策略示意图 | 154 | **图6** SplitN模板策略示意图 |
| 155 |  | 155 |  |
| @@ -171,11 +171,11 @@ | |||
| 171 | - 当前只支持[Norm模板](MatmulConfig.md)和[MDL模板](MatmulConfig.md)。 | 171 | - 当前只支持[Norm模板](MatmulConfig.md)和[MDL模板](MatmulConfig.md)。 |
| 172 | 172 | ||
| 173 | - SplitMMatmulPolicy: | 173 | - SplitMMatmulPolicy: |
| 174 | - - 只支持C矩阵输出到Unified Buffer。 | 174 | + - 只支持C矩阵输出到UB。 |
| 175 | - A矩阵、B矩阵类型信息MatmulType中的参数[IBSHARE](Matmul_usage.md)必须为true。 | 175 | - A矩阵、B矩阵类型信息MatmulType中的参数[IBSHARE](Matmul_usage.md)必须为true。 |
| 176 | 176 | ||
| 177 | - SplitNMatmulPolicy: | 177 | - SplitNMatmulPolicy: |
| 178 | - - 只支持C矩阵输出到Unified Buffer。 | 178 | + - 只支持C矩阵输出到UB。 |
| 179 | - baseN必须满足是16的倍数。 | 179 | - baseN必须满足是16的倍数。 |
| 180 | - [Tiling参数](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)必须满足:singleCoreM = baseM,singleCoreN = baseN,singleCoreK = baseK。 | 180 | - [Tiling参数](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)必须满足:singleCoreM = baseM,singleCoreN = baseN,singleCoreK = baseK。 |
| 181 | - A矩阵、B矩阵类型信息MatmulType中的参数[IBSHARE](Matmul_usage.md)必须为true。 | 181 | - A矩阵、B矩阵类型信息MatmulType中的参数[IBSHARE](Matmul_usage.md)必须为true。 |
| @@ -323,7 +323,7 @@ | |||
| 323 | mm.SetBias(gmBias); | 323 | mm.SetBias(gmBias); |
| 324 | } | 324 | } |
| 325 | 325 | ||
| 326 | - // 调用GetTensorC接口后,将Matmul一次Iterate的计算结果一分为二,搬运到两个AIV核的Unified Buffer。 | 326 | + // 调用GetTensorC接口后,将Matmul一次Iterate的计算结果一分为二,搬运到两个AIV核的UB。 |
| 327 | pipe.InitBuffer(resultCMatrix, 1, tiling.M* tiling.N * sizeof(C_T)); | 327 | pipe.InitBuffer(resultCMatrix, 1, tiling.M* tiling.N * sizeof(C_T)); |
| 328 | mm.template Iterate<false>(); | 328 | mm.template Iterate<false>(); |
| 329 | bufferC = resultCMatrix.AllocTensor<C_T>(); | 329 | bufferC = resultCMatrix.AllocTensor<C_T>(); |
| @@ -372,7 +372,7 @@ | |||
| 372 | mm.SetBias(gmBias); | 372 | mm.SetBias(gmBias); |
| 373 | } | 373 | } |
| 374 | 374 | ||
| 375 | - // 调用GetTensorC接口后,将Matmul一次Iterate的计算结果一分为二,搬运到两个AIV核的Unified Buffer。 | 375 | + // 调用GetTensorC接口后,将Matmul一次Iterate的计算结果一分为二,搬运到两个AIV核的UB。 |
| 376 | pipe.InitBuffer(resultCMatrix, 1, tiling.M* tiling.N * sizeof(C_T)); | 376 | pipe.InitBuffer(resultCMatrix, 1, tiling.M* tiling.N * sizeof(C_T)); |
| 377 | mm.template Iterate<false>(); | 377 | mm.template Iterate<false>(); |
| 378 | bufferC = resultCMatrix.AllocTensor<C_T>(); | 378 | bufferC = resultCMatrix.AllocTensor<C_T>(); |
| @@ -1,4 +1,4 @@ | |||
| 1 | -# Matmul Kernel侧接口 | 1 | +# Matmul核函数(Kernel)侧接口 |
| 2 | 2 | ||
| 3 | - **[Matmul使用说明](Matmul_usage.md)** | 3 | - **[Matmul使用说明](Matmul_usage.md)** |
| 4 | 4 | ||
| @@ -14,7 +14,7 @@ Matmul的计算公式为:C = A \* B + Bias,其示意图如下。 | |||
| 14 | > [!NOTE]说明 | 14 | > [!NOTE]说明 |
| 15 | >下文中提及的M轴方向,即为A矩阵纵向;K轴方向,即为A矩阵横向或B矩阵纵向;N轴方向,即为B矩阵横向;尾轴,即为矩阵最后一个维度。 | 15 | >下文中提及的M轴方向,即为A矩阵纵向;K轴方向,即为A矩阵横向或B矩阵纵向;N轴方向,即为B矩阵横向;尾轴,即为矩阵最后一个维度。 |
| 16 | 16 | ||
| 17 | -Kernel侧实现Matmul矩阵乘运算的步骤概括为: | 17 | +核函数(Kernel)侧实现Matmul矩阵乘运算的步骤概括为: |
| 18 | 18 | ||
| 19 | 1. 创建Matmul对象。 | 19 | 1. 创建Matmul对象。 |
| 20 | 2. 初始化操作。 | 20 | 2. 初始化操作。 |
| @@ -65,7 +65,7 @@ Kernel侧实现Matmul矩阵乘运算的步骤概括为: | |||
| 65 | <a name="table1188045714378"></a> | 65 | <a name="table1188045714378"></a> |
| 66 | | 参数 | 说明 | | 66 | | 参数 | 说明 | |
| 67 | | --- | --- | | 67 | | --- | --- | |
| 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或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 --> | | 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 | | FORMAT | 数据的物理排布格式。<!-- npu="950" id20 --><br><br>针对Ascend 950PR/Ascend 950DT:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::COLUMN_MAJOR,CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::COLUMN_MAJOR<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN,CubeFormat::COLUMN_MAJOR<br> <br>针对Ascend 950PR/Ascend 950DT,请注意:<br> 仅在非MxMatmul场景中,A、B、C矩阵Format支持CubeFormat::COLUMN_MAJOR。当Format为CubeFormat::COLUMN_MAJOR时,对应矩阵仅支持内存逻辑位置为TPosition::GM。<br>输入A矩阵或B矩阵设置为TPosition::TSCM时,对应的Format仅支持CubeFormat::NZ。<br>C矩阵设置为TPosition::VECIN,CubeFormat::ND时,要求尾轴32字节对齐,比如数据类型是half的情况下,N要求是16的倍数。<!-- end id20 --><!-- npu="A3" id21 --><br> <br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ, CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<!-- end id21 --><!-- npu="910b" id22 --><br> <br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ, CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<!-- end id22 --><!-- npu="310p" id23 --><br> <br>针对Atlas 推理系列产品AI Core:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<br> 注意:针对Atlas 推理系列产品AI Core,C矩阵设置为CubeFormat::ND时,要求尾轴32字节对齐,比如数据类型是half的情况下,N要求是16的倍数。<!-- end id23 --><!-- npu="310b" id24 --><br> <br>针对Atlas 200I/500 A2 推理产品:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ<!-- end id24 --><!-- npu="x90" id3 --><br> <br>针对Kirin X90:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ, CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<!-- end id3 --><!-- npu="9030" id4 --><br> <br>针对Kirin 9030:<br>A矩阵可设置为CubeFormat::NZ,CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND<!-- end id4 --><!-- npu="310b" id25 --><br><br>注意: 针对Atlas 200I/500 A2 推理产品,C矩阵设置为TPosition::VECIN或者TPosition::TSCM,CubeFormat::ND时,要求尾轴32字节对齐,比如数据类型是half的情况下,N要求是16的倍数;C矩阵设置为TPosition::VECIN或者TPosition::TSCM,CubeFormat::NZ时,N要求是16的倍数。<!-- end id25 --><br> <br>关于CubeFormat::NZ格式的A矩阵、B矩阵、C矩阵的对齐约束,请参考[表3](#table98851538118)。 | | 69 | | FORMAT | 数据的物理排布格式。<!-- npu="950" id20 --><br><br>针对Ascend 950PR/Ascend 950DT:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::COLUMN_MAJOR,CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::COLUMN_MAJOR<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN,CubeFormat::COLUMN_MAJOR<br> <br>针对Ascend 950PR/Ascend 950DT,请注意:<br> 仅在非MxMatmul场景中,A、B、C矩阵Format支持CubeFormat::COLUMN_MAJOR。当Format为CubeFormat::COLUMN_MAJOR时,对应矩阵仅支持内存逻辑位置为TPosition::GM。<br>输入A矩阵或B矩阵设置为TPosition::TSCM时,对应的Format仅支持CubeFormat::NZ。<br>C矩阵设置为TPosition::VECIN,CubeFormat::ND时,要求尾轴32字节对齐,比如数据类型是half的情况下,N要求是16的倍数。<!-- end id20 --><!-- npu="A3" id21 --><br> <br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ, CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<!-- end id21 --><!-- npu="910b" id22 --><br> <br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ, CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<!-- end id22 --><!-- npu="310p" id23 --><br> <br>针对Atlas 推理系列产品AI Core:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<br> 注意:针对Atlas 推理系列产品AI Core,C矩阵设置为CubeFormat::ND时,要求尾轴32字节对齐,比如数据类型是half的情况下,N要求是16的倍数。<!-- end id23 --><!-- npu="310b" id24 --><br> <br>针对Atlas 200I/500 A2 推理产品:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ<!-- end id24 --><!-- npu="x90" id3 --><br> <br>针对Kirin X90:<br> A矩阵可设置为CubeFormat::ND,CubeFormat::NZ, CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::ND,CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND,CubeFormat::NZ,CubeFormat::ND_ALIGN<!-- end id3 --><!-- npu="9030" id4 --><br> <br>针对Kirin 9030:<br>A矩阵可设置为CubeFormat::NZ,CubeFormat::VECTOR<br>B矩阵可设置为CubeFormat::NZ<br>Bias可设置为CubeFormat::ND<br>C矩阵可设置为CubeFormat::ND<!-- end id4 --><!-- npu="310b" id25 --><br><br>注意: 针对Atlas 200I/500 A2 推理产品,C矩阵设置为TPosition::VECIN或者TPosition::TSCM,CubeFormat::ND时,要求尾轴32字节对齐,比如数据类型是half的情况下,N要求是16的倍数;C矩阵设置为TPosition::VECIN或者TPosition::TSCM,CubeFormat::NZ时,N要求是16的倍数。<!-- end id25 --><br> <br>关于CubeFormat::NZ格式的A矩阵、B矩阵、C矩阵的对齐约束,请参考[表3](#table98851538118)。 | |
| 70 | | TYPE | 数据类型。<!-- npu="950" id26 --><br><br>针对Ascend 950PR/Ascend 950DT:<br> 1、非MxMatmul场景:<br>A矩阵可设置为half、float、bfloat16_t 、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t<br>Bias可设置为half、float、int32_t、bfloat16_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t、int8_t、fp8_e4m3fn_t、hifloat8_t<br> 2、MxMatmul场景:<br>A矩阵可设置为fp8_e4m3fn_t、fp8_e5m2_t、fp4x2_e2m1_t、fp4x2_e1m2_t<br>B矩阵可设置为fp8_e4m3fn_t、fp8_e5m2_t、fp4x2_e2m1_t、fp4x2_e1m2_t<br>Bias可设置为half、float、bfloat16_t<br>C矩阵可设置为half、float、bfloat16_t<!-- end id26 --><!-- npu="A3" id27 --><br> <br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品:<br>A矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>Bias可设置为half、float、int32_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t、int8_t<!-- end id27 --><!-- npu="910b" id28 --><br> <br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品:<br>A矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>Bias可设置为half、float、int32_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t、int8_t<!-- end id28 --><!-- npu="310p" id29 --><br><br>针对Atlas 推理系列产品AI Core:<br> A矩阵可设置为half、int8_t<br>B矩阵可设置为half、int8_t<br>Bias可设置为float、int32_t<br>C矩阵可设置为half、float、int8_t、int32_t<!-- end id29 --><!-- npu="310b" id30 --><br> <br>针对Atlas 200I/500 A2 推理产品:<br> A矩阵可设置为half、float、bfloat16_t 、int8_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t<br>Bias矩阵可设置为half、float、int32_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t<!-- end id30 --><!-- npu="x90" id5 --><br> <br>针对Kirin X90:<br> A矩阵可设置为half、int8_t<br>B矩阵可设置为half、int8_t<br>Bias可设置为half、int32_t<br>C矩阵可设置为half、int32_t、int8_t<!-- end id5 --><!-- npu="9030" id6 --><br> <br>针对Kirin 9030:<br> A矩阵可设置为half<br>B矩阵可设置为half<br>Bias可设置为half<br>C矩阵可设置为half<!-- end id6 --><br>注意:除fp8_e4m3fn_t/fp8_e5m2_t两种数据类型、B矩阵为int8_t数据类型外,A矩阵和B矩阵数据类型需要一致,具体数据类型组合关系请参考[表2](#table1996113269499)。A矩阵和B矩阵为int4b_t数据类型时,矩阵内轴的数据个数必须为偶数。例如,A矩阵为int4b_t数据类型且不转置时,[singleCoreK](../Matmul_Tiling/TCubeTiling_struct.md#p11899125875617)必须是偶数。 | | 70 | | TYPE | 数据类型。<!-- npu="950" id26 --><br><br>针对Ascend 950PR/Ascend 950DT:<br> 1、非MxMatmul场景:<br>A矩阵可设置为half、float、bfloat16_t 、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t<br>Bias可设置为half、float、int32_t、bfloat16_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t、int8_t、fp8_e4m3fn_t、hifloat8_t<br> 2、MxMatmul场景:<br>A矩阵可设置为fp8_e4m3fn_t、fp8_e5m2_t、fp4x2_e2m1_t、fp4x2_e1m2_t<br>B矩阵可设置为fp8_e4m3fn_t、fp8_e5m2_t、fp4x2_e2m1_t、fp4x2_e1m2_t<br>Bias可设置为half、float、bfloat16_t<br>C矩阵可设置为half、float、bfloat16_t<!-- end id26 --><!-- npu="A3" id27 --><br> <br>针对Atlas A3 训练系列产品/Atlas A3 推理系列产品:<br>A矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>Bias可设置为half、float、int32_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t、int8_t<!-- end id27 --><!-- npu="910b" id28 --><br> <br>针对Atlas A2 训练系列产品/Atlas A2 推理系列产品:<br>A矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t、int4b_t<br>Bias可设置为half、float、int32_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t、int8_t<!-- end id28 --><!-- npu="310p" id29 --><br><br>针对Atlas 推理系列产品AI Core:<br> A矩阵可设置为half、int8_t<br>B矩阵可设置为half、int8_t<br>Bias可设置为float、int32_t<br>C矩阵可设置为half、float、int8_t、int32_t<!-- end id29 --><!-- npu="310b" id30 --><br> <br>针对Atlas 200I/500 A2 推理产品:<br> A矩阵可设置为half、float、bfloat16_t 、int8_t<br>B矩阵可设置为half、float、bfloat16_t 、int8_t<br>Bias矩阵可设置为half、float、int32_t<br>C矩阵可设置为half、float、bfloat16_t、int32_t<!-- end id30 --><!-- npu="x90" id5 --><br> <br>针对Kirin X90:<br> A矩阵可设置为half、int8_t<br>B矩阵可设置为half、int8_t<br>Bias可设置为half、int32_t<br>C矩阵可设置为half、int32_t、int8_t<!-- end id5 --><!-- npu="9030" id6 --><br> <br>针对Kirin 9030:<br> A矩阵可设置为half<br>B矩阵可设置为half<br>Bias可设置为half<br>C矩阵可设置为half<!-- end id6 --><br>注意:除fp8_e4m3fn_t/fp8_e5m2_t两种数据类型、B矩阵为int8_t数据类型外,A矩阵和B矩阵数据类型需要一致,具体数据类型组合关系请参考[表2](#table1996113269499)。A矩阵和B矩阵为int4b_t数据类型时,矩阵内轴的数据个数必须为偶数。例如,A矩阵为int4b_t数据类型且不转置时,[singleCoreK](../Matmul_Tiling/TCubeTiling_struct.md#p11899125875617)必须是偶数。 | |
| 71 | | ISTRANS | 是否开启支持矩阵转置的功能。<br> true:开启支持矩阵转置的功能,运行时可以分别通过[SetTensorA](SetTensorA.md)和[SetTensorB](SetTensorB.md)中的isTransposeA、isTransposeB参数设置A、B矩阵是否转置。若设置A、B矩阵转置,Matmul会认为A矩阵形状为[K, M],B矩阵形状为[N, K]。<br>false:默认值,不开启支持矩阵转置的功能,通过[SetTensorA](SetTensorA.md)和[SetTensorB](SetTensorB.md)不能设置A、B矩阵的转置情况。Matmul会认为A矩阵形状为[M, K],B矩阵形状为[K, N]。<br> <br>注意,由于L1 Buffer上的矩阵数据有分形对齐的约束,A、B矩阵转置和不转置时所需的L1空间可能不相同,在开启支持矩阵转置功能时,必须保证按照[Matmul Tiling参数](../Matmul_Tiling/TCubeTiling_struct.md)申请的L1空间不超过L1 Buffer的规格,判断方式为(depthA1*Ceil(baseM/c0Size)*baseK + depthB1*Ceil(baseN/c0Size)*baseK) * db * sizeof(dtype) < L1Size,db表示L1是否开启double buffer,取值1(不开启double buffer)或2(开启double buffer),其余参数的含义请参考[表1](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)。<!-- npu="9030" id7 --><br> <br>Kirin 9030不支持此参数。<!-- end id7 --> | | 71 | | ISTRANS | 是否开启支持矩阵转置的功能。<br> true:开启支持矩阵转置的功能,运行时可以分别通过[SetTensorA](SetTensorA.md)和[SetTensorB](SetTensorB.md)中的isTransposeA、isTransposeB参数设置A、B矩阵是否转置。若设置A、B矩阵转置,Matmul会认为A矩阵形状为[K, M],B矩阵形状为[N, K]。<br>false:默认值,不开启支持矩阵转置的功能,通过[SetTensorA](SetTensorA.md)和[SetTensorB](SetTensorB.md)不能设置A、B矩阵的转置情况。Matmul会认为A矩阵形状为[M, K],B矩阵形状为[K, N]。<br> <br>注意,由于L1 Buffer上的矩阵数据有分形对齐的约束,A、B矩阵转置和不转置时所需的L1空间可能不相同,在开启支持矩阵转置功能时,必须保证按照[Matmul Tiling参数](../Matmul_Tiling/TCubeTiling_struct.md)申请的L1空间不超过L1 Buffer的规格,判断方式为(depthA1*Ceil(baseM/c0Size)*baseK + depthB1*Ceil(baseN/c0Size)*baseK) * db * sizeof(dtype) < L1Size,db表示L1是否开启double buffer,取值1(不开启double buffer)或2(开启double buffer),其余参数的含义请参考[表1](../Matmul_Tiling/TCubeTiling_struct.md#tcubetiling-struct)。<!-- npu="9030" id7 --><br> <br>Kirin 9030不支持此参数。<!-- end id7 --> | |
| @@ -32,7 +32,7 @@ REGIST_MATMUL_OBJ(tpipe, workspace, ...) | |||
| 32 | - 当代码中只有一个Matmul对象时,本接口可以不传入tiling参数,通过[Init](Init.md)接口单独传入tiling参数。 | 32 | - 当代码中只有一个Matmul对象时,本接口可以不传入tiling参数,通过[Init](Init.md)接口单独传入tiling参数。 |
| 33 | - 当代码中有多个Matmul对象时,必须满足Matmul对象与其tiling参数一一对应,依次传入,具体方式请参考调用示例。 | 33 | - 当代码中有多个Matmul对象时,必须满足Matmul对象与其tiling参数一一对应,依次传入,具体方式请参考调用示例。 |
| 34 | - 在分离模式中,调用本接口后,AIC核不会主动执行接口,仅在AIV核执行到下述接口后,才会触发AIC核的执行,其他接口则不会在AIC核上执行。 | 34 | - 在分离模式中,调用本接口后,AIC核不会主动执行接口,仅在AIV核执行到下述接口后,才会触发AIC核的执行,其他接口则不会在AIC核上执行。 |
| 35 | - - [Matmul Kernel侧接口](Matmul_Kernel.md)。 | 35 | + - [Matmul核函数(Kernel)侧接口](Matmul_Kernel.md)。 |
| 36 | - [DataCopy(GMToL1连续数据搬运)](../../../basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_continuous.md)、[DataCopy(GMToL1高维切分数据搬运)](../../../basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_highdim_split.md)、[DataCopy(GMToL1随路转换-ND2NZ搬运)](../../../basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_ND2NZ.md)。 | 36 | - [DataCopy(GMToL1连续数据搬运)](../../../basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_continuous.md)、[DataCopy(GMToL1高维切分数据搬运)](../../../basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_highdim_split.md)、[DataCopy(GMToL1随路转换-ND2NZ搬运)](../../../basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_ND2NZ.md)。 |
| 37 | 37 | ||
| 38 | ## 调用示例 | 38 | ## 调用示例 |
| @@ -63,7 +63,7 @@ Atlas 200I/500 A2 推理产品,不支持SetTensorA\(SrcAT aScalar\)接口原 | |||
| 63 | | gm | 输入 | A矩阵。类型为[GlobalTensor](../../../basic_api/data_structures/GlobalTensor/GlobalTensor.md)。SrcAT参数表示A矩阵的数据类型。不同型号支持的数据类型请参考[gm和leftMatrix支持的数据类型](#li12616155731720)。| | 63 | | gm | 输入 | A矩阵。类型为[GlobalTensor](../../../basic_api/data_structures/GlobalTensor/GlobalTensor.md)。SrcAT参数表示A矩阵的数据类型。不同型号支持的数据类型请参考[gm和leftMatrix支持的数据类型](#li12616155731720)。| |
| 64 | | leftMatrix | 输入 | A矩阵。类型为[LocalTensor](../../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为TSCM/VECOUT。SrcAT参数表示A矩阵的数据类型。不同型号支持的数据类型请参考[gm和leftMatrix支持的数据类型](#li12616155731720)<br><br>若设置TSCM首地址,默认矩阵可全载,已经位于TSCM,Iterate接口无需再进行GM->L1 Buffer(A1/B1)搬运。 | | 64 | | leftMatrix | 输入 | A矩阵。类型为[LocalTensor](../../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为TSCM/VECOUT。SrcAT参数表示A矩阵的数据类型。不同型号支持的数据类型请参考[gm和leftMatrix支持的数据类型](#li12616155731720)<br><br>若设置TSCM首地址,默认矩阵可全载,已经位于TSCM,Iterate接口无需再进行GM->L1 Buffer(A1/B1)搬运。 | |
| 65 | | aScalar | 输入 | A矩阵中设置的值。支持传入标量数据,标量数据会被扩展为一个形状为[1, K]的tensor参与矩阵乘计算,tensor的数值均为该标量值。例如,开发者可以通过将aScalar设置为1来实现矩阵B在K方向的reduce sum操作。SrcAT参数表示A矩阵的数据类型。不同型号支持的数据类型请参考[aScalar支持的数据类型](#li12616155731723)。 | | 65 | | aScalar | 输入 | A矩阵中设置的值。支持传入标量数据,标量数据会被扩展为一个形状为[1, K]的tensor参与矩阵乘计算,tensor的数值均为该标量值。例如,开发者可以通过将aScalar设置为1来实现矩阵B在K方向的reduce sum操作。SrcAT参数表示A矩阵的数据类型。不同型号支持的数据类型请参考[aScalar支持的数据类型](#li12616155731723)。 | |
| 66 | -| isTransposeA | 输入 | A矩阵是否需要转置。<br><br>注意:<br>若A矩阵MatmulType的ISTRANS参数设置为true,该参数可以为true也可以为false,即运行时可以转置和非转置交替使用;<br>若A矩阵MatmulType的ISTRANS参数设置为false,该参数只能设置为false,若强行设置为true,精度会有异常;<br>对于非half、非bfloat16_t输入类型的场景,为了确保Tiling侧与Kernel侧L1 Buffer空间计算大小保持一致及结果精度正确,该参数取值必须与Kernel侧定义A矩阵MatmulType的[ISTRANS](Matmul_usage.md)参数以及Tiling侧SetAType()接口的[isTrans](../Matmul_Tiling/SetAType.md)参数保持一致,即上述三个参数必须同时设置为true或同时设置为false。<!-- npu="310p" id21 --><br><br>Atlas 推理系列产品AI Core,A矩阵为int8_t数据类型时不支持转置,即不支持该参数设置为true。<!-- end id21 --><!-- npu="910b" id22 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品,A矩阵为int4b_t数据类型时不支持转置,即不支持该参数设置为true。<!-- end id22 --><!-- npu="A3" id23 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品,A矩阵为int4b_t数据类型时不支持转置,即不支持该参数设置为true。<!-- end id23 --> | | 66 | +| isTransposeA | 输入 | A矩阵是否需要转置。<br><br>注意:<br>若A矩阵MatmulType的ISTRANS参数设置为true,该参数可以为true也可以为false,即运行时可以转置和非转置交替使用;<br>若A矩阵MatmulType的ISTRANS参数设置为false,该参数只能设置为false,若强行设置为true,精度会有异常;<br>对于非half、非bfloat16_t输入类型的场景,为了确保Tiling侧与核函数(Kernel)侧L1 Buffer空间计算大小保持一致及结果精度正确,该参数取值必须与核函数(Kernel)侧定义A矩阵MatmulType的[ISTRANS](Matmul_usage.md)参数以及Tiling侧SetAType()接口的[isTrans](../Matmul_Tiling/SetAType.md)参数保持一致,即上述三个参数必须同时设置为true或同时设置为false。<!-- npu="310p" id21 --><br><br>Atlas 推理系列产品AI Core,A矩阵为int8_t数据类型时不支持转置,即不支持该参数设置为true。<!-- end id21 --><!-- npu="910b" id22 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品,A矩阵为int4b_t数据类型时不支持转置,即不支持该参数设置为true。<!-- end id22 --><!-- npu="A3" id23 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品,A矩阵为int4b_t数据类型时不支持转置,即不支持该参数设置为true。<!-- end id23 --> | |
| 67 | 67 | ||
| 68 | ## 返回值说明 | 68 | ## 返回值说明 |
| 69 | 69 | ||
| @@ -69,7 +69,7 @@ Atlas 200I/500 A2 推理产品,不支持SetTensorB\(SrcBT bScalar\)接口原 | |||
| 69 | | gm | 输入 | B矩阵。类型为[GlobalTensor](../../../basic_api/data_structures/GlobalTensor/GlobalTensor.md)。SrcBT参数表示B矩阵的数据类型。<br><br>不同型号支持的数据类型请参考[gm和rightMatrix支持的数据类型](#li12616155731720)。 | | 69 | | gm | 输入 | B矩阵。类型为[GlobalTensor](../../../basic_api/data_structures/GlobalTensor/GlobalTensor.md)。SrcBT参数表示B矩阵的数据类型。<br><br>不同型号支持的数据类型请参考[gm和rightMatrix支持的数据类型](#li12616155731720)。 | |
| 70 | | rightMatrix | 输入 | B矩阵。类型为[LocalTensor](../../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为TSCM/VECOUT。SrcBT参数表示B矩阵的数据类型。<br><br>不同型号支持的数据类型请参考[gm和rightMatrix支持的数据类型](#li12616155731720)。<br><br>若设置TSCM首地址,默认矩阵可全载,已经位于TSCM,Iterate接口无需再进行GM->L1 Buffer(A1/B1)搬运。 | | 70 | | rightMatrix | 输入 | B矩阵。类型为[LocalTensor](../../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为TSCM/VECOUT。SrcBT参数表示B矩阵的数据类型。<br><br>不同型号支持的数据类型请参考[gm和rightMatrix支持的数据类型](#li12616155731720)。<br><br>若设置TSCM首地址,默认矩阵可全载,已经位于TSCM,Iterate接口无需再进行GM->L1 Buffer(A1/B1)搬运。 | |
| 71 | | bScalar | 输入 | B矩阵中设置的值。支持传入标量数据,标量数据会被扩展为一个形状为[1, K]的tensor参与矩阵乘计算,tensor的数值均为该标量值。例如,开发者可以通过将bScalar设置为1来实现矩阵A在K方向的reduce sum操作。SrcBT参数表示B矩阵的数据类型。<br>不同型号支持的数据类型请参考[bScalar支持的数据类型](#li12616155731723)。 | | 71 | | bScalar | 输入 | B矩阵中设置的值。支持传入标量数据,标量数据会被扩展为一个形状为[1, K]的tensor参与矩阵乘计算,tensor的数值均为该标量值。例如,开发者可以通过将bScalar设置为1来实现矩阵A在K方向的reduce sum操作。SrcBT参数表示B矩阵的数据类型。<br>不同型号支持的数据类型请参考[bScalar支持的数据类型](#li12616155731723)。 | |
| 72 | -| isTransposeB | 输入 | B矩阵是否需要转置。<br><br>注意:<br>若B矩阵MatmulType的ISTRANS参数设置为true,该参数可以为true也可以为false,即运行时可以转置和非转置交替使用;<br>若B矩阵MatmulType的ISTRANS参数设置为false,该参数只能设置为false,若强行设置为true,精度会有异常;<br>对于非half、非bfloat16_t输入类型的场景,为了确保Tiling侧与Kernel侧L1 Buffer空间计算大小保持一致及结果精度正确,该参数取值必须与Kernel侧定义B矩阵MatmulType的[ISTRANS](Matmul_usage.md#p84551411817)参数以及Tiling侧SetBType()接口的[isTrans](../Matmul_Tiling/SetBType.md#p47369411111)参数保持一致,即上述三个参数必须同时设置为true或同时设置为false。 | | 72 | +| isTransposeB | 输入 | B矩阵是否需要转置。<br><br>注意:<br>若B矩阵MatmulType的ISTRANS参数设置为true,该参数可以为true也可以为false,即运行时可以转置和非转置交替使用;<br>若B矩阵MatmulType的ISTRANS参数设置为false,该参数只能设置为false,若强行设置为true,精度会有异常;<br>对于非half、非bfloat16_t输入类型的场景,为了确保Tiling侧与核函数(Kernel)侧L1 Buffer空间计算大小保持一致及结果精度正确,该参数取值必须与核函数(Kernel)侧定义B矩阵MatmulType的[ISTRANS](Matmul_usage.md#p84551411817)参数以及Tiling侧SetBType()接口的[isTrans](../Matmul_Tiling/SetBType.md#p47369411111)参数保持一致,即上述三个参数必须同时设置为true或同时设置为false。 | |
| 73 | 73 | ||
| 74 | ## 返回值说明 | 74 | ## 返回值说明 |
| 75 | 75 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置Bias是否参与运算,设置的信息必须与Kernel侧保持一致。 | 5 | +设置Bias是否参与运算,设置的信息必须与核函数(Kernel)侧保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -根据[GetTiling](GetTiling.md)接口计算出的Tiling参数,获取是否可以开启L1 Bank冲突优化功能。若可以开启该功能,则与TilingKey机制配合使用,通过增加TilingKey,关联Host侧与Kernel侧实现,并在Kernel侧增加代码实现分支,将MatmulConfig中的[enableL1BankConflictOptimise](../Matmul_Kernel/MatmulConfig.md#p84588523128)设置为true,即可优化L1上的Bank冲突。 | 5 | +根据[GetTiling](GetTiling.md)接口计算出的Tiling参数,获取是否可以开启L1 Bank冲突优化功能。若可以开启该功能,则与TilingKey机制配合使用,通过增加TilingKey,关联Host侧与核函数(Kernel)侧实现,并在核函数(Kernel)侧增加代码实现分支,将MatmulConfig中的[enableL1BankConflictOptimise](../Matmul_Kernel/MatmulConfig.md#p84588523128)设置为true,即可优化L1上的Bank冲突。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -16,8 +16,8 @@ bool EnableL1BankConflictOptimise() | |||
| 16 | 16 | ||
| 17 | ## 返回值说明 | 17 | ## 返回值说明 |
| 18 | 18 | ||
| 19 | -- false:Kernel侧不能开启L1 Bank冲突优化。 | 19 | +- false:核函数(Kernel)侧不能开启L1 Bank冲突优化。 |
| 20 | -- true:Kernel侧可以开启L1 Bank冲突优化。 | 20 | +- true:核函数(Kernel)侧可以开启L1 Bank冲突优化。 |
| 21 | 21 | ||
| 22 | ## 约束说明 | 22 | ## 约束说明 |
| 23 | 23 | ||
| @@ -39,7 +39,7 @@ tiling.SetBufferSpace(-1, -1, -1); | |||
| 39 | 39 | ||
| 40 | optiling::TCubeTiling tilingData; | 40 | optiling::TCubeTiling tilingData; |
| 41 | int ret = tiling.GetTiling(tilingData); | 41 | int ret = tiling.GetTiling(tilingData); |
| 42 | -// Kernel侧是否可以开启L1 Bank冲突优化,可与TilingKey机制结合使用 | 42 | +// 核函数(Kernel)侧是否可以开启L1 Bank冲突优化,可与TilingKey机制结合使用 |
| 43 | bool enableL1BankConflictOptimise = tiling.EnableL1BankConflictOptimise(); | 43 | bool enableL1BankConflictOptimise = tiling.EnableL1BankConflictOptimise(); |
| 44 | ``` | 44 | ``` |
| 45 | 45 | ||
| @@ -25,7 +25,7 @@ void EnableMultiCoreSplitK(bool flag) | |||
| 25 | ## 约束说明 | 25 | ## 约束说明 |
| 26 | 26 | ||
| 27 | - 在算子中使用该接口时,获取C矩阵结果时仅支持输出到Global Memory。 | 27 | - 在算子中使用该接口时,获取C矩阵结果时仅支持输出到Global Memory。 |
| 28 | -- 在算子中使用该接口时,需在Kernel侧代码中首次将C矩阵分片的结果写入Global Memory之前,先清零Global Memory,随后在获取C矩阵分片的结果时,再开启AtomicAdd累加。如果不预先清零Global Memory,可能会因为累加Global Memory中原始的无效数据而产生精度问题。 | 28 | +- 在算子中使用该接口时,需在核函数(Kernel)侧代码中首次将C矩阵分片的结果写入Global Memory之前,先清零Global Memory,随后在获取C矩阵分片的结果时,再开启AtomicAdd累加。如果不预先清零Global Memory,可能会因为累加Global Memory中原始的无效数据而产生精度问题。 |
| 29 | - 在算子中使用该接口时,不支持Bias参与矩阵乘计算。 | 29 | - 在算子中使用该接口时,不支持Bias参与矩阵乘计算。 |
| 30 | 30 | ||
| 31 | ## 调用示例 | 31 | ## 调用示例 |
| @@ -20,7 +20,7 @@ int64_t GetTiling(AscendC::tiling::TCubeTiling& tiling) | |||
| 20 | 20 | ||
| 21 | | 参数名 | 输入/输出 | 描述 | | 21 | | 参数名 | 输入/输出 | 描述 | |
| 22 | | --- | --- | --- | | 22 | | --- | --- | --- | |
| 23 | -| tiling | 输出 | Tiling结构体存储最终的tiling结果。TCubeTiling结构介绍请参考[表1](TCubeTiling_struct.md#tcubetiling-struct)。<br>optiling::TCubeTiling:带有optiling命名空间的TCubeTiling结构体,该结构体为Host侧定义的Matmul TilingData。<br>AscendC::tiling::TCubeTiling:带有AscendC::tiling命名空间的TCubeTiling结构体,Kernel侧定义的Matmul TilingData,与使用标准C++语法定义TilingData结构体的开发方式配合使用。 | | 23 | +| tiling | 输出 | Tiling结构体存储最终的tiling结果。TCubeTiling结构介绍请参考[表1](TCubeTiling_struct.md#tcubetiling-struct)。<br>optiling::TCubeTiling:带有optiling命名空间的TCubeTiling结构体,该结构体为Host侧定义的Matmul TilingData。<br>AscendC::tiling::TCubeTiling:带有AscendC::tiling命名空间的TCubeTiling结构体,核函数(Kernel)侧定义的Matmul TilingData,与使用标准C++语法定义TilingData结构体的开发方式配合使用。 | |
| 24 | 24 | ||
| 25 | ## 返回值说明 | 25 | ## 返回值说明 |
| 26 | 26 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -设置Matmul计算时可用的L1 Buffer/L0C Buffer/Unified Buffer/BiasTable Buffer空间大小,单位为字节。 | 5 | +设置Matmul计算时可用的L1 Buffer/L0C Buffer/Unified Buffer(UB)/BiasTable Buffer空间大小,单位为字节。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -18,7 +18,7 @@ int32_t SetBufferSpace(int32_t l1Size = -1, int32_t l0CSize = -1, int32_t ubSize | |||
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | | l1Size | 输入 | 设置Matmul计算时,能够使用的L1 Buffer大小,单位为字节。默认值-1,表示使用AI处理器L1 Buffer大小。 | | 19 | | l1Size | 输入 | 设置Matmul计算时,能够使用的L1 Buffer大小,单位为字节。默认值-1,表示使用AI处理器L1 Buffer大小。 | |
| 20 | | l0CSize | 输入 | 设置Matmul计算时,能够使用的L0C Buffer大小,单位为字节。默认值-1,表示使用AI处理器L0C Buffer大小。 | | 20 | | l0CSize | 输入 | 设置Matmul计算时,能够使用的L0C Buffer大小,单位为字节。默认值-1,表示使用AI处理器L0C Buffer大小。 | |
| 21 | -| ubSize | 输入 | 设置Matmul计算时,能够使用的UB Buffer大小,单位为字节。默认值-1,表示使用AI处理器UB Buffer大小。 | | 21 | +| ubSize | 输入 | 设置Matmul计算时,能够使用的UB大小,单位为字节。默认值-1,表示使用AI处理器UB大小。 | |
| 22 | | btSize | 输入 | 设置Matmul计算时,能够使用的BiasTable Buffer大小,单位为字节。默认值-1,表示使用AI处理器BiasTable Buffer大小。 | | 22 | | btSize | 输入 | 设置Matmul计算时,能够使用的BiasTable Buffer大小,单位为字节。默认值-1,表示使用AI处理器BiasTable Buffer大小。 | |
| 23 | 23 | ||
| 24 | ## 返回值说明 | 24 | ## 返回值说明 |
| @@ -40,7 +40,7 @@ enum class DequantType { | |||
| 40 | 40 | ||
| 41 | ## 约束说明 | 41 | ## 约束说明 |
| 42 | 42 | ||
| 43 | -本接口支持的同一系数的量化/反量化模式、向量的量化/反量化模式分别与Kernel侧接口[SetQuantScalar](../Matmul_Kernel/SetQuantScalar.md)和[SetQuantVector](../Matmul_Kernel/SetQuantVector.md)对应,本接口设置的量化/反量化模式必须与Kernel侧使用的接口保持一致。 | 43 | +本接口支持的同一系数的量化/反量化模式、向量的量化/反量化模式分别与核函数(Kernel)侧接口[SetQuantScalar](../Matmul_Kernel/SetQuantScalar.md)和[SetQuantVector](../Matmul_Kernel/SetQuantVector.md)对应,本接口设置的量化/反量化模式必须与核函数(Kernel)侧使用的接口保持一致。 |
| 44 | 44 | ||
| 45 | ## 调用示例 | 45 | ## 调用示例 |
| 46 | 46 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -在计算Tiling时,用于自定义设置[表1](#table9646134355611)中的MatmulConfig参数。本接口中配置的参数对应的功能在Tiling与Kernel中需要保持一致,所以本接口中的参数取值,需要与Kernel侧对应的MatmulConfig参数值保持一致,详细MatmulConfig参数请见[表2](../Matmul_Kernel/MatmulConfig.md#matmulconfig-params)。 | 5 | +在计算Tiling时,用于自定义设置[表1](#table9646134355611)中的MatmulConfig参数。本接口中配置的参数对应的功能在Tiling与核函数(Kernel)中需要保持一致,所以本接口中的参数取值,需要与核函数(Kernel)侧对应的MatmulConfig参数值保持一致,详细MatmulConfig参数请见[表2](../Matmul_Kernel/MatmulConfig.md#matmulconfig-params)。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -22,7 +22,7 @@ void SetMatmulConfigParams(const MatmulConfigParams& configParams) | |||
| 22 | | 参数名 | 输入/输出 | 描述 | | 22 | | 参数名 | 输入/输出 | 描述 | |
| 23 | | --- | --- | --- | | 23 | | --- | --- | --- | |
| 24 | | mmConfigTypeIn | 输入 | 设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。<br>0:代表Norm模板<br>1:代表MDL模板,默认值为1 | | 24 | | mmConfigTypeIn | 输入 | 设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。<br>0:代表Norm模板<br>1:代表MDL模板,默认值为1 | |
| 25 | -| enableL1CacheUBIn | 输入 | 配置是否开启L1缓存UB计算块;推荐开启场景:MTE3和MTE2流水串行较多的场景。<br>false:不开启L1缓存UB计算块,默认值为false<br>true:开启L1缓存UB计算块<!-- npu="A3" id1 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id1 --><!-- npu="910b" id2 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id2 --><!-- npu="310p" id3 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id3 --><!-- npu="310b" id4 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id4 --> | | 25 | +| enableL1CacheUBIn | 输入 | 配置是否开启L1缓存Unified Buffer(UB)计算块;推荐开启场景:MTE3和MTE2流水串行较多的场景。<br>false:不开启L1缓存UB计算块,默认值为false<br>true:开启L1缓存UB计算块<!-- npu="A3" id1 --><br><br>Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。<!-- end id1 --><!-- npu="910b" id2 --><br><br>Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。<!-- end id2 --><!-- npu="310p" id3 --><br><br>Atlas 推理系列产品AI Core支持该参数。<!-- end id3 --><!-- npu="310b" id4 --><br><br>Atlas 200I/500 A2 推理产品不支持该参数。<!-- end id4 --> | |
| 26 | | scheduleTypeIn | 输入 | 配置Matmul数据搬运模式。参数取值如下:<br>ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运<br>ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运<br>ScheduleType::N_BUFFER_33:[NBuffer33](../Matmul_Kernel/MatmulPolicy.md#li194081238103913)模板的数据搬运模式,MTE2每次搬运A矩阵的1x3个基本块,直至A矩阵所有3x3个基本块全载在L1 Buffer中 | | 26 | | scheduleTypeIn | 输入 | 配置Matmul数据搬运模式。参数取值如下:<br>ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运<br>ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运<br>ScheduleType::N_BUFFER_33:[NBuffer33](../Matmul_Kernel/MatmulPolicy.md#li194081238103913)模板的数据搬运模式,MTE2每次搬运A矩阵的1x3个基本块,直至A矩阵所有3x3个基本块全载在L1 Buffer中 | |
| 27 | | traverseIn | 输入 | Matmul做矩阵运算的循环迭代顺序,即一次迭代计算出[baseM, baseN]大小的C矩阵分片后,自动偏移到下一次迭代输出的C矩阵位置的偏移顺序。参数取值如下:<br><br>NOSET:0,当前无效。<br><br>FIRSTM:先往M轴方向偏移再往N轴方向偏移。<br><br>FIRSTN:先往N轴方向偏移再往M轴方向偏移。 | | 27 | | traverseIn | 输入 | Matmul做矩阵运算的循环迭代顺序,即一次迭代计算出[baseM, baseN]大小的C矩阵分片后,自动偏移到下一次迭代输出的C矩阵位置的偏移顺序。参数取值如下:<br><br>NOSET:0,当前无效。<br><br>FIRSTM:先往M轴方向偏移再往N轴方向偏移。<br><br>FIRSTN:先往N轴方向偏移再往M轴方向偏移。 | |
| 28 | | enVecND2NZIn | 输入 | 是否开启ND2NZ。 | | 28 | | enVecND2NZIn | 输入 | 是否开启ND2NZ。 | |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -MxMatmul场景,设置scaleA矩阵的位置、数据格式、是否转置等信息,这些信息需要和Kernel侧的设置保持一致。如果不调用本接口,scaleA矩阵的信息将与[SetAType](SetAType.md)中设置的A矩阵的信息保持一致。 | 5 | +MxMatmul场景,设置scaleA矩阵的位置、数据格式、是否转置等信息,这些信息需要和核函数(Kernel)侧的设置保持一致。如果不调用本接口,scaleA矩阵的信息将与[SetAType](SetAType.md)中设置的A矩阵的信息保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -MxMatmul场景,设置scaleB矩阵的位置、数据格式、是否转置等信息,这些信息需要和Kernel侧的设置保持一致。如果不调用本接口,scaleB矩阵的信息将与[SetBType](SetBType.md)中设置的B矩阵的信息保持一致。 | 5 | +MxMatmul场景,设置scaleB矩阵的位置、数据格式、是否转置等信息,这些信息需要和核函数(Kernel)侧的设置保持一致。如果不调用本接口,scaleB矩阵的信息将与[SetBType](SetBType.md)中设置的B矩阵的信息保持一致。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -27,7 +27,7 @@ void SetSplitK(bool flag) | |||
| 27 | ## 约束说明 | 27 | ## 约束说明 |
| 28 | 28 | ||
| 29 | - 如果在算子中使用该接口,获取C矩阵结果时仅支持输出到Global Memory。 | 29 | - 如果在算子中使用该接口,获取C矩阵结果时仅支持输出到Global Memory。 |
| 30 | -- 如果在算子中使用该接口,需在Kernel侧代码中首次将C矩阵分片的结果写入Global Memory之前,先清零Global Memory,随后在获取C矩阵分片的结果时,再开启AtomicAdd累加。如果不预先清零Global Memory,可能会因为累加Global Memory中原始的无效数据而产生精度问题。 | 30 | +- 如果在算子中使用该接口,需在核函数(Kernel)侧代码中首次将C矩阵分片的结果写入Global Memory之前,先清零Global Memory,随后在获取C矩阵分片的结果时,再开启AtomicAdd累加。如果不预先清零Global Memory,可能会因为累加Global Memory中原始的无效数据而产生精度问题。 |
| 31 | 31 | ||
| 32 | ## 调用示例 | 32 | ## 调用示例 |
| 33 | 33 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # TCubeTiling结构体 | 1 | # TCubeTiling结构体 |
| 2 | 2 | ||
| 3 | -TCubeTiling结构体包含Matmul Tiling切分算法的相关参数,被传递给Matmul Kernel侧,用于Matmul的切块、搬运和计算过程等。TCubeTiling结构体的参数说明见[表1](#tcubetiling-struct)。 | 3 | +TCubeTiling结构体包含Matmul Tiling切分算法的相关参数,被传递给Matmul核函数(Kernel)侧,用于Matmul的切块、搬运和计算过程等。TCubeTiling结构体的参数说明见[表1](#tcubetiling-struct)。 |
| 4 | 4 | ||
| 5 | **表1** TCubeTiling结构说明 | 5 | **表1** TCubeTiling结构说明 |
| 6 | 6 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # 矩阵计算 | 1 | # 矩阵计算 |
| 2 | 2 | ||
| 3 | -- **[Matmul Kernel侧接口](Matmul_Kernel/Matmul_Kernel.md)** | 3 | +- **[Matmul核函数(Kernel)侧接口](Matmul_Kernel/Matmul_Kernel.md)** |
| 4 | 4 | ||
| 5 | - **[Matmul Tiling类](Matmul_Tiling/Matmul_Tiling.md)** | 5 | - **[Matmul Tiling类](Matmul_Tiling/Matmul_Tiling.md)** |
| 6 | 6 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -BatchMatmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。 | 5 | +BatchMatmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer(UB)/L0C Buffer的使用大小。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -17,11 +17,11 @@ int32_t BatchMatmulGetTmpBufSize(optiling::TCubeTiling& tiling, matmul_tiling::S | |||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | | tiling | 输入 | BatchMatmul Tiling的结构体,即BatchMatmulTiling对象得到的TCubeTiling结构体。 | | 19 | | tiling | 输入 | BatchMatmul Tiling的结构体,即BatchMatmulTiling对象得到的TCubeTiling结构体。 | |
| 20 | -| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | | 20 | +| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/UB/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | |
| 21 | 21 | ||
| 22 | ``` | 22 | ``` |
| 23 | struct SysTilingTempBufSize { | 23 | struct SysTilingTempBufSize { |
| 24 | - int32_t ubSize = 0; // Unified Buffer大小 | 24 | + int32_t ubSize = 0; // UB大小 |
| 25 | int32_t l1Size = 0; // L1 Buffer大小 | 25 | int32_t l1Size = 0; // L1 Buffer大小 |
| 26 | int32_t l0cSize = 0; // L0C Buffer大小 | 26 | int32_t l0cSize = 0; // L0C Buffer大小 |
| 27 | }; | 27 | }; |
Mdocs/zh/api/SIMD-API/adv_api/cube_compute/get_Matmul_compute_space/BatchMatmulGetTmpBufSizeV2.md+4-4
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -BatchMatmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。 | 5 | +BatchMatmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer(UB)/L0C Buffer的使用大小。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -16,12 +16,12 @@ int32_t BatchMatmulGetTmpBufSizeV2(AscendC::tiling::TCubeTiling& tiling, matmul_ | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| tiling | 输入 | BatchMatmul Tiling的结构体,即BatchMatmulTiling对象得到的TCubeTiling结构体。<br><br>TCubeTiling为Kernel侧定义的Matmul TilingData,与入参为带AscendC::tiling命名空间的TCubeTiling结构体的[GetTiling](../Matmul_Tiling/GetTiling.md)接口配合使用。 | | 19 | +| tiling | 输入 | BatchMatmul Tiling的结构体,即BatchMatmulTiling对象得到的TCubeTiling结构体。<br><br>TCubeTiling为核函数(Kernel)侧定义的Matmul TilingData,与入参为带AscendC::tiling命名空间的TCubeTiling结构体的[GetTiling](../Matmul_Tiling/GetTiling.md)接口配合使用。 | |
| 20 | -| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | | 20 | +| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/UB/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | |
| 21 | 21 | ||
| 22 | ``` | 22 | ``` |
| 23 | struct SysTilingTempBufSize { | 23 | struct SysTilingTempBufSize { |
| 24 | - int32_t ubSize = 0; // Unified Buffer大小 | 24 | + int32_t ubSize = 0; // UB大小 |
| 25 | int32_t l1Size = 0; // L1 Buffer大小 | 25 | int32_t l1Size = 0; // L1 Buffer大小 |
| 26 | int32_t l0cSize = 0; // L0C Buffer大小 | 26 | int32_t l0cSize = 0; // L0C Buffer大小 |
| 27 | }; | 27 | }; |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -本接口用于在调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。 | 5 | +本接口用于在调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer(UB)/L0C Buffer的使用大小。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -17,11 +17,11 @@ int32_t MatmulGetTmpBufSize(optiling::TCubeTiling& tiling, matmul_tiling::SysTil | |||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | | tiling | 输入 | Matmul单核Tiling的结构体,即MatmulTiling对象得到的TCubeTiling结构体。 | | 19 | | tiling | 输入 | Matmul单核Tiling的结构体,即MatmulTiling对象得到的TCubeTiling结构体。 | |
| 20 | -| bufSize | 输出 | Tiling中L1 Buffer/Unified Buffer/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | | 20 | +| bufSize | 输出 | Tiling中L1 Buffer/UB/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | |
| 21 | 21 | ||
| 22 | ``` | 22 | ``` |
| 23 | struct SysTilingTempBufSize { | 23 | struct SysTilingTempBufSize { |
| 24 | - int32_t ubSize = 0; // Unified Buffer大小 | 24 | + int32_t ubSize = 0; // UB大小 |
| 25 | int32_t l1Size = 0; // L1 Buffer大小 | 25 | int32_t l1Size = 0; // L1 Buffer大小 |
| 26 | int32_t l0cSize = 0; // L0C Buffer大小 | 26 | int32_t l0cSize = 0; // L0C Buffer大小 |
| 27 | }; | 27 | }; |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -单核Matmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。 | 5 | +单核Matmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer(UB)/L0C Buffer的使用大小。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -16,12 +16,12 @@ int32_t MatmulGetTmpBufSizeV2(AscendC::tiling::TCubeTiling& tiling, matmul_tilin | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| tiling | 输入 | Matmul单核Tiling的结构体,即MatmulTiling对象得到的TCubeTiling结构体。<br><br>TCubeTiling为Kernel侧定义的Matmul TilingData,与入参为带AscendC::tiling命名空间的TCubeTiling结构体的[GetTiling](../Matmul_Tiling/GetTiling.md)接口配合使用。 | | 19 | +| tiling | 输入 | Matmul单核Tiling的结构体,即MatmulTiling对象得到的TCubeTiling结构体。<br><br>TCubeTiling为核函数(Kernel)侧定义的Matmul TilingData,与入参为带AscendC::tiling命名空间的TCubeTiling结构体的[GetTiling](../Matmul_Tiling/GetTiling.md)接口配合使用。 | |
| 20 | -| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | | 20 | +| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/UB/L0C Buffer的使用大小。<br><br>SysTilingTempBufSize结构定义如下方代码所示。 | |
| 21 | 21 | ||
| 22 | ``` | 22 | ``` |
| 23 | struct SysTilingTempBufSize { | 23 | struct SysTilingTempBufSize { |
| 24 | - int32_t ubSize = 0; // Unified Buffer大小 | 24 | + int32_t ubSize = 0; // UB大小 |
| 25 | int32_t l1Size = 0; // L1 Buffer大小 | 25 | int32_t l1Size = 0; // L1 Buffer大小 |
| 26 | int32_t l0cSize = 0; // L0C Buffer大小 | 26 | int32_t l0cSize = 0; // L0C Buffer大小 |
| 27 | }; | 27 | }; |
Mdocs/zh/api/SIMD-API/adv_api/cube_compute/get_Matmul_compute_space/MultiCoreMatmulGetTmpBufSize.md+3-3
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -多核Matmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。 | 5 | +多核Matmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer(UB)/L0C Buffer的使用大小。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -17,11 +17,11 @@ int32_t MultiCoreMatmulGetTmpBufSize(optiling::TCubeTiling& tiling, matmul_tilin | |||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | | tiling | 输入 | Matmul多核Tiling的结构体,即MultiCoreMatmulTiling对象得到的TCubeTiling结构体。 | | 19 | | tiling | 输入 | Matmul多核Tiling的结构体,即MultiCoreMatmulTiling对象得到的TCubeTiling结构体。 | |
| 20 | -| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。SysTilingTempBufSize结构定义如下方代码所示。 | | 20 | +| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/UB/L0C Buffer的使用大小。SysTilingTempBufSize结构定义如下方代码所示。 | |
| 21 | 21 | ||
| 22 | ``` | 22 | ``` |
| 23 | struct SysTilingTempBufSize { | 23 | struct SysTilingTempBufSize { |
| 24 | - int32_t ubSize = 0; // Unified Buffer大小 | 24 | + int32_t ubSize = 0; // UB大小 |
| 25 | int32_t l1Size = 0; // L1 Buffer大小 | 25 | int32_t l1Size = 0; // L1 Buffer大小 |
| 26 | int32_t l0cSize = 0; // L0C Buffer大小 | 26 | int32_t l0cSize = 0; // L0C Buffer大小 |
| 27 | }; | 27 | }; |
Mdocs/zh/api/SIMD-API/adv_api/cube_compute/get_Matmul_compute_space/MultiCoreMatmulGetTmpBufSizeV2.md+4-4
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -多核Matmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。 | 5 | +多核Matmul Tiling调用[GetTiling](../Matmul_Tiling/GetTiling.md)接口获取Tiling参数后,根据Tiling结构体信息获取L1 Buffer/Unified Buffer(UB)/L0C Buffer的使用大小。 |
| 6 | 6 | ||
| 7 | ## 函数原型 | 7 | ## 函数原型 |
| 8 | 8 | ||
| @@ -16,12 +16,12 @@ int32_t MultiCoreMatmulGetTmpBufSizeV2(AscendC::tiling::TCubeTiling& tiling, mat | |||
| 16 | 16 | ||
| 17 | | 参数名 | 输入/输出 | 描述 | | 17 | | 参数名 | 输入/输出 | 描述 | |
| 18 | | --- | --- | --- | | 18 | | --- | --- | --- | |
| 19 | -| tiling | 输入 | Matmul多核Tiling的结构体,即MultiCoreMatmulTiling对象得到的TCubeTiling结构体。<br><br>TCubeTiling为Kernel侧定义的Matmul TilingData,与入参为带AscendC::tiling命名空间的TCubeTiling结构体的[GetTiling](../Matmul_Tiling/GetTiling.md)接口配合使用。 | | 19 | +| tiling | 输入 | Matmul多核Tiling的结构体,即MultiCoreMatmulTiling对象得到的TCubeTiling结构体。<br><br>TCubeTiling为核函数(Kernel)侧定义的Matmul TilingData,与入参为带AscendC::tiling命名空间的TCubeTiling结构体的[GetTiling](../Matmul_Tiling/GetTiling.md)接口配合使用。 | |
| 20 | -| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/Unified Buffer/L0C Buffer的使用大小。SysTilingTempBufSize结构定义如下方代码所示。 | | 20 | +| bufSize | 输出 | 根据TCubeTiling结构体信息获取L1 Buffer/UB/L0C Buffer的使用大小。SysTilingTempBufSize结构定义如下方代码所示。 | |
| 21 | 21 | ||
| 22 | ``` | 22 | ``` |
| 23 | struct SysTilingTempBufSize { | 23 | struct SysTilingTempBufSize { |
| 24 | - int32_t ubSize = 0; // Unified Buffer大小 | 24 | + int32_t ubSize = 0; // UB大小 |
| 25 | int32_t l1Size = 0; // L1 Buffer大小 | 25 | int32_t l1Size = 0; // L1 Buffer大小 |
| 26 | int32_t l0cSize = 0; // L0C Buffer大小 | 26 | int32_t l0cSize = 0; // L0C Buffer大小 |
| 27 | }; | 27 | }; |
| @@ -27,7 +27,7 @@ void GetDropOutMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_ | |||
| 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 28 | | typeSize | 输入 | 计算的数据类型大小,half=2,float=4。 | | 28 | | typeSize | 输入 | 计算的数据类型大小,half=2,float=4。 | |
| 29 | | isReuseSource | 输入 | 预留参数,暂未启用,保持默认值false即可。 | | 29 | | isReuseSource | 输入 | 预留参数,暂未启用,保持默认值false即可。 | |
| 30 | -| maxValue | 输出 | 输出DropOut接口所需的tiling信息(最大临时空间大小)。<br> 说明:maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 30 | +| maxValue | 输出 | 输出DropOut接口所需的tiling信息(最大临时空间大小)。<br> 说明:maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 31 | | minValue | 输出 | 输出DropOut接口所需的tiling信息(最小临时空间大小)。 | | 31 | | minValue | 输出 | 输出DropOut接口所需的tiling信息(最小临时空间大小)。 | |
| 32 | 32 | ||
| 33 | ## 返回值说明 | 33 | ## 返回值说明 |
| @@ -54,7 +54,7 @@ kernel侧Select接口的计算需要开发者申请临时空间,本接口用 | |||
| 54 | | maskShape | 输入 | 输入maskTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 54 | | maskShape | 输入 | 输入maskTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 55 | | maskTypeSize | 输入 | 输入maskTensor的数据类型大小,比如数据类型为bool,此处应传入1。 | | 55 | | maskTypeSize | 输入 | 输入maskTensor的数据类型大小,比如数据类型为bool,此处应传入1。 | |
| 56 | | isReuseMask | 输入 | 是否复用maskTensor输入的空间。与kernel侧保持一致。 | | 56 | | isReuseMask | 输入 | 是否复用maskTensor输入的空间。与kernel侧保持一致。 | |
| 57 | -| maxValue | 输出 | Select接口能完成计算所需最大临时空间大小。<br> 说明:maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 57 | +| maxValue | 输出 | Select接口能完成计算所需最大临时空间大小。<br> 说明:maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 58 | | minValue | 输出 | Select接口能完成计算所需最小临时空间大小。 | | 58 | | minValue | 输出 | Select接口能完成计算所需最小临时空间大小。 | |
| 59 | 59 | ||
| 60 | ## 返回值说明 | 60 | ## 返回值说明 |
| @@ -25,7 +25,7 @@ void GetArithProgressionMaxMinTmpSize(uint32_t& maxValue, uint32_t& minValue) | |||
| 25 | 25 | ||
| 26 | | 参数名 | 输入/输出 | 描述 | | 26 | | 参数名 | 输入/输出 | 描述 | |
| 27 | | --- | --- | --- | | 27 | | --- | --- | --- | |
| 28 | -| maxValue | 输出 | Arange接口能完成计算所需最大临时空间大小。<br> 说明:maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 28 | +| maxValue | 输出 | Arange接口能完成计算所需最大临时空间大小。<br> 说明:maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 29 | | minValue | 输出 | Arange接口能完成计算所需最小临时空间大小。 | | 29 | | minValue | 输出 | Arange接口能完成计算所需最小临时空间大小。 | |
| 30 | 30 | ||
| 31 | ## 返回值说明 | 31 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAcosMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Acos接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Acos接口一致。 | |
| 25 | -| maxValue | 输出 | Acos接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Acos接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Acos接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Acos接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAcoshMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Acosh接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Acosh接口一致。 | |
| 25 | -| maxValue | 输出 | Acosh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Acosh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Acosh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Acosh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAsinMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Asin接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Asin接口一致。 | |
| 25 | -| maxValue | 输出 | Asin接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Asin接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Asin接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Asin接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAsinhMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Asinh接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Asinh接口一致。 | |
| 25 | -| maxValue | 输出 | Asinh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Asinh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Asinh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Asinh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAtanMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Atan接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Atan接口一致。 | |
| 25 | -| maxValue | 输出 | Atan接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Atan接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Atan接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Atan接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAtanhMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Atanh接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Atanh接口一致。 | |
| 25 | -| maxValue | 输出 | Atanh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Atanh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Atanh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Atanh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetAxpyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Axpy接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Axpy接口一致。 | |
| 25 | -| maxValue | 输出 | Axpy接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Axpy接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Axpy接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Axpy接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧BitwiseAnd接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧BitwiseAnd接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetBitwiseAndMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | BitwiseAnd接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | BitwiseAnd接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | BitwiseAnd接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | BitwiseAnd接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧BitwiseNot接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧BitwiseNot接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetBitwiseNotMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | BitwiseNot接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | BitwiseNot接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | BitwiseNot接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | BitwiseNot接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧BitwiseOr接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧BitwiseOr接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetBitwiseOrMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcP | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | BitwiseOr接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | BitwiseOr接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | BitwiseOr接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | BitwiseOr接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧BitwiseXor接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧BitwiseXor接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetBitwiseXorMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为uint16_t,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | BitwiseXor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | BitwiseXor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | BitwiseXor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | BitwiseXor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetCeilMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Ceil接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Ceil接口一致。 | |
| 25 | -| maxValue | 输出 | Ceil接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Ceil接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Ceil接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Ceil接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetClampMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与ClampMax/ClampMin接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与ClampMax/ClampMin接口一致。 | |
| 25 | -| maxValue | 输出 | ClampMax/ClampMin/Clamp接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | ClampMax/ClampMin/Clamp接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | ClampMax/ClampMin/Clamp接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | ClampMax/ClampMin/Clamp接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -23,11 +23,11 @@ void GetCosMaxMinTmpSize(const CosConfig& config, const AscendC::TensorShape& sr | |||
| 23 | 23 | ||
| 24 | | 参数名 | 输入/输出 | 描述 | | 24 | | 参数名 | 输入/输出 | 描述 | |
| 25 | | --- | --- | --- | | 25 | | --- | --- | --- | |
| 26 | -| config | 输入 | Cos接口的相关配置信息。该参数的配置必须与Cos Kernel接口模板参数config的配置保持一致。 | | 26 | +| config | 输入 | Cos接口的相关配置信息。该参数的配置必须与Cos核函数(Kernel)接口模板参数config的配置保持一致。 | |
| 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 29 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Cos接口的isReuseSource参数保持一致。对于float数据类型的输入支持开启该参数,half数据类型的输入不支持开启该参数。 | | 29 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Cos接口的isReuseSource参数保持一致。对于float数据类型的输入支持开启该参数,half数据类型的输入不支持开启该参数。 | |
| 30 | -| maxValue | 输出 | Cos接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 30 | +| maxValue | 输出 | Cos接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 31 | | minValue | 输出 | Cos接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 31 | | minValue | 输出 | Cos接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 32 | 32 | ||
| 33 | ## 返回值说明 | 33 | ## 返回值说明 |
| @@ -36,7 +36,7 @@ void GetCosTmpBufferFactorSize(const CosConfig& config, const uint32_t typeSize, | |||
| 36 | 36 | ||
| 37 | | 参数名 | 输入/输出 | 功能 | | 37 | | 参数名 | 输入/输出 | 功能 | |
| 38 | | --- | --- | --- | | 38 | | --- | --- | --- | |
| 39 | -| config | 输入 | Cos接口的相关配置信息。该参数的配置必须与Cos Kernel接口模板参数config的配置保持一致。 | | 39 | +| config | 输入 | Cos接口的相关配置信息。该参数的配置必须与Cos核函数(Kernel)接口模板参数config的配置保持一致。 | |
| 40 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 40 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 41 | | maxLiveNodeCount | 输出 | 最大存活节点数,表示临时空间是单次计算数据量所占空间的多少倍。 | | 41 | | maxLiveNodeCount | 输出 | 最大存活节点数,表示临时空间是单次计算数据量所占空间的多少倍。 | |
| 42 | | extraBuf | 输出 | 使用的额外临时空间大小,单位为字节。 | | 42 | | extraBuf | 输出 | 使用的额外临时空间大小,单位为字节。 | |
| @@ -22,7 +22,7 @@ void GetCoshMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否允许修改源操作数。 | | 24 | | isReuseSource | 输入 | 是否允许修改源操作数。 | |
| 25 | -| maxValue | 输出 | Cosh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Cosh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Cosh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Cosh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -23,7 +23,7 @@ void GetCumSumMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间。 | |
| 25 | | isLastAxis | 输入 | 定义是first轴处理还是last轴处理。 | | 25 | | isLastAxis | 输入 | 定义是first轴处理还是last轴处理。 | |
| 26 | -| maxValue | 输出 | Cumsum接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | Cumsum接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br><br>请注意,maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | Cumsum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 27 | | minValue | 输出 | Cumsum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetDigammaMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_ | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Digamma接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Digamma接口一致。 | |
| 25 | -| maxValue | 输出 | Digamma接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Digamma接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Digamma接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Digamma接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetErfMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t ty | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否允许修改源操作数。 | | 24 | | isReuseSource | 输入 | 是否允许修改源操作数。 | |
| 25 | -| maxValue | 输出 | Erf接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Erf接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Erf接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Erf接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetErfcMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Erfc接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Erfc接口一致。 | |
| 25 | -| maxValue | 输出 | Erfc接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Erfc接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Erfc接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Erfc接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ bool GetExpMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t ty | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Exp接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Exp接口一致。 | |
| 25 | -| maxValue | 输出 | Exp接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Exp接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Exp接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Exp接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetFloorMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Floor接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Floor接口一致。 | |
| 25 | -| maxValue | 输出 | Floor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Floor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Floor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Floor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧Fma接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧Fma接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetFmaMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlatfor | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | Fma接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | Fma接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | Fma接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | Fma接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetFmodMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 24 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 25 | -| maxValue | 输出 | Fmod接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Fmod接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Fmod接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Fmod接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetFracMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否允许修改源操作数输入的空间。 | | 24 | | isReuseSource | 输入 | 是否允许修改源操作数输入的空间。 | |
| 25 | -| maxValue | 输出 | Frac接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Frac接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Frac接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Frac接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetHypotMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 24 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 25 | -| maxValue | 输出 | Hypot接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Hypot接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Hypot接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Hypot接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧IsInf接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧IsInf接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetIsInfMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlatf | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | IsInf接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | IsInf接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | IsInf接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | IsInf接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧IsNan接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧IsNan接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetIsNanMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlatf | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | IsNan接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | IsNan接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | IsNan接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | IsNan接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetLgammaMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Lgamma接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Lgamma接口一致。 | |
| 25 | -| maxValue | 输出 | Lgamma接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Lgamma接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Lgamma接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Lgamma接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -27,7 +27,7 @@ void GetLog2MaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 29 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Log接口一致。 | | 29 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Log接口一致。 | |
| 30 | -| maxValue | 输出 | Log接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 30 | +| maxValue | 输出 | Log接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 31 | | minValue | 输出 | Log接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 31 | | minValue | 输出 | Log接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 32 | 32 | ||
| 33 | ## 返回值说明 | 33 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧LogicalAnd接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧LogicalAnd接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetLogicalAndMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | LogicalAnd接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | LogicalAnd接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | LogicalAnd接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | LogicalAnd接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧LogicalAnds接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧LogicalAnds接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetLogicalAndsMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascend | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | LogicalAnds接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | LogicalAnds接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | LogicalAnds接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | LogicalAnds接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧LogicalNot接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧LogicalNot接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetLogicalNotMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | LogicalNot接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | LogicalNot接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | LogicalNot接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | LogicalNot接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧LogicalOr接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧LogicalOr接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetLogicalOrMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcP | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | LogicalOr接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | LogicalOr接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | LogicalOr接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | LogicalOr接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧LogicalOrs接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧LogicalOrs接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetLogicalOrsMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | LogicalOrs接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | LogicalOrs接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | LogicalOrs接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | LogicalOrs接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧LogicalXor接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧LogicalXor接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetLogicalXorMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendc | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | LogicalXor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | LogicalXor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | LogicalXor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | LogicalXor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -26,7 +26,7 @@ void GetPowerMaxMinTmpSize(const AscendC::TensorShape& srcShape1, const AscendC: | |||
| 26 | | typeIsInt | 输入 | bool类型,true表示输入是int32_t。 | | 26 | | typeIsInt | 输入 | bool类型,true表示输入是int32_t。 | |
| 27 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 27 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 28 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Power接口一致。 | | 28 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Power接口一致。 | |
| 29 | -| maxValue | 输出 | Power接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 29 | +| maxValue | 输出 | Power接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 30 | | minValue | 输出 | Power接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 30 | | minValue | 输出 | Power接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 31 | 31 | ||
| 32 | ## 返回值说明 | 32 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧Rint接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧Rint接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetRintMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlatfo | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | Rint接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | Rint接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | Rint接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | Rint接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -23,7 +23,7 @@ void GetRoundMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlatf | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Round接口一致。 | | 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Round接口一致。 | |
| 26 | -| maxValue | 输出 | Round接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | Round接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | Round接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | Round接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetSignMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sign接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sign接口一致。 | |
| 25 | -| maxValue | 输出 | Sign接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Sign接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Sign接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 26 | | minValue | 输出 | Sign接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧SinCos接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧SinCos接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetSinCosMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlat | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与SinCos接口的isReuseSource参数保持一致。对于float数据类型的输入支持开启该参数,half数据类型的输入不支持开启该参数。 | | 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与SinCos接口的isReuseSource参数保持一致。对于float数据类型的输入支持开启该参数,half数据类型的输入不支持开启该参数。 | |
| 26 | -| maxValue | 输出 | SinCos接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | SinCos接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | SinCos接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | SinCos接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -23,11 +23,11 @@ void GetSinMaxMinTmpSize(const SinConfig& config, const AscendC::TensorShape& sr | |||
| 23 | 23 | ||
| 24 | | 参数名 | 输入/输出 | 描述 | | 24 | | 参数名 | 输入/输出 | 描述 | |
| 25 | | --- | --- | --- | | 25 | | --- | --- | --- | |
| 26 | -| config | 输入 | Sin接口的相关配置信息。该参数的配置必须与Sin Kernel接口模板参数config的配置保持一致。 | | 26 | +| config | 输入 | Sin接口的相关配置信息。该参数的配置必须与Sin核函数(Kernel)接口模板参数config的配置保持一致。 | |
| 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 27 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 29 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sin接口的isReuseSource参数保持一致。对于float数据类型的输入支持开启该参数,half数据类型的输入不支持开启该参数。 | | 29 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sin接口的isReuseSource参数保持一致。对于float数据类型的输入支持开启该参数,half数据类型的输入不支持开启该参数。 | |
| 30 | -| maxValue | 输出 | Sin接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 30 | +| maxValue | 输出 | Sin接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 31 | | minValue | 输出 | Sin接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 31 | | minValue | 输出 | Sin接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 32 | 32 | ||
| 33 | ## 返回值说明 | 33 | ## 返回值说明 |
| @@ -36,7 +36,7 @@ void GetSinTmpBufferFactorSize(const SinConfig& config, const uint32_t typeSize, | |||
| 36 | 36 | ||
| 37 | | 参数名 | 输入/输出 | 功能 | | 37 | | 参数名 | 输入/输出 | 功能 | |
| 38 | | --- | --- | --- | | 38 | | --- | --- | --- | |
| 39 | -| config | 输入 | Sin接口的相关配置信息。该参数的配置必须与Sin Kernel接口模板参数config的配置保持一致。 | | 39 | +| config | 输入 | Sin接口的相关配置信息。该参数的配置必须与Sin核函数(Kernel)接口模板参数config的配置保持一致。 | |
| 40 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 40 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 41 | | maxLiveNodeCount | 输出 | 最大存活节点数,表示临时空间是单次计算数据量所占空间的多少倍。 | | 41 | | maxLiveNodeCount | 输出 | 最大存活节点数,表示临时空间是单次计算数据量所占空间的多少倍。 | |
| 42 | | extraBuf | 输出 | 使用的额外临时空间大小,单位为字节。 | | 42 | | extraBuf | 输出 | 使用的额外临时空间大小,单位为字节。 | |
| @@ -22,7 +22,7 @@ void GetSinhMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sinh接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sinh接口一致。 | |
| 25 | -| maxValue | 输出 | Sinh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Sinh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Sinh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Sinh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetTanMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t ty | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否允许修改源操作数。 | | 24 | | isReuseSource | 输入 | 是否允许修改源操作数。 | |
| 25 | -| maxValue | 输出 | Tan接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Tan接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Tan接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Tan接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetTanhMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Tanh接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Tanh接口一致。 | |
| 25 | -| maxValue | 输出 | Tanh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在min-max范围内,预留/申请空间越大,接口计算性能越好。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。maxValue为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Tanh接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在min-max范围内,预留/申请空间越大,接口计算性能越好。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。maxValue为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Tanh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于minValue的数值。最小空间为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Tanh接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于minValue的数值。最小空间为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetTruncMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Trunc接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Trunc接口一致。 | |
| 25 | -| maxValue | 输出 | Trunc接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Trunc接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Trunc接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 26 | | minValue | 输出 | Trunc接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -2,10 +2,10 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -Kernel侧Where接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到Kernel侧使用。 | 5 | +核函数(Kernel)侧Where接口的计算需要开发者预留/申请临时空间,本接口用于在Host侧获取预留/申请的最大和最小临时空间大小,开发者基于此范围选择合适的空间大小作为Tiling参数传递到核函数(Kernel)侧使用。 |
| 6 | 6 | ||
| 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; | 7 | - 为保证功能正确,预留/申请的临时空间大小不能小于最小临时空间大小; |
| 8 | -- 在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 | 8 | +- 在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。 |
| 9 | 9 | ||
| 10 | ## 函数原型 | 10 | ## 函数原型 |
| 11 | 11 | ||
| @@ -23,7 +23,7 @@ void GetWhereMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcPlatf | |||
| 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 23 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 24 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | | 25 | | isReuseSource | 输入 | 该参数预留,传入默认值false即可。 | |
| 26 | -| maxValue | 输出 | Where接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,Kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxValue | 输出 | Where接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,核函数(Kernel)侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minValue | 输出 | Where接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 27 | | minValue | 输出 | Where接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ void GetXorMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32_t ty | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为int16_t,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为int16_t,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Xor接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Xor接口一致。 | |
| 25 | -| maxValue | 输出 | Xor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Xor接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br><br>请注意,maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Xor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 26 | | minValue | 输出 | Xor接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -133,9 +133,9 @@ extern "C" __global__ __aicore__ void asin_custom(GM_ADDR srcGm, GM_ADDR dstGm, | |||
| 133 | 133 | ||
| 134 | ## 样例二<a name="section577043422516"></a> | 134 | ## 样例二<a name="section577043422516"></a> |
| 135 | 135 | ||
| 136 | -下面的样例展示了数学库Kernel侧API和[PlatformAscendC::ReserveLocalMemory](../../../Utils-API/platform_info/PlatformAscendC/ReserveLocalMemory.md)的配合使用方法,流程如下: | 136 | +下面的样例展示了数学库核函数(Kernel)侧API和[PlatformAscendC::ReserveLocalMemory](../../../Utils-API/platform_info/PlatformAscendC/ReserveLocalMemory.md)的配合使用方法,流程如下: |
| 137 | 137 | ||
| 138 | -Host侧调用ReserveLocalMemory接口预留Unified Buffer内存空间,并通过GetCoreMemSize接口获取实际可用的Unified Buffer内存大小。基于实际可用的内存大小计算能够支持的最大Shape(最大数据规模)。这种方式可以避免多次调用GetXXXTmpMaxMinSize接口来获取合适的临时空间大小。 | 138 | +Host侧调用ReserveLocalMemory接口预留Unified Buffer(UB)内存空间,并通过GetCoreMemSize接口获取实际可用的UB内存大小。基于实际可用的内存大小计算能够支持的最大Shape(最大数据规模)。这种方式可以避免多次调用GetXXXTmpMaxMinSize接口来获取合适的临时空间大小。 |
| 139 | 139 | ||
| 140 | Host侧Tiling API使用样例: | 140 | Host侧Tiling API使用样例: |
| 141 | 141 | ||
| @@ -156,7 +156,7 @@ static ge::graphStatus TilingFunc(gert::TilingContext* context) | |||
| 156 | { | 156 | { |
| 157 | auto platformInfo = context->GetPlatformInfo(); | 157 | auto platformInfo = context->GetPlatformInfo(); |
| 158 | auto ascendcPlatform = platform_ascendc::PlatformAscendC(platformInfo); | 158 | auto ascendcPlatform = platform_ascendc::PlatformAscendC(platformInfo); |
| 159 | - uint64_t tailSize = 0; // Unified Buffer剩余空间大小 | 159 | + uint64_t tailSize = 0; // UB剩余空间大小 |
| 160 | ascendcPlatform.ReserveLocalMemory(platform_ascendc::ReservedSize::RESERVED_SIZE_8K); | 160 | ascendcPlatform.ReserveLocalMemory(platform_ascendc::ReservedSize::RESERVED_SIZE_8K); |
| 161 | ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, tailSize); | 161 | ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, tailSize); |
| 162 | 162 | ||
| @@ -172,7 +172,7 @@ static ge::graphStatus TilingFunc(gert::TilingContext* context) | |||
| 172 | } // namespace optiling | 172 | } // namespace optiling |
| 173 | ``` | 173 | ``` |
| 174 | 174 | ||
| 175 | -Kernel侧通过读取TilingData,获取相应的计算规模参数。随后,Kernel调用数学库提供的不带临时空间的API,执行多种数学运算: | 175 | +核函数(Kernel)侧通过读取TilingData,获取相应的计算规模参数。随后,核函数(Kernel)调用数学库提供的不带临时空间的API,执行多种数学运算: |
| 176 | 176 | ||
| 177 | ``` | 177 | ``` |
| 178 | #include "kernel_operator.h" | 178 | #include "kernel_operator.h" |
| @@ -64,7 +64,7 @@ bool GetBatchNormNDTilingInfo(const AscendC::TensorShape& srcShape, const Ascend | |||
| 64 | | originSrcShape | 输入 | 输入数据inputX的originshape信息[originB, originS, originH],参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 64 | | originSrcShape | 输入 | 输入数据inputX的originshape信息[originB, originS, originH],参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 65 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 65 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 66 | | isReuseSource | 输入 | 中间变量是否能够复用输入内存。该参数预留,传入默认值false即可。 | | 66 | | isReuseSource | 输入 | 中间变量是否能够复用输入内存。该参数预留,传入默认值false即可。 | |
| 67 | -| maxValue | 输出 | BatchNorm接口能完成计算所需的最大临时空间大小,超出max的空间不会被该接口使用。在min-max范围内,预留/申请空间越大,接口计算性能越好。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。maxValue为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 67 | +| maxValue | 输出 | BatchNorm接口能完成计算所需的最大临时空间大小,超出max的空间不会被该接口使用。在min-max范围内,预留/申请空间越大,接口计算性能越好。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。maxValue为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 68 | | minValue | 输出 | BatchNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于min的数值。最小空间为0表示计算不需要临时空间。 | | 68 | | minValue | 输出 | BatchNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于min的数值。最小空间为0表示计算不需要临时空间。 | |
| 69 | | isBasicBlock | 输入 | 是否开启基本块,与BatchNorm接口一致。 | | 69 | | isBasicBlock | 输入 | 是否开启基本块,与BatchNorm接口一致。 | |
| 70 | 70 | ||
| @@ -142,7 +142,7 @@ bool GetBatchNormNDTilingInfo(const AscendC::TensorShape& srcShape, const Ascend | |||
| 142 | } // namespace optiling | 142 | } // namespace optiling |
| 143 | ``` | 143 | ``` |
| 144 | 144 | ||
| 145 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的BatchNormTiling信息传入BatchNorm接口参与计算。完整的kernel侧样例请参考[BatchNorm](BatchNorm.md)。 | 145 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的BatchNormTiling信息传入BatchNorm接口参与计算。完整的kernel侧样例请参考[BatchNorm](BatchNorm.md)。 |
| 146 | 146 | ||
| 147 | ``` | 147 | ``` |
| 148 | extern "C" __global__ __aicore__ void func_custom( | 148 | extern "C" __global__ __aicore__ void func_custom( |
| @@ -72,7 +72,7 @@ bool GetDeepNormTilingInfo(const AscendC::TensorShape& srcShape, const AscendC:: | |||
| 72 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 72 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 73 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与DeepNorm接口一致。 | | 73 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与DeepNorm接口一致。 | |
| 74 | | isBasicBlock | 输入 | srcShape是否符合基本块定义:尾轴H的长度为64的倍数(不超过2040), B*S为8的倍数。 | | 74 | | isBasicBlock | 输入 | srcShape是否符合基本块定义:尾轴H的长度为64的倍数(不超过2040), B*S为8的倍数。 | |
| 75 | -| maxValue | 输出 | DeepNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 75 | +| maxValue | 输出 | DeepNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 76 | | minValue | 输出 | DeepNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 76 | | minValue | 输出 | DeepNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 77 | 77 | ||
| 78 | **表2** GetDeepNormTilingInfo接口参数说明 | 78 | **表2** GetDeepNormTilingInfo接口参数说明 |
| @@ -147,7 +147,7 @@ bool GetDeepNormTilingInfo(const AscendC::TensorShape& srcShape, const AscendC:: | |||
| 147 | } // namespace optiling | 147 | } // namespace optiling |
| 148 | ``` | 148 | ``` |
| 149 | 149 | ||
| 150 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的DeepNorm Tiling信息传入DeepNorm接口参与计算。完整的kernel侧样例请参考[DeepNorm](DeepNorm.md)。 | 150 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的DeepNorm Tiling信息传入DeepNorm接口参与计算。完整的kernel侧样例请参考[DeepNorm](DeepNorm.md)。 |
| 151 | 151 | ||
| 152 | ``` | 152 | ``` |
| 153 | extern "C" __global__ __aicore__ void deepnorm_custom( | 153 | extern "C" __global__ __aicore__ void deepnorm_custom( |
| @@ -74,7 +74,7 @@ void GetGroupNormNDTilingInfo(const AscendC::TensorShape& srcShape, const uint32 | |||
| 74 | | typeSize | 输入 | 输入数据inputX的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 74 | | typeSize | 输入 | 输入数据inputX的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 75 | | isReuseSource | 输入 | 中间变量是否能够复用输入内存。 | | 75 | | isReuseSource | 输入 | 中间变量是否能够复用输入内存。 | |
| 76 | | groupNum | 输入 | 在C维度上的分组数。 | | 76 | | groupNum | 输入 | 在C维度上的分组数。 | |
| 77 | -| maxValue | 输出 | 输出GroupNorm接口所需的tiling信息(最大临时空间大小)。<br><br>GroupNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 77 | +| maxValue | 输出 | 输出GroupNorm接口所需的tiling信息(最大临时空间大小)。<br><br>GroupNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 78 | | minValue | 输出 | 输出GroupNorm接口所需的tiling信息(最小临时空间大小)。<br><br>GroupNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 78 | | minValue | 输出 | 输出GroupNorm接口所需的tiling信息(最小临时空间大小)。<br><br>GroupNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 79 | 79 | ||
| 80 | **表2** GetGroupNormNDTilingInfo接口参数列表: | 80 | **表2** GetGroupNormNDTilingInfo接口参数列表: |
| @@ -148,7 +148,7 @@ void GetGroupNormNDTilingInfo(const AscendC::TensorShape& srcShape, const uint32 | |||
| 148 | } // namespace optiling | 148 | } // namespace optiling |
| 149 | ``` | 149 | ``` |
| 150 | 150 | ||
| 151 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的GroupNorm Tiling信息传入GroupNorm接口参与计算。 | 151 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的GroupNorm Tiling信息传入GroupNorm接口参与计算。 |
| 152 | 152 | ||
| 153 | ``` | 153 | ``` |
| 154 | extern "C" __global__ __aicore__ void groupnorm_custom( | 154 | extern "C" __global__ __aicore__ void groupnorm_custom( |
| @@ -139,7 +139,7 @@ Ascend C提供一组LayerNorm Tiling API,方便用户获取LayerNorm kernel计 | |||
| 139 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[LayerNorm](LayerNorm.md)接口一致。 | | 139 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[LayerNorm](LayerNorm.md)接口一致。 | |
| 140 | | isComputeRstd | 输入 | 是否计算标准差的倒数rstd。用于Tiling中区分选择的LayerNorm API。 | | 140 | | isComputeRstd | 输入 | 是否计算标准差的倒数rstd。用于Tiling中区分选择的LayerNorm API。 | |
| 141 | | isOnlyOutput | 输入 | 是否只输出y,不输出均值mean与标准差的倒数rstd。当前该参数仅支持false,y、mean和rstd的结果全都输出。 | | 141 | | isOnlyOutput | 输入 | 是否只输出y,不输出均值mean与标准差的倒数rstd。当前该参数仅支持false,y、mean和rstd的结果全都输出。 | |
| 142 | -| maxValue | 输出 | 输出LayerNorm接口所需的tiling信息(最大临时空间大小)。<br><br>LayerNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 142 | +| maxValue | 输出 | 输出LayerNorm接口所需的tiling信息(最大临时空间大小)。<br><br>LayerNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 143 | | minValue | 输出 | 输出LayerNorm接口所需的tiling信息(最小临时空间大小)。<br><br>LayerNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 143 | | minValue | 输出 | 输出LayerNorm接口所需的tiling信息(最小临时空间大小)。<br><br>LayerNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 144 | 144 | ||
| 145 | **表2** GetLayerNormNDTilingInfo和GetLayerNormNDTillingInfo接口参数列表 | 145 | **表2** GetLayerNormNDTilingInfo和GetLayerNormNDTillingInfo接口参数列表 |
| @@ -210,7 +210,7 @@ Ascend C提供一组LayerNorm Tiling API,方便用户获取LayerNorm kernel计 | |||
| 210 | } // namespace optiling | 210 | } // namespace optiling |
| 211 | ``` | 211 | ``` |
| 212 | 212 | ||
| 213 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormTiling信息传入LayerNorm接口参与计算。 | 213 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormTiling信息传入LayerNorm接口参与计算。 |
| 214 | 214 | ||
| 215 | ``` | 215 | ``` |
| 216 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) | 216 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) |
| @@ -276,7 +276,7 @@ Ascend C提供一组LayerNorm Tiling API,方便用户获取LayerNorm kernel计 | |||
| 276 | } // namespace optiling | 276 | } // namespace optiling |
| 277 | ``` | 277 | ``` |
| 278 | 278 | ||
| 279 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormTiling信息传入LayerNorm接口参与计算。 | 279 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormTiling信息传入LayerNorm接口参与计算。 |
| 280 | 280 | ||
| 281 | ``` | 281 | ``` |
| 282 | extern "C" __global__ __aicore__ void func_custom( | 282 | extern "C" __global__ __aicore__ void func_custom( |
| @@ -73,7 +73,7 @@ void GetLayerNormGradNDTilingInfo(const AscendC::TensorShape srcShape, const uin | |||
| 73 | | srcShape | 输入 | 输入数据inputDy的shape信息{B, S, storageHLength, originHLength},参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),包括当前输入的inputDy的shape信息,以及地址对齐前(如存在H轴补齐操作)的原有shape信息。<br><br>在API支持的场景下,storageHLength和originHLength保持一致。 | | 73 | | srcShape | 输入 | 输入数据inputDy的shape信息{B, S, storageHLength, originHLength},参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),包括当前输入的inputDy的shape信息,以及地址对齐前(如存在H轴补齐操作)的原有shape信息。<br><br>在API支持的场景下,storageHLength和originHLength保持一致。 | |
| 74 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 74 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 75 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[LayerNorm](LayerNorm.md)接口一致。 | | 75 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[LayerNorm](LayerNorm.md)接口一致。 | |
| 76 | -| maxValue | 输出 | LayerNormGrad接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 76 | +| maxValue | 输出 | LayerNormGrad接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 77 | | minValue | 输出 | LayerNormGrad接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 77 | | minValue | 输出 | LayerNormGrad接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 78 | 78 | ||
| 79 | **表2** GetLayerNormGradNDTilingInfo接口参数列表 | 79 | **表2** GetLayerNormGradNDTilingInfo接口参数列表 |
| @@ -143,7 +143,7 @@ void GetLayerNormGradNDTilingInfo(const AscendC::TensorShape srcShape, const uin | |||
| 143 | } // namespace optiling | 143 | } // namespace optiling |
| 144 | ``` | 144 | ``` |
| 145 | 145 | ||
| 146 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormGradTiling信息传入LayerNormGrad接口参与计算。完整的kernel侧样例请参考[调用示例](LayerNormGrad.md#调用示例)。 | 146 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormGradTiling信息传入LayerNormGrad接口参与计算。完整的kernel侧样例请参考[调用示例](LayerNormGrad.md#调用示例)。 |
| 147 | 147 | ||
| 148 | ``` | 148 | ``` |
| 149 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) | 149 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) |
| @@ -63,7 +63,7 @@ void GetLayerNormGradBetaNDTilingInfo(const AscendC::TensorShape srcShape, const | |||
| 63 | | srcShape | 输入 | 输入数据inputDy的shape信息{B, S, storageHLength, originHLength},参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),包括当前输入的inputDy的shape信息,以及地址对齐前(如存在H轴补齐操作)的原有shape信息。<br><br>在API支持的场景下,storageHLength和originHLength保持一致。 | | 63 | | srcShape | 输入 | 输入数据inputDy的shape信息{B, S, storageHLength, originHLength},参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),包括当前输入的inputDy的shape信息,以及地址对齐前(如存在H轴补齐操作)的原有shape信息。<br><br>在API支持的场景下,storageHLength和originHLength保持一致。 | |
| 64 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 64 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 65 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[LayerNorm](LayerNorm.md)接口一致。 | | 65 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[LayerNorm](LayerNorm.md)接口一致。 | |
| 66 | -| maxValue | 输出 | LayerNormGradBeta接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 66 | +| maxValue | 输出 | LayerNormGradBeta接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 67 | | minValue | 输出 | LayerNormGradBeta接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 67 | | minValue | 输出 | LayerNormGradBeta接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 68 | 68 | ||
| 69 | **表2** GetLayerNormGradBetaNDTilingInfo接口参数列表 | 69 | **表2** GetLayerNormGradBetaNDTilingInfo接口参数列表 |
| @@ -134,7 +134,7 @@ void GetLayerNormGradBetaNDTilingInfo(const AscendC::TensorShape srcShape, const | |||
| 134 | } // namespace optiling | 134 | } // namespace optiling |
| 135 | ``` | 135 | ``` |
| 136 | 136 | ||
| 137 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormGradBetaTiling信息传入LayerNormGradBeta接口参与计算。完整的kernel侧样例请参考[LayerNormGradBeta](LayerNormGradBeta.md)。 | 137 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的LayerNormGradBetaTiling信息传入LayerNormGradBeta接口参与计算。完整的kernel侧样例请参考[LayerNormGradBeta](LayerNormGradBeta.md)。 |
| 138 | 138 | ||
| 139 | ``` | 139 | ``` |
| 140 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) | 140 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) |
| @@ -29,7 +29,7 @@ void GetNormalizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint3 | |||
| 29 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[Normalize](Normalize.md)接口一致。 | | 29 | | isReuseSource | 输入 | 是否复用源操作数的内存空间,与[Normalize](Normalize.md)接口一致。 | |
| 30 | | isComputeRstd | 输入 | 是否计算rstd。该参数的取值只支持true。 | | 30 | | isComputeRstd | 输入 | 是否计算rstd。该参数的取值只支持true。 | |
| 31 | | isOnlyOutput | 输入 | 是否只输出y,不输出标准差的倒数rstd。当前该参数仅支持取值为false,表示y和rstd的结果全部输出。 | | 31 | | isOnlyOutput | 输入 | 是否只输出y,不输出标准差的倒数rstd。当前该参数仅支持取值为false,表示y和rstd的结果全部输出。 | |
| 32 | -| maxValue | 输出 | 输出Normalize接口所需的tiling信息(最大临时空间大小)。<br><br>Normalize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 32 | +| maxValue | 输出 | 输出Normalize接口所需的tiling信息(最大临时空间大小)。<br><br>Normalize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 33 | | minValue | 输出 | 输出Normalize接口所需的tiling信息(最小临时空间大小)。<br><br>Normalize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 33 | | minValue | 输出 | 输出Normalize接口所需的tiling信息(最小临时空间大小)。<br><br>Normalize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 34 | 34 | ||
| 35 | ## 返回值说明 | 35 | ## 返回值说明 |
| @@ -98,7 +98,7 @@ void GetNormalizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint3 | |||
| 98 | } // namespace optiling | 98 | } // namespace optiling |
| 99 | ``` | 99 | ``` |
| 100 | 100 | ||
| 101 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的Normalize Tiling信息传入Normalize接口参与计算。完整的kernel侧样例请参考[Normalize](Normalize.md)。 | 101 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的Normalize Tiling信息传入Normalize接口参与计算。完整的kernel侧样例请参考[Normalize](Normalize.md)。 |
| 102 | 102 | ||
| 103 | ``` | 103 | ``` |
| 104 | extern "C" __global__ __aicore__ void normalize_custom( | 104 | extern "C" __global__ __aicore__ void normalize_custom( |
| @@ -56,7 +56,7 @@ bool GetRmsNormTilingInfo(const AscendC::TensorShape& srcShape, const AscendC::T | |||
| 56 | | --- | --- | --- | | 56 | | --- | --- | --- | |
| 57 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 57 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 58 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 58 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 59 | -| maxValue | 输出 | RmsNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 59 | +| maxValue | 输出 | RmsNorm接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 60 | | minValue | 输出 | RmsNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 60 | | minValue | 输出 | RmsNorm接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 61 | | isBasicBlock | 输入 | 是否要开启基本块计算,与kernel侧接口一致,默认false。 | | 61 | | isBasicBlock | 输入 | 是否要开启基本块计算,与kernel侧接口一致,默认false。 | |
| 62 | 62 | ||
| @@ -130,7 +130,7 @@ bool GetRmsNormTilingInfo(const AscendC::TensorShape& srcShape, const AscendC::T | |||
| 130 | } // namespace optiling | 130 | } // namespace optiling |
| 131 | ``` | 131 | ``` |
| 132 | 132 | ||
| 133 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的RmsNorm Tiling信息传入RmsNorm接口参与计算。完整的kernel侧样例请参考[RmsNorm](RmsNorm.md)。 | 133 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的RmsNorm Tiling信息传入RmsNorm接口参与计算。完整的kernel侧样例请参考[RmsNorm](RmsNorm.md)。 |
| 134 | 134 | ||
| 135 | ``` | 135 | ``` |
| 136 | extern "C" __global__ __aicore__ void rmsnorm_custom(GM_ADDR inputGm, GM_ADDR gammaGm, GM_ADDR outputGm, GM_ADDR tiling) | 136 | extern "C" __global__ __aicore__ void rmsnorm_custom(GM_ADDR inputGm, GM_ADDR gammaGm, GM_ADDR outputGm, GM_ADDR tiling) |
| @@ -28,7 +28,7 @@ void GetWelfordFinalizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const | |||
| 28 | | srcShape | 输入 | 输入inputMean/inputVariance的shape信息{abLength},参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 28 | | srcShape | 输入 | 输入inputMean/inputVariance的shape信息{abLength},参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 29 | | typeSize | 输入 | 输入inputMean/inputVariance的数据类型大小,单位为字节。比如输入的数据类型为float,此处应传入4。 | | 29 | | typeSize | 输入 | 输入inputMean/inputVariance的数据类型大小,单位为字节。比如输入的数据类型为float,此处应传入4。 | |
| 30 | | isReuseSource | 输入 | 是否允许修改源操作数。该参数取值与[WelfordFinalize](WelfordFinalize.md)接口一致。 | | 30 | | isReuseSource | 输入 | 是否允许修改源操作数。该参数取值与[WelfordFinalize](WelfordFinalize.md)接口一致。 | |
| 31 | -| maxValue | 输出 | WelfordFinalize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 31 | +| maxValue | 输出 | WelfordFinalize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 32 | | minValue | 输出 | WelfordFinalize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 32 | | minValue | 输出 | WelfordFinalize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 33 | 33 | ||
| 34 | ## 返回值说明 | 34 | ## 返回值说明 |
| @@ -97,7 +97,7 @@ void GetWelfordFinalizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const | |||
| 97 | } // namespace optiling | 97 | } // namespace optiling |
| 98 | ``` | 98 | ``` |
| 99 | 99 | ||
| 100 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的WelfordFinalize Tiling信息传入WelfordFinalize接口参与计算。完整的kernel侧样例请参考[WelfordFinalize](WelfordFinalize.md)。 | 100 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的WelfordFinalize Tiling信息传入WelfordFinalize接口参与计算。完整的kernel侧样例请参考[WelfordFinalize](WelfordFinalize.md)。 |
| 101 | 101 | ||
| 102 | ``` | 102 | ``` |
| 103 | extern "C" __global__ __aicore__ void welford_finalize_custom( | 103 | extern "C" __global__ __aicore__ void welford_finalize_custom( |
| @@ -30,7 +30,7 @@ void GetWelfordUpdateMaxMinTmpSize(const AscendC::TensorShape& srcShape, const u | |||
| 30 | | typeSizeU | 输入 | 均值、方差(outputMean、outputVariance、inputMean、inputVariance)的数据类型大小,单位为字节。比如输入的数据类型为float,此处应传入4。 | | 30 | | typeSizeU | 输入 | 均值、方差(outputMean、outputVariance、inputMean、inputVariance)的数据类型大小,单位为字节。比如输入的数据类型为float,此处应传入4。 | |
| 31 | | isReuseSource | 输入 | 是否允许修改源操作数。与[WelfordUpdate](WelfordUpdate.md)接口一致。 | | 31 | | isReuseSource | 输入 | 是否允许修改源操作数。与[WelfordUpdate](WelfordUpdate.md)接口一致。 | |
| 32 | | isInplace | 输入 | 目的操作数是否复用源操作数。与[WelfordUpdate](WelfordUpdate.md)接口一致。 | | 32 | | isInplace | 输入 | 目的操作数是否复用源操作数。与[WelfordUpdate](WelfordUpdate.md)接口一致。 | |
| 33 | -| maxValue | 输出 | WelfordUpdate接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 33 | +| maxValue | 输出 | WelfordUpdate接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 34 | | minValue | 输出 | WelfordUpdate接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 34 | | minValue | 输出 | WelfordUpdate接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 35 | 35 | ||
| 36 | ## 返回值说明 | 36 | ## 返回值说明 |
| @@ -95,7 +95,7 @@ void GetWelfordUpdateMaxMinTmpSize(const AscendC::TensorShape& srcShape, const u | |||
| 95 | } // namespace optiling | 95 | } // namespace optiling |
| 96 | ``` | 96 | ``` |
| 97 | 97 | ||
| 98 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的WelfordUpdate Tiling信息传入WelfordUpdate接口参与计算。完整的kernel侧样例请参考[WelfordUpdate](WelfordUpdate.md)。 | 98 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的WelfordUpdate Tiling信息传入WelfordUpdate接口参与计算。完整的kernel侧样例请参考[WelfordUpdate](WelfordUpdate.md)。 |
| 99 | 99 | ||
| 100 | ``` | 100 | ``` |
| 101 | extern "C" __global__ __aicore__ void welford_update_custom( | 101 | extern "C" __global__ __aicore__ void welford_update_custom( |
| @@ -24,7 +24,7 @@ void GetAntiQuantizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const As | |||
| 24 | | isTranspose | 输入 | 预留参数。当前仅支持配置为false。 | | 24 | | isTranspose | 输入 | 预留参数。当前仅支持配置为false。 | |
| 25 | | inputDataType | 输入 | 输入srcTensor数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | | 25 | | inputDataType | 输入 | 输入srcTensor数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | |
| 26 | | outputDataType | 输入 | 输出dstTensor数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | | 26 | | outputDataType | 输入 | 输出dstTensor数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | |
| 27 | -| maxValue | 输出 | AntiQuantize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | AntiQuantize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | AntiQuantize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 28 | | minValue | 输出 | AntiQuantize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 29 | 29 | ||
| 30 | ## 返回值说明 | 30 | ## 返回值说明 |
| @@ -32,7 +32,7 @@ uint32_t GetAscendAntiQuantMinTmpSize(const AscendC::TensorShape& srcShape, cons | |||
| 32 | | isTranspose | 输入 | 是否转置。 | | 32 | | isTranspose | 输入 | 是否转置。 | |
| 33 | | inputDataType | 输入 | 输入数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | | 33 | | inputDataType | 输入 | 输入数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | |
| 34 | | outputDataType | 输入 | 输出数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | | 34 | | outputDataType | 输入 | 输出数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。 | |
| 35 | -| maxValue | 输出 | AscendAntiQuant接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 35 | +| maxValue | 输出 | AscendAntiQuant接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 36 | | minValue | 输出 | AscendAntiQuant接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 36 | | minValue | 输出 | AscendAntiQuant接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 37 | 37 | ||
| 38 | ## 返回值说明 | 38 | ## 返回值说明 |
| @@ -21,7 +21,7 @@ void GetAscendDequantMaxMinTmpSize(const AscendC::TensorShape& srcShape, const u | |||
| 21 | | --- | --- | --- | | 21 | | --- | --- | --- | |
| 22 | | srcShape | 输入 | 输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入srcTensor的数据类型大小,单位为字节。比如输入的数据类型为int32_t,此处应传入4。 | | 23 | | typeSize | 输入 | 输入srcTensor的数据类型大小,单位为字节。比如输入的数据类型为int32_t,此处应传入4。 | |
| 24 | -| maxValue | 输出 | AscendDequant接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 24 | +| maxValue | 输出 | AscendDequant接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 25 | | minValue | 输出 | AscendDequant接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 25 | | minValue | 输出 | AscendDequant接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 26 | 26 | ||
| 27 | ## 返回值说明 | 27 | ## 返回值说明 |
| @@ -21,7 +21,7 @@ void GetAscendQuantMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uin | |||
| 21 | | --- | --- | --- | | 21 | | --- | --- | --- | |
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | -| maxValue | 输出 | AscendQuant接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 24 | +| maxValue | 输出 | AscendQuant接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。 <br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 25 | | minValue | 输出 | AscendQuant接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 25 | | minValue | 输出 | AscendQuant接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 26 | 26 | ||
| 27 | ## 返回值说明 | 27 | ## 返回值说明 |
| @@ -21,7 +21,7 @@ void GetDequantizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint | |||
| 21 | | --- | --- | --- | | 21 | | --- | --- | --- | |
| 22 | | srcShape | 输入 | Dequantize接口的输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | Dequantize接口的输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | Dequantize接口的输入srcTensor的数据类型大小,单位为字节。比如输入的数据类型为int32_t,此处应传入4。 | | 23 | | typeSize | 输入 | Dequantize接口的输入srcTensor的数据类型大小,单位为字节。比如输入的数据类型为int32_t,此处应传入4。 | |
| 24 | -| maxValue | 输出 | Dequantize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 24 | +| maxValue | 输出 | Dequantize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 25 | | minValue | 输出 | Dequantize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 25 | | minValue | 输出 | Dequantize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 26 | 26 | ||
| 27 | ## 返回值说明 | 27 | ## 返回值说明 |
| @@ -21,7 +21,7 @@ void GetQuantizeMaxMinTmpSize(const AscendC::TensorShape& srcShape, const uint32 | |||
| 21 | | --- | --- | --- | | 21 | | --- | --- | --- | |
| 22 | | srcShape | 输入 | Quantize接口的输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | Quantize接口的输入srcTensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | Quantize接口的输入srcTensor的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | Quantize接口的输入srcTensor的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | -| maxValue | 输出 | Quantize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 24 | +| maxValue | 输出 | Quantize接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 25 | | minValue | 输出 | Quantize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 25 | | minValue | 输出 | Quantize接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 26 | 26 | ||
| 27 | ## 返回值说明 | 27 | ## 返回值说明 |
| @@ -23,7 +23,7 @@ void GetMeanMaxMinTmpSize(const uint32_t n, const uint32_t srcTypeSize, const ui | |||
| 23 | | srcTypeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处为2。 | | 23 | | srcTypeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处为2。 | |
| 24 | | accTypeSize | 输入 | 实际参与计算的数据类型(accType)大小,单位为字节,accType参数说明可参考[Mean接口参数说明](Mean.md)。 | | 24 | | accTypeSize | 输入 | 实际参与计算的数据类型(accType)大小,单位为字节,accType参数说明可参考[Mean接口参数说明](Mean.md)。 | |
| 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Mean接口一致。此处为预留参数。 | | 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Mean接口一致。此处为预留参数。 | |
| 26 | -| maxSize | 输出 | Mean接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxSize仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 26 | +| maxSize | 输出 | Mean接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxSize仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 27 | | minSize | 输出 | Mean接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 27 | | minSize | 输出 | Mean接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 28 | 28 | ||
| 29 | ## 返回值说明 | 29 | ## 返回值说明 |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceAll_interface/GetReduceAllMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceAllMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Ascen | |||
| 24 | | pattern | 输入 | 用于指定ReduceAll的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceAll接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceAll的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceAll接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceAll接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceAll接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceAll接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceAll接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceAll接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceAll接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceAll接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceAll接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceAny_interface/GetReduceAnyMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceAnyMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Ascen | |||
| 24 | | pattern | 输入 | 用于指定ReduceAny的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceAny接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceAny的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceAny接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceAny接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceAny接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceAny接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceAny接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceAny接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceAny接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceAny接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceAny接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceMax_interface/GetReduceMaxMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceMaxMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Ascen | |||
| 24 | | pattern | 输入 | 用于指定ReduceMax的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceMax接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceMax的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceMax接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceMax接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceMax接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceMax接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceMax接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceMax接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceMax接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceMax接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceMax接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceMean_interface/GetReduceMeanMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceMeanMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Asce | |||
| 24 | | pattern | 输入 | 用于指定ReduceMean的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceMean接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceMean的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceMean接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceMean接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceMean接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceMean接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceMean接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceMean接口能完成计算所需最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceMean接口能完成计算所需最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceMean接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceMean接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceMin_interface/GetReduceMinMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceMinMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Ascen | |||
| 24 | | pattern | 输入 | 用于指定ReduceMin的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceMin接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceMin的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceMin接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceMin接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceMin接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceMin接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceMin接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceMin接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceMin接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceMin接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceMin接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceProd_interface/GetReduceProdMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceProdMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Asce | |||
| 24 | | pattern | 输入 | 用于指定ReduceProd的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceProd接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceProd的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceProd接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceProd接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceProd接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceProd接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceProd接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceProd接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceProd接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceProd接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceProd接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceSum_interface/GetReduceSumMaxMinTmpSize.md+1-1
| @@ -24,7 +24,7 @@ void GetReduceSumMaxMinTmpSize(const AscendC::TensorShape& srcShape, const Ascen | |||
| 24 | | pattern | 输入 | 用于指定ReduceSum的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceSum接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | | 24 | | pattern | 输入 | 用于指定ReduceSum的计算轴。ReducePattern类型,该类型的定义如下代码所示,包括Reduce轴和Normal轴。pattern由与输入向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。该参数的取值与ReduceSum接口的pattern参数保持一致,当前只支持取值为AscendC::ReducePattern::AR,AscendC::ReducePattern::RA。 | |
| 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceSum接口的isSrcInnerPad参数保持一致。 | | 25 | | isSrcInnerPad | 输入 | 表示实际需要计算的最内层轴数据是否32Bytes对齐,参数取值与ReduceSum接口的isSrcInnerPad参数保持一致。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceSum接口的isReuseSource参数保持一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,参数取值与ReduceSum接口的isReuseSource参数保持一致。 | |
| 27 | -| maxValue | 输出 | ReduceSum接口能完成计算所需最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | ReduceSum接口能完成计算所需最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | ReduceSum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | ReduceSum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
Mdocs/zh/api/SIMD-API/adv_api/reduction_operations/ReduceXorSum_interface/GetReduceXorSumMaxMinTmpSize.md+1-1
| @@ -22,7 +22,7 @@ void GetReduceXorSumMaxMinTmpSize(const AscendC::TensorShape& srcShape, const ui | |||
| 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | | 22 | | srcShape | 输入 | 输入的shape信息,参数类型为[AscendC::TensorShape](../../data_structures/TensorShape.md)。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为int16_t,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为int16_t,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与ReduceXorSum接口一致。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与ReduceXorSum接口一致。 | |
| 25 | -| maxValue | 输出 | ReduceXorSum接口能完成计算所需最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | ReduceXorSum接口能完成计算所需最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | ReduceXorSum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 26 | | minValue | 输出 | ReduceXorSum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -22,7 +22,7 @@ inline void GetSumMaxMinTmpSize(const uint32_t n, const uint32_t typeSize, const | |||
| 22 | | n | 输入 | 输入数据每行的实际计算个数。 | | 22 | | n | 输入 | 输入数据每行的实际计算个数。 | |
| 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 23 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sum接口一致,此处预留。 | | 24 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与Sum接口一致,此处预留。 | |
| 25 | -| maxValue | 输出 | Sum接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 25 | +| maxValue | 输出 | Sum接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。<br> 说明: <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 26 | | minValue | 输出 | Sum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 26 | | minValue | 输出 | Sum接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 27 | 27 | ||
| 28 | ## 返回值说明 | 28 | ## 返回值说明 |
| @@ -24,7 +24,7 @@ void GetSortMaxMinTmpSize(const AscendC::TensorShape& srcShape, AscendC::TensorD | |||
| 24 | | indexType | 输入 | 输入、输出Index的数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。与Sort接口的模板参数U保持一致。 | | 24 | | indexType | 输入 | 输入、输出Index的数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。与Sort接口的模板参数U保持一致。 | |
| 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间。与Sort接口的参数isReuseSource保持一致。 | | 25 | | isReuseSource | 输入 | 是否复用源操作数输入的空间。与Sort接口的参数isReuseSource保持一致。 | |
| 26 | | config | 输入 | Sort的相应配置:选择的排序算法,排序结果的升降序,输入输出是否带有索引数据。数据类型SortConfig,定义如下方代码所示。其中的参数hasSrcIndex、hasDstIndex与使用的Sort接口是否带有输入索引、输出索引的情况保持一致;当前hasSrcIndex = true, hasDstIndex = false组合不支持。 | | 26 | | config | 输入 | Sort的相应配置:选择的排序算法,排序结果的升降序,输入输出是否带有索引数据。数据类型SortConfig,定义如下方代码所示。其中的参数hasSrcIndex、hasDstIndex与使用的Sort接口是否带有输入索引、输出索引的情况保持一致;当前hasSrcIndex = true, hasDstIndex = false组合不支持。 | |
| 27 | -| maxValue | 输出 | Sort接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br> 说明:maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | Sort接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br> 说明:maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | Sort接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 28 | | minValue | 输出 | Sort接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
| @@ -82,10 +82,10 @@ bool TopKTilingFunc(const platform_ascendc::PlatformAscendC& ascendcPlatform, co | |||
| 82 | | isInitIndex | 输入 | 是否传入输入数据对应的索引,与kernel侧接口一致。 | | 82 | | isInitIndex | 输入 | 是否传入输入数据对应的索引,与kernel侧接口一致。 | |
| 83 | | mode | 输入 | 选择TopKMode::TOPK_NORMAL模式或者TopKMode::TOPK_NSMALL模式,与kernel侧接口一致。 | | 83 | | mode | 输入 | 选择TopKMode::TOPK_NORMAL模式或者TopKMode::TOPK_NSMALL模式,与kernel侧接口一致。 | |
| 84 | | isLargest | 输入 | 表示降序/升序,true表示降序,false表示升序。与kernel侧接口一致。 | | 84 | | isLargest | 输入 | 表示降序/升序,true表示降序,false表示升序。与kernel侧接口一致。 | |
| 85 | -| dataType | 输入 | 表示待排序数据的数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。该参数的取值与Kernel接口参数srcLocal的数据类型保持一致。 | | 85 | +| dataType | 输入 | 表示待排序数据的数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md)。该参数的取值与核函数(Kernel)接口参数srcLocal的数据类型保持一致。 | |
| 86 | -| config | 输入 | TopK计算的相关配置,TopKConfig类型定义如下方代码所示,包括算法选择、取最大值或最小值、是否对结果排序。该参数的配置需要与TopK Kernel接口模板参数的配置保持一致。<br>algo:选择的排序算法。默认为MERGE_SORT算法,当前仅支持RADIX_SELECT算法,用户需要显式指定algo为TopKAlgo::RADIX_SELECT。<br>order:表示获取前k个最大值或者获取前k个最小值,取值如下:UNSET:默认值,按照函数参数isLargest的配置实现。isLargest为true时,取前k个最大值及其对应的索引,isLargest为false,取前k个最小值及其对应的索引。LARGEST:表示取前k个最大值及其对应的索引。取值为LARGEST时,函数参数isLargest的配置不生效。SMALLEST:表示取前k个最小值及其对应的索引。取值为SMALLEST时,函数参数isLargest的配置不生效。<br>sorted:表示是否对输出结果进行排序。取值为true,对输出结果进行排序;取值为false,不对输出结果进行排序。 | | 86 | +| config | 输入 | TopK计算的相关配置,TopKConfig类型定义如下方代码所示,包括算法选择、取最大值或最小值、是否对结果排序。该参数的配置需要与TopK核函数(Kernel)接口模板参数的配置保持一致。<br>algo:选择的排序算法。默认为MERGE_SORT算法,当前仅支持RADIX_SELECT算法,用户需要显式指定algo为TopKAlgo::RADIX_SELECT。<br>order:表示获取前k个最大值或者获取前k个最小值,取值如下:UNSET:默认值,按照函数参数isLargest的配置实现。isLargest为true时,取前k个最大值及其对应的索引,isLargest为false,取前k个最小值及其对应的索引。LARGEST:表示取前k个最大值及其对应的索引。取值为LARGEST时,函数参数isLargest的配置不生效。SMALLEST:表示取前k个最小值及其对应的索引。取值为SMALLEST时,函数参数isLargest的配置不生效。<br>sorted:表示是否对输出结果进行排序。取值为true,对输出结果进行排序;取值为false,不对输出结果进行排序。 | |
| 87 | | dataTypeSize | 输入 | 参与计算的srcLocal数据类型的大小,比如half=2, float=4 | | 87 | | dataTypeSize | 输入 | 参与计算的srcLocal数据类型的大小,比如half=2, float=4 | |
| 88 | -| maxValue | 输出 | TopK接口内部完成计算需要的最大临时空间大小,单位是Byte。<br> 说明:maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 88 | +| maxValue | 输出 | TopK接口内部完成计算需要的最大临时空间大小,单位是Byte。<br> 说明:maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 89 | | minValue | 输出 | TopK接口内部完成计算需要的最小临时空间大小,单位是Byte。 | | 89 | | minValue | 输出 | TopK接口内部完成计算需要的最小临时空间大小,单位是Byte。 | |
| 90 | 90 | ||
| 91 | ``` | 91 | ``` |
| @@ -273,7 +273,7 @@ TopKTilingFunc返回值为true/false,true表示成功拿到TopK的Tiling各项 | |||
| 273 | } // namespace optiling | 273 | } // namespace optiling |
| 274 | ``` | 274 | ``` |
| 275 | 275 | ||
| 276 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的TopK Tiling信息传入TopK接口参与计算。完整的kernel侧样例请参考[调用示例](TopK.md#section94691236101419)。 | 276 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的TopK Tiling信息传入TopK接口参与计算。完整的kernel侧样例请参考[调用示例](TopK.md#section94691236101419)。 |
| 277 | 277 | ||
| 278 | ``` | 278 | ``` |
| 279 | extern "C" __global__ __aicore__ void topk_custom( | 279 | extern "C" __global__ __aicore__ void topk_custom( |
| @@ -90,7 +90,7 @@ | |||
| 90 | 90 | ||
| 91 | 通过sharedTmpBuffer传入的情况,开发者需要为tensor申请空间;接口框架申请的方式,开发者需要预留临时空间。临时空间大小BufferSize的获取方式如下:通过[GetBroadCastMaxMinTmpSize](GetBroadCastMaxMinTmpSize.md)中提供的接口获取需要预留空间范围的大小。 | 91 | 通过sharedTmpBuffer传入的情况,开发者需要为tensor申请空间;接口框架申请的方式,开发者需要预留临时空间。临时空间大小BufferSize的获取方式如下:通过[GetBroadCastMaxMinTmpSize](GetBroadCastMaxMinTmpSize.md)中提供的接口获取需要预留空间范围的大小。 |
| 92 | 92 | ||
| 93 | -另外,提供了一个Kernel侧计算Tiling的接口,针对Broadcast的实现计算Tiling,获取Tiling结果。该接口的模板参数功能与支持动态shape的Broadcast接口模板参数相同,其余参数说明请参见[表5](#table5458981523)。 | 93 | +另外,提供了一个核函数(Kernel)侧计算Tiling的接口,针对Broadcast的实现计算Tiling,获取Tiling结果。该接口的模板参数功能与支持动态shape的Broadcast接口模板参数相同,其余参数说明请参见[表5](#table5458981523)。 |
| 94 | 94 | ||
| 95 | - **kernel侧tiling计算接口** | 95 | - **kernel侧tiling计算接口** |
| 96 | 96 | ||
| @@ -142,7 +142,7 @@ | |||
| 142 | | src | 输入 | 源操作数。<br><br>源操作数的数据类型需要与目的操作数保持一致。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | | 142 | | src | 输入 | 源操作数。<br><br>源操作数的数据类型需要与目的操作数保持一致。<br><br>类型为[LocalTensor](../../basic_api/data_structures/LocalTensor/LocalTensor.md),支持的TPosition为VECIN/VECCALC/VECOUT。 | |
| 143 | | dstShape | 输入 | 输出tensor的shape:uint32_t类型的数组,长度取值范围为[1, 9]。输入/输出的shape维度数目必须一致,且满足条件dstShape[i] >= srcShape[i]。 | | 143 | | dstShape | 输入 | 输出tensor的shape:uint32_t类型的数组,长度取值范围为[1, 9]。输入/输出的shape维度数目必须一致,且满足条件dstShape[i] >= srcShape[i]。 | |
| 144 | | srcShape | 输入 | 输入tensor的shape:uint32_t类型的数组,长度取值范围为[1, 9]。输入/输出的shape维度数目必须一致,且满足条件dstShape[i] >= srcShape[i]。<br><br>当srcShape[i]的值为1,且dstShape[i]不等于srcShape[i]时,表示i轴为广播轴。 | | 144 | | srcShape | 输入 | 输入tensor的shape:uint32_t类型的数组,长度取值范围为[1, 9]。输入/输出的shape维度数目必须一致,且满足条件dstShape[i] >= srcShape[i]。<br><br>当srcShape[i]的值为1,且dstShape[i]不等于srcShape[i]时,表示i轴为广播轴。 | |
| 145 | -| tiling | 输入 | Broadcast接口所需的Tiling信息。BroadcastTiling*类型,通过调用Kernel侧的tiling计算接口GetBroadcastTilingInfo获取。 | | 145 | +| tiling | 输入 | Broadcast接口所需的Tiling信息。BroadcastTiling*类型,通过调用核函数(Kernel)侧的tiling计算接口GetBroadcastTilingInfo获取。 | |
| 146 | 146 | ||
| 147 | **表5** kernel侧tiling计算接口参数说明 | 147 | **表5** kernel侧tiling计算接口参数说明 |
| 148 | 148 | ||
| @@ -24,7 +24,7 @@ void GetBroadCastMaxMinTmpSize(const platform_ascendc::PlatformAscendC& ascendcP | |||
| 24 | | dstShape | 输入 | 输出的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | | 24 | | dstShape | 输入 | 输出的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md)。 | |
| 25 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 25 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | | 26 | | isReuseSource | 输入 | 是否复用源操作数输入的空间,与kernel侧接口一致。 | |
| 27 | -| maxValue | 输出 | Broadcast接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | Broadcast接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | Broadcast接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 28 | | minValue | 输出 | Broadcast接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 29 | 29 | ||
| 30 | ## 返回值说明 | 30 | ## 返回值说明 |
| @@ -24,7 +24,7 @@ bool GetTransDataMaxMinTmpSize(const platform_ascendc::PlatformAscendC& platform | |||
| 24 | | dstShape | 输入 | 输出目的操作数的shape大小,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),参数取值与TransData接口的params.dstLayout参数中的shape信息保持一致。 | | 24 | | dstShape | 输入 | 输出目的操作数的shape大小,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),参数取值与TransData接口的params.dstLayout参数中的shape信息保持一致。 | |
| 25 | | dataType | 输入 | 输入的数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md),当前只支持half/float/uint16_t/int16_t数据类型的输入。 | | 25 | | dataType | 输入 | 输入的数据类型,参数类型为[AscendC::TensorDataType](../data_structures/TensorDataType.md),当前只支持half/float/uint16_t/int16_t数据类型的输入。 | |
| 26 | | config | 输入 | 数据格式转换的场景,参数取值与TransData接口的config参数保持一致。当前支持的转换场景有:NCDHW -> NDC1HWC0、NDC1HWC0 -> NCDHW、NCDHW -> FRACTAL_Z_3D、FRACTAL_Z_3D -> NCDHW。TransDataConfig类型,具体定义如下方代码所示。 | | 26 | | config | 输入 | 数据格式转换的场景,参数取值与TransData接口的config参数保持一致。当前支持的转换场景有:NCDHW -> NDC1HWC0、NDC1HWC0 -> NCDHW、NCDHW -> FRACTAL_Z_3D、FRACTAL_Z_3D -> NCDHW。TransDataConfig类型,具体定义如下方代码所示。 | |
| 27 | -| maxValue | 输出 | TransData接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。 <br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 27 | +| maxValue | 输出 | TransData接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。 <br>maxValue仅作为参考值,有可能大于UB剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 28 | | minValue | 输出 | TransData接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 28 | | minValue | 输出 | TransData接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 29 | 29 | ||
| 30 | ``` | 30 | ``` |
| @@ -26,7 +26,7 @@ void PadTilingFunc(const AscendC::TensorShape srcShape, const AscendC::TensorSha | |||
| 26 | | --- | --- | --- | | 26 | | --- | --- | --- | |
| 27 | | srcShape | 输入 | 输入Tensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),shape为二维。 | | 27 | | srcShape | 输入 | 输入Tensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),shape为二维。 | |
| 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 28 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 29 | -| maxValue | 输出 | Pad接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 29 | +| maxValue | 输出 | Pad接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 30 | | minValue | 输出 | Pad接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 30 | | minValue | 输出 | Pad接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 31 | 31 | ||
| 32 | **表2** **PadTilingFunc接口参数说明** | 32 | **表2** **PadTilingFunc接口参数说明** |
| @@ -98,7 +98,7 @@ void PadTilingFunc(const AscendC::TensorShape srcShape, const AscendC::TensorSha | |||
| 98 | } // namespace optiling | 98 | } // namespace optiling |
| 99 | ``` | 99 | ``` |
| 100 | 100 | ||
| 101 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的Pad Tiling信息传入Pad接口参与计算。完整的kernel侧样例请参考[调用示例](Pad.md#调用示例)。 | 101 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的Pad Tiling信息传入Pad接口参与计算。完整的kernel侧样例请参考[调用示例](Pad.md#调用示例)。 |
| 102 | 102 | ||
| 103 | ``` | 103 | ``` |
| 104 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) | 104 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) |
| @@ -54,7 +54,7 @@ | |||
| 54 | | srcShape | 输入 | 输入Tensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),具体srcShape传入格式为:<br><br>场景1:[B, N, S, H/N]<br><br>场景2:[B, N, S, H/N]<br><br>场景3:[B, N, S, H/N]<br><br>场景4:[B, N, S, H/N]<br><br>场景5:[B, N, S, H/N]<br><br>场景6:[B, N, S, H/N]<br><br>场景7:[H, W]<!-- npu="950" id1 --><br><br>场景13:[H, W]或者[N, H, W],仅支持Ascend 950PR/Ascend 950DT。<br><br>场景14:[N, H, W],仅支持Ascend 950PR/Ascend 950DT。<br><br>场景15:[N, H, W],仅支持Ascend 950PR/Ascend 950DT。<br><br>场景16:[H, W],仅支持Ascend 950PR/Ascend 950DT。<!-- end id1 --> | | 54 | | srcShape | 输入 | 输入Tensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),具体srcShape传入格式为:<br><br>场景1:[B, N, S, H/N]<br><br>场景2:[B, N, S, H/N]<br><br>场景3:[B, N, S, H/N]<br><br>场景4:[B, N, S, H/N]<br><br>场景5:[B, N, S, H/N]<br><br>场景6:[B, N, S, H/N]<br><br>场景7:[H, W]<!-- npu="950" id1 --><br><br>场景13:[H, W]或者[N, H, W],仅支持Ascend 950PR/Ascend 950DT。<br><br>场景14:[N, H, W],仅支持Ascend 950PR/Ascend 950DT。<br><br>场景15:[N, H, W],仅支持Ascend 950PR/Ascend 950DT。<br><br>场景16:[H, W],仅支持Ascend 950PR/Ascend 950DT。<!-- end id1 --> | |
| 55 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 55 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 56 | | transposeTypeIn | 输入 | 选择数据排布及reshape的类型,根据输入数字选择对应的场景,参数范围为[1,7]。<!-- npu="950" id2 -->针对Ascend 950PR/Ascend 950DT,该参数取值范围为[1, 7]和[13, 16]。<!-- end id2 --><br><br>场景1(NZ2ND,1、2轴互换):1<br><br>场景2(NZ2NZ,1、2轴互换):2<br><br>场景3(NZ2NZ,尾轴切分):3<br><br>场景4(NZ2ND,尾轴切分):4<br><br>场景5(NZ2ND,尾轴合并):5<br><br>场景6(NZ2NZ,尾轴合并):6<br><br>场景7(二维转置):7<!-- npu="950" id5 --><br><br>场景13 (二维转置或者三维转置中后两维转置):13,仅支持Ascend 950PR/Ascend 950DT。<br><br>场景14 (三维转置中第一维和第二维互换):14,仅支持Ascend 950PR/Ascend 950DT。<br><br>场景15 (三维转置中第一维和第三维互换):15,仅支持Ascend 950PR/Ascend 950DT。<br><br>场景16 (使用交织指令进行两维ND2NZ转置):16,仅支持Ascend 950PR/Ascend 950DT。<!-- end id5 --> | | 56 | | transposeTypeIn | 输入 | 选择数据排布及reshape的类型,根据输入数字选择对应的场景,参数范围为[1,7]。<!-- npu="950" id2 -->针对Ascend 950PR/Ascend 950DT,该参数取值范围为[1, 7]和[13, 16]。<!-- end id2 --><br><br>场景1(NZ2ND,1、2轴互换):1<br><br>场景2(NZ2NZ,1、2轴互换):2<br><br>场景3(NZ2NZ,尾轴切分):3<br><br>场景4(NZ2ND,尾轴切分):4<br><br>场景5(NZ2ND,尾轴合并):5<br><br>场景6(NZ2NZ,尾轴合并):6<br><br>场景7(二维转置):7<!-- npu="950" id5 --><br><br>场景13 (二维转置或者三维转置中后两维转置):13,仅支持Ascend 950PR/Ascend 950DT。<br><br>场景14 (三维转置中第一维和第二维互换):14,仅支持Ascend 950PR/Ascend 950DT。<br><br>场景15 (三维转置中第一维和第三维互换):15,仅支持Ascend 950PR/Ascend 950DT。<br><br>场景16 (使用交织指令进行两维ND2NZ转置):16,仅支持Ascend 950PR/Ascend 950DT。<!-- end id5 --> | |
| 57 | -| maxValue | 输出 | Transpose接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 57 | +| maxValue | 输出 | Transpose接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 58 | | minValue | 输出 | Transpose接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | | 58 | | minValue | 输出 | Transpose接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。 | |
| 59 | 59 | ||
| 60 | **表2** **GetTransposeTilingInfo接口参数列表** | 60 | **表2** **GetTransposeTilingInfo接口参数列表** |
| @@ -127,7 +127,7 @@ | |||
| 127 | } // namespace optiling | 127 | } // namespace optiling |
| 128 | ``` | 128 | ``` |
| 129 | 129 | ||
| 130 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的ConfusionTransposeTiling信息传入Transpose接口参与计算。完整的kernel侧样例请参考[Transpose](Transpose.md)。 | 130 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的ConfusionTransposeTiling信息传入Transpose接口参与计算。完整的kernel侧样例请参考[Transpose](Transpose.md)。 |
| 131 | 131 | ||
| 132 | ``` | 132 | ``` |
| 133 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR src_gm, GM_ADDR dst_gm, GM_ADDR workspace, GM_ADDR tiling) | 133 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR src_gm, GM_ADDR dst_gm, GM_ADDR workspace, GM_ADDR tiling) |
| @@ -82,7 +82,7 @@ | |||
| 82 | 82 | ||
| 83 | 【场景7:二维转置】 | 83 | 【场景7:二维转置】 |
| 84 | 84 | ||
| 85 | -支持在UB上对二维Tensor进行转置,其中srcShape中的H、W均是16的整倍。 | 85 | +支持在Unified Buffer(UB)上对二维Tensor进行转置,其中srcShape中的H、W均是16的整倍。 |
| 86 | 86 | ||
| 87 | **图7** 场景7数据排布变换 | 87 | **图7** 场景7数据排布变换 |
| 88 |  | 88 |  |
| @@ -27,7 +27,7 @@ void UnPadTilingFunc(const AscendC::TensorShape srcShape, const uint32_t stackBu | |||
| 27 | | ascendcPlatform | 输入 | 传入硬件平台的信息,PlatformAscendC定义请参见[构造及析构函数](../../../Utils-API/platform_info/PlatformAscendC/constructor_and_destructor.md)。 | | 27 | | ascendcPlatform | 输入 | 传入硬件平台的信息,PlatformAscendC定义请参见[构造及析构函数](../../../Utils-API/platform_info/PlatformAscendC/constructor_and_destructor.md)。 | |
| 28 | | srcShape | 输入 | 输入Tensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),shape为二维。 | | 28 | | srcShape | 输入 | 输入Tensor的shape信息,参数类型为[AscendC::TensorShape](../data_structures/TensorShape.md),shape为二维。 | |
| 29 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | | 29 | | typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 | |
| 30 | -| maxValue | 输出 | UnPad接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer剩余空间的大小,该场景下,开发者需要根据Unified Buffer剩余空间的大小来选取合适的临时空间大小。 | | 30 | +| maxValue | 输出 | UnPad接口能完成计算所需的最大临时空间大小,超出该值的空间不会被该接口使用。在最小临时空间-最大临时空间范围内,随着临时空间增大,kernel侧接口计算性能会有一定程度的优化提升。为了达到更好的性能,开发者可以根据实际的内存使用情况进行空间预留/申请。最大空间大小为0表示计算不需要临时空间。<br>maxValue仅作为参考值,有可能大于Unified Buffer(UB)剩余空间的大小,该场景下,开发者需要根据UB剩余空间的大小来选取合适的临时空间大小。 | |
| 31 | | minValue | 输出 | UnPad接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | | 31 | | minValue | 输出 | UnPad接口能完成计算所需最小临时空间大小。为保证功能正确,接口计算时预留/申请的临时空间不能小于该数值。最小空间大小为0表示计算不需要临时空间。 | |
| 32 | 32 | ||
| 33 | **表2** **UnPadTilingFunc接口参数说明** | 33 | **表2** **UnPadTilingFunc接口参数说明** |
| @@ -96,7 +96,7 @@ void UnPadTilingFunc(const AscendC::TensorShape srcShape, const uint32_t stackBu | |||
| 96 | } // namespace optiling | 96 | } // namespace optiling |
| 97 | ``` | 97 | ``` |
| 98 | 98 | ||
| 99 | -3. 对应的kernel侧通过在核函数中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的UnPad Tiling信息传入UnPad接口参与计算。完整的kernel侧样例请参考[调用示例](UnPad.md#调用示例)。 | 99 | +3. 对应的kernel侧通过在核函数(Kernel)中调用GET\_TILING\_DATA获取TilingData,继而将TilingData中的UnPad Tiling信息传入UnPad接口参与计算。完整的kernel侧样例请参考[调用示例](UnPad.md#调用示例)。 |
| 100 | 100 | ||
| 101 | ``` | 101 | ``` |
| 102 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) | 102 | extern "C" __global__ __aicore__ void func_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) |
| @@ -79,10 +79,10 @@ COPY_TILING_WITH_ARRAY(arr_type, arr_count, src_ptr, dst_ptr) | |||
| 79 | 79 | ||
| 80 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 80 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 81 | 81 | ||
| 82 | -- 该宏需在算子Kernel代码处使用,并且传入的dst\_ptr参数无需声明类型。 | 82 | +- 该宏需在算子核函数(Kernel)代码处使用,并且传入的dst\_ptr参数无需声明类型。 |
| 83 | - 该宏需要和[GET\_TILING\_DATA\_PTR\_WITH\_STRUCT](GET_TILING_DATA_PTR_WITH_STRUCT.md)配合使用,输入参数src\_ptr为GET\_TILING\_DATA\_PTR\_WITH\_STRUCT获取到的指针。 | 83 | - 该宏需要和[GET\_TILING\_DATA\_PTR\_WITH\_STRUCT](GET_TILING_DATA_PTR_WITH_STRUCT.md)配合使用,输入参数src\_ptr为GET\_TILING\_DATA\_PTR\_WITH\_STRUCT获取到的指针。 |
| 84 | - 该宏获取到的dst\_ptr指针指向的数组是局部变量,请确保在合理作用域范围内使用。 | 84 | - 该宏获取到的dst\_ptr指针指向的数组是局部变量,请确保在合理作用域范围内使用。 |
| 85 | -- 暂不支持Kernel直调工程。 | 85 | +- 暂不支持核函数(Kernel)直调工程。 |
| 86 | 86 | ||
| 87 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 87 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| 88 | 88 | ||
| @@ -72,10 +72,10 @@ COPY_TILING_WITH_STRUCT(tiling_struct, src_ptr, dst_ptr) | |||
| 72 | 72 | ||
| 73 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 73 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 74 | 74 | ||
| 75 | -- 该宏需在算子Kernel代码处使用,并且传入的dst\_ptr参数无需声明类型。 | 75 | +- 该宏需在算子核函数(Kernel)代码处使用,并且传入的dst\_ptr参数无需声明类型。 |
| 76 | - 该宏需要和[GET\_TILING\_DATA\_PTR\_WITH\_STRUCT](GET_TILING_DATA_PTR_WITH_STRUCT.md)配合使用,输入参数src\_ptr为GET\_TILING\_DATA\_PTR\_WITH\_STRUCT获取到的指针。 | 76 | - 该宏需要和[GET\_TILING\_DATA\_PTR\_WITH\_STRUCT](GET_TILING_DATA_PTR_WITH_STRUCT.md)配合使用,输入参数src\_ptr为GET\_TILING\_DATA\_PTR\_WITH\_STRUCT获取到的指针。 |
| 77 | - 该宏获取到的dst\_ptr指针指向的Tiling结构体是局部变量,请确保在合理作用域范围内使用。 | 77 | - 该宏获取到的dst\_ptr指针指向的Tiling结构体是局部变量,请确保在合理作用域范围内使用。 |
| 78 | -- 暂不支持Kernel直调工程。 | 78 | +- 暂不支持核函数(Kernel)直调工程。 |
| 79 | 79 | ||
| 80 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 80 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| 81 | 81 | ||
| @@ -80,7 +80,7 @@ GET_TILING_DATA_MEMBER(struct_name, mem_name, tiling_data, tiling_arg) | |||
| 80 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 80 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 81 | 81 | ||
| 82 | - 本函数需在算子kernel代码处使用,并且传入的tiling\_data参数不需要声明类型。 | 82 | - 本函数需在算子kernel代码处使用,并且传入的tiling\_data参数不需要声明类型。 |
| 83 | -- 暂不支持Kernel直调工程。 | 83 | +- 暂不支持核函数(Kernel)直调工程。 |
| 84 | 84 | ||
| 85 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 85 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| 86 | 86 | ||
| @@ -72,9 +72,9 @@ GET_TILING_DATA_PTR_WITH_STRUCT(tiling_struct, dst_ptr, tiling_ptr) | |||
| 72 | 72 | ||
| 73 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 73 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 74 | 74 | ||
| 75 | -- 该宏需在算子Kernel代码处使用,并且传入的dst\_ptr参数无需声明类型。 | 75 | +- 该宏需在算子核函数(Kernel)代码处使用,并且传入的dst\_ptr参数无需声明类型。 |
| 76 | - 动态Shape场景下,获取到的dst\_ptr是指向Global Memory变量的指针;静态Shape场景下,获取到的dst\_ptr是指向局部变量的指针,需确保在合理的作用域范围内使用。 | 76 | - 动态Shape场景下,获取到的dst\_ptr是指向Global Memory变量的指针;静态Shape场景下,获取到的dst\_ptr是指向局部变量的指针,需确保在合理的作用域范围内使用。 |
| 77 | -- 暂不支持Kernel直调工程。 | 77 | +- 暂不支持核函数(Kernel)直调工程。 |
| 78 | 78 | ||
| 79 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 79 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| 80 | 80 | ||
| @@ -72,8 +72,8 @@ GET_TILING_DATA_WITH_STRUCT(struct_name, tiling_data, tiling_arg) | |||
| 72 | 72 | ||
| 73 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 73 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 74 | 74 | ||
| 75 | -- 本函数需在算子Kernel代码处使用,并且传入的tiling\_data参数不需要声明类型。 | 75 | +- 本函数需在算子核函数(Kernel)代码处使用,并且传入的tiling\_data参数不需要声明类型。 |
| 76 | -- 暂不支持Kernel直调工程。 | 76 | +- 暂不支持核函数(Kernel)直调工程。 |
| 77 | 77 | ||
| 78 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 78 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| 79 | 79 | ||
| @@ -22,5 +22,4 @@ | |||
| 22 | 22 | ||
| 23 | - **[REGISTER\_NONE\_TILING](REGISTER_NONE_TILING.md)** | 23 | - **[REGISTER\_NONE\_TILING](REGISTER_NONE_TILING.md)** |
| 24 | 24 | ||
| 25 | -- **[设置Kernel类型](set_Kernel_type.md)** | 25 | +- **[设置核函数(Kernel)类型](set_Kernel_type.md)** |
| 26 | - | ||
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | ## 功能说明<a name="zh-cn_topic_0000001526206862_section212607105720"></a> | 28 | ## 功能说明<a name="zh-cn_topic_0000001526206862_section212607105720"></a> |
| 29 | 29 | ||
| 30 | -在Kernel侧使用标准C++语法自定义的TilingData结构体时,若用户不确定需要注册哪些结构体,可使用该接口告知框架侧需使用未注册的标准C++语法来定义TilingData,并配套[GET\_TILING\_DATA\_WITH\_STRUCT](GET_TILING_DATA_WITH_STRUCT.md),[GET\_TILING\_DATA\_MEMBER](GET_TILING_DATA_MEMBER.md),[GET\_TILING\_DATA\_PTR\_WITH\_STRUCT](GET_TILING_DATA_PTR_WITH_STRUCT.md)来获取对应的TilingData。 | 30 | +在核函数(Kernel)侧使用标准C++语法自定义的TilingData结构体时,若用户不确定需要注册哪些结构体,可使用该接口告知框架侧需使用未注册的标准C++语法来定义TilingData,并配套[GET\_TILING\_DATA\_WITH\_STRUCT](GET_TILING_DATA_WITH_STRUCT.md),[GET\_TILING\_DATA\_MEMBER](GET_TILING_DATA_MEMBER.md),[GET\_TILING\_DATA\_PTR\_WITH\_STRUCT](GET_TILING_DATA_PTR_WITH_STRUCT.md)来获取对应的TilingData。 |
| 31 | 31 | ||
| 32 | ## 函数原型<a name="zh-cn_topic_0000001526206862_section1630753514297"></a> | 32 | ## 函数原型<a name="zh-cn_topic_0000001526206862_section1630753514297"></a> |
| 33 | 33 | ||
| @@ -41,7 +41,7 @@ REGISTER_NONE_TILING | |||
| 41 | 41 | ||
| 42 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 42 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 43 | 43 | ||
| 44 | -- 暂不支持Kernel直调工程。 | 44 | +- 暂不支持核函数(Kernel)直调工程。 |
| 45 | - 使用[GET\_TILING\_DATA](GET_TILING_DATA.md)需提供默认注册的TilingData结构体,但本接口不注册TilingData结构体,故不支持与[5.11.1-GET\_TILING\_DATA](GET_TILING_DATA.md)组合使用。 | 45 | - 使用[GET\_TILING\_DATA](GET_TILING_DATA.md)需提供默认注册的TilingData结构体,但本接口不注册TilingData结构体,故不支持与[5.11.1-GET\_TILING\_DATA](GET_TILING_DATA.md)组合使用。 |
| 46 | - 不支持和[REGISTER\_TILING\_DEFAULT](REGISTER_TILING_DEFAULT.md)或[REGISTER\_TILING\_FOR\_TILINGKEY](REGISTER_TILING_FOR_TILINGKEY.md)混用,即不支持注册TilingData结构体的场景与非注册场景混合使用。 | 46 | - 不支持和[REGISTER\_TILING\_DEFAULT](REGISTER_TILING_DEFAULT.md)或[REGISTER\_TILING\_FOR\_TILINGKEY](REGISTER_TILING_FOR_TILINGKEY.md)混用,即不支持注册TilingData结构体的场景与非注册场景混合使用。 |
| 47 | 47 | ||
| @@ -61,7 +61,7 @@ REGISTER_TILING_DEFAULT(TILING_STRUCT) | |||
| 61 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 61 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 62 | 62 | ||
| 63 | - 若TilingData结构体在命名空间内,注册时需要携带对应的命名空间作用域符。 | 63 | - 若TilingData结构体在命名空间内,注册时需要携带对应的命名空间作用域符。 |
| 64 | -- 暂不支持Kernel直调工程。 | 64 | +- 暂不支持核函数(Kernel)直调工程。 |
| 65 | 65 | ||
| 66 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 66 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| 67 | 67 | ||
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | ## 功能说明<a name="zh-cn_topic_0000001610027821_section212607105720"></a> | 28 | ## 功能说明<a name="zh-cn_topic_0000001610027821_section212607105720"></a> |
| 29 | 29 | ||
| 30 | -在核函数中判断本次执行时的tiling\_key是否等于host侧运行时设置的某个key,从而标识tiling\_key==key的一条kernel分支。 | 30 | +在核函数(Kernel)中判断本次执行时的tiling\_key是否等于host侧运行时设置的某个key,从而标识tiling\_key==key的一条kernel分支。 |
| 31 | 31 | ||
| 32 | ## 函数原型<a name="zh-cn_topic_0000001610027821_section1630753514297"></a> | 32 | ## 函数原型<a name="zh-cn_topic_0000001610027821_section1630753514297"></a> |
| 33 | 33 | ||
| @@ -50,7 +50,7 @@ TILING_KEY_IS(key) | |||
| 50 | </td> | 50 | </td> |
| 51 | <td class="cellrowborder" valign="top" width="15.340000000000002%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0000001610027821_p18857658124919"><a name="zh-cn_topic_0000001610027821_p18857658124919"></a><a name="zh-cn_topic_0000001610027821_p18857658124919"></a>输入</p> | 51 | <td class="cellrowborder" valign="top" width="15.340000000000002%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0000001610027821_p18857658124919"><a name="zh-cn_topic_0000001610027821_p18857658124919"></a><a name="zh-cn_topic_0000001610027821_p18857658124919"></a>输入</p> |
| 52 | </td> | 52 | </td> |
| 53 | -<td class="cellrowborder" valign="top" width="67.44%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0000001610027821_p53562135013"><a name="zh-cn_topic_0000001610027821_p53562135013"></a><a name="zh-cn_topic_0000001610027821_p53562135013"></a>key表示某个核函数的分支,必须是非负整数。</p> | 53 | +<td class="cellrowborder" valign="top" width="67.44%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0000001610027821_p53562135013"><a name="zh-cn_topic_0000001610027821_p53562135013"></a><a name="zh-cn_topic_0000001610027821_p53562135013"></a>key表示某个核函数(Kernel)的分支,必须是非负整数。</p> |
| 54 | </td> | 54 | </td> |
| 55 | </tr> | 55 | </tr> |
| 56 | </tbody> | 56 | </tbody> |
| @@ -59,7 +59,7 @@ TILING_KEY_IS(key) | |||
| 59 | ## 约束说明<a name="zh-cn_topic_0000001610027821_section65498832"></a> | 59 | ## 约束说明<a name="zh-cn_topic_0000001610027821_section65498832"></a> |
| 60 | 60 | ||
| 61 | - TILING\_KEY\_IS运用于if和else if分支,不支持else分支,即用TILING\_KEY\_IS函数来表征N个分支,必须用N个TILING\_KEY\_IS\(key\)来分别表示。 | 61 | - TILING\_KEY\_IS运用于if和else if分支,不支持else分支,即用TILING\_KEY\_IS函数来表征N个分支,必须用N个TILING\_KEY\_IS\(key\)来分别表示。 |
| 62 | -- 暂不支持Kernel直调工程。 | 62 | +- 暂不支持核函数(Kernel)直调工程。 |
| 63 | 63 | ||
| 64 | ## 调用示例<a name="zh-cn_topic_0000001610027821_section97001499599"></a> | 64 | ## 调用示例<a name="zh-cn_topic_0000001610027821_section97001499599"></a> |
| 65 | 65 | ||
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | ## 功能说明<a name="zh-cn_topic_0000001610027821_section212607105720"></a> | 28 | ## 功能说明<a name="zh-cn_topic_0000001610027821_section212607105720"></a> |
| 29 | 29 | ||
| 30 | -TILING\_KEY\_LIST函数用于在核函数中判断当前执行的TilingKey是否与Host侧配置的指定TilingKey匹配,从而标识满足TilingKey == key1或TilingKey == key2条件的分支逻辑。 | 30 | +TILING\_KEY\_LIST函数用于在核函数(Kernel)中判断当前执行的TilingKey是否与Host侧配置的指定TilingKey匹配,从而标识满足TilingKey == key1或TilingKey == key2条件的分支逻辑。 |
| 31 | 31 | ||
| 32 | ## 函数原型<a name="zh-cn_topic_0000001610027821_section1630753514297"></a> | 32 | ## 函数原型<a name="zh-cn_topic_0000001610027821_section1630753514297"></a> |
| 33 | 33 | ||
| @@ -50,7 +50,7 @@ TILING_KEY_LIST(key1,key2) | |||
| 50 | </td> | 50 | </td> |
| 51 | <td class="cellrowborder" valign="top" width="15.340000000000002%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0000001610027821_p18857658124919"><a name="zh-cn_topic_0000001610027821_p18857658124919"></a><a name="zh-cn_topic_0000001610027821_p18857658124919"></a>输入</p> | 51 | <td class="cellrowborder" valign="top" width="15.340000000000002%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0000001610027821_p18857658124919"><a name="zh-cn_topic_0000001610027821_p18857658124919"></a><a name="zh-cn_topic_0000001610027821_p18857658124919"></a>输入</p> |
| 52 | </td> | 52 | </td> |
| 53 | -<td class="cellrowborder" valign="top" width="67.44%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0000001610027821_p53562135013"><a name="zh-cn_topic_0000001610027821_p53562135013"></a><a name="zh-cn_topic_0000001610027821_p53562135013"></a>key表示某个核函数的分支,必须是非负整数。</p> | 53 | +<td class="cellrowborder" valign="top" width="67.44%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0000001610027821_p53562135013"><a name="zh-cn_topic_0000001610027821_p53562135013"></a><a name="zh-cn_topic_0000001610027821_p53562135013"></a>key表示某个核函数(Kernel)的分支,必须是非负整数。</p> |
| 54 | </td> | 54 | </td> |
| 55 | </tr> | 55 | </tr> |
| 56 | </tbody> | 56 | </tbody> |
| @@ -60,8 +60,8 @@ TILING_KEY_LIST(key1,key2) | |||
| 60 | 60 | ||
| 61 | - TILING\_KEY\_LIST运用于if和else if分支,不支持else分支,即用TILING\_KEY\_LIST函数来表征N个分支,必须用N个TILING\_KEY\_LIST\(key1,key2\)来分别表示。 | 61 | - TILING\_KEY\_LIST运用于if和else if分支,不支持else分支,即用TILING\_KEY\_LIST函数来表征N个分支,必须用N个TILING\_KEY\_LIST\(key1,key2\)来分别表示。 |
| 62 | - 支持传入两个TilingKey,每个TilingKey具备唯一性。 | 62 | - 支持传入两个TilingKey,每个TilingKey具备唯一性。 |
| 63 | -- 使用该接口时,必须设置默认的Kernel类型,也可以为某个TilingKey单独配置Kernel类型,该配置会覆盖默认Kernel类型。Kernel类型仅支持配置为KERNEL\_TYPE\_MIX\_AIC\_1\_1、KERNEL\_TYPE\_MIX\_AIC\_1\_2。 | 63 | +- 使用该接口时,必须设置默认的核函数(Kernel)类型,也可以为某个TilingKey单独配置核函数(Kernel)类型,该配置会覆盖默认核函数(Kernel)类型。核函数(Kernel)类型仅支持配置为KERNEL\_TYPE\_MIX\_AIC\_1\_1、KERNEL\_TYPE\_MIX\_AIC\_1\_2。 |
| 64 | -- 暂不支持Kernel直调工程。 | 64 | +- 暂不支持核函数(Kernel)直调工程。 |
| 65 | 65 | ||
| 66 | ## 调用示例<a name="zh-cn_topic_0000001610027821_section97001499599"></a> | 66 | ## 调用示例<a name="zh-cn_topic_0000001610027821_section97001499599"></a> |
| 67 | 67 | ||
| @@ -1,4 +1,4 @@ | |||
| 1 | -# 设置Kernel类型<a name="ZH-CN_TOPIC_0000001777592824"></a> | 1 | +# 设置核函数(Kernel)类型<a name="ZH-CN_TOPIC_0000001777592824"></a> |
| 2 | 2 | ||
| 3 | ## 产品支持情况<a name="section1550532418810"></a> | 3 | ## 产品支持情况<a name="section1550532418810"></a> |
| 4 | 4 | ||
| @@ -33,7 +33,7 @@ | |||
| 33 | 33 | ||
| 34 | - 设置全局默认的kernel type,对所有的tiling key生效。 | 34 | - 设置全局默认的kernel type,对所有的tiling key生效。 |
| 35 | 35 | ||
| 36 | - 当前支持在自定义算子工程和Kernel直调工程中使用。 | 36 | + 当前支持在自定义算子工程和核函数(Kernel)直调工程中使用。 |
| 37 | 37 | ||
| 38 | ``` | 38 | ``` |
| 39 | KERNEL_TASK_TYPE_DEFAULT(value) | 39 | KERNEL_TASK_TYPE_DEFAULT(value) |
| @@ -64,7 +64,7 @@ | |||
| 64 | </td> | 64 | </td> |
| 65 | <td class="cellrowborder" valign="top" width="15.340000000000002%" headers="mcps1.2.4.1.2 "><p id="p16921418832"><a name="p16921418832"></a><a name="p16921418832"></a>输入</p> | 65 | <td class="cellrowborder" valign="top" width="15.340000000000002%" headers="mcps1.2.4.1.2 "><p id="p16921418832"><a name="p16921418832"></a><a name="p16921418832"></a>输入</p> |
| 66 | </td> | 66 | </td> |
| 67 | -<td class="cellrowborder" valign="top" width="67.44%" headers="mcps1.2.4.1.3 "><p id="p12921131811315"><a name="p12921131811315"></a><a name="p12921131811315"></a>tiling key的key值,此参数是正数,表示某个核函数的分支。</p> | 67 | +<td class="cellrowborder" valign="top" width="67.44%" headers="mcps1.2.4.1.3 "><p id="p12921131811315"><a name="p12921131811315"></a><a name="p12921131811315"></a>tiling key的key值,此参数是正数,表示某个核函数(Kernel)的分支。</p> |
| 68 | </td> | 68 | </td> |
| 69 | </tr> | 69 | </tr> |
| 70 | <tr id="row1792151817316"><td class="cellrowborder" valign="top" width="17.22%" headers="mcps1.2.4.1.1 "><p id="p119219181935"><a name="p119219181935"></a><a name="p119219181935"></a>value</p> | 70 | <tr id="row1792151817316"><td class="cellrowborder" valign="top" width="17.22%" headers="mcps1.2.4.1.1 "><p id="p119219181935"><a name="p119219181935"></a><a name="p119219181935"></a>value</p> |
| @@ -111,23 +111,23 @@ | |||
| 111 | </tr> | 111 | </tr> |
| 112 | <tr id="row196349321693"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p1863411329915"><a name="p1863411329915"></a><a name="p1863411329915"></a>KERNEL_TYPE_MIX_AIV_1_0</p> | 112 | <tr id="row196349321693"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p1863411329915"><a name="p1863411329915"></a><a name="p1863411329915"></a>KERNEL_TYPE_MIX_AIV_1_0</p> |
| 113 | </td> | 113 | </td> |
| 114 | -<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p101533312255"><a name="p101533312255"></a><a name="p101533312255"></a>AIC、AIV混合场景下,使用了<a href="../sync_control/inter_core_sync/inter_core_sync.md">多核控制相关指令</a>时,设置核函数的类型为MIX AIV:AIC 1:0(带有硬同步),算子执行时仅会启动AI Core上的Vector核,比如用户在host侧设置numBlocks为10,则会启动10个Vector核。</p> | 114 | +<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p101533312255"><a name="p101533312255"></a><a name="p101533312255"></a>AIC、AIV混合场景下,使用了<a href="../sync_control/inter_core_sync/inter_core_sync.md">多核控制相关指令</a>时,设置核函数(Kernel)的类型为MIX AIV:AIC 1:0(带有硬同步),算子执行时仅会启动AI Core上的Vector核,比如用户在host侧设置numBlocks为10,则会启动10个Vector核。</p> |
| 115 | <p id="p15178718334"><a name="p15178718334"></a><a name="p15178718334"></a>硬同步的概念解释如下:当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用<a href="../sync_control/inter_core_sync/SyncAll.md">SyncAll()</a>函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。目前多核同步分为硬同步和软同步,硬同步是利用硬件自带的全核同步指令由硬件保证多核同步。</p> | 115 | <p id="p15178718334"><a name="p15178718334"></a><a name="p15178718334"></a>硬同步的概念解释如下:当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用<a href="../sync_control/inter_core_sync/SyncAll.md">SyncAll()</a>函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。目前多核同步分为硬同步和软同步,硬同步是利用硬件自带的全核同步指令由硬件保证多核同步。</p> |
| 116 | </td> | 116 | </td> |
| 117 | </tr> | 117 | </tr> |
| 118 | <tr id="row12635183213919"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p7635932295"><a name="p7635932295"></a><a name="p7635932295"></a>KERNEL_TYPE_MIX_AIC_1_0</p> | 118 | <tr id="row12635183213919"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p7635932295"><a name="p7635932295"></a><a name="p7635932295"></a>KERNEL_TYPE_MIX_AIC_1_0</p> |
| 119 | </td> | 119 | </td> |
| 120 | -<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p121619511252"><a name="p121619511252"></a><a name="p121619511252"></a>AIC、AIV混合场景下,使用了<a href="../sync_control/inter_core_sync/inter_core_sync.md">多核控制相关指令</a>时,设置核函数的类型为MIX AIC:AIV 1:0(带有硬同步),算子执行时仅会启动AI Core上的Cube核,比如用户在host侧设置numBlocks为10,则会启动10个Cube核。</p> | 120 | +<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p121619511252"><a name="p121619511252"></a><a name="p121619511252"></a>AIC、AIV混合场景下,使用了<a href="../sync_control/inter_core_sync/inter_core_sync.md">多核控制相关指令</a>时,设置核函数(Kernel)的类型为MIX AIC:AIV 1:0(带有硬同步),算子执行时仅会启动AI Core上的Cube核,比如用户在host侧设置numBlocks为10,则会启动10个Cube核。</p> |
| 121 | </td> | 121 | </td> |
| 122 | </tr> | 122 | </tr> |
| 123 | <tr id="row76354321096"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p146354324910"><a name="p146354324910"></a><a name="p146354324910"></a>KERNEL_TYPE_MIX_AIC_1_1</p> | 123 | <tr id="row76354321096"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p146354324910"><a name="p146354324910"></a><a name="p146354324910"></a>KERNEL_TYPE_MIX_AIC_1_1</p> |
| 124 | </td> | 124 | </td> |
| 125 | -<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p1763563216919"><a name="p1763563216919"></a><a name="p1763563216919"></a>AIC、AIV混合场景下,设置核函数的类型为MIX AIC:AIV 1:1,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置numBlocks为10,则会启动10个Cube核和10个Vector核。</p> | 125 | +<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p1763563216919"><a name="p1763563216919"></a><a name="p1763563216919"></a>AIC、AIV混合场景下,设置核函数(Kernel)的类型为MIX AIC:AIV 1:1,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置numBlocks为10,则会启动10个Cube核和10个Vector核。</p> |
| 126 | </td> | 126 | </td> |
| 127 | </tr> | 127 | </tr> |
| 128 | <tr id="row15635332191"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p13635113220918"><a name="p13635113220918"></a><a name="p13635113220918"></a>KERNEL_TYPE_MIX_AIC_1_2</p> | 128 | <tr id="row15635332191"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p13635113220918"><a name="p13635113220918"></a><a name="p13635113220918"></a>KERNEL_TYPE_MIX_AIC_1_2</p> |
| 129 | </td> | 129 | </td> |
| 130 | -<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p16635332397"><a name="p16635332397"></a><a name="p16635332397"></a>AIC、AIV混合场景下,设置核函数的类型为MIX AIC:AIV 1:2,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置numBlocks为10,则会启动10个Cube核和20个Vector核。</p> | 130 | +<td class="cellrowborder" valign="top" width="64.2%" headers="mcps1.2.3.1.2 "><p id="p16635332397"><a name="p16635332397"></a><a name="p16635332397"></a>AIC、AIV混合场景下,设置核函数(Kernel)的类型为MIX AIC:AIV 1:2,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置numBlocks为10,则会启动10个Cube核和20个Vector核。</p> |
| 131 | </td> | 131 | </td> |
| 132 | </tr> | 132 | </tr> |
| 133 | <tr id="row66355321498"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p863516323915"><a name="p863516323915"></a><a name="p863516323915"></a><span>KERNEL_TYPE_AICORE </span></p> | 133 | <tr id="row66355321498"><td class="cellrowborder" valign="top" width="35.8%" headers="mcps1.2.3.1.1 "><p id="p863516323915"><a name="p863516323915"></a><a name="p863516323915"></a><span>KERNEL_TYPE_AICORE </span></p> |
| @@ -175,7 +175,7 @@ | |||
| 175 | - 没有设置全局默认kernel type的情况下,如果开发者只为其中的某几个tiling key设置kernel type,即部分tiling key没有设置kernel type,会导致算子kernel编译报错。 | 175 | - 没有设置全局默认kernel type的情况下,如果开发者只为其中的某几个tiling key设置kernel type,即部分tiling key没有设置kernel type,会导致算子kernel编译报错。 |
| 176 | - 当设置具体的kernel task type时,用户的算子实现需要与kernel type相匹配。比如用户设置kernel type为KERNEL\_TYPE\_MIX\_AIC\_1\_2,则算子内部实现应与核配比AIC:AIV为1:2相对应;若用户设置kernel type为KERNEL\_TYPE\_AIC\_ONLY,则算子内部实现应该为纯cube逻辑,不应该存在vector部分的逻辑。其他的kernel type类似。 | 176 | - 当设置具体的kernel task type时,用户的算子实现需要与kernel type相匹配。比如用户设置kernel type为KERNEL\_TYPE\_MIX\_AIC\_1\_2,则算子内部实现应与核配比AIC:AIV为1:2相对应;若用户设置kernel type为KERNEL\_TYPE\_AIC\_ONLY,则算子内部实现应该为纯cube逻辑,不应该存在vector部分的逻辑。其他的kernel type类似。 |
| 177 | - 当纯cube或者纯vec算子强制设定kernel type为MIX类型时,workspace的大小不能设置为0,需要设置一个大于0的值(比如16、32等)。 | 177 | - 当纯cube或者纯vec算子强制设定kernel type为MIX类型时,workspace的大小不能设置为0,需要设置一个大于0的值(比如16、32等)。 |
| 178 | -- 使用[Tiling模板编程](../../../Utils-API/Tiling_template_programming/Tiling_template_programming.md)时,需要通过ASCENDC\_TPL\_KERNEL\_TYPE\_SEL设置Kernel类型即可,无需再通过该接口进行设置,本接口不生效。 | 178 | +- 使用[Tiling模板编程](../../../Utils-API/Tiling_template_programming/Tiling_template_programming.md)时,需要通过ASCENDC\_TPL\_KERNEL\_TYPE\_SEL设置核函数(Kernel)类型即可,无需再通过该接口进行设置,本接口不生效。 |
| 179 | 179 | ||
| 180 | ## 调用示例<a name="zh-cn_topic_0000001610027821_section97001499599"></a> | 180 | ## 调用示例<a name="zh-cn_topic_0000001610027821_section97001499599"></a> |
| 181 | 181 | ||
| @@ -60,7 +60,7 @@ AscendC::SetFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); | |||
| 60 | AscendC::WaitFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); | 60 | AscendC::WaitFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); |
| 61 | AscendC::SyncAll(); | 61 | AscendC::SyncAll(); |
| 62 | 62 | ||
| 63 | -// 开启原子累加,将UB数据原子累加到GM | 63 | +// 开启原子累加,将Unified Buffer(UB)数据原子累加到GM |
| 64 | AscendC::SetAtomicAdd<T>(); | 64 | AscendC::SetAtomicAdd<T>(); |
| 65 | AscendC::DataCopy(dstGlobal, srcLocal, SIZE); | 65 | AscendC::DataCopy(dstGlobal, srcLocal, SIZE); |
| 66 | 66 | ||
| @@ -117,7 +117,7 @@ AscendC::SetFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); | |||
| 117 | AscendC::WaitFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); | 117 | AscendC::WaitFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); |
| 118 | AscendC::SyncAll(); | 118 | AscendC::SyncAll(); |
| 119 | 119 | ||
| 120 | -// 开启原子累加,将UB数据原子累加到GM | 120 | +// 开启原子累加,将Unified Buffer(UB)数据原子累加到GM |
| 121 | AscendC::SetAtomicAdd<T>(); | 121 | AscendC::SetAtomicAdd<T>(); |
| 122 | AscendC::DataCopy(dstGlobal, srcLocal, SIZE); | 122 | AscendC::DataCopy(dstGlobal, srcLocal, SIZE); |
| 123 | 123 | ||
| @@ -8,7 +8,7 @@ | |||
| 8 | 8 | ||
| 9 | ```text | 9 | ```text |
| 10 | 1. 向GM搬运数据data0; // 数据搬运,覆盖GM原有随机值,期望GM数据为data0。 | 10 | 1. 向GM搬运数据data0; // 数据搬运,覆盖GM原有随机值,期望GM数据为data0。 |
| 11 | -2. SetAtomicAdd(); // 开启原子累加,后续从UB/L0C Buffer/L1 Buffer到GM的搬运均执行原子累加。 | 11 | +2. SetAtomicAdd(); // 开启原子累加,后续从Unified Buffer(UB)/L0C Buffer/L1 Buffer到GM的搬运均执行原子累加。 |
| 12 | 3. 向GM搬运data1; // 带随路原子操作的数据搬运,期望GM数据为data0 + data1。 | 12 | 3. 向GM搬运data1; // 带随路原子操作的数据搬运,期望GM数据为data0 + data1。 |
| 13 | 4. 向GM搬运data2; // 带随路原子操作的数据搬运,期望GM数据为data0 + data1 + data2。 | 13 | 4. 向GM搬运data2; // 带随路原子操作的数据搬运,期望GM数据为data0 + data1 + data2。 |
| 14 | 5. 向GM搬运data3; // 带随路原子操作的数据搬运,期望GM数据为data0 + data1 + data2 + data3。 | 14 | 5. 向GM搬运data3; // 带随路原子操作的数据搬运,期望GM数据为data0 + data1 + data2 + data3。 |
| @@ -101,12 +101,12 @@ TPosition枚举值的具体定义如下: | |||
| 101 | </tr> | 101 | </tr> |
| 102 | <tr id="row1682573410509"><td class="cellrowborder" valign="top" width="17.53%" headers="mcps1.2.3.1.1 "><p id="p1082533425015"><a name="p1082533425015"></a><a name="p1082533425015"></a>LCM</p> | 102 | <tr id="row1682573410509"><td class="cellrowborder" valign="top" width="17.53%" headers="mcps1.2.3.1.1 "><p id="p1082533425015"><a name="p1082533425015"></a><a name="p1082533425015"></a>LCM</p> |
| 103 | </td> | 103 | </td> |
| 104 | -<td class="cellrowborder" valign="top" width="82.47%" headers="mcps1.2.3.1.2 "><p id="p58251234135017"><a name="p58251234135017"></a><a name="p58251234135017"></a>Local Cache Memory,代表临时共享的Unified Buffer空间,VECCALC的别名,与VECCALC实现同样的功能。</p> | 104 | +<td class="cellrowborder" valign="top" width="82.47%" headers="mcps1.2.3.1.2 "><p id="p58251234135017"><a name="p58251234135017"></a><a name="p58251234135017"></a>Local Cache Memory,代表临时共享的Unified Buffer(UB)空间,VECCALC的别名,与VECCALC实现同样的功能。</p> |
| 105 | </td> | 105 | </td> |
| 106 | </tr> | 106 | </tr> |
| 107 | <tr id="row18899424276"><td class="cellrowborder" valign="top" width="17.53%" headers="mcps1.2.3.1.1 "><p id="p9889942112716"><a name="p9889942112716"></a><a name="p9889942112716"></a>SPM</p> | 107 | <tr id="row18899424276"><td class="cellrowborder" valign="top" width="17.53%" headers="mcps1.2.3.1.1 "><p id="p9889942112716"><a name="p9889942112716"></a><a name="p9889942112716"></a>SPM</p> |
| 108 | </td> | 108 | </td> |
| 109 | -<td class="cellrowborder" valign="top" width="82.47%" headers="mcps1.2.3.1.2 "><p id="p18891442102718"><a name="p18891442102718"></a><a name="p18891442102718"></a>当Unified Buffer内存有溢出风险时,用于Unified Buffer的数据暂存。</p> | 109 | +<td class="cellrowborder" valign="top" width="82.47%" headers="mcps1.2.3.1.2 "><p id="p18891442102718"><a name="p18891442102718"></a><a name="p18891442102718"></a>当UB内存有溢出风险时,用于UB的数据暂存。</p> |
| 110 | </td> | 110 | </td> |
| 111 | </tr> | 111 | </tr> |
| 112 | <tr id="row121471975507"><td class="cellrowborder" valign="top" width="17.53%" headers="mcps1.2.3.1.1 "><p id="p181474775015"><a name="p181474775015"></a><a name="p181474775015"></a>SHM</p> | 112 | <tr id="row121471975507"><td class="cellrowborder" valign="top" width="17.53%" headers="mcps1.2.3.1.1 "><p id="p181474775015"><a name="p181474775015"></a><a name="p181474775015"></a>SHM</p> |
| @@ -39,4 +39,4 @@ struct UnaryRepeatParams { | |||
| 39 | }; | 39 | }; |
| 40 | ``` | 40 | ``` |
| 41 | 41 | ||
| 42 | -其中,blockNumber,repeatStrideMode,strideSizeMode为保留参数,用户无需关心,使用默认值即可。halfBlock表示CastDequant指令的结果写入对应UB的上半(halfBlock = true)还是下半(halfBlock = false)部分。用户需要自行定义DataBlock Stride参数,包含dstBlkStride,srcBlkStride,以及Repeat Stride参数,包含dstRepStride,srcRepStride。 | 42 | +其中,blockNumber,repeatStrideMode,strideSizeMode为保留参数,用户无需关心,使用默认值即可。halfBlock表示CastDequant指令的结果写入对应Unified Buffer(UB)的上半(halfBlock = true)还是下半(halfBlock = false)部分。用户需要自行定义DataBlock Stride参数,包含dstBlkStride,srcBlkStride,以及Repeat Stride参数,包含dstRepStride,srcRepStride。 |
| @@ -35,7 +35,7 @@ | |||
| 35 | | [LoadDataWithStride](cube_compute_ISASI/cube_compute_load/LoadDataWithStride.md) | LoadDataWithStride本质上是用于将NC1HWC0格式的Feature Map完成Image to Column展开,然后再从展开后的二维矩阵中选取指定数据块搬入对应内存位置,支持配置输出矩阵K轴方向偏移量。 | | 35 | | [LoadDataWithStride](cube_compute_ISASI/cube_compute_load/LoadDataWithStride.md) | LoadDataWithStride本质上是用于将NC1HWC0格式的Feature Map完成Image to Column展开,然后再从展开后的二维矩阵中选取指定数据块搬入对应内存位置,支持配置输出矩阵K轴方向偏移量。 | |
| 36 | | [LoadDataWithTranspose](cube_compute_ISASI/cube_compute_load/LoadDataWithTranspose.md) | LoadDataWithTranspose负责完成普通矩阵计算所需的2D格式的数据的搬运,搬运过程中会伴随转置操作,参考特性分形转置。 | | 36 | | [LoadDataWithTranspose](cube_compute_ISASI/cube_compute_load/LoadDataWithTranspose.md) | LoadDataWithTranspose负责完成普通矩阵计算所需的2D格式的数据的搬运,搬运过程中会伴随转置操作,参考特性分形转置。 | |
| 37 | | [LoadDataWithSparse](cube_compute_ISASI/cube_compute_load/LoadDataWithSparse.md) | 用于从L1 Buffer中搬运以512字节为单位存放的稠密权重矩阵到L0B Buffer里,同时搬运以128字节为单位的索引矩阵到内置的专用buffer空间(用于后续MmadWithSparse接口进行读取)。 | | 37 | | [LoadDataWithSparse](cube_compute_ISASI/cube_compute_load/LoadDataWithSparse.md) | 用于从L1 Buffer中搬运以512字节为单位存放的稠密权重矩阵到L0B Buffer里,同时搬运以128字节为单位的索引矩阵到内置的专用buffer空间(用于后续MmadWithSparse接口进行读取)。 | |
| 38 | -| [BroadCastVecToMM(ISASI)](cube_compute_ISASI/cube_compute_load/BroadCastVecToMM_ISASI.md) | 将矢量数据广播到矩阵中,每个数据块中的每16个元素会被连续复制16次,支持Unified Buffer到L0C Buffer的数据传输通路。 | | 38 | +| [BroadCastVecToMM(ISASI)](cube_compute_ISASI/cube_compute_load/BroadCastVecToMM_ISASI.md) | 将矢量数据广播到矩阵中,每个数据块中的每16个元素会被连续复制16次,支持UB到L0C Buffer的数据传输通路。 | |
| 39 | | [DataCopy(L1ToBiasTable-Buffer数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_L1ToBiasTable.md) | DataCopy数据搬运支持将矩阵计算用到的Bias参数从L1 Buffer移动到BiasTable Buffer。 | | 39 | | [DataCopy(L1ToBiasTable-Buffer数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_L1ToBiasTable.md) | DataCopy数据搬运支持将矩阵计算用到的Bias参数从L1 Buffer移动到BiasTable Buffer。 | |
| 40 | | [DataCopy(L1ToFixpipe-Buffer数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_L1ToFixpipe.md) | DataCopy数据搬运支持将随路量化参数从L1 Buffer移动到Fixpipe Buffer。 | | 40 | | [DataCopy(L1ToFixpipe-Buffer数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_L1ToFixpipe.md) | DataCopy数据搬运支持将随路量化参数从L1 Buffer移动到Fixpipe Buffer。 | |
| 41 | 41 | ||
| @@ -50,10 +50,10 @@ | |||
| 50 | | [DataCopyPad(GMToL1非对齐数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopyPad_GMToL1.md) | 该接口提供从Global Memory到L1 Buffer的数据非对齐搬运功能,可以根据开发者的需要自行填充数据。 | | 50 | | [DataCopyPad(GMToL1非对齐数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopyPad_GMToL1.md) | 该接口提供从Global Memory到L1 Buffer的数据非对齐搬运功能,可以根据开发者的需要自行填充数据。 | |
| 51 | | [LoadData(GMToL1-2D矩阵搬运)](cube_compute_ISASI/cube_compute_load/LoadData_GMToL1_2D.md) | 负责完成普通矩阵计算所需的2D格式数据的搬运,以大小为512字节的数据分形为单位从Global Memory搬运至L1 Buffer(TPosition为A1/B1)。 | | 51 | | [LoadData(GMToL1-2D矩阵搬运)](cube_compute_ISASI/cube_compute_load/LoadData_GMToL1_2D.md) | 负责完成普通矩阵计算所需的2D格式数据的搬运,以大小为512字节的数据分形为单位从Global Memory搬运至L1 Buffer(TPosition为A1/B1)。 | |
| 52 | | [LoadData(GMToL1-2D矩阵搬运V2)](cube_compute_ISASI/cube_compute_load/LoadData_GMToL1_2DV2.md) | 负责完成普通矩阵计算所需的2D格式数据的搬运,以大小为512字节的数据分形为单位从Global Memory搬运至L1 Buffer(TPosition为A1/B1)。 | | 52 | | [LoadData(GMToL1-2D矩阵搬运V2)](cube_compute_ISASI/cube_compute_load/LoadData_GMToL1_2DV2.md) | 负责完成普通矩阵计算所需的2D格式数据的搬运,以大小为512字节的数据分形为单位从Global Memory搬运至L1 Buffer(TPosition为A1/B1)。 | |
| 53 | -| [DataCopy(UBToL1连续数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md) | 该接口实现将矩阵从Unified Buffer(UB,TPosition为VECIN/VECCALC/VECOUT)搬运至L1 Buffer,搬运方式为连续搬运,数据搬运时格式和内容保持不变。 | | 53 | +| [DataCopy(UBToL1连续数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md) | 该接口实现将矩阵从UB(TPosition为VECIN/VECCALC/VECOUT)搬运至L1 Buffer,搬运方式为连续搬运,数据搬运时格式和内容保持不变。 | |
| 54 | -| [DataCopy(UBToL1高维切分数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_highdim_split.md) | 该接口实现将矩阵从Unified Buffer(UB,TPosition为VECIN/VECCALC/VECOUT)搬运至L1 Buffer,支持非连续搬运和连续搬运,数据搬运时格式和内容保持不变。 | | 54 | +| [DataCopy(UBToL1高维切分数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_highdim_split.md) | 该接口实现将矩阵从UB(TPosition为VECIN/VECCALC/VECOUT)搬运至L1 Buffer,支持非连续搬运和连续搬运,数据搬运时格式和内容保持不变。 | |
| 55 | -| [DataCopyPad(UBToL1非对齐数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopyPad_UBToL1.md) | 该接口提供从Unified Buffer到L1 Buffer的数据非对齐搬运功能。 | | 55 | +| [DataCopyPad(UBToL1非对齐数据搬运)](cube_compute_ISASI/cube_compute_load/DataCopyPad_UBToL1.md) | 该接口提供从UB到L1 Buffer的数据非对齐搬运功能。 | |
| 56 | -| [DataCopy(UBToL1随路转换-ND2NZ搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_ND2NZ.md) | 支持在数据搬运时进行ND到NZ格式的转换。数据从Unified Buffer(UB,TPosition为VECIN/VECCALC/VECOUT)搬运至L1 Buffer,搬运过程中完成ND->NZ格式转换。 | | 56 | +| [DataCopy(UBToL1随路转换-ND2NZ搬运)](cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_ND2NZ.md) | 支持在数据搬运时进行ND到NZ格式的转换。数据从UB(TPosition为VECIN/VECCALC/VECOUT)搬运至L1 Buffer,搬运过程中完成ND->NZ格式转换。 | |
| 57 | 57 | ||
| 58 | ### 辅助配置接口 | 58 | ### 辅助配置接口 |
| 59 | 59 | ||
| @@ -95,7 +95,7 @@ | |||
| 95 | | [Fixpipe(L0C到GM数据搬运)](cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) | 矩阵计算的结果存放在L0C Buffer,Fixpipe接口用于将结果搬运至Global Memory(GM)中,并且在搬运过程中支持随路格式转换等操作。 | | 95 | | [Fixpipe(L0C到GM数据搬运)](cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) | 矩阵计算的结果存放在L0C Buffer,Fixpipe接口用于将结果搬运至Global Memory(GM)中,并且在搬运过程中支持随路格式转换等操作。 | |
| 96 | | [DataCopy(L0C到L1数据搬运)](cube_compute_ISASI/cube_compute_store/DataCopy_L0CToL1.md) | 矩阵计算的结果存放在L0C Buffer,DataCopy接口用于将结果搬运至L1 Buffer中,并且在搬运过程中支持随路格式转换等操作。 | | 96 | | [DataCopy(L0C到L1数据搬运)](cube_compute_ISASI/cube_compute_store/DataCopy_L0CToL1.md) | 矩阵计算的结果存放在L0C Buffer,DataCopy接口用于将结果搬运至L1 Buffer中,并且在搬运过程中支持随路格式转换等操作。 | |
| 97 | | [Fixpipe(L0C到L1数据搬运)](cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToL1.md) | 矩阵计算的结果存放在L0C Buffer,Fixpipe接口用于将结果搬运至L1 Buffer中,并且在搬运过程中支持随路格式转换等操作。 | | 97 | | [Fixpipe(L0C到L1数据搬运)](cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToL1.md) | 矩阵计算的结果存放在L0C Buffer,Fixpipe接口用于将结果搬运至L1 Buffer中,并且在搬运过程中支持随路格式转换等操作。 | |
| 98 | -| [Fixpipe(L0C Buffer到UB数据搬运)](cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToUB.md) | 矩阵计算的结果存放在L0C Buffer,Fixpipe接口用于将结果搬运至Unified Buffer(UB)中,并且在搬运过程中支持随路格式转换等操作。 | | 98 | +| [Fixpipe(L0C Buffer到UB数据搬运)](cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToUB.md) | 矩阵计算的结果存放在L0C Buffer,Fixpipe接口用于将结果搬运至UB中,并且在搬运过程中支持随路格式转换等操作。 | |
| 99 | 99 | ||
| 100 | ### L1到GM数据搬运 | 100 | ### L1到GM数据搬运 |
| 101 | 101 | ||
| @@ -144,28 +144,28 @@ | |||
| 144 | | 接口名 | 功能描述 | | 144 | | 接口名 | 功能描述 | |
| 145 | | --- | --- | | 145 | | --- | --- | |
| 146 | | [Copy(L0C Buffer到Global Memory数据搬运)](cube_compute_TensorAPI/cube_compute_store/Copy_L0CToGM.md) | Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L0C Buffer中的矩阵计算结果搬运到Global Memory。L0C Buffer中的数据通常为`Mmad`的输出,数据格式为`NZ`。搬运到Global Memory时,接口会根据目的张量布局自动选择`NZ`到`ND`、`NZ`到`DN`或`NZ`到`NZ`的随路格式转换。 | | 146 | | [Copy(L0C Buffer到Global Memory数据搬运)](cube_compute_TensorAPI/cube_compute_store/Copy_L0CToGM.md) | Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L0C Buffer中的矩阵计算结果搬运到Global Memory。L0C Buffer中的数据通常为`Mmad`的输出,数据格式为`NZ`。搬运到Global Memory时,接口会根据目的张量布局自动选择`NZ`到`ND`、`NZ`到`DN`或`NZ`到`NZ`的随路格式转换。 | |
| 147 | -| [Copy(L0C Buffer到Unified Buffer数据搬运)](cube_compute_TensorAPI/cube_compute_store/Copy_L0CToUB.md) | Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L0C Buffer中的矩阵计算结果搬运到Unified Buffer。L0C Buffer中的数据通常为`Mmad`的输出,数据格式为`NZ`。搬运到Unified Buffer时,接口会根据目的张量格式自动选择`NZ`到`ND`、`NZ`到`DN`或`NZ`到`NZ`的随路格式转换。 | | 147 | +| [Copy(L0C Buffer到Unified Buffer数据搬运)](cube_compute_TensorAPI/cube_compute_store/Copy_L0CToUB.md) | Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L0C Buffer中的矩阵计算结果搬运到UB。L0C Buffer中的数据通常为`Mmad`的输出,数据格式为`NZ`。搬运到UB时,接口会根据目的张量格式自动选择`NZ`到`ND`、`NZ`到`DN`或`NZ`到`NZ`的随路格式转换。 | |
| 148 | 148 | ||
| 149 | ## Memory矢量计算 | 149 | ## Memory矢量计算 |
| 150 | 150 | ||
| 151 | ### 数据搬运 | 151 | ### 数据搬运 |
| 152 | | 接口名 | 功能描述 | | 152 | | 接口名 | 功能描述 | |
| 153 | | --- | --- | | 153 | | --- | --- | |
| 154 | -| [DataCopy(GM与UB连续数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_continuous.md) | 支持Global Memory与Unified Buffer之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | | 154 | +| [DataCopy(GM与UB连续数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_continuous.md) | 支持Global Memory与UB之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | |
| 155 | -| [DataCopy(GM与UB高维切分数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_highdim_split.md) | 支持Global Memory与Unified Buffer之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | | 155 | +| [DataCopy(GM与UB高维切分数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_highdim_split.md) | 支持Global Memory与UB之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | |
| 156 | | [DataCopy(GM与UB切片数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_slice.md) | 该接口为软仿接口,从易用性角度出发进行设计,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。 | | 156 | | [DataCopy(GM与UB切片数据搬运)](memory_vector_compute/data_move/DataCopy_GMAndUB_slice.md) | 该接口为软仿接口,从易用性角度出发进行设计,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。 | |
| 157 | -| [DataCopy(GMToUB随路转换ND2NZ搬运)](memory_vector_compute/data_move/DataCopy_GMToUB_ND2NZ.md) | 该接口为软仿接口,从易用性角度出发进行设计,支持在从Global Memory到Unified Buffer的数据搬运过程中进行ND到NZ格式的转换。 | | 157 | +| [DataCopy(GMToUB随路转换ND2NZ搬运)](memory_vector_compute/data_move/DataCopy_GMToUB_ND2NZ.md) | 该接口为软仿接口,从易用性角度出发进行设计,支持在从Global Memory到UB的数据搬运过程中进行ND到NZ格式的转换。 | |
| 158 | -| [DataCopy(UBToGM随路转换NZ2ND搬运)](memory_vector_compute/data_move/DataCopy_UBToGM_NZ2ND.md) | 该接口为软仿接口,从易用性角度出发进行设计,支持在从Unified Buffer到Global Memory的数据搬运过程中进行NZ到ND格式的转换。 | | 158 | +| [DataCopy(UBToGM随路转换NZ2ND搬运)](memory_vector_compute/data_move/DataCopy_UBToGM_NZ2ND.md) | 该接口为软仿接口,从易用性角度出发进行设计,支持在从UB到Global Memory的数据搬运过程中进行NZ到ND格式的转换。 | |
| 159 | | [DataCopy(GMToUB多维数据搬运NDDMA)](memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md) | 多维数据搬运接口,相比于基础数据搬运接口,可更加自由配置搬入的维度信息以及对应的Stride。 | | 159 | | [DataCopy(GMToUB多维数据搬运NDDMA)](memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md) | 多维数据搬运接口,相比于基础数据搬运接口,可更加自由配置搬入的维度信息以及对应的Stride。 | |
| 160 | -| [DataCopyPad(GMToUB非对齐数据搬运)](memory_vector_compute/data_move/DataCopyPad_GMToUB.md) | 该接口提供将数据从Global Memory非对齐搬运至Unified Buffer的功能,可以根据开发者的需要自行填充数据。 | | 160 | +| [DataCopyPad(GMToUB非对齐数据搬运)](memory_vector_compute/data_move/DataCopyPad_GMToUB.md) | 该接口提供将数据从Global Memory非对齐搬运至UB的功能,可以根据开发者的需要自行填充数据。 | |
| 161 | -| [DataCopyPad(UBToGM非对齐数据搬运)](memory_vector_compute/data_move/DataCopyPad_UBToGM.md) | 该接口提供将数据从Unified Buffer非对齐搬运至Global Memory的功能。 | | 161 | +| [DataCopyPad(UBToGM非对齐数据搬运)](memory_vector_compute/data_move/DataCopyPad_UBToGM.md) | 该接口提供将数据从UB非对齐搬运至Global Memory的功能。 | |
| 162 | -| [SetPadValue(ISASI)](memory_vector_compute/data_move_aux_config/SetPadValue_ISASI.md) | 从Global Memory将数据非对齐搬运至Unified Buffer时,可根据开发者的需要自行填充数据。SetPadValue用于设置DataCopyPad需要填充的数值。 | | 162 | +| [SetPadValue(ISASI)](memory_vector_compute/data_move_aux_config/SetPadValue_ISASI.md) | 从Global Memory将数据非对齐搬运至UB时,可根据开发者的需要自行填充数据。SetPadValue用于设置DataCopyPad需要填充的数值。 | |
| 163 | | [SetLoopModePara](memory_vector_compute/data_move_aux_config/SetLoopModePara.md) | DataCopy、DataCopyPad过程中通过该接口使能loop mode并且设置loop mode的参数,在数据搬运结束后通过ResetLoopModePara重置loop mode的参数。 | | 163 | | [SetLoopModePara](memory_vector_compute/data_move_aux_config/SetLoopModePara.md) | DataCopy、DataCopyPad过程中通过该接口使能loop mode并且设置loop mode的参数,在数据搬运结束后通过ResetLoopModePara重置loop mode的参数。 | |
| 164 | | [ResetLoopModePara](memory_vector_compute/data_move_aux_config/ResetLoopModePara.md) | 重置loop mode的参数。与SetLoopModePara搭配使用,在使能loop mode并且设置loop mode的参数的数据搬运场景下,数据搬运结束后需要调用该函数来重置loop mode参数。 | | 164 | | [ResetLoopModePara](memory_vector_compute/data_move_aux_config/ResetLoopModePara.md) | 重置loop mode的参数。与SetLoopModePara搭配使用,在使能loop mode并且设置loop mode的参数的数据搬运场景下,数据搬运结束后需要调用该函数来重置loop mode参数。 | |
| 165 | -| [DataCopy(UBToUB连续数据搬运)](memory_vector_compute/data_move/DataCopy_UBToUB_continuous.md) | 支持Unified Buffer与Unified Buffer之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | | 165 | +| [DataCopy(UBToUB连续数据搬运)](memory_vector_compute/data_move/DataCopy_UBToUB_continuous.md) | 支持UB与UB之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | |
| 166 | -| [DataCopy(UBToUB高维切分数据搬运)](memory_vector_compute/data_move/DataCopy_UBToUB_highdim_split.md) | 支持Unified Buffer与Unified Buffer之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | | 166 | +| [DataCopy(UBToUB高维切分数据搬运)](memory_vector_compute/data_move/DataCopy_UBToUB_highdim_split.md) | 支持UB与UB之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | |
| 167 | -| [Copy(UBToUB连续数据搬运)](memory_vector_compute/data_move/Copy_UBToUB_continuous.md) | 支持Unified Buffer和Unified Buffer之间的连续数据搬运,数据搬运时格式和内容保持不变。 | | 167 | +| [Copy(UBToUB连续数据搬运)](memory_vector_compute/data_move/Copy_UBToUB_continuous.md) | 支持UB和UB之间的连续数据搬运,数据搬运时格式和内容保持不变。 | |
| 168 | -| [Copy(UBToUB掩码式高维数据搬运)](memory_vector_compute/data_move/Copy_UBToUB_mask_highdim_split.md) | 支持Unified Buffer和Unified Buffer之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 | | 168 | +| [Copy(UBToUB掩码式高维数据搬运)](memory_vector_compute/data_move/Copy_UBToUB_mask_highdim_split.md) | 支持UB和UB之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 | |
| 169 | 169 | ||
| 170 | ### 基础算术 | 170 | ### 基础算术 |
| 171 | | 接口名 | 功能描述 | | 171 | | 接口名 | 功能描述 | |
| @@ -492,7 +492,7 @@ | |||
| 492 | | --- | --- | | 492 | | --- | --- | |
| 493 | | [TPipe](resource_management/TPipe/TPipe.md) | TPipe是用来管理全局内存等资源的框架。通过TPipe类提供的接口可以完成内存等资源的分配管理操作。 | | 493 | | [TPipe](resource_management/TPipe/TPipe.md) | TPipe是用来管理全局内存等资源的框架。通过TPipe类提供的接口可以完成内存等资源的分配管理操作。 | |
| 494 | | [GetTPipePtr](resource_management/GetTPipePtr.md) | 创建TPipe对象时,对象初始化会设置全局唯一的TPipe指针。本接口用于获取该指针,获取该指针后,可进行TPipe相关的操作。 | | 494 | | [GetTPipePtr](resource_management/GetTPipePtr.md) | 创建TPipe对象时,对象初始化会设置全局唯一的TPipe指针。本接口用于获取该指针,获取该指针后,可进行TPipe相关的操作。 | |
| 495 | -| [TBufPool](resource_management/TBufPool/TBufPool.md) | TPipe可以管理全局内存资源,而TBufPool可以手动管理或复用Unified Buffer/L1 Buffer物理内存,主要用于多个stage计算中Unified Buffer/L1 Buffer物理内存不足的场景。 | | 495 | +| [TBufPool](resource_management/TBufPool/TBufPool.md) | TPipe可以管理全局内存资源,而TBufPool可以手动管理或复用UB/L1 Buffer物理内存,主要用于多个stage计算中UB/L1 Buffer物理内存不足的场景。 | |
| 496 | | [TQue](resource_management/TQue/TQue.md) | 提供入队出队等接口,通过队列(Queue)完成任务间同步。 | | 496 | | [TQue](resource_management/TQue/TQue.md) | 提供入队出队等接口,通过队列(Queue)完成任务间同步。 | |
| 497 | | [TQueBind](resource_management/TQueBind/TQueBind.md) | TQueBind绑定源逻辑位置和目的逻辑位置,根据源位置和目的位置,来确定内存分配的位置 、插入对应的同步事件,帮助开发者解决内存分配和管理、同步等问题。 | | 497 | | [TQueBind](resource_management/TQueBind/TQueBind.md) | TQueBind绑定源逻辑位置和目的逻辑位置,根据源位置和目的位置,来确定内存分配的位置 、插入对应的同步事件,帮助开发者解决内存分配和管理、同步等问题。 | |
| 498 | | [TBuf](resource_management/TBuf/TBuf.md) | 使用Ascend C编程的过程中,可能会用到一些临时变量。这些临时变量占用的内存可以使用TBuf数据结构来管理。 | | 498 | | [TBuf](resource_management/TBuf/TBuf.md) | 使用Ascend C编程的过程中,可能会用到一些临时变量。这些临时变量占用的内存可以使用TBuf数据结构来管理。 | |
| @@ -514,8 +514,8 @@ | |||
| 514 | | [InitDetermineComputeWorkspace](sync_control/inter_core_sync/InitDetermineComputeWorkspace.md) | InitDetermineComputeWorkspace是基于核间顺序执行的确定性计算的初始化配置接口,能够初始化GM共享内存的值,完成初始化后才可以调用WaitPreBlock和NotifyNextBlock。以上三个接口共同完成基于核间顺序执行的确定性计算,确定性计算的具体含义请参考确定性计算。 | | 514 | | [InitDetermineComputeWorkspace](sync_control/inter_core_sync/InitDetermineComputeWorkspace.md) | InitDetermineComputeWorkspace是基于核间顺序执行的确定性计算的初始化配置接口,能够初始化GM共享内存的值,完成初始化后才可以调用WaitPreBlock和NotifyNextBlock。以上三个接口共同完成基于核间顺序执行的确定性计算,确定性计算的具体含义请参考确定性计算。 | |
| 515 | | [NotifyNextBlock](sync_control/inter_core_sync/NotifyNextBlock.md) | WaitPreBlock和NotifyNextBlock是核间同步控制接口。NotifyNextBlock通过写全局内存来通知其他核当前核已执行完成,其他核可以继续往下执行;WaitPreBlock通过读取全局内存,判断当前核是否可以继续往下执行。 | | 515 | | [NotifyNextBlock](sync_control/inter_core_sync/NotifyNextBlock.md) | WaitPreBlock和NotifyNextBlock是核间同步控制接口。NotifyNextBlock通过写全局内存来通知其他核当前核已执行完成,其他核可以继续往下执行;WaitPreBlock通过读取全局内存,判断当前核是否可以继续往下执行。 | |
| 516 | | [WaitPreBlock](sync_control/inter_core_sync/WaitPreBlock.md) | WaitPreBlock和NotifyNextBlock是核间同步控制接口。NotifyNextBlock通过写全局内存来通知其他核当前核已执行完成,其他核可以继续往下执行;WaitPreBlock通过读取全局内存,判断当前核是否可以继续往下执行。 | | 516 | | [WaitPreBlock](sync_control/inter_core_sync/WaitPreBlock.md) | WaitPreBlock和NotifyNextBlock是核间同步控制接口。NotifyNextBlock通过写全局内存来通知其他核当前核已执行完成,其他核可以继续往下执行;WaitPreBlock通过读取全局内存,判断当前核是否可以继续往下执行。 | |
| 517 | -| [SetNextTaskStart](sync_control/inter_task_sync/SetNextTaskStart.md) | 在SuperKernel的子Kernel中调用,调用后的指令可以和后续其他的子Kernel实现并行,提升整体性能。SuperKernel按序调用子Kernel,为保证子Kernel之间数据互不干扰,会在子Kernel间插入算子间同步进行保序,子KernelN-1调用该接口后,之后的指令会和后续子KernelN实现并行。 | | 517 | +| [SetNextTaskStart](sync_control/inter_task_sync/SetNextTaskStart.md) | 在SuperKernel的子核函数(Kernel)中调用,调用后的指令可以和后续其他的子核函数(Kernel)实现并行,提升整体性能。SuperKernel按序调用子核函数(Kernel),为保证子核函数(Kernel)之间数据互不干扰,会在子核函数(Kernel)间插入算子间同步进行保序,子KernelN-1调用该接口后,之后的指令会和后续子KernelN实现并行。 | |
| 518 | -| [WaitPreTaskEnd](sync_control/inter_task_sync/WaitPreTaskEnd.md) | 在SuperKernel的子Kernel中调用,调用前的指令可以和前序其他的子Kernel实现并行,提升整体性能。SuperKernel按序调用子Kernel,为保证子Kernel之间数据互不干扰,会在子Kernel间插入算子间同步进行保序,子KernelN+1调用该接口之前的指令会和前序子KernelN实现并行。 | | 518 | +| [WaitPreTaskEnd](sync_control/inter_task_sync/WaitPreTaskEnd.md) | 在SuperKernel的子核函数(Kernel)中调用,调用前的指令可以和前序其他的子核函数(Kernel)实现并行,提升整体性能。SuperKernel按序调用子核函数(Kernel),为保证子核函数(Kernel)之间数据互不干扰,会在子核函数(Kernel)间插入算子间同步进行保序,子KernelN+1调用该接口之前的指令会和前序子KernelN实现并行。 | |
| 519 | 519 | ||
| 520 | ## 缓存控制 | 520 | ## 缓存控制 |
| 521 | | 接口名 | 功能描述 | | 521 | | 接口名 | 功能描述 | |
| @@ -546,15 +546,15 @@ | |||
| 546 | | --- | --- | | 546 | | --- | --- | |
| 547 | | [DumpTensor](debug_interface/onboard_print/DumpTensor.md) | 该接口可以打印Tensor的内容,同时支持打印自定义的标签(仅支持uint32_t数据类型的信息),比如打印当前行号等。 | | 547 | | [DumpTensor](debug_interface/onboard_print/DumpTensor.md) | 该接口可以打印Tensor的内容,同时支持打印自定义的标签(仅支持uint32_t数据类型的信息),比如打印当前行号等。 | |
| 548 | | [DumpAccChkPoint](debug_interface/onboard_print/DumpAccChkPoint.md) | 该接口Dump指定Tensor的内容。同时支持打印自定义的标签(仅支持uint32_t数据类型的信息),比如打印当前行号等。区别于DumpTensor,使用该接口可以支持指定偏移位置的Tensor打印。 | | 548 | | [DumpAccChkPoint](debug_interface/onboard_print/DumpAccChkPoint.md) | 该接口Dump指定Tensor的内容。同时支持打印自定义的标签(仅支持uint32_t数据类型的信息),比如打印当前行号等。区别于DumpTensor,使用该接口可以支持指定偏移位置的Tensor打印。 | |
| 549 | -| [PrintTimeStamp](debug_interface/onboard_print/PrintTimeStamp.md) | 提供时间戳打点功能,用于在算子Kernel代码中标记关键执行点。 | | 549 | +| [PrintTimeStamp](debug_interface/onboard_print/PrintTimeStamp.md) | 提供时间戳打点功能,用于在算子核函数(Kernel)代码中标记关键执行点。 | |
| 550 | | [ascendc_assert](debug_interface/exception_detection/ascendc_assert.md) | ascendc_assert提供了一种在CPU/NPU域实现断言功能的接口。当断言条件不满足时,系统会输出断言信息并格式化打印在屏幕上。 | | 550 | | [ascendc_assert](debug_interface/exception_detection/ascendc_assert.md) | ascendc_assert提供了一种在CPU/NPU域实现断言功能的接口。当断言条件不满足时,系统会输出断言信息并格式化打印在屏幕上。 | |
| 551 | | [assert](debug_interface/exception_detection/assert.md) | 该接口实现CPU/NPU域assert断言功能。算子执行中,如果assert内部条件判断不为真,则输出assert条件并将输入的信息格式化打印在屏幕上。 | | 551 | | [assert](debug_interface/exception_detection/assert.md) | 该接口实现CPU/NPU域assert断言功能。算子执行中,如果assert内部条件判断不为真,则输出assert条件并将输入的信息格式化打印在屏幕上。 | |
| 552 | -| [Trap](debug_interface/exception_detection/Trap.md) | 在Kernel侧调用,NPU模式下会中断AI Core的运行,CPU模式下等同于assert。可用于Kernel侧异常场景的调试。 | | 552 | +| [Trap](debug_interface/exception_detection/Trap.md) | 在核函数(Kernel)侧调用,NPU模式下会中断AI Core的运行,CPU模式下等同于assert。可用于核函数(Kernel)侧异常场景的调试。 | |
| 553 | | [CheckLocalMemoryIA(ISASI)](debug_interface/exception_detection/CheckLocalMemoryIA_ISASI.md) | check设定范围内的UB读写行为,如果有设定范围的读写行为则会出现EXCEPTION报错,无设定范围的读写行为则不会报错。 | | 553 | | [CheckLocalMemoryIA(ISASI)](debug_interface/exception_detection/CheckLocalMemoryIA_ISASI.md) | check设定范围内的UB读写行为,如果有设定范围的读写行为则会出现EXCEPTION报错,无设定范围的读写行为则不会报错。 | |
| 554 | -| [GmAlloc](debug_interface/cpu_twin_debug/GmAlloc.md) | 进行核函数的CPU侧运行验证时,用于创建共享内存:在/tmp目录下创建一个共享文件,并返回该文件的映射指针。 | | 554 | +| [GmAlloc](debug_interface/cpu_twin_debug/GmAlloc.md) | 进行核函数(Kernel)的CPU侧运行验证时,用于创建共享内存:在/tmp目录下创建一个共享文件,并返回该文件的映射指针。 | |
| 555 | -| [ICPU_RUN_KF](debug_interface/cpu_twin_debug/ICPU_RUN_KF.md) | 进行核函数的CPU侧运行验证时,CPU调测总入口,完成CPU侧的算子程序调用。 | | 555 | +| [ICPU_RUN_KF](debug_interface/cpu_twin_debug/ICPU_RUN_KF.md) | 进行核函数(Kernel)的CPU侧运行验证时,CPU调测总入口,完成CPU侧的算子程序调用。 | |
| 556 | -| [ICPU_SET_TILING_KEY](debug_interface/cpu_twin_debug/ICPU_SET_TILING_KEY.md) | 用于指定本次CPU调测使用的tilingKey。调测执行时,将只执行算子核函数中该tilingKey对应的分支。 | | 556 | +| [ICPU_SET_TILING_KEY](debug_interface/cpu_twin_debug/ICPU_SET_TILING_KEY.md) | 用于指定本次CPU调测使用的tilingKey。调测执行时,将只执行算子核函数(Kernel)中该tilingKey对应的分支。 | |
| 557 | -| [GmFree](debug_interface/cpu_twin_debug/GmFree.md) | 进行核函数的CPU侧运行验证时,用于释放通过GmAlloc申请的共享内存。 | | 557 | +| [GmFree](debug_interface/cpu_twin_debug/GmFree.md) | 进行核函数(Kernel)的CPU侧运行验证时,用于释放通过GmAlloc申请的共享内存。 | |
| 558 | | [SetKernelMode](debug_interface/cpu_twin_debug/SetKernelMode.md) | 针对分离模式,CPU调测时,设置内核模式为单AIV模式,单AIC模式或者MIX模式,以分别支持单AIV矢量算子,单AIC矩阵算子,MIX混合算子的CPU调试。不调用该接口的情况下,默认为MIX模式。为保证算子代码在多个硬件平台兼容,耦合模式下也可以调用,该场景下接口不会生效,不影响正常调试。 | | 558 | | [SetKernelMode](debug_interface/cpu_twin_debug/SetKernelMode.md) | 针对分离模式,CPU调测时,设置内核模式为单AIV模式,单AIC模式或者MIX模式,以分别支持单AIV矢量算子,单AIC矩阵算子,MIX混合算子的CPU调试。不调用该接口的情况下,默认为MIX模式。为保证算子代码在多个硬件平台兼容,耦合模式下也可以调用,该场景下接口不会生效,不影响正常调试。 | |
| 559 | | [MetricsProfStart](debug_interface/performance_stats/MetricsProfStart.md) | 用于设置性能数据采集信号启动,和MetricsProfStop配合使用。使用msOpProf工具进行算子上板调优时,可在kernel侧代码段前后分别调用MetricsProfStart和MetricsProfStop来指定需要调优的代码段范围。 | | 559 | | [MetricsProfStart](debug_interface/performance_stats/MetricsProfStart.md) | 用于设置性能数据采集信号启动,和MetricsProfStop配合使用。使用msOpProf工具进行算子上板调优时,可在kernel侧代码段前后分别调用MetricsProfStart和MetricsProfStop来指定需要调优的代码段范围。 | |
| 560 | | [MetricsProfStop](debug_interface/performance_stats/MetricsProfStop.md) | 设置性能数据采集信号停止,和MetricsProfStart配合使用。使用msOpProf工具进行算子上板调优时,可在kernel侧代码段前后分别调用MetricsProfStart和MetricsProfStop来指定需要调优的代码段范围。 | | 560 | | [MetricsProfStop](debug_interface/performance_stats/MetricsProfStop.md) | 设置性能数据采集信号停止,和MetricsProfStart配合使用。使用msOpProf工具进行算子上板调优时,可在kernel侧代码段前后分别调用MetricsProfStart和MetricsProfStop来指定需要调优的代码段范围。 | |
| @@ -613,12 +613,12 @@ | |||
| 613 | | [GET_TILING_DATA_PTR_WITH_STRUCT](Kernel-Tiling/GET_TILING_DATA_PTR_WITH_STRUCT.md) | 在使用该宏时,开发者可以通过指定结构体名称来获取相应的Tiling信息,并将其填入对应的Tiling结构体中。完成填充后,该宏将返回一个指向该Tiling结构体的指针,并使用\_\_tiling\_data\_ptr\_\_修饰符对该指针进行修饰。这种修饰方式能够确保在动静态Shape场景下代码的统一性和兼容性。 | | 613 | | [GET_TILING_DATA_PTR_WITH_STRUCT](Kernel-Tiling/GET_TILING_DATA_PTR_WITH_STRUCT.md) | 在使用该宏时,开发者可以通过指定结构体名称来获取相应的Tiling信息,并将其填入对应的Tiling结构体中。完成填充后,该宏将返回一个指向该Tiling结构体的指针,并使用\_\_tiling\_data\_ptr\_\_修饰符对该指针进行修饰。这种修饰方式能够确保在动静态Shape场景下代码的统一性和兼容性。 | |
| 614 | | [COPY_TILING_WITH_STRUCT](Kernel-Tiling/COPY_TILING_WITH_STRUCT.md) | 拷贝Tiling结构体,并返回指向拷贝后的Tiling结构体的指针。该宏适用于嵌套结构体场景,可拷贝结构体的子结构体成员变量。该宏将指定结构体拷贝至栈上,适用于频繁访问Tiling数据的场景,能够加快数据访问速度。 | | 614 | | [COPY_TILING_WITH_STRUCT](Kernel-Tiling/COPY_TILING_WITH_STRUCT.md) | 拷贝Tiling结构体,并返回指向拷贝后的Tiling结构体的指针。该宏适用于嵌套结构体场景,可拷贝结构体的子结构体成员变量。该宏将指定结构体拷贝至栈上,适用于频繁访问Tiling数据的场景,能够加快数据访问速度。 | |
| 615 | | [COPY_TILING_WITH_ARRAY](Kernel-Tiling/COPY_TILING_WITH_ARRAY.md) | 拷贝指定大小的数组内容到目标数组中,并返回指向拷贝后数组的指针。适用于拷贝一个结构体的数组成员变量的场景。该宏将指定数组拷贝至栈上,适用于频繁访问Tiling数据的场景,能够加快数据访问速度。 | | 615 | | [COPY_TILING_WITH_ARRAY](Kernel-Tiling/COPY_TILING_WITH_ARRAY.md) | 拷贝指定大小的数组内容到目标数组中,并返回指向拷贝后数组的指针。适用于拷贝一个结构体的数组成员变量的场景。该宏将指定数组拷贝至栈上,适用于频繁访问Tiling数据的场景,能够加快数据访问速度。 | |
| 616 | -| [TILING_KEY_IS](Kernel-Tiling/TILING_KEY_IS.md) | 在核函数中判断本次执行时的tiling_key是否等于host侧运行时设置的某个key,从而标识tiling_key==key的一条kernel分支。 | | 616 | +| [TILING_KEY_IS](Kernel-Tiling/TILING_KEY_IS.md) | 在核函数(Kernel)中判断本次执行时的tiling_key是否等于host侧运行时设置的某个key,从而标识tiling_key==key的一条kernel分支。 | |
| 617 | -| [TILING_KEY_LIST](Kernel-Tiling/TILING_KEY_LIST.md) | TILING_KEY_LIST函数用于在核函数中判断当前执行的TilingKey是否与Host侧配置的指定TilingKey匹配,从而标识满足TilingKey == key1或TilingKey == key2条件的分支逻辑。 | | 617 | +| [TILING_KEY_LIST](Kernel-Tiling/TILING_KEY_LIST.md) | TILING_KEY_LIST函数用于在核函数(Kernel)中判断当前执行的TilingKey是否与Host侧配置的指定TilingKey匹配,从而标识满足TilingKey == key1或TilingKey == key2条件的分支逻辑。 | |
| 618 | | [REGISTER_TILING_DEFAULT](Kernel-Tiling/REGISTER_TILING_DEFAULT.md) | 用于在kernel侧注册用户使用标准C++语法自定义的默认TilingData结构体。 | | 618 | | [REGISTER_TILING_DEFAULT](Kernel-Tiling/REGISTER_TILING_DEFAULT.md) | 用于在kernel侧注册用户使用标准C++语法自定义的默认TilingData结构体。 | |
| 619 | | [REGISTER_TILING_FOR_TILINGKEY](Kernel-Tiling/REGISTER_TILING_FOR_TILINGKEY.md) | 用于在kernel侧注册与TilingKey相匹配的TilingData自定义结构体;该接口需提供一个逻辑表达式,逻辑表达式以字符串“TILING_KEY_VAR”代指实际TilingKey,表达TilingKey所满足的范围。 | | 619 | | [REGISTER_TILING_FOR_TILINGKEY](Kernel-Tiling/REGISTER_TILING_FOR_TILINGKEY.md) | 用于在kernel侧注册与TilingKey相匹配的TilingData自定义结构体;该接口需提供一个逻辑表达式,逻辑表达式以字符串“TILING_KEY_VAR”代指实际TilingKey,表达TilingKey所满足的范围。 | |
| 620 | -| [REGISTER_NONE_TILING](Kernel-Tiling/REGISTER_NONE_TILING.md) | 在Kernel侧使用标准C++语法自定义的TilingData结构体时,若用户不确定需要注册哪些结构体,可使用该接口告知框架侧需使用未注册的标准C++语法来定义TilingData,并配套GET\_TILING\_DATA\_WITH\_STRUCT,GET\_TILING\_DATA\_MEMBER, | | 620 | +| [REGISTER_NONE_TILING](Kernel-Tiling/REGISTER_NONE_TILING.md) | 在核函数(Kernel)侧使用标准C++语法自定义的TilingData结构体时,若用户不确定需要注册哪些结构体,可使用该接口告知框架侧需使用未注册的标准C++语法来定义TilingData,并配套GET\_TILING\_DATA\_WITH\_STRUCT,GET\_TILING\_DATA\_MEMBER, | |
| 621 | -| [设置Kernel类型](Kernel-Tiling/set_Kernel_type.md) | 用于用户自定义设置kernel类型,控制算子执行时只启动该类型的核,避免启动不需要工作的核,缩短核启动开销。 | | 621 | +| [设置核函数(Kernel)类型](Kernel-Tiling/set_Kernel_type.md) | 用于用户自定义设置kernel类型,控制算子执行时只启动该类型的核,避免启动不需要工作的核,缩短核启动开销。 | |
| 622 | 622 | ||
| 623 | ## 特殊寄存器访问 | 623 | ## 特殊寄存器访问 |
| 624 | | 接口名 | 功能描述 | | 624 | | 接口名 | 功能描述 | |
| @@ -36,7 +36,7 @@ | |||
| 36 | 36 | ||
| 37 | 如图1所示,在AI Core内部,Scalar单元和DMA单元都可能对GM进行访问: | 37 | 如图1所示,在AI Core内部,Scalar单元和DMA单元都可能对GM进行访问: |
| 38 | 38 | ||
| 39 | -- DMA搬运单元读写GM,数据通过DataCopy等接口在UB等Local Memory和GM间交互,没有Cache一致性问题。 | 39 | +- DMA搬运单元读写GM,数据通过DataCopy等接口在Unified Buffer(UB)等Local Memory和GM间交互,没有Cache一致性问题。 |
| 40 | - Scalar单元访问GM,首先会访问每个核内的Data Cache,因此存在Data Cache与GM的Cache一致性问题。 | 40 | - Scalar单元访问GM,首先会访问每个核内的Data Cache,因此存在Data Cache与GM的Cache一致性问题。 |
| 41 | 41 | ||
| 42 | **图1** DataCache内存层次示意图<a name="zh-cn_topic_0000002530021782_fig1161014168448"></a> | 42 | **图1** DataCache内存层次示意图<a name="zh-cn_topic_0000002530021782_fig1161014168448"></a> |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_fractal_intro/aux_cube_fractal_format_details.md+2-2
| @@ -27,7 +27,7 @@ MXMmad为带有量化系数X的矩阵乘法,即左矩阵和右矩阵均有对 | |||
| 27 | 27 | ||
| 28 | - **MX scaleA系数矩阵分形介绍**<a name="section_mx_scalea_fractal_format"></a> | 28 | - **MX scaleA系数矩阵分形介绍**<a name="section_mx_scalea_fractal_format"></a> |
| 29 | 29 | ||
| 30 | - - **物理位置:** Global Memory/L1 Buffer/Unified Buffer:保存离线/在线生成左矩阵量化系数数据。 | 30 | + - **物理位置:** Global Memory/L1 Buffer/Unified Buffer(UB):保存离线/在线生成左矩阵量化系数数据。 |
| 31 | 31 | ||
| 32 | - **设计原理:** MX矩阵乘法中A矩阵与scaleA矩阵物理地址上一一映射,LoadData(MX矩阵搬运)接口要求在L1 Buffer中scaleA矩阵满足行读取需求,因此在L1 Buffer上scaleA矩阵为按行存储的小z大Z排布(Zz)。 | 32 | - **设计原理:** MX矩阵乘法中A矩阵与scaleA矩阵物理地址上一一映射,LoadData(MX矩阵搬运)接口要求在L1 Buffer中scaleA矩阵满足行读取需求,因此在L1 Buffer上scaleA矩阵为按行存储的小z大Z排布(Zz)。 |
| 33 | 33 | ||
| @@ -48,7 +48,7 @@ MXMmad为带有量化系数X的矩阵乘法,即左矩阵和右矩阵均有对 | |||
| 48 | 48 | ||
| 49 | - **MX scaleB系数矩阵分形介绍**<a name="section_mx_scaleb_fractal_format"></a> | 49 | - **MX scaleB系数矩阵分形介绍**<a name="section_mx_scaleb_fractal_format"></a> |
| 50 | 50 | ||
| 51 | - - **物理位置:** Global Memory/L1 Buffer/Unified Buffer:保存离线/在线生成右矩阵量化系数数据。 | 51 | + - **物理位置:** Global Memory/L1 Buffer/UB:保存离线/在线生成右矩阵量化系数数据。 |
| 52 | 52 | ||
| 53 | - **设计原理:** MX矩阵乘法中B矩阵与scaleB矩阵物理地址上一一映射,LoadData(MX矩阵搬运)接口要求在L1 Buffer上scaleB矩阵满足列读取需求,因此在L1 Buffer上scaleB矩阵为按列存储的大N小n排布(Nn)。 | 53 | - **设计原理:** MX矩阵乘法中B矩阵与scaleB矩阵物理地址上一一映射,LoadData(MX矩阵搬运)接口要求在L1 Buffer上scaleB矩阵满足列读取需求,因此在L1 Buffer上scaleB矩阵为按列存储的大N小n排布(Nn)。 |
| 54 | 54 | ||
| @@ -26,7 +26,7 @@ | |||
| 26 | 26 | ||
| 27 | ## 功能说明<a name="section618mcpsimp"></a> | 27 | ## 功能说明<a name="section618mcpsimp"></a> |
| 28 | 28 | ||
| 29 | -将矢量数据广播到矩阵中,每个数据块中的每16个元素会被连续复制16次;当前支持的数据传输通路:Unified Buffer-\>L0C Buffer(VECIN/VECCALC/VECOUT-\>CO1)。 | 29 | +将矢量数据广播到矩阵中,每个数据块中的每16个元素会被连续复制16次;当前支持的数据传输通路:UB-\>L0C Buffer(VECIN/VECCALC/VECOUT-\>CO1)。 |
| 30 | 30 | ||
| 31 | **图1** 功能示例<a name="fig1730933122314"></a> | 31 | **图1** 功能示例<a name="fig1730933122314"></a> |
| 32 | 32 | ||
| @@ -53,7 +53,7 @@ __aicore__ inline void BroadCastVecToMM(const LocalTensor<T> &dst, const LocalTe | |||
| 53 | | 参数名称 | 类型 | 说明 | | 53 | | 参数名称 | 类型 | 说明 | |
| 54 | | ---------- | ---------- | ---------- | | 54 | | ---------- | ---------- | ---------- | |
| 55 | | dst | 输出 | 目的操作数,结果矩阵,类型为LocalTensor,支持的物理地址为L0C Buffer(TPosition:CO1)。<br>LocalTensor的起始地址需要256个元素对齐。<br>支持的数据类型为:half、int32_t、float。 | | 55 | | dst | 输出 | 目的操作数,结果矩阵,类型为LocalTensor,支持的物理地址为L0C Buffer(TPosition:CO1)。<br>LocalTensor的起始地址需要256个元素对齐。<br>支持的数据类型为:half、int32_t、float。 | |
| 56 | -| src | 输入 | 源操作数,输入矢量,类型为LocalTensor,支持的物理地址为Unified Buffer(TPosition:VECIN/VECCALC/VECOUT)。<br>支持的数据类型需要与dst一致。 | | 56 | +| src | 输入 | 源操作数,输入矢量,类型为LocalTensor,支持的物理地址为UB(TPosition:VECIN/VECCALC/VECOUT)。<br>支持的数据类型需要与dst一致。 | |
| 57 | | blockCount | 输入 | 指定该指令包含的连续广播数据块个数,取值范围:blockCount∈[1, 255]。 | | 57 | | blockCount | 输入 | 指定该指令包含的连续广播数据块个数,取值范围:blockCount∈[1, 255]。 | |
| 58 | | blockLen | 输入 | 指定该指令每个连续广播数据块长度,单位为16个元素。取值范围:blockLen∈[1, 255]。 | | 58 | | blockLen | 输入 | 指定该指令每个连续广播数据块长度,单位为16个元素。取值范围:blockLen∈[1, 255]。 | |
| 59 | | srcGap | 输入 | 源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔),单位为datablock(32字节)。 | | 59 | | srcGap | 输入 | 源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔),单位为datablock(32字节)。 | |
| @@ -29,7 +29,7 @@ | |||
| 29 | > [!NOTE]说明 | 29 | > [!NOTE]说明 |
| 30 | > 本接口为软件仿真实现,是在Matmul高阶API的基础上,利用Matmul高阶API中的workspace GM空间作为数据中转空间,数据先搬入GM,再搬入L1 Buffer。因此,在使用本接口时,需要先使用REGISTER_MATMUL注册高阶API。 | 30 | > 本接口为软件仿真实现,是在Matmul高阶API的基础上,利用Matmul高阶API中的workspace GM空间作为数据中转空间,数据先搬入GM,再搬入L1 Buffer。因此,在使用本接口时,需要先使用REGISTER_MATMUL注册高阶API。 |
| 31 | 31 | ||
| 32 | -该接口提供从Unified Buffer到L1 Buffer的数据非对齐搬运功能。 | 32 | +该接口提供从Unified Buffer(UB)到L1 Buffer的数据非对齐搬运功能。 |
| 33 | 33 | ||
| 34 | ## 函数原型<a name="section620mcpsimp"></a> | 34 | ## 函数原型<a name="section620mcpsimp"></a> |
| 35 | 35 | ||
| @@ -150,7 +150,7 @@ Kirin 9030,支持数据类型为:int8_t、uint8_t、int16_t、uint16_t、hal | |||
| 150 | | dstNzMatrixStride | [0, 16384] | | 150 | | dstNzMatrixStride | [0, 16384] | |
| 151 | 151 | ||
| 152 | <!-- npu="310p" id18 --> | 152 | <!-- npu="310p" id18 --> |
| 153 | -- 针对Atlas 推理系列产品AI Core,使用Global Memory -\> Local Memory通路的ND2NZ搬运接口时,需要预留8K的UB空间,作为接口的临时数据存放区。 | 153 | +- 针对Atlas 推理系列产品AI Core,使用Global Memory -\> Local Memory通路的ND2NZ搬运接口时,需要预留8K的Unified Buffer(UB)空间,作为接口的临时数据存放区。 |
| 154 | <!-- end id18 --> | 154 | <!-- end id18 --> |
| 155 | 155 | ||
| 156 | ## 关键特性说明 | 156 | ## 关键特性说明 |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_continuous.md+1-1
| @@ -105,7 +105,7 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T> | |||
| 105 | 105 | ||
| 106 | - 位于Global Memory的源地址必须1字节对齐,位于L1 Buffer的目的地址必须32字节对齐。 | 106 | - 位于Global Memory的源地址必须1字节对齐,位于L1 Buffer的目的地址必须32字节对齐。 |
| 107 | - 调用连续搬运接口时,count * sizeof(T)需要32字节对齐,若未对齐,则搬运量会向下取整到32字节对齐。 | 107 | - 调用连续搬运接口时,count * sizeof(T)需要32字节对齐,若未对齐,则搬运量会向下取整到32字节对齐。 |
| 108 | -- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier\(ISASI\)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的GM地址存在重叠,两条搬运指令之间需要通过调用PipeBarrier<PIPE\_MTE3\>\(\)添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer存在重叠,两条搬运指令之间需要调用PipeBarrier<PIPE\_MTE2\>\(\)添加MTE2搬入流水的同步。 | 108 | +- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier\(ISASI\)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的GM地址存在重叠,两条搬运指令之间需要通过调用PipeBarrier<PIPE\_MTE3\>\(\)添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer(UB)存在重叠,两条搬运指令之间需要调用PipeBarrier<PIPE\_MTE2\>\(\)添加MTE2搬入流水的同步。 |
| 109 | 109 | ||
| 110 |  | 110 |  |
| 111 | 111 | ||
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_GMToL1_highdim_split.md+1-1
| @@ -125,7 +125,7 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T> | |||
| 125 | | srcGap | [0, 65535] | | 125 | | srcGap | [0, 65535] | |
| 126 | | dstGap | [0, 65535] | | 126 | | dstGap | [0, 65535] | |
| 127 | 127 | ||
| 128 | -- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier\(ISASI\)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的GM地址存在重叠,两条搬运指令之间需要通过调用PipeBarrier<PIPE\_MTE3\>\(\)添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer存在重叠,两条搬运指令之间需要调用PipeBarrier<PIPE\_MTE2\>\(\)添加MTE2搬入流水的同步。 | 128 | +- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier\(ISASI\)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的GM地址存在重叠,两条搬运指令之间需要通过调用PipeBarrier<PIPE\_MTE3\>\(\)添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer(UB)存在重叠,两条搬运指令之间需要调用PipeBarrier<PIPE\_MTE2\>\(\)添加MTE2搬入流水的同步。 |
| 129 | 129 | ||
| 130 |  | 130 |  |
| 131 | 131 | ||
| @@ -59,7 +59,7 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 59 | | 参数名称 | 输入/输出 | 含义 | | 59 | | 参数名称 | 输入/输出 | 含义 | |
| 60 | | ---------- | ---------- | ---------- | | 60 | | ---------- | ---------- | ---------- | |
| 61 | | dst | 输出 | 目的操作数,类型为LocalTensor,存储位置为L1 Buffer(TSCM)。 | | 61 | | dst | 输出 | 目的操作数,类型为LocalTensor,存储位置为L1 Buffer(TSCM)。 | |
| 62 | -| src | 输入 | 源操作数,类型为LocalTensor,存储位置为Unified Buffer(TPosition为VECIN/VECCALC/VECOUT)。 | | 62 | +| src | 输入 | 源操作数,类型为LocalTensor,存储位置为UB(TPosition为VECIN/VECCALC/VECOUT)。 | |
| 63 | | intriParams | 输入 | 搬运参数,类型为[Nd2NzParams](#table844881954715)。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。 | | 63 | | intriParams | 输入 | 搬运参数,类型为[Nd2NzParams](#table844881954715)。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。 | |
| 64 | 64 | ||
| 65 | **表3** Nd2NzParams结构体参数定义<a id="table844881954715"></a> | 65 | **表3** Nd2NzParams结构体参数定义<a id="table844881954715"></a> |
| @@ -120,7 +120,7 @@ $$ | |||
| 120 | $$ | 120 | $$ |
| 121 | 121 | ||
| 122 | - 本接口仅支持配置ndNum为1。 | 122 | - 本接口仅支持配置ndNum为1。 |
| 123 | -- 位于Unified Buffer的源地址必须32字节对齐,位于L1 Buffer的目的地址必须32字节对齐。 | 123 | +- 位于UB的源地址必须32字节对齐,位于L1 Buffer的目的地址必须32字节对齐。 |
| 124 | - Nd2NzParams结构体参数ndNum、nValue、dValue设置不能为0。 | 124 | - Nd2NzParams结构体参数ndNum、nValue、dValue设置不能为0。 |
| 125 | - 搬运至L1 Buffer的数据不能重叠,如果存在重叠写入,硬件不会产生任何警告或错误,并且不保证重叠数据的写入顺序。 | 125 | - 搬运至L1 Buffer的数据不能重叠,如果存在重叠写入,硬件不会产生任何警告或错误,并且不保证重叠数据的写入顺序。 |
| 126 | 126 | ||
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md+1-1
| @@ -60,7 +60,7 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 60 | | 参数名称 | 输入/输出 | 含义 | | 60 | | 参数名称 | 输入/输出 | 含义 | |
| 61 | | ---------- | ---------- | ---------- | | 61 | | ---------- | ---------- | ---------- | |
| 62 | | dst | 输出 | 目的操作数,类型为LocalTensor,存储位置为L1 Buffer,起始地址要求32字节对齐。 | | 62 | | dst | 输出 | 目的操作数,类型为LocalTensor,存储位置为L1 Buffer,起始地址要求32字节对齐。 | |
| 63 | -| src | 输入 | 源操作数,类型为LocalTensor,存储位置为Unified Buffer(TPosition为VECIN/VECCALC/VECOUT),起始地址要求32字节对齐。 | | 63 | +| src | 输入 | 源操作数,类型为LocalTensor,存储位置为UB(TPosition为VECIN/VECCALC/VECOUT),起始地址要求32字节对齐。 | |
| 64 | | count | 输入 | 参与搬运的元素个数。<br>**注:count * sizeof(T)需要32字节对齐,若未对齐,搬运量会向下取整到32字节对齐。** | | 64 | | count | 输入 | 参与搬运的元素个数。<br>**注:count * sizeof(T)需要32字节对齐,若未对齐,搬运量会向下取整到32字节对齐。** | |
| 65 | 65 | ||
| 66 | ## 数据类型 | 66 | ## 数据类型 |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_highdim_split.md+1-1
| @@ -60,7 +60,7 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 60 | | 参数名称 | 输入/输出 | 含义 | | 60 | | 参数名称 | 输入/输出 | 含义 | |
| 61 | | ---------- | ---------- | ---------- | | 61 | | ---------- | ---------- | ---------- | |
| 62 | | dst | 输出 | 目的操作数,类型为LocalTensor,存储位置为L1 Buffer,起始地址要求32字节对齐。 | | 62 | | dst | 输出 | 目的操作数,类型为LocalTensor,存储位置为L1 Buffer,起始地址要求32字节对齐。 | |
| 63 | -| src | 输入 | 源操作数,类型为LocalTensor,存储位置为Unified Buffer(TPosition为VECIN/VECCALC/VECOUT),起始地址要求32字节对齐。 | | 63 | +| src | 输入 | 源操作数,类型为LocalTensor,存储位置为UB(TPosition为VECIN/VECCALC/VECOUT),起始地址要求32字节对齐。 | |
| 64 | | repeatParams | 输入 | 搬运参数,DataCopyParams类型。通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`。 | | 64 | | repeatParams | 输入 | 搬运参数,DataCopyParams类型。通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`。 | |
| 65 | 65 | ||
| 66 | **表3** DataCopyParams结构体参数定义 | 66 | **表3** DataCopyParams结构体参数定义 |
| @@ -57,7 +57,7 @@ | |||
| 57 | 57 | ||
| 58 | | 接口类别 | 主要功能 | 支持通路 | 典型应用场景 | | 58 | | 接口类别 | 主要功能 | 支持通路 | 典型应用场景 | |
| 59 | | --- | --- | --- | --- | | 59 | | --- | --- | --- | --- | |
| 60 | -| [DataCopy(UBToL1连续数据搬运)](DataCopy_UBToL1_continuous.md) | 将数据从Unified Buffer连续搬运至L1 Buffer,格式和内容保持不变。 | UB->L1 Buffer | 矢量计算结果从UB传入L1 Buffer供矩阵计算使用。 | | 60 | +| [DataCopy(UBToL1连续数据搬运)](DataCopy_UBToL1_continuous.md) | 将数据从UB连续搬运至L1 Buffer,格式和内容保持不变。 | UB->L1 Buffer | 矢量计算结果从UB传入L1 Buffer供矩阵计算使用。 | |
| 61 | | [DataCopy(UBToL1高维切分数据搬运)](DataCopy_UBToL1_highdim_split.md) | 从UB搬运至L1 Buffer,支持通过块参数配置实现非连续搬运。 | UB->L1 Buffer | UB中非连续排列数据搬入L1 Buffer。 | | 61 | | [DataCopy(UBToL1高维切分数据搬运)](DataCopy_UBToL1_highdim_split.md) | 从UB搬运至L1 Buffer,支持通过块参数配置实现非连续搬运。 | UB->L1 Buffer | UB中非连续排列数据搬入L1 Buffer。 | |
| 62 | | [DataCopy(UBToL1随路转换-ND2NZ搬运)](DataCopy_UBToL1_ND2NZ.md) | 从UB搬运至L1 Buffer,搬运同时完成ND到NZ分形格式转换。 | UB->L1 Buffer | UB中ND格式数据搬入L1 Buffer并转为NZ格式。 | | 62 | | [DataCopy(UBToL1随路转换-ND2NZ搬运)](DataCopy_UBToL1_ND2NZ.md) | 从UB搬运至L1 Buffer,搬运同时完成ND到NZ分形格式转换。 | UB->L1 Buffer | UB中ND格式数据搬入L1 Buffer并转为NZ格式。 | |
| 63 | | [DataCopyPad(UBToL1非对齐数据搬运)](DataCopyPad_UBToL1.md) | 将数据从UB非对齐搬运至L1 Buffer,支持在数据左/右侧自行填充。 | UB->L1 Buffer | UB中非32B对齐边界数据的搬移与补齐。 | | 63 | | [DataCopyPad(UBToL1非对齐数据搬运)](DataCopyPad_UBToL1.md) | 将数据从UB非对齐搬运至L1 Buffer,支持在数据左/右侧自行填充。 | UB->L1 Buffer | UB中非32B对齐边界数据的搬移与补齐。 | |
| @@ -32,7 +32,7 @@ | |||
| 32 | 32 | ||
| 33 | ## 功能说明 | 33 | ## 功能说明 |
| 34 | 34 | ||
| 35 | -提供从L1 Buffer搬运数据到Unified Buffer的基础能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | 35 | +提供从L1 Buffer搬运数据到Unified Buffer(UB)的基础能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 |
| 36 | 36 | ||
| 37 | ## 函数原型 | 37 | ## 函数原型 |
| 38 | 38 | ||
| @@ -29,7 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | ## 功能说明<a name="section474617392321"></a> | 30 | ## 功能说明<a name="section474617392321"></a> |
| 31 | 31 | ||
| 32 | -对数据搬运能力进行增强,相比于基础数据搬运接口,增加了L0C Buffer-\>Unified Buffer(UB)通路的随路计算。 | 32 | +对数据搬运能力进行增强,相比于基础数据搬运接口,增加了L0C Buffer-\>UB通路的随路计算。 |
| 33 | 33 | ||
| 34 | ## 函数原型<a name="section1954364615315"></a> | 34 | ## 函数原型<a name="section1954364615315"></a> |
| 35 | 35 | ||
| @@ -74,7 +74,7 @@ | |||
| 74 | | blockMode | 数据搬运基本分形,BlockMode枚举类型,支持以下配置:<br> • BLOCK_MODE_NORMAL:表示传输单位为32字节。当前暂不支持。<br> • BLOCK_MODE_MATRIX:表示传输单位为一个16 \* 16的cube分形。<br> • BLOCK_MODE_VECTOR:表示传输单位为一个1 \* 16的cube分形。<br> • BLOCK_MODE_SMALL_CHANNEL:表示传输单位为一个16 \* 4的cube分形。当前暂不支持。<br> • BLOCK_MODE_DEPTHWISE:表示传输单位为一个16 \* 16的cube分形,提供随路channel-split功能。当前暂不支持。<br>每种模式下对应的blockLen等参数单位见[表4](#table13396838183618)。 | | 74 | | blockMode | 数据搬运基本分形,BlockMode枚举类型,支持以下配置:<br> • BLOCK_MODE_NORMAL:表示传输单位为32字节。当前暂不支持。<br> • BLOCK_MODE_MATRIX:表示传输单位为一个16 \* 16的cube分形。<br> • BLOCK_MODE_VECTOR:表示传输单位为一个1 \* 16的cube分形。<br> • BLOCK_MODE_SMALL_CHANNEL:表示传输单位为一个16 \* 4的cube分形。当前暂不支持。<br> • BLOCK_MODE_DEPTHWISE:表示传输单位为一个16 \* 16的cube分形,提供随路channel-split功能。当前暂不支持。<br>每种模式下对应的blockLen等参数单位见[表4](#table13396838183618)。 | |
| 75 | | deqScale | 随路精度转换辅助参数,即量化模式,支持的量化模式取值和对应的数据类型等信息请参考[表5](#table168091348673)。其中DEQ、DEQ8、DEQ16模式,需要传入deqValue量化系数,设置deqValue的对应比特位;VDEQ、VDEQ8、VDEQ16模式,需要传入包含16个元素(deqValue)的量化参数向量,设置deqTensorAddr的对应比特位,同时保证DEQADDR中存储的反量化参数向量的每个元素(deqValue)都符合预期和使用限制。<br>VDEQ模式下,反量化参数向量长度为32字节(16个half元素);其他模式下,反量化参数向量长度为128字节(16个64bit的反量化元素)。 | | 75 | | deqScale | 随路精度转换辅助参数,即量化模式,支持的量化模式取值和对应的数据类型等信息请参考[表5](#table168091348673)。其中DEQ、DEQ8、DEQ16模式,需要传入deqValue量化系数,设置deqValue的对应比特位;VDEQ、VDEQ8、VDEQ16模式,需要传入包含16个元素(deqValue)的量化参数向量,设置deqTensorAddr的对应比特位,同时保证DEQADDR中存储的反量化参数向量的每个元素(deqValue)都符合预期和使用限制。<br>VDEQ模式下,反量化参数向量长度为32字节(16个half元素);其他模式下,反量化参数向量长度为128字节(16个64bit的反量化元素)。 | |
| 76 | | deqValue | 量化系数。 deqValue的配置方式请参考[deqValue配置方式](#table54451538192912)。 | | 76 | | deqValue | 量化系数。 deqValue的配置方式请参考[deqValue配置方式](#table54451538192912)。 | |
| 77 | -| deqTensorAddr | UB中存储反量化参数向量的起始地址。deqScale为VDEQ/VDEQ8/VDEQ16模式时,需要传入反量化运算时的参数向量的地址。该地址要满足32字节对齐。<br>对于VDEQ模式,该地址指向32字节大小的反量化参数向量,其中每个元素大小为16bit(half)。<br>对于VDEQ8、VDEQ16模式,反量化参数向量中的每个元素大小都为64bit。搬运时会搬运blockCount个连续传输数据块,每个数据块的长度为blockLen。每个数据块对应一个128字节的反量化向量。对于同一个数据块,反量化参数向量中的16个元素会被连续复用。不同的数据块,对应不同的反量化参数向量,地址会相应的偏移12。例如:假设对应起始地址为A,第一个数据块的12反量化参数向量起始地址为A,第二个数据块的12反量化参数向量起始地址为A + 12。<br>同一个反量化参数向量的每一个元素的MCB标志位必须一致。 | | 77 | +| deqTensorAddr | Unified Buffer(UB)中存储反量化参数向量的起始地址。deqScale为VDEQ/VDEQ8/VDEQ16模式时,需要传入反量化运算时的参数向量的地址。该地址要满足32字节对齐。<br>对于VDEQ模式,该地址指向32字节大小的反量化参数向量,其中每个元素大小为16bit(half)。<br>对于VDEQ8、VDEQ16模式,反量化参数向量中的每个元素大小都为64bit。搬运时会搬运blockCount个连续传输数据块,每个数据块的长度为blockLen。每个数据块对应一个128字节的反量化向量。对于同一个数据块,反量化参数向量中的16个元素会被连续复用。不同的数据块,对应不同的反量化参数向量,地址会相应的偏移12。例如:假设对应起始地址为A,第一个数据块的12反量化参数向量起始地址为A,第二个数据块的12反量化参数向量起始地址为A + 12。<br>同一个反量化参数向量的每一个元素的MCB标志位必须一致。 | |
| 78 | | sidStoreMode | 用于deqScale为DEQ8/VDEQ8时配置存储模式,控制反量化结果如何存储在dst地址中。配置效果参考[sidStoreMode配置示意图](#fig5416115192414)。<br> • 0:dst的数据存储在每个DataBlock的前半段,即每32字节的高16字节;<br> • 1:dst的数据存储在每个DataBlock的后半段,即每32字节的低16字节;<br> • 2:dst的数据存储在完整的DataBlock中,即整个32字节。 | | 78 | | sidStoreMode | 用于deqScale为DEQ8/VDEQ8时配置存储模式,控制反量化结果如何存储在dst地址中。配置效果参考[sidStoreMode配置示意图](#fig5416115192414)。<br> • 0:dst的数据存储在每个DataBlock的前半段,即每32字节的高16字节;<br> • 1:dst的数据存储在每个DataBlock的后半段,即每32字节的低16字节;<br> • 2:dst的数据存储在完整的DataBlock中,即整个32字节。 | |
| 79 | | isRelu | 配置是否可以随路做线性整流操作。配置deqValue的情况下,如果该参数被置为true,那么会刷新deqValue的ReLU标志位为1;如果被置为false,则不会做修改。配置deqTensorAddr的情况下,反量化参数向量元素中的ReLU标志位不生效,以isRelu为准。<br>仅配置isRelu,不配置量化参数,即deqValue配置为DEQ_NONE场景,支持src和dst的数据类型组合如下:{half,half},{float,float},{int32_t,int32_t},{float,half};同时配置isRelu和量化参数的场景,支持的数据类型组合参考[表5](#table168091348673)。 | | 79 | | isRelu | 配置是否可以随路做线性整流操作。配置deqValue的情况下,如果该参数被置为true,那么会刷新deqValue的ReLU标志位为1;如果被置为false,则不会做修改。配置deqTensorAddr的情况下,反量化参数向量元素中的ReLU标志位不生效,以isRelu为准。<br>仅配置isRelu,不配置量化参数,即deqValue配置为DEQ_NONE场景,支持src和dst的数据类型组合如下:{half,half},{float,float},{int32_t,int32_t},{float,half};同时配置isRelu和量化参数的场景,支持的数据类型组合参考[表5](#table168091348673)。 | |
| 80 | | padMode | 预留参数,当前暂不支持。 | | 80 | | padMode | 预留参数,当前暂不支持。 | |
| @@ -112,7 +112,7 @@ | |||
| 112 | | 参数名 | 描述 | | 112 | | 参数名 | 描述 | |
| 113 | | ---------- | ---------- | | 113 | | ---------- | ---------- | |
| 114 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002542828493_section4219135304818)。 | | 114 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002542828493_section4219135304818)。 | |
| 115 | -| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br><!-- npu="950" id14 --> • CFG_COLUMN_MAJOR:针对Ascend 950PR/Ascend 950DT,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id14 --><br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --> | | 115 | +| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br><!-- npu="950" id14 --> • CFG_COLUMN_MAJOR:针对Ascend 950PR/Ascend 950DT,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id14 --><br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是Unified Buffer(UB) <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br><!-- npu="950" id15 --> COLUMN_MAJOR, // 仅Ascend 950PR/Ascend 950DT支持,开启NZ2DN,输出数据格式为DN格式。<br><!-- end id15 -->};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<!-- npu="950" id16 --><br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; // 仅Ascend 950PR/Ascend 950DT支持<!-- end id16 --> | |
| 116 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> • 当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> • 当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 116 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> • 当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> • 当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 117 | 117 | ||
| 118 | **表2** Fixpipe参数说明 | 118 | **表2** Fixpipe参数说明 |
| @@ -137,8 +137,8 @@ | |||
| 137 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | | 137 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 138 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 138 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 139 | | params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | | 139 | | params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | |
| 140 | -| dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 140 | +| dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到UB通路下有效。 | |
| 141 | -| subBlockId | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 141 | +| subBlockId | 可选输入 | 此参数仅在L0C Buffer到UB通路下有效。 | |
| 142 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 是否开启通道拆分的功能。默认为false,不开启该功能。仅在src和dst都为float时才能开启通道拆分,且不能同时开启ChannelSplit和NZ2ND/NZ2DN功能。 | | 142 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 是否开启通道拆分的功能。默认为false,不开启该功能。仅在src和dst都为float时才能开启通道拆分,且不能同时开启ChannelSplit和NZ2ND/NZ2DN功能。 | |
| 143 | 143 | ||
| 144 | **表4** Fixpipe搬运参数(FixpipeParamsV220)结构体说明 | 144 | **表4** Fixpipe搬运参数(FixpipeParamsV220)结构体说明 |
| @@ -96,7 +96,7 @@ | |||
| 96 | | 参数名 | 描述 | | 96 | | 参数名 | 描述 | |
| 97 | | ---------- | ---------- | | 97 | | ---------- | ---------- | |
| 98 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002511188540_section4219135304818)。 | | 98 | | T/U | 目的操作数/源操作数的数据类型。支持的数据类型请参考[数据类型](#zh-cn_topic_0000002511188540_section4219135304818)。 | |
| 99 | -| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<!-- npu="A3,910b" id17 -->针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,Atlas A2 训练系列产品/Atlas A2 推理系列产品,在L0C Buffer -> L1 Buffer通路下不生效。<!-- end id17 --><br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br> • CFG_COLUMN_MAJOR:开启NZ2DN,输出数据格式为DN格式。仅支持Ascend 950PR/Ascend 950DT,不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品。<br><br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是UB <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br> COLUMN_MAJOR, // 开启NZ2DN,输出数据格式为DN格式。<br>};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; | | 99 | +| config | Fixpipe相关配置参数,类型为FixpipeConfig。取值如下:<br> • **CFG_ROW_MAJOR(默认取值)**:开启NZ2ND,输出数据格式为ND格式。<!-- npu="A3,910b" id17 -->针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,Atlas A2 训练系列产品/Atlas A2 推理系列产品,在L0C Buffer -> L1 Buffer通路下不生效。<!-- end id17 --><br> • CFG_NZ:NZ2NZ,输出数据格式为NZ格式。<br> • CFG_COLUMN_MAJOR:开启NZ2DN,输出数据格式为DN格式。仅支持Ascend 950PR/Ascend 950DT,不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品。<br><br>struct FixpipeConfig {<br> CO2Layout format;<br> bool isToUB; // 用于用户指定目的地址的位置是否是Unified Buffer(UB) <br>};<br>enum class CO2Layout : uint8_t {<br> NZ = 0, // 输出数据格式仍为NZ格式。<br> ROW_MAJOR, // 开启NZ2ND,输出数据格式为ND格式。<br> COLUMN_MAJOR, // 开启NZ2DN,输出数据格式为DN格式。<br>};<br>constexpr FixpipeConfig CFG_NZ = {CO2Layout::NZ};<br>constexpr FixpipeConfig CFG_ROW_MAJOR = {CO2Layout::ROW_MAJOR};<br>constexpr FixpipeConfig CFG_COLUMN_MAJOR = {CO2Layout::COLUMN_MAJOR}; | |
| 100 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> •当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> •当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | | 100 | | S | 参数cbufWorkspace的数据类型,即随路量化参数的数据类型。<br> •当目的操作数、源操作数、cbufWorkspace使用基础数据类型时,模板参数S必须为uint64_t类型,否则编译失败。<br> •当目的操作数、源操作数、cbufWorkspace使用TensorTrait类型时,模板参数S的LiteType必须为uint64_t类型,否则编译失败。<br>模板参数S后一个模板参数仅用于上述数据类型检查,用户无需关注。 | |
| 101 | 101 | ||
| 102 | **表2** Fixpipe参数说明 | 102 | **表2** Fixpipe参数说明 |
| @@ -121,8 +121,8 @@ | |||
| 121 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | | 121 | | [reluEn](../cube_store_key_features/accompanying_relu.md) | 可选输入 | 是否开启NormReLU的开关:<br> • `false`:不开启NormReLU功能, 默认为`false`;<br> • `true`:开启NormReLU功能。 | |
| 122 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | | 122 | | unitFlag | 可选输入 | unitFlag是一种Mmad指令和Fixpipe指令细粒度的并行,开启该功能后,硬件每计算完一个分形,计算结果就会被搬出。取值说明如下:<br> • 0(2'b00):不开启unitFlag;<br> • 2(2'b10):开启unitFlag,硬件执行完指令之后,不复位单元标记位;<br> • 3(2'b11):开启unitFlag,硬件执行完指令之后,复位单元标记位。<br>开启该功能时,须将Mmad指令和Fixpipe指令的unitFlag值设置为2或3。<br>参数设置方案和特性细节可参考:Mmad计算中关键特性说明的[UnitFlag](../mmad_compute_key_features/UnitFlag.md)章节。 | |
| 123 | | params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | | 123 | | params | 可选输入 | 用于选择和配置不同的随路格式转换(NZ2NZ/NZ2ND/NZ2DN),该参数为TransformParams类型的结构体。TransformParams结构体是一个基于模板参数的类型选择器,用于在编译时根据定义FixpipeParamsArch3510搬运参数时使用的模板参数,自动选择对应的参数类型。<br>template \<CO2Layout format\><br>struct TransformParams {};<br>template \<\><br>struct TransformParams\<CO2Layout::NZ\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = uint8_t;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::ROW_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2NdParams;<br>};<br>template \<\><br>struct TransformParams\<CO2Layout::COLUMN_MAJOR\> {<br> \_\_aicore\_\_ inline TransformParams(){};<br> using PARAMS = Nz2DnParams;<br>};<br>CO2Layout布局类型为ROW_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2ND转换,结构体参数如下:<br>struct Nz2NdParams {<br> uint16_t ndNum = 1;<br> uint16_t srcNdStride = 0;<br> uint32_t dstNdStride = 0; <br>};<br> • ndNum:源NZ矩阵的数目,也就是传输ND矩阵的数目,取值范围为ndNum∈[0, 65535]。**注:ndNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNdStride:不同NZ矩阵起始地址之间的间隔,取值范围为srcNdStride∈[0, 65535],单位为C0_SIZE。当ndNum配置为1时,srcNdStride配置为0即可,不生效。<br> • dstNdStride:目的相邻ND矩阵起始地址之间的偏移,取值范围为dstNdStride∈[1, 2^32 -1],单位为element。当ndNum配置为1时,dstNdStride配置为0即可,不生效。<br><br>CO2Layout布局类型为COLUMN_MAJOR时, 该指令被定义为从L0C Buffer到目标位置的数据移动,并附带NZ2DN转换,结构体参数如下:<br>struct Nz2DnParams {<br> uint16_t dnNum = 1;<br> uint16_t srcNzMatrixStride = 0;<br> uint32_t dstDnMatrixStride = 0;<br> uint16_t srcNzC0Stride = 0; <br>};<br> • dnNum:传输DN矩阵的数目,取值范围为dnNum∈[0, 65535]。**注:dnNum=0表示不执行搬运,该接口将被视为NOP(空操作)。**<br> • srcNzMatrixStride:不同源NZ矩阵的偏移(头与头),取值范围srcNzMatrixStride∈[0, 65535],单位C0_SIZE。当dnNum配置为1时,srcNzMatrixStride配置为0即可,不生效。<br> • dstDnMatrixStride:目的相邻ND矩阵起始地址之间的偏移,取值范围dstDnMatrixStride∈[0, 2^32 -1],单位element。当dnNum配置为1时,dstDnMatrixStride配置为0即可,不生效。<br> • srcNzC0Stride:源矩阵NZ分形中相邻行的地址偏移(头与头),取值范围srcNzC0Stride∈[0, 65535],单位C0_SIZE。当启用NZ2DN时,srcNzC0Stride不能为0。<br><br>CO2Layout布局类型为NZ时,为普通搬运DMA模式,表示从L0C Buffer到目标位置的正常数据移动。 | |
| 124 | -| dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 124 | +| dualDstCtrl | 可选输入 | 此参数仅在L0C Buffer到UB通路下有效。 | |
| 125 | -| subBlockId | 可选输入 | 此参数仅在L0C Buffer到Unified Buffer通路下有效。 | | 125 | +| subBlockId | 可选输入 | 此参数仅在L0C Buffer到UB通路下有效。 | |
| 126 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 此参数仅在L0C Buffer到Global Memory通路下有效。 | | 126 | | [isChannelSplit](../cube_store_key_features/F32-Channel-Split.md) | 可选输入 | 此参数仅在L0C Buffer到Global Memory通路下有效。 | |
| 127 | 127 | ||
| 128 | **表4** Fixpipe搬运参数(FixpipeParamsV220)结构体说明 | 128 | **表4** Fixpipe搬运参数(FixpipeParamsV220)结构体说明 |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_store_aux_config/cube_store_aux_config.md+1-1
| @@ -1,6 +1,6 @@ | |||
| 1 | # 矩阵搬出寄存器配置说明<a name="ZH-CN_TOPIC_0000002568950985"></a> | 1 | # 矩阵搬出寄存器配置说明<a name="ZH-CN_TOPIC_0000002568950985"></a> |
| 2 | 2 | ||
| 3 | -本章节涉及寄存器在相同核函数内部会维持状态直到被人为改变,而在不同核函数内部不会继承之前的状态。 | 3 | +本章节涉及寄存器在相同核函数(Kernel)内部会维持状态直到被人为改变,而在不同核函数(Kernel)内部不会继承之前的状态。 |
| 4 | 4 | ||
| 5 | - **[SetFixPipeConfig](SetFixPipeConfig.md)** | 5 | - **[SetFixPipeConfig](SetFixPipeConfig.md)** |
| 6 | 6 | ||
| @@ -25,7 +25,7 @@ | |||
| 25 | <!-- end id1 --> | 25 | <!-- end id1 --> |
| 26 | 26 | ||
| 27 | <!-- npu="950" id4 --> | 27 | <!-- npu="950" id4 --> |
| 28 | -- 针对Ascend 950PR/Ascend 950DT,当Fixpipe指令的输入和输出数据类型都为float,NZ输出到GM,并且不开启NZ2ND、NZ2DN与unitFlag时,才能够开启Channel Split功能。当前搬出到L1 Buffer和UB不支持该功能。 | 28 | +- 针对Ascend 950PR/Ascend 950DT,当Fixpipe指令的输入和输出数据类型都为float,NZ输出到GM,并且不开启NZ2ND、NZ2DN与unitFlag时,才能够开启Channel Split功能。当前搬出到L1 Buffer和Unified Buffer(UB)不支持该功能。 |
| 29 | <!-- end id4 --> | 29 | <!-- end id4 --> |
| 30 | 30 | ||
| 31 | ## 使用示例 | 31 | ## 使用示例 |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_store_key_features/L0C_to_UB_dual_target_mode.md+1-1
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 特性说明 | 3 | ## 特性说明 |
| 4 | 4 | ||
| 5 | -同一AI Core内有一个Cube Core和两个Vector Core,当启用双目标模式控制时,L0C Buffer中的M×N矩阵将被分成两半,并同时分别写入两个Vector Core各自的UB中,其中前半部分写入SUB BLOCK0,后半部分写入SUB BLOCK1。 | 5 | +同一AI Core内有一个Cube Core和两个Vector Core,当启用双目标模式控制时,L0C Buffer中的M×N矩阵将被分成两半,并同时分别写入两个Vector Core各自的Unified Buffer(UB)中,其中前半部分写入SUB BLOCK0,后半部分写入SUB BLOCK1。 |
| 6 | 6 | ||
| 7 | - 双目标模式(M维度):按M维度拆分成形状为M / 2 \* N的两个矩阵,分别写入两个UB。 | 7 | - 双目标模式(M维度):按M维度拆分成形状为M / 2 \* N的两个矩阵,分别写入两个UB。 |
| 8 | - 双目标模式(N维度):按N维度拆分成形状为M \* N / 2的两个矩阵,分别写入两个UB。 | 8 | - 双目标模式(N维度):按N维度拆分成形状为M \* N / 2的两个矩阵,分别写入两个UB。 |
| @@ -52,7 +52,7 @@ for (int h = 0; h < dnNum; h++) { | |||
| 52 | ## 特性约束 | 52 | ## 特性约束 |
| 53 | 53 | ||
| 54 | - 当开启Channel Split/Channel Merge功能(NZ2NZ)时,此功能不可用。 | 54 | - 当开启Channel Split/Channel Merge功能(NZ2NZ)时,此功能不可用。 |
| 55 | -- 当L0C Buffer搬运到UB开启双目标模式时,此功能不可用。 | 55 | +- 当L0C Buffer搬运到Unified Buffer(UB)开启双目标模式时,此功能不可用。 |
| 56 | - 目标操作数地址之间不能重叠。 | 56 | - 目标操作数地址之间不能重叠。 |
| 57 | 57 | ||
| 58 | ## 使用示例 | 58 | ## 使用示例 |
| @@ -31,7 +31,7 @@ | |||
| 31 | 31 | ||
| 32 | 头文件路径为:`tensor_api/tensor.h`。 | 32 | 头文件路径为:`tensor_api/tensor.h`。 |
| 33 | 33 | ||
| 34 | -Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L1 Buffer中的量化数据搬运到Fixpipe Buffer。量化数据可用于L0C输出到GM/UB时做随路量化。 | 34 | +Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L1 Buffer中的量化数据搬运到Fixpipe Buffer。量化数据可用于L0C输出到GM/Unified Buffer(UB)时做随路量化。 |
| 35 | 35 | ||
| 36 | ## 函数原型 | 36 | ## 函数原型 |
| 37 | 37 | ||
| @@ -31,9 +31,9 @@ | |||
| 31 | 31 | ||
| 32 | 头文件路径为:`tensor_api/tensor.h`。 | 32 | 头文件路径为:`tensor_api/tensor.h`。 |
| 33 | 33 | ||
| 34 | -Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L0C Buffer中的矩阵计算结果搬运到Unified Buffer。L0C Buffer中的数据通常为`Mmad`的输出,数据格式为`NZ`。搬运到Unified Buffer时,接口会根据目的张量格式自动选择`NZ`到`ND`、`NZ`到`DN`或`NZ`到`NZ`的随路格式转换。 | 34 | +Tensor API通过`Copy`接口统一执行不同通路数据搬运。该接口用于将L0C Buffer中的矩阵计算结果搬运到Unified Buffer(UB)。L0C Buffer中的数据通常为`Mmad`的输出,数据格式为`NZ`。搬运到UB时,接口会根据目的张量格式自动选择`NZ`到`ND`、`NZ`到`DN`或`NZ`到`NZ`的随路格式转换。 |
| 35 | 35 | ||
| 36 | -L0C Buffer到Unified Buffer搬运支持不量化输出、`float`到`half`或`bfloat16_t`的直接转换输出,以及配合标量或张量量化参数的随路量化输出。随路Relu、双目的模式和舍入方式通过`CopyL0C2UBTrait`配置。`Mmad`与`Fixpipe`细粒度并行相关的`unitFlag`通过`FixpipeParams`配置。 | 36 | +L0C Buffer到UB搬运支持不量化输出、`float`到`half`或`bfloat16_t`的直接转换输出,以及配合标量或张量量化参数的随路量化输出。随路Relu、双目的模式和舍入方式通过`CopyL0C2UBTrait`配置。`Mmad`与`Fixpipe`细粒度并行相关的`unitFlag`通过`FixpipeParams`配置。 |
| 37 | 37 | ||
| 38 | 接口支持batch模式。batch模式用于一次完成多块矩阵计算结果的搬运。Layout在原矩阵Layout最外层增加Batch维度。源张量为`NZ`格式,分形固定为16×16,可通过`MakeFrameLayout<NZLayoutPtn>(batch, m, n)`构造。目的张量可通过`MakeFrameLayout<NDLayoutPtn>(batch, m, n)`、`MakeFrameLayout<DNLayoutPtn>(batch, m, n)`、`MakeFrameLayout<NDExtLayoutPtn>(batch, m, n)`、`MakeFrameLayout<DNExtLayoutPtn>(batch, m, n)`或`MakeFrameLayout<NZLayoutPtn, DstType>(batch, m, n)`构造。`NZ`格式可通过模板参数`DstType`指定目的数据类型,`C0`表示NZ格式的列分形大小,默认为16。 | 38 | 接口支持batch模式。batch模式用于一次完成多块矩阵计算结果的搬运。Layout在原矩阵Layout最外层增加Batch维度。源张量为`NZ`格式,分形固定为16×16,可通过`MakeFrameLayout<NZLayoutPtn>(batch, m, n)`构造。目的张量可通过`MakeFrameLayout<NDLayoutPtn>(batch, m, n)`、`MakeFrameLayout<DNLayoutPtn>(batch, m, n)`、`MakeFrameLayout<NDExtLayoutPtn>(batch, m, n)`、`MakeFrameLayout<DNExtLayoutPtn>(batch, m, n)`或`MakeFrameLayout<NZLayoutPtn, DstType>(batch, m, n)`构造。`NZ`格式可通过模板参数`DstType`指定目的数据类型,`C0`表示NZ格式的列分形大小,默认为16。 |
| 39 | 39 | ||
| @@ -45,14 +45,14 @@ L0C Buffer到Unified Buffer搬运支持不量化输出、`float`到`half`或`bfl | |||
| 45 | 45 | ||
| 46 | ## 函数原型 | 46 | ## 函数原型 |
| 47 | 47 | ||
| 48 | -- 执行L0C Buffer到Unified Buffer的非量化搬运。 | 48 | +- 执行L0C Buffer到UB的非量化搬运。 |
| 49 | 49 | ||
| 50 | ```cpp | 50 | ```cpp |
| 51 | template <typename AtomType, typename DstTensor, typename SrcTensor> | 51 | template <typename AtomType, typename DstTensor, typename SrcTensor> |
| 52 | __aicore__ inline void Copy(const CopyAtom<AtomType>& atomCopy, const DstTensor& dst, const SrcTensor& src) | 52 | __aicore__ inline void Copy(const CopyAtom<AtomType>& atomCopy, const DstTensor& dst, const SrcTensor& src) |
| 53 | ``` | 53 | ``` |
| 54 | 54 | ||
| 55 | -- 执行L0C Buffer到Unified Buffer的量化搬运。 | 55 | +- 执行L0C Buffer到UB的量化搬运。 |
| 56 | 56 | ||
| 57 | ```cpp | 57 | ```cpp |
| 58 | template <typename AtomType, typename DstTensor, typename SrcTensor, typename QuantParam, | 58 | template <typename AtomType, typename DstTensor, typename SrcTensor, typename QuantParam, |
| @@ -91,12 +91,12 @@ L0C Buffer到Unified Buffer搬运支持不量化输出、`float`到`half`或`bfl | |||
| 91 | 91 | ||
| 92 | | 参数名 | 输入/输出 | 描述 | | 92 | | 参数名 | 输入/输出 | 描述 | |
| 93 | | :--- | :---: | :--- | | 93 | | :--- | :---: | :--- | |
| 94 | -| copyOperation | 输入 | 搬运操作对象。L0C Buffer到Unified Buffer搬运取`CopyL0C2UB{}`。 | | 94 | +| copyOperation | 输入 | 搬运操作对象。L0C Buffer到UB搬运取`CopyL0C2UB{}`。 | |
| 95 | -| copyTrait | 输入 | 搬运trait对象。L0C Buffer到Unified Buffer搬运默认取`CopyL0C2UBTraitDefault{}`。 | | 95 | +| copyTrait | 输入 | 搬运trait对象。L0C Buffer到UB搬运默认取`CopyL0C2UBTraitDefault{}`。 | |
| 96 | 96 | ||
| 97 | ### CopyL0C2UBTrait说明 | 97 | ### CopyL0C2UBTrait说明 |
| 98 | 98 | ||
| 99 | -`CopyL0C2UBTrait`用于配置L0C Buffer到Unified Buffer搬运的静态特性。 | 99 | +`CopyL0C2UBTrait`用于配置L0C Buffer到UB搬运的静态特性。 |
| 100 | 100 | ||
| 101 | ```cpp | 101 | ```cpp |
| 102 | struct CopyL0C2UBTrait { | 102 | struct CopyL0C2UBTrait { |
| @@ -152,11 +152,11 @@ struct FixpipeParams { | |||
| 152 | 152 | ||
| 153 | ## 数据类型 | 153 | ## 数据类型 |
| 154 | 154 | ||
| 155 | -L0C Buffer到Unified Buffer搬运根据是否传入量化参数自动选择量化模式。 | 155 | +L0C Buffer到UB搬运根据是否传入量化参数自动选择量化模式。 |
| 156 | 156 | ||
| 157 | **表5** 数据类型说明 | 157 | **表5** 数据类型说明 |
| 158 | 158 | ||
| 159 | -|源张量类型(L0C Buffer)|目的张量类型(Unified Buffer)|调用形式|说明| | 159 | +|源张量类型(L0C Buffer)|目的张量类型(UB)|调用形式|说明| |
| 160 | |--------|--------|--------|--------| | 160 | |--------|--------|--------|--------| |
| 161 | |`int32_t`|`int8_t`、`uint8_t`|`Copy(atom, dst, src, quant)`|scalar或tensor量化输出。| | 161 | |`int32_t`|`int8_t`、`uint8_t`|`Copy(atom, dst, src, quant)`|scalar或tensor量化输出。| |
| 162 | |`float`|`int8_t`、`uint8_t`|`Copy(atom, dst, src, quant)`|scalar或tensor量化输出。| | 162 | |`float`|`int8_t`、`uint8_t`|`Copy(atom, dst, src, quant)`|scalar或tensor量化输出。| |
| @@ -187,7 +187,7 @@ L0C Buffer到Unified Buffer搬运根据是否传入量化参数自动选择量 | |||
| 187 | 187 | ||
| 188 | ## 关键特性 | 188 | ## 关键特性 |
| 189 | 189 | ||
| 190 | -L0C Buffer到Unified Buffer搬运涉及[随路量化](../cube_store_key_features/quant_pre.md)、[随路Relu](../cube_store_key_features/relu_pre.md)、[Int8 Channel Merge](../cube_store_key_features/int8_channel_merge.md)、[L0C Buffer到Unified Buffer双目标模式](../cube_store_key_features/l0c_to_ub_dual_dst.md)和[batch搬运](../cube_store_key_features/batch_copy.md)等关键特性。 | 190 | +L0C Buffer到UB搬运涉及[随路量化](../cube_store_key_features/quant_pre.md)、[随路Relu](../cube_store_key_features/relu_pre.md)、[Int8 Channel Merge](../cube_store_key_features/int8_channel_merge.md)、[L0C Buffer到Unified Buffer双目标模式](../cube_store_key_features/l0c_to_ub_dual_dst.md)和[batch搬运](../cube_store_key_features/batch_copy.md)等关键特性。 |
| 191 | 191 | ||
| 192 | ## 调用示例 | 192 | ## 调用示例 |
| 193 | 193 | ||
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_TensorAPI/cube_compute_store/overall_description.md+2-2
| @@ -1,6 +1,6 @@ | |||
| 1 | # 矩阵计算的搬出总体说明 | 1 | # 矩阵计算的搬出总体说明 |
| 2 | 2 | ||
| 3 | -矩阵计算的搬出接口主要实现L0C Buffer与Global Memory、Unified Buffer之间的数据高效传输。 | 3 | +矩阵计算的搬出接口主要实现L0C Buffer与Global Memory、Unified Buffer(UB)之间的数据高效传输。 |
| 4 | 4 | ||
| 5 | 针对Ascend 950PR/Ascend 950DT: | 5 | 针对Ascend 950PR/Ascend 950DT: |
| 6 | 6 | ||
| @@ -13,4 +13,4 @@ | |||
| 13 | |源位置|源地址对齐要求|目的位置|目的地址对齐要求|格式转换|典型应用场景| | 13 | |源位置|源地址对齐要求|目的位置|目的地址对齐要求|格式转换|典型应用场景| |
| 14 | |--------|--------|--------|--------|--------|--------| | 14 | |--------|--------|--------|--------|--------|--------| |
| 15 | |L0C Buffer|64字节|Global Memory|1字节/32字节|NZ2ND、NZ2DN、NZ2NZ|从L0C Buffer搬出数据至Global Memory。| | 15 | |L0C Buffer|64字节|Global Memory|1字节/32字节|NZ2ND、NZ2DN、NZ2NZ|从L0C Buffer搬出数据至Global Memory。| |
| 16 | -|L0C Buffer|64字节|Unified Buffer|32字节|NZ2ND、NZ2DN、NZ2NZ|从L0C Buffer搬出数据至Unified Buffer。| | 16 | +|L0C Buffer|64字节|UB|32字节|NZ2ND、NZ2DN、NZ2NZ|从L0C Buffer搬出数据至UB。| |
| @@ -1,6 +1,6 @@ | |||
| 1 | # batch搬运 | 1 | # batch搬运 |
| 2 | 2 | ||
| 3 | -batch搬运是L0C Buffer到Global Memory或Unified Buffer搬运在矩阵最外层增加Batch维度的能力,用于一次完成多块矩阵计算结果的搬运。 | 3 | +batch搬运是L0C Buffer到Global Memory或Unified Buffer(UB)搬运在矩阵最外层增加Batch维度的能力,用于一次完成多块矩阵计算结果的搬运。 |
| 4 | 4 | ||
| 5 | ## 功能说明 | 5 | ## 功能说明 |
| 6 | 6 | ||
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_TensorAPI/cube_store_key_features/l0c_to_ub_dual_dst.md+6-6
| @@ -1,6 +1,6 @@ | |||
| 1 | # L0C Buffer到Unified Buffer双目标模式 | 1 | # L0C Buffer到Unified Buffer双目标模式 |
| 2 | 2 | ||
| 3 | -L0C Buffer到Unified Buffer双目标模式用于将同一AI Core内L0C Buffer的矩阵结果拆分后,同时写入两个Vector Core各自的Unified Buffer。一个AI Core内包含一个Cube Core和两个Vector Core,启用双目标模式后,源矩阵会按指定维度拆分为两部分,前半部分写入SUB BLOCK0,后半部分写入SUB BLOCK1。 | 3 | +L0C Buffer到Unified Buffer(UB)双目标模式用于将同一AI Core内L0C Buffer的矩阵结果拆分后,同时写入两个Vector Core各自的UB。一个AI Core内包含一个Cube Core和两个Vector Core,启用双目标模式后,源矩阵会按指定维度拆分为两部分,前半部分写入SUB BLOCK0,后半部分写入SUB BLOCK1。 |
| 4 | 4 | ||
| 5 | Tensor API通过`CopyL0C2UBTrait::dualDstCtl`控制双目标模式。 | 5 | Tensor API通过`CopyL0C2UBTrait::dualDstCtl`控制双目标模式。 |
| 6 | 6 | ||
| @@ -8,9 +8,9 @@ Tensor API通过`CopyL0C2UBTrait::dualDstCtl`控制双目标模式。 | |||
| 8 | 8 | ||
| 9 | |取值|说明| | 9 | |取值|说明| |
| 10 | |--------|--------| | 10 | |--------|--------| |
| 11 | -|`DUAL_DST_DISABLE`|单目标模式。整个矩阵写入默认目标Unified Buffer。| | 11 | +|`DUAL_DST_DISABLE`|单目标模式。整个矩阵写入默认目标UB。| |
| 12 | -|`DUAL_DST_SPLIT_M`|双目标模式,按M维度拆分。源矩阵拆分为两个形状为`M / 2 * N`的矩阵,分别写入两个Unified Buffer。| | 12 | +|`DUAL_DST_SPLIT_M`|双目标模式,按M维度拆分。源矩阵拆分为两个形状为`M / 2 * N`的矩阵,分别写入两个UB。| |
| 13 | -|`DUAL_DST_SPLIT_N`|双目标模式,按N维度拆分。源矩阵拆分为两个形状为`M * N / 2`的矩阵,分别写入两个Unified Buffer。| | 13 | +|`DUAL_DST_SPLIT_N`|双目标模式,按N维度拆分。源矩阵拆分为两个形状为`M * N / 2`的矩阵,分别写入两个UB。| |
| 14 | 14 | ||
| 15 | ## 使用示例 | 15 | ## 使用示例 |
| 16 | 16 | ||
| @@ -46,7 +46,7 @@ N方向切分示例: | |||
| 46 | M方向切分示例: | 46 | M方向切分示例: |
| 47 | 47 | ||
| 48 | - `nSize = 32`,表示源NZ矩阵中待搬运矩阵在N方向上的大小为32个元素。 | 48 | - `nSize = 32`,表示源NZ矩阵中待搬运矩阵在N方向上的大小为32个元素。 |
| 49 | -- `mSize = 24`,表示每个目标Unified Buffer接收的M方向大小,源矩阵M方向总大小为48个元素。 | 49 | +- `mSize = 24`,表示每个目标UB接收的M方向大小,源矩阵M方向总大小为48个元素。 |
| 50 | - `srcStride = 64`,表示源NZ矩阵中相邻Z排布的起始地址偏移为`64 * C0_SIZE`。 | 50 | - `srcStride = 64`,表示源NZ矩阵中相邻Z排布的起始地址偏移为`64 * C0_SIZE`。 |
| 51 | - `dstStride = 40 * C0`,表示目的NZ矩阵中相邻Z排布的起始地址偏移为`40 * 16`个元素。 | 51 | - `dstStride = 40 * C0`,表示目的NZ矩阵中相邻Z排布的起始地址偏移为`40 * 16`个元素。 |
| 52 | 52 | ||
| @@ -72,7 +72,7 @@ M方向切分示例: | |||
| 72 | 72 | ||
| 73 | ## 约束说明 | 73 | ## 约束说明 |
| 74 | 74 | ||
| 75 | -- 双目标模式仅支持L0C Buffer到Unified Buffer通路。 | 75 | +- 双目标模式仅支持L0C Buffer到UB通路。 |
| 76 | - 双目标模式支持普通搬运模式NZ2NZ和NZ2ND搬运场景。 | 76 | - 双目标模式支持普通搬运模式NZ2NZ和NZ2ND搬运场景。 |
| 77 | - 按M维度拆分时,M必须为2的倍数。 | 77 | - 按M维度拆分时,M必须为2的倍数。 |
| 78 | - 按N维度拆分时,N必须为32的倍数。 | 78 | - 按N维度拆分时,N必须为32的倍数。 |
| @@ -1,6 +1,6 @@ | |||
| 1 | # 随路量化 | 1 | # 随路量化 |
| 2 | 2 | ||
| 3 | -随路量化是矩阵计算结果从L0C Buffer搬出到Global Memory或Unified Buffer过程中的数据转换能力。L0C Buffer到Global Memory/Unified Buffer搬运根据是否传入`quant`参数自动选择不量化、直接cast、scalar量化或tensor量化模式。 | 3 | +随路量化是矩阵计算结果从L0C Buffer搬出到Global Memory或Unified Buffer(UB)过程中的数据转换能力。L0C Buffer到Global Memory/UB搬运根据是否传入`quant`参数自动选择不量化、直接cast、scalar量化或tensor量化模式。 |
| 4 | 4 | ||
| 5 | ## 调用形式 | 5 | ## 调用形式 |
| 6 | 6 | ||
| @@ -1,6 +1,6 @@ | |||
| 1 | # 随路Relu | 1 | # 随路Relu |
| 2 | 2 | ||
| 3 | -随路Relu是矩阵计算结果从L0C Buffer搬出到Global Memory或Unified Buffer过程中的随路激活能力。Tensor API通过`CopyL0C2GMTrait::enableRelu`或`CopyL0C2UBTrait::enableRelu`控制是否使能该能力。 | 3 | +随路Relu是矩阵计算结果从L0C Buffer搬出到Global Memory或Unified Buffer(UB)过程中的随路激活能力。Tensor API通过`CopyL0C2GMTrait::enableRelu`或`CopyL0C2UBTrait::enableRelu`控制是否使能该能力。 |
| 4 | 4 | ||
| 5 | ## 功能说明 | 5 | ## 功能说明 |
| 6 | 6 | ||
| @@ -23,7 +23,7 @@ auto atom = MakeCopy(CopyL0C2GM{}, CopyL0C2GMTraitCustom{}).with(params); | |||
| 23 | Copy(atom, gm, l0c); | 23 | Copy(atom, gm, l0c); |
| 24 | ``` | 24 | ``` |
| 25 | 25 | ||
| 26 | -L0C Buffer到Unified Buffer搬运同样通过`CopyL0C2UBTrait::enableRelu`控制: | 26 | +L0C Buffer到UB搬运同样通过`CopyL0C2UBTrait::enableRelu`控制: |
| 27 | 27 | ||
| 28 | ```cpp | 28 | ```cpp |
| 29 | constexpr CopyL0C2UBTrait l0c2ubTrait = { | 29 | constexpr CopyL0C2UBTrait l0c2ubTrait = { |
| @@ -45,7 +45,7 @@ Copy(atom, ub, l0c); | |||
| 45 | 45 | ||
| 46 | ## 支持范围 | 46 | ## 支持范围 |
| 47 | 47 | ||
| 48 | -根据底层Fixpipe的能力,随路Relu包含Normal Relu、Leaky Relu和PRelu等模式。当前Tensor API的L0C Buffer到Global Memory/Unified Buffer搬运通过`enableRelu`暴露Normal Relu能力,当前不支持随路PRelu。 | 48 | +根据底层Fixpipe的能力,随路Relu包含Normal Relu、Leaky Relu和PRelu等模式。当前Tensor API的L0C Buffer到Global Memory/UB搬运通过`enableRelu`暴露Normal Relu能力,当前不支持随路PRelu。 |
| 49 | 49 | ||
| 50 | ## 约束说明 | 50 | ## 约束说明 |
| 51 | 51 | ||
| @@ -128,7 +128,7 @@ CubeResGroupHandle对象实例。 | |||
| 128 | - 假设芯片的AIV核数为x,那么blockStart + blockSize <= x - 1, msgQueueSize <= x。 | 128 | - 假设芯片的AIV核数为x,那么blockStart + blockSize <= x - 1, msgQueueSize <= x。 |
| 129 | - 每个AIC至少被分配1个msgQueue。 | 129 | - 每个AIC至少被分配1个msgQueue。 |
| 130 | - blockStart和blockSize必须为偶数。 | 130 | - blockStart和blockSize必须为偶数。 |
| 131 | -- 使用该接口,UB空间末尾的1600B + sizeof\(CubeMsgType\)将被占用。 | 131 | +- 使用该接口,Unified Buffer(UB)空间末尾的1600B + sizeof\(CubeMsgType\)将被占用。 |
| 132 | - 1个AIC只能属于1个CubeGroupHandle,即多个CubeGroupHandle的\[blockStart / 2, blockStart / 2 + blockSize / 2\]区间不能重叠。 | 132 | - 1个AIC只能属于1个CubeGroupHandle,即多个CubeGroupHandle的\[blockStart / 2, blockStart / 2 + blockSize / 2\]区间不能重叠。 |
| 133 | - 不能和[REGIST\_MATMUL\_OBJ](../../../adv_api/cube_compute/Matmul_Kernel/REGIST_MATMUL_OBJ.md)接口同时使用。使用资源管理API时,用户自主管理AIC和AIV的核间通信,REGIST\_MATMUL\_OBJ内部是由框架管理AIC和AIV的核间通信,同时使用可能会导致通信消息错误等异常。 | 133 | - 不能和[REGIST\_MATMUL\_OBJ](../../../adv_api/cube_compute/Matmul_Kernel/REGIST_MATMUL_OBJ.md)接口同时使用。使用资源管理API时,用户自主管理AIC和AIV的核间通信,REGIST\_MATMUL\_OBJ内部是由框架管理AIC和AIV的核间通信,同时使用可能会导致通信消息错误等异常。 |
| 134 | 134 | ||
Mdocs/zh/api/SIMD-API/basic_api/cube_group_mgmt_ISASI/CubeResGroupHandle/CubeResGroupHandle_constructor.md+1-1
| @@ -99,7 +99,7 @@ __aicore__ inline CubeResGroupHandle(GM_ADDR workspace, uint8_t blockStart, uint | |||
| 99 | - 假设芯片的AIV核数为x,那么blockStart + blockSize <= x - 1, msgQueueSize <= x。 | 99 | - 假设芯片的AIV核数为x,那么blockStart + blockSize <= x - 1, msgQueueSize <= x。 |
| 100 | - 每个AIC至少被分配1个消息队列msgQueue。 | 100 | - 每个AIC至少被分配1个消息队列msgQueue。 |
| 101 | - blockStart和blockSize必须为偶数。 | 101 | - blockStart和blockSize必须为偶数。 |
| 102 | -- 使用该接口,UB空间末尾的1600B + sizeof\(CubeMsgType\)将被占用。 | 102 | +- 使用该接口,Unified Buffer(UB)空间末尾的1600B + sizeof\(CubeMsgType\)将被占用。 |
| 103 | - 1个AIC只能属于1个CubeGroupHandle,即多个CubeGroupHandle的\[blockStart / 2, blockStart / 2+blockSize / 2\]区间不能重叠。 | 103 | - 1个AIC只能属于1个CubeGroupHandle,即多个CubeGroupHandle的\[blockStart / 2, blockStart / 2+blockSize / 2\]区间不能重叠。 |
| 104 | - 不能和[REGIST\_MATMUL\_OBJ](../../../adv_api/cube_compute/Matmul_Kernel/REGIST_MATMUL_OBJ.md)接口同时使用。使用资源管理API时,用户自主管理AIC和AIV的核间通信,REGIST\_MATMUL\_OBJ内部是由框架管理AIC和AIV的核间通信,同时使用可能会导致通信消息错误等异常。 | 104 | - 不能和[REGIST\_MATMUL\_OBJ](../../../adv_api/cube_compute/Matmul_Kernel/REGIST_MATMUL_OBJ.md)接口同时使用。使用资源管理API时,用户自主管理AIC和AIV的核间通信,REGIST\_MATMUL\_OBJ内部是由框架管理AIC和AIV的核间通信,同时使用可能会导致通信消息错误等异常。 |
| 105 | 105 | ||
| @@ -102,7 +102,7 @@ GroupBarrier对象实例。 | |||
| 102 | 102 | ||
| 103 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> | 103 | ## 约束说明<a name="zh-cn_topic_0000001526206862_section65498832"></a> |
| 104 | 104 | ||
| 105 | -- 使用该接口时,UB空间末尾的1600B被占用。 | 105 | +- 使用该接口时,Unified Buffer(UB)空间末尾的1600B被占用。 |
| 106 | - 不能和[REGIST\_MATMUL\_OBJ](../../../adv_api/cube_compute/Matmul_Kernel/REGIST_MATMUL_OBJ.md)接口同时使用。使用资源管理API时,用户自主管理AIC和AIV的核间通信,REGIST\_MATMUL\_OBJ内部是由框架管理AIC和AIV的核间通信,同时使用可能会导致通信消息错误等异常。 | 106 | - 不能和[REGIST\_MATMUL\_OBJ](../../../adv_api/cube_compute/Matmul_Kernel/REGIST_MATMUL_OBJ.md)接口同时使用。使用资源管理API时,用户自主管理AIC和AIV的核间通信,REGIST\_MATMUL\_OBJ内部是由框架管理AIC和AIV的核间通信,同时使用可能会导致通信消息错误等异常。 |
| 107 | 107 | ||
| 108 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> | 108 | ## 调用示例<a name="zh-cn_topic_0000001526206862_section97001499599"></a> |
| @@ -16,21 +16,21 @@ Global Memory(GM)与Unified Buffer(UB)之间的数据搬运提供了多 | |||
| 16 | | UB->GM | 高维切分数据搬运(DataCopy) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | | 16 | | UB->GM | 高维切分数据搬运(DataCopy) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | |
| 17 | | GM->UB | 切片数据搬运(DataCopy) | 该接口为软仿接口,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。 | | 17 | | GM->UB | 切片数据搬运(DataCopy) | 该接口为软仿接口,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。 | |
| 18 | | UB->GM | 切片数据搬运(DataCopy) | 该接口为软仿接口,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。 | | 18 | | UB->GM | 切片数据搬运(DataCopy) | 该接口为软仿接口,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。 | |
| 19 | -| GM->UB | 随路转换ND2NZ搬运(DataCopy) | 该接口为软仿接口,支持在从Global Memory到Unified Buffer的数据搬运过程中进行ND到NZ格式的转换。 | | 19 | +| GM->UB | 随路转换ND2NZ搬运(DataCopy) | 该接口为软仿接口,支持在从Global Memory到UB的数据搬运过程中进行ND到NZ格式的转换。 | |
| 20 | -| UB->GM | 随路转换NZ2ND搬运(DataCopy) | 该接口为软仿接口,支持在从Unified Buffer到Global Memory的数据搬运过程中进行NZ到ND格式的转换。 | | 20 | +| UB->GM | 随路转换NZ2ND搬运(DataCopy) | 该接口为软仿接口,支持在从UB到Global Memory的数据搬运过程中进行NZ到ND格式的转换。 | |
| 21 | | GM->UB | 多维数据搬运NDDMA(DataCopy) | 多维数据搬运接口,相比于基础数据搬运接口,可更加自由配置搬入的维度信息以及对应的Stride。 | | 21 | | GM->UB | 多维数据搬运NDDMA(DataCopy) | 多维数据搬运接口,相比于基础数据搬运接口,可更加自由配置搬入的维度信息以及对应的Stride。 | |
| 22 | | GM->UB | 非对齐数据搬运(DataCopyPad) | 支持数据的非对齐搬运,搬运到UB时可以自行填充数据。 | | 22 | | GM->UB | 非对齐数据搬运(DataCopyPad) | 支持数据的非对齐搬运,搬运到UB时可以自行填充数据。 | |
| 23 | | UB->GM | 非对齐数据搬运(DataCopyPad) | 支持数据的非对齐搬运。 | | 23 | | UB->GM | 非对齐数据搬运(DataCopyPad) | 支持数据的非对齐搬运。 | |
| 24 | 24 | ||
| 25 | ## DataCopy(GM与UB连续数据搬运)<a name="ZH-CN_TOPIC_0000002382908021"></a> | 25 | ## DataCopy(GM与UB连续数据搬运)<a name="ZH-CN_TOPIC_0000002382908021"></a> |
| 26 | 26 | ||
| 27 | -支持Global Memory与Unified Buffer之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | 27 | +支持Global Memory与UB之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 |
| 28 | 28 | ||
| 29 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 29 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 30 | 30 | ||
| 31 | -- Global Memory -> Unified Buffer | 31 | +- Global Memory -> UB |
| 32 | - GM -> VECIN | 32 | - GM -> VECIN |
| 33 | -- Unified Buffer -> Global Memory | 33 | +- UB -> Global Memory |
| 34 | - VECOUT -> GM | 34 | - VECOUT -> GM |
| 35 | <!-- npu="310p" id1 --> | 35 | <!-- npu="310p" id1 --> |
| 36 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 36 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -40,14 +40,14 @@ Global Memory(GM)与Unified Buffer(UB)之间的数据搬运提供了多 | |||
| 40 | 40 | ||
| 41 | src和dst分别为源操作数和目的操作数;count为连续搬运的元素个数。 | 41 | src和dst分别为源操作数和目的操作数;count为连续搬运的元素个数。 |
| 42 | 42 | ||
| 43 | -- Global Memory -> Unified Buffer | 43 | +- Global Memory -> UB |
| 44 | 44 | ||
| 45 | ```cpp | 45 | ```cpp |
| 46 | template <typename T> | 46 | template <typename T> |
| 47 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const uint32_t count) | 47 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const uint32_t count) |
| 48 | ``` | 48 | ``` |
| 49 | 49 | ||
| 50 | -- Unified Buffer -> Global Memory | 50 | +- UB -> Global Memory |
| 51 | 51 | ||
| 52 | ```cpp | 52 | ```cpp |
| 53 | template <typename T> | 53 | template <typename T> |
| @@ -56,15 +56,15 @@ src和dst分别为源操作数和目的操作数;count为连续搬运的元素 | |||
| 56 | 56 | ||
| 57 | ## DataCopy(GM与UB高维切分数据搬运)<a name="ZH-CN_TOPIC_00000023829080211"></a> | 57 | ## DataCopy(GM与UB高维切分数据搬运)<a name="ZH-CN_TOPIC_00000023829080211"></a> |
| 58 | 58 | ||
| 59 | -支持Global Memory与Unified Buffer之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | 59 | +支持Global Memory与UB之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 |
| 60 | 60 | ||
| 61 | 高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。 | 61 | 高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。 |
| 62 | 62 | ||
| 63 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 63 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 64 | 64 | ||
| 65 | -- Global Memory -> Unified Buffer | 65 | +- Global Memory -> UB |
| 66 | - GM -> VECIN | 66 | - GM -> VECIN |
| 67 | -- Unified Buffer -> Global Memory | 67 | +- UB -> Global Memory |
| 68 | - VECOUT -> GM | 68 | - VECOUT -> GM |
| 69 | <!-- npu="310p" id2 --> | 69 | <!-- npu="310p" id2 --> |
| 70 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 70 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -74,14 +74,14 @@ src和dst分别为源操作数和目的操作数;count为连续搬运的元素 | |||
| 74 | 74 | ||
| 75 | src和dst分别为源操作数和目的操作数;repeatParams为DataCopyParams类型的搬运参数,通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。 | 75 | src和dst分别为源操作数和目的操作数;repeatParams为DataCopyParams类型的搬运参数,通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。 |
| 76 | 76 | ||
| 77 | -- Global Memory -> Unified Buffer | 77 | +- Global Memory -> UB |
| 78 | 78 | ||
| 79 | ```cpp | 79 | ```cpp |
| 80 | template <typename T> | 80 | template <typename T> |
| 81 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& repeatParams) | 81 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& repeatParams) |
| 82 | ``` | 82 | ``` |
| 83 | 83 | ||
| 84 | -- Unified Buffer -> Global Memory | 84 | +- UB -> Global Memory |
| 85 | 85 | ||
| 86 | ```cpp | 86 | ```cpp |
| 87 | template <typename T> | 87 | template <typename T> |
| @@ -94,9 +94,9 @@ src和dst分别为源操作数和目的操作数;repeatParams为DataCopyParams | |||
| 94 | 94 | ||
| 95 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 95 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 96 | 96 | ||
| 97 | -- Global Memory -> Unified Buffer | 97 | +- Global Memory -> UB |
| 98 | - GM -> VECIN | 98 | - GM -> VECIN |
| 99 | -- Unified Buffer -> Global Memory | 99 | +- UB -> Global Memory |
| 100 | - VECOUT -> GM | 100 | - VECOUT -> GM |
| 101 | <!-- npu="310p" id3 --> | 101 | <!-- npu="310p" id3 --> |
| 102 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 102 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -106,14 +106,14 @@ src和dst分别为源操作数和目的操作数;repeatParams为DataCopyParams | |||
| 106 | 106 | ||
| 107 | src和dst分别为源操作数和目的操作数;dstSliceInfo和srcSliceInfo分别为目的和源操作数的切片信息,类型为SliceInfo;dimValue为操作数维度信息。 | 107 | src和dst分别为源操作数和目的操作数;dstSliceInfo和srcSliceInfo分别为目的和源操作数的切片信息,类型为SliceInfo;dimValue为操作数维度信息。 |
| 108 | 108 | ||
| 109 | -- Global Memory -> Unified Buffer | 109 | +- Global Memory -> UB |
| 110 | 110 | ||
| 111 | ```cpp | 111 | ```cpp |
| 112 | template <typename T> | 112 | template <typename T> |
| 113 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const SliceInfo dstSliceInfo[], const SliceInfo srcSliceInfo[], const uint32_t dimValue = 1) | 113 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const SliceInfo dstSliceInfo[], const SliceInfo srcSliceInfo[], const uint32_t dimValue = 1) |
| 114 | ``` | 114 | ``` |
| 115 | 115 | ||
| 116 | -- Unified Buffer -> Global Memory | 116 | +- UB -> Global Memory |
| 117 | 117 | ||
| 118 | ```cpp | 118 | ```cpp |
| 119 | template <typename T> | 119 | template <typename T> |
| @@ -122,11 +122,11 @@ src和dst分别为源操作数和目的操作数;dstSliceInfo和srcSliceInfo | |||
| 122 | 122 | ||
| 123 | ## DataCopy(GM -> UB随路转换ND2NZ搬运)<a name="ZH-CN_TOPIC_0000002349187356"></a> | 123 | ## DataCopy(GM -> UB随路转换ND2NZ搬运)<a name="ZH-CN_TOPIC_0000002349187356"></a> |
| 124 | 124 | ||
| 125 | -该接口为软仿接口,从易用性角度出发进行设计,支持在从Global Memory到Unified Buffer的数据搬运过程中进行ND到NZ格式的转换。 | 125 | +该接口为软仿接口,从易用性角度出发进行设计,支持在从Global Memory到UB的数据搬运过程中进行ND到NZ格式的转换。 |
| 126 | 126 | ||
| 127 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 127 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 128 | 128 | ||
| 129 | -- Global Memory -> Unified Buffer | 129 | +- Global Memory -> UB |
| 130 | - GM -> VECIN | 130 | - GM -> VECIN |
| 131 | 131 | ||
| 132 | 搬运的数据用于[矢量计算](../memory_vector_compute/memory_vector_compute.md),具体的接口请参考:[DataCopy(GM -> UB随路转换ND2NZ搬运)](../memory_vector_compute/data_move/DataCopy_GMToUB_ND2NZ.md)。 | 132 | 搬运的数据用于[矢量计算](../memory_vector_compute/memory_vector_compute.md),具体的接口请参考:[DataCopy(GM -> UB随路转换ND2NZ搬运)](../memory_vector_compute/data_move/DataCopy_GMToUB_ND2NZ.md)。 |
| @@ -151,11 +151,11 @@ src和dst分别为源操作数和目的操作数;intriParams为Nd2NzParams类 | |||
| 151 | 151 | ||
| 152 | ## DataCopy(UB -> GM随路转换NZ2ND搬运)<a name="ZH-CN_TOPIC_0000002391805265"></a> | 152 | ## DataCopy(UB -> GM随路转换NZ2ND搬运)<a name="ZH-CN_TOPIC_0000002391805265"></a> |
| 153 | 153 | ||
| 154 | -该接口为软仿接口,从易用性角度出发进行设计,支持在从Unified Buffer到Global Memory的数据搬运过程中进行NZ到ND格式的转换。 | 154 | +该接口为软仿接口,从易用性角度出发进行设计,支持在从UB到Global Memory的数据搬运过程中进行NZ到ND格式的转换。 |
| 155 | 155 | ||
| 156 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 156 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 157 | 157 | ||
| 158 | -- Unified Buffer -> Global Memory | 158 | +- UB -> Global Memory |
| 159 | - VECOUT -> GM | 159 | - VECOUT -> GM |
| 160 | <!-- npu="310p" id5 --> | 160 | <!-- npu="310p" id5 --> |
| 161 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 161 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -176,14 +176,14 @@ __aicore__ inline void DataCopy(const GlobalTensor<T>& dst, const LocalTensor<T> | |||
| 176 | 176 | ||
| 177 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 177 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 178 | 178 | ||
| 179 | -- Global Memory -> Unified Buffer | 179 | +- Global Memory -> UB |
| 180 | - GM -> VECIN | 180 | - GM -> VECIN |
| 181 | 181 | ||
| 182 | 搬运的数据用于[矢量计算](../memory_vector_compute/memory_vector_compute.md),具体的接口请参考:[DataCopy(GM -> UB多维数据搬运NDDMA)](../memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md)。 | 182 | 搬运的数据用于[矢量计算](../memory_vector_compute/memory_vector_compute.md),具体的接口请参考:[DataCopy(GM -> UB多维数据搬运NDDMA)](../memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md)。 |
| 183 | 183 | ||
| 184 | src和dst分别为源操作数和目的操作数;params为NdDmaParams类型的搬运参数,配置多维度搬运信息。 | 184 | src和dst分别为源操作数和目的操作数;params为NdDmaParams类型的搬运参数,配置多维度搬运信息。 |
| 185 | 185 | ||
| 186 | -- Global Memory -> Unified Buffer,支持多维度搬运 | 186 | +- Global Memory -> UB,支持多维度搬运 |
| 187 | 187 | ||
| 188 | ```cpp | 188 | ```cpp |
| 189 | template <typename T, uint8_t dim, const NdDmaConfig& config = kDefaultNdDmaConfig> | 189 | template <typename T, uint8_t dim, const NdDmaConfig& config = kDefaultNdDmaConfig> |
| @@ -198,7 +198,7 @@ src和dst分别为源操作数和目的操作数;params为NdDmaParams类型的 | |||
| 198 | 198 | ||
| 199 | ## DataCopyPad(GM -> UB非对齐数据搬运)<a name="ZH-CN_TOPIC_0000001894460401"></a> | 199 | ## DataCopyPad(GM -> UB非对齐数据搬运)<a name="ZH-CN_TOPIC_0000001894460401"></a> |
| 200 | 200 | ||
| 201 | -该接口提供将数据从Global Memory非对齐搬运至Unified Buffer的功能,可以根据开发者的需要自行填充数据。当每个搬运的数据块长度(blockLen)非32字节对齐时,每一个数据块都需要填充数据至32字节对齐。 | 201 | +该接口提供将数据从Global Memory非对齐搬运至UB的功能,可以根据开发者的需要自行填充数据。当每个搬运的数据块长度(blockLen)非32字节对齐时,每一个数据块都需要填充数据至32字节对齐。 |
| 202 | 202 | ||
| 203 | <!-- npu="950" id6 --> | 203 | <!-- npu="950" id6 --> |
| 204 | 特别地,针对Ascend 950PR/Ascend 950DT,支持Compact模式,该模式支持单个数据块非32字节对齐,将所有数据块合并成一个连续数据块,在该数据块右侧填充数据至32字节对齐。 | 204 | 特别地,针对Ascend 950PR/Ascend 950DT,支持Compact模式,该模式支持单个数据块非32字节对齐,将所有数据块合并成一个连续数据块,在该数据块右侧填充数据至32字节对齐。 |
| @@ -206,7 +206,7 @@ src和dst分别为源操作数和目的操作数;params为NdDmaParams类型的 | |||
| 206 | 206 | ||
| 207 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 207 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 208 | 208 | ||
| 209 | -- Global Memory -> Unified Buffer | 209 | +- Global Memory -> UB |
| 210 | - GM -> VECIN | 210 | - GM -> VECIN |
| 211 | - GM -> VECOUT | 211 | - GM -> VECOUT |
| 212 | <!-- npu="950" id7 --> | 212 | <!-- npu="950" id7 --> |
| @@ -235,13 +235,13 @@ src和dst分别为源操作数和目的操作数;dataCopyParams为DataCopyExtP | |||
| 235 | 235 | ||
| 236 | ## DataCopyPad(UB -> GM非对齐数据搬运)<a name="ZH-CN_TOPIC_0000001894460502"></a> | 236 | ## DataCopyPad(UB -> GM非对齐数据搬运)<a name="ZH-CN_TOPIC_0000001894460502"></a> |
| 237 | 237 | ||
| 238 | -该接口提供将数据从Unified Buffer非对齐搬运至Global Memory的功能。 | 238 | +该接口提供将数据从UB非对齐搬运至Global Memory的功能。 |
| 239 | 239 | ||
| 240 | -对于非32字节对齐的场景,在读取Unified Buffer数据时会填入dummy假数据对齐到32B,搬入Global Memory时会将dummy空数据丢弃,从而实现Unified Buffer到Global Memory的非对齐搬运。 | 240 | +对于非32字节对齐的场景,在读取UB数据时会填入dummy假数据对齐到32B,搬入Global Memory时会将dummy空数据丢弃,从而实现UB到Global Memory的非对齐搬运。 |
| 241 | 241 | ||
| 242 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 242 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 243 | 243 | ||
| 244 | -- Unified Buffer -> Global Memory | 244 | +- UB -> Global Memory |
| 245 | - VECIN -> GM | 245 | - VECIN -> GM |
| 246 | - VECOUT -> GM | 246 | - VECOUT -> GM |
| 247 | 247 | ||
| @@ -2,28 +2,28 @@ | |||
| 2 | 2 | ||
| 3 | ## 总体说明<a name="ZH-CN_TOPIC_0000002574022823"></a> | 3 | ## 总体说明<a name="ZH-CN_TOPIC_0000002574022823"></a> |
| 4 | 4 | ||
| 5 | -L1 Buffer/L0C Buffer与Unified Buffer之间的数据搬运提供了灵活的接口支持,能够充分适配多样化的计算场景(见[表1](#zh-cn_topic_0000002534897870_table1417935217588))。其中,Unified Buffer-\>L1 Buffer的数据搬运用于矩阵计算(参考[矩阵计算的搬入](../cube_compute_ISASI/cube_compute_load/cube_compute_load.md)),L0C Buffer-\>Unified Buffer、L1 Buffer-\>Unified Buffer用于将矩阵计算结果搬出,完成矩阵计算的输出流程(参考[矩阵计算的搬出](../cube_compute_ISASI/cube_compute_store/cube_compute_store.md))。 | 5 | +L1 Buffer/L0C Buffer与Unified Buffer(UB)之间的数据搬运提供了灵活的接口支持,能够充分适配多样化的计算场景(见[表1](#zh-cn_topic_0000002534897870_table1417935217588))。其中,UB-\>L1 Buffer的数据搬运用于矩阵计算(参考[矩阵计算的搬入](../cube_compute_ISASI/cube_compute_load/cube_compute_load.md)),L0C Buffer-\>UB、L1 Buffer-\>UB用于将矩阵计算结果搬出,完成矩阵计算的输出流程(参考[矩阵计算的搬出](../cube_compute_ISASI/cube_compute_store/cube_compute_store.md))。 |
| 6 | 6 | ||
| 7 | -**表 1** L1 Buffer/L0C Buffer与Unified Buffer数据搬运接口概述<a name="zh-cn_topic_0000002534897870_table1417935217588"></a> | 7 | +**表 1** L1 Buffer/L0C Buffer与UB数据搬运接口概述<a name="zh-cn_topic_0000002534897870_table1417935217588"></a> |
| 8 | 8 | ||
| 9 | | 数据通路 | 功能 | 描述 | | 9 | | 数据通路 | 功能 | 描述 | |
| 10 | |----------|------|------| | 10 | |----------|------|------| |
| 11 | -| Unified Buffer->L1 Buffer | 连续数据搬运(DataCopy) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。 | | 11 | +| UB->L1 Buffer | 连续数据搬运(DataCopy) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。 | |
| 12 | -| Unified Buffer->L1 Buffer | 高维切分数据搬运(DataCopy) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | | 12 | +| UB->L1 Buffer | 高维切分数据搬运(DataCopy) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | |
| 13 | -| Unified Buffer->L1 Buffer | 随路转换-[ND2NZ](<../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md#ZH-CN_TOPIC_0000002568950893>)搬运(DataCopy) | 支持在数据搬运时进行[ND](<../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md#zh-cn_topic_0000002545089965_section958745018719>)到[NZ](<../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md#zh-cn_topic_0000002545089965_section363412741113>)格式的转换。 | | 13 | +| UB->L1 Buffer | 随路转换-[ND2NZ](<../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md#ZH-CN_TOPIC_0000002568950893>)搬运(DataCopy) | 支持在数据搬运时进行[ND](<../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md#zh-cn_topic_0000002545089965_section958745018719>)到[NZ](<../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md#zh-cn_topic_0000002545089965_section363412741113>)格式的转换。 | |
| 14 | -| Unified Buffer->L1 Buffer | 非对齐数据搬运(DataCopyPad) | 支持数据非对齐搬运,可以根据开发者的需要自行填充数据。 | | 14 | +| UB->L1 Buffer | 非对齐数据搬运(DataCopyPad) | 支持数据非对齐搬运,可以根据开发者的需要自行填充数据。 | |
| 15 | -| L0C Buffer->Unified Buffer | 随路转换与量化(DataCopy) | 支持多种随路能力的组合,DataCopy接口内包含了设置寄存器与数据搬运能力。 | | 15 | +| L0C Buffer->UB | 随路转换与量化(DataCopy) | 支持多种随路能力的组合,DataCopy接口内包含了设置寄存器与数据搬运能力。 | |
| 16 | -| L0C Buffer->Unified Buffer | 随路量化激活搬运(FixPipe) | 支持多种随路能力的组合,FixPipe接口内包含了设置寄存器与数据搬运能力。 | | 16 | +| L0C Buffer->UB | 随路量化激活搬运(FixPipe) | 支持多种随路能力的组合,FixPipe接口内包含了设置寄存器与数据搬运能力。 | |
| 17 | -| L1 Buffer->Unified Buffer | 连续数据搬运(DataCopyL1ToUB) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。 | | 17 | +| L1 Buffer->UB | 连续数据搬运(DataCopyL1ToUB) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。 | |
| 18 | -| L1 Buffer->Unified Buffer | 高维切分数据搬运(DataCopyL1ToUB) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | | 18 | +| L1 Buffer->UB | 高维切分数据搬运(DataCopyL1ToUB) | 提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。 | |
| 19 | 19 | ||
| 20 | ## DataCopy(UBToL1连续数据搬运) | 20 | ## DataCopy(UBToL1连续数据搬运) |
| 21 | 21 | ||
| 22 | -DataCopy能够实现Unified Buffer到L1 Buffer的连续数据搬运,数据搬运时格式和内容保持不变。 | 22 | +DataCopy能够实现UB到L1 Buffer的连续数据搬运,数据搬运时格式和内容保持不变。 |
| 23 | 23 | ||
| 24 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 24 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 25 | 25 | ||
| 26 | -- Unified Buffer -> L1 Buffer | 26 | +- UB -> L1 Buffer |
| 27 | - UB -> C1 | 27 | - UB -> C1 |
| 28 | 28 | ||
| 29 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopy(UBToL1连续数据搬运)](../cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md)。 | 29 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopy(UBToL1连续数据搬运)](../cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md)。 |
| @@ -37,13 +37,13 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 37 | 37 | ||
| 38 | ## DataCopy(UBToL1高维切分数据搬运) | 38 | ## DataCopy(UBToL1高维切分数据搬运) |
| 39 | 39 | ||
| 40 | -DataCopy能够实现Unified Buffer到L1 Buffer的连续数据搬运和非连续数据搬运,数据搬运时格式和内容保持不变。 | 40 | +DataCopy能够实现UB到L1 Buffer的连续数据搬运和非连续数据搬运,数据搬运时格式和内容保持不变。 |
| 41 | 41 | ||
| 42 | 高维切分是指能够通过配置数据块个数、单个数据块长度、地址偏移等搬运参数实现非连续搬运。 | 42 | 高维切分是指能够通过配置数据块个数、单个数据块长度、地址偏移等搬运参数实现非连续搬运。 |
| 43 | 43 | ||
| 44 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 44 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 45 | 45 | ||
| 46 | -- Unified Buffer -> L1 Buffer | 46 | +- UB -> L1 Buffer |
| 47 | - UB -> C1 | 47 | - UB -> C1 |
| 48 | 48 | ||
| 49 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopy(UBToL1高维切分数据搬运)](../cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_highdim_split.md)。 | 49 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopy(UBToL1高维切分数据搬运)](../cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_highdim_split.md)。 |
| @@ -57,11 +57,11 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 57 | 57 | ||
| 58 | ## DataCopy(UBToL1随路转换-ND2NZ搬运) | 58 | ## DataCopy(UBToL1随路转换-ND2NZ搬运) |
| 59 | 59 | ||
| 60 | -该接口主要实现将数据从Unified Buffer搬运至L1 Buffer,并支持在数据搬运时进行[ND](../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md)到[NZ](../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md)格式的转换。 | 60 | +该接口主要实现将数据从UB搬运至L1 Buffer,并支持在数据搬运时进行[ND](../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md)到[NZ](../cube_compute_ISASI/cube_compute_fractal_intro/key_fractal_format_details.md)格式的转换。 |
| 61 | 61 | ||
| 62 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 62 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 63 | 63 | ||
| 64 | -- Unified Buffer -> L1 Buffer | 64 | +- UB -> L1 Buffer |
| 65 | - UB -> C1 | 65 | - UB -> C1 |
| 66 | 66 | ||
| 67 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopy(UBToL1随路转换-ND2NZ搬运)](../cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_ND2NZ.md)。 | 67 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopy(UBToL1随路转换-ND2NZ搬运)](../cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_ND2NZ.md)。 |
| @@ -75,11 +75,11 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 75 | 75 | ||
| 76 | ## DataCopyPad(UBToL1非对齐数据搬运) | 76 | ## DataCopyPad(UBToL1非对齐数据搬运) |
| 77 | 77 | ||
| 78 | -该接口主要实现将数据从Unified Buffer搬运至L1 Buffer,并支持在数据搬运时提供非对齐数据搬运功能,可以根据开发者的需要自行填充数据。 | 78 | +该接口主要实现将数据从UB搬运至L1 Buffer,并支持在数据搬运时提供非对齐数据搬运功能,可以根据开发者的需要自行填充数据。 |
| 79 | 79 | ||
| 80 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 80 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 81 | 81 | ||
| 82 | -- Unified Buffer -> L1 Buffer | 82 | +- UB -> L1 Buffer |
| 83 | - UB -> C1 | 83 | - UB -> C1 |
| 84 | 84 | ||
| 85 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopyPad(UBToL1非对齐数据搬运)](../cube_compute_ISASI/cube_compute_load/DataCopyPad_UBToL1.md)。 | 85 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopyPad(UBToL1非对齐数据搬运)](../cube_compute_ISASI/cube_compute_load/DataCopyPad_UBToL1.md)。 |
| @@ -94,11 +94,11 @@ __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const LocalTensor< | |||
| 94 | <!-- npu="310p" id1 --> | 94 | <!-- npu="310p" id1 --> |
| 95 | ## DataCopy(L0CToUB随路量化激活搬运) | 95 | ## DataCopy(L0CToUB随路量化激活搬运) |
| 96 | 96 | ||
| 97 | -该接口主要实现将数据从L0C Buffer搬运至Unified Buffer,并支持多种随路能力的组合,接口内包含了设置寄存器与数据搬运能力。 | 97 | +该接口主要实现将数据从L0C Buffer搬运至UB,并支持多种随路能力的组合,接口内包含了设置寄存器与数据搬运能力。 |
| 98 | 98 | ||
| 99 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 99 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 100 | 100 | ||
| 101 | -- L0C Buffer -> Unified Buffer | 101 | +- L0C Buffer -> UB |
| 102 | - CO1 -> UB | 102 | - CO1 -> UB |
| 103 | 103 | ||
| 104 | 搬运的数据为[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md)的结果,接口具体介绍请参考:[DataCopy(L0C到UB数据搬运)](../cube_compute_ISASI/cube_compute_store/DataCopy_L0CToUB.md)。 | 104 | 搬运的数据为[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md)的结果,接口具体介绍请参考:[DataCopy(L0C到UB数据搬运)](../cube_compute_ISASI/cube_compute_store/DataCopy_L0CToUB.md)。 |
| @@ -124,11 +124,11 @@ src和dst分别为源操作数和目的操作数;intriParams和enhancedParams | |||
| 124 | 124 | ||
| 125 | ## Fixpipe(L0CToUB随路量化激活搬运) | 125 | ## Fixpipe(L0CToUB随路量化激活搬运) |
| 126 | 126 | ||
| 127 | -该接口主要实现将数据从L0C Buffer搬运至Unified Buffer,并支持多种随路能力的组合,接口内包含了设置寄存器与数据搬运能力。 | 127 | +该接口主要实现将数据从L0C Buffer搬运至UB,并支持多种随路能力的组合,接口内包含了设置寄存器与数据搬运能力。 |
| 128 | 128 | ||
| 129 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 129 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 130 | 130 | ||
| 131 | -- L0C Buffer -> Unified Buffer | 131 | +- L0C Buffer -> UB |
| 132 | - CO1 -> UB | 132 | - CO1 -> UB |
| 133 | 133 | ||
| 134 | 搬运的数据为[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md)的结果,以Ascend 950PR/Ascend 950DT为例,接口示例如下: | 134 | 搬运的数据为[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md)的结果,以Ascend 950PR/Ascend 950DT为例,接口示例如下: |
| @@ -154,11 +154,11 @@ src和dst分别为源操作数和目的操作数;intriParams为搬运参数, | |||
| 154 | <!-- npu="950" id2 --> | 154 | <!-- npu="950" id2 --> |
| 155 | ## DataCopyL1ToUB(L1ToUB连续数据搬运) | 155 | ## DataCopyL1ToUB(L1ToUB连续数据搬运) |
| 156 | 156 | ||
| 157 | -DataCopyL1ToUB能够实现L1 Buffer到Unified Buffer的连续数据搬运,数据搬运时格式和内容保持不变。 | 157 | +DataCopyL1ToUB能够实现L1 Buffer到UB的连续数据搬运,数据搬运时格式和内容保持不变。 |
| 158 | 158 | ||
| 159 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 159 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 160 | 160 | ||
| 161 | -- L1 Buffer -> Unified Buffer | 161 | +- L1 Buffer -> UB |
| 162 | - C1 -> UB | 162 | - C1 -> UB |
| 163 | 163 | ||
| 164 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopyL1ToUB(L1到UB数据搬运)](../cube_compute_ISASI/cube_compute_store/DataCopyL1ToUB.md)。 | 164 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopyL1ToUB(L1到UB数据搬运)](../cube_compute_ISASI/cube_compute_store/DataCopyL1ToUB.md)。 |
| @@ -176,13 +176,13 @@ __aicore__ inline void DataCopyL1ToUB(const LocalTensor<T>& dst, const LocalTens | |||
| 176 | <!-- npu="950" id3 --> | 176 | <!-- npu="950" id3 --> |
| 177 | ## DataCopyL1ToUB(L1ToUB高维切分数据搬运) | 177 | ## DataCopyL1ToUB(L1ToUB高维切分数据搬运) |
| 178 | 178 | ||
| 179 | -DataCopyL1ToUB能够实现L1 Buffer到Unified Buffer的连续数据搬运和非连续数据搬运,数据搬运时格式和内容保持不变。 | 179 | +DataCopyL1ToUB能够实现L1 Buffer到UB的连续数据搬运和非连续数据搬运,数据搬运时格式和内容保持不变。 |
| 180 | 180 | ||
| 181 | 高维切分是指能够通过配置数据块个数、单个数据块长度、地址偏移等搬运参数实现非连续搬运。 | 181 | 高维切分是指能够通过配置数据块个数、单个数据块长度、地址偏移等搬运参数实现非连续搬运。 |
| 182 | 182 | ||
| 183 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 183 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 184 | 184 | ||
| 185 | -- L1 Buffer -> Unified Buffer | 185 | +- L1 Buffer -> UB |
| 186 | - C1 -> UB | 186 | - C1 -> UB |
| 187 | 187 | ||
| 188 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopyL1ToUB(L1到UB数据搬运)](../cube_compute_ISASI/cube_compute_store/DataCopyL1ToUB.md)。 | 188 | 搬运的数据用于[矩阵计算](../cube_compute_ISASI/cube_compute_ISASI.md),接口具体介绍请参考:[DataCopyL1ToUB(L1到UB数据搬运)](../cube_compute_ISASI/cube_compute_store/DataCopyL1ToUB.md)。 |
| @@ -17,11 +17,11 @@ Unified Buffer(UB)之间的数据搬运提供了灵活的接口支持,共 | |||
| 17 | 17 | ||
| 18 | ## DataCopy(UB -> UB连续数据搬运)<a name="ZH-CN_TOPIC_0000002382907025"></a> | 18 | ## DataCopy(UB -> UB连续数据搬运)<a name="ZH-CN_TOPIC_0000002382907025"></a> |
| 19 | 19 | ||
| 20 | -支持Unified Buffer与Unified Buffer之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | 20 | +支持UB与UB之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 |
| 21 | 21 | ||
| 22 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 22 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 23 | 23 | ||
| 24 | -- Unified Buffer -> Unified Buffer | 24 | +- UB -> UB |
| 25 | - VECIN -> VECCALC | 25 | - VECIN -> VECCALC |
| 26 | - VECCALC -> VECOUT | 26 | - VECCALC -> VECOUT |
| 27 | 27 | ||
| @@ -36,13 +36,13 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 36 | 36 | ||
| 37 | ## DataCopy(UB -> UB高维切分数据搬运)<a name="ZH-CN_TOPIC_0000002382908321"></a> | 37 | ## DataCopy(UB -> UB高维切分数据搬运)<a name="ZH-CN_TOPIC_0000002382908321"></a> |
| 38 | 38 | ||
| 39 | -支持Unified Buffer与Unified Buffer之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | 39 | +支持UB与UB之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 |
| 40 | 40 | ||
| 41 | 高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。 | 41 | 高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。 |
| 42 | 42 | ||
| 43 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 43 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 44 | 44 | ||
| 45 | -- Unified Buffer -> Unified Buffer | 45 | +- UB -> UB |
| 46 | - VECIN -> VECCALC | 46 | - VECIN -> VECCALC |
| 47 | - VECCALC -> VECOUT | 47 | - VECCALC -> VECOUT |
| 48 | 48 | ||
| @@ -57,11 +57,11 @@ __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& | |||
| 57 | 57 | ||
| 58 | ## Copy(UB -> UB连续数据搬运)<a name="ZH-CN_TOPIC_0000002575088175"></a> | 58 | ## Copy(UB -> UB连续数据搬运)<a name="ZH-CN_TOPIC_0000002575088175"></a> |
| 59 | 59 | ||
| 60 | -支持Unified Buffer和Unified Buffer之间的连续数据搬运,数据搬运时格式和内容保持不变。 | 60 | +支持UB和UB之间的连续数据搬运,数据搬运时格式和内容保持不变。 |
| 61 | 61 | ||
| 62 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 62 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 63 | 63 | ||
| 64 | -- Unified Buffer -> Unified Buffer | 64 | +- UB -> UB |
| 65 | - VECIN -> VECCALC | 65 | - VECIN -> VECCALC |
| 66 | - VECIN -> VECOUT | 66 | - VECIN -> VECOUT |
| 67 | - VECCALC -> VECIN | 67 | - VECCALC -> VECIN |
| @@ -80,11 +80,11 @@ __aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src | |||
| 80 | 80 | ||
| 81 | ## Copy(UB -> UB掩码式高维数据搬运)<a name="ZH-CN_TOPIC_0000002575088676"></a> | 81 | ## Copy(UB -> UB掩码式高维数据搬运)<a name="ZH-CN_TOPIC_0000002575088676"></a> |
| 82 | 82 | ||
| 83 | -支持Unified Buffer和Unified Buffer之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 | 83 | +支持UB和UB之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 |
| 84 | 84 | ||
| 85 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): | 85 | 具体支持的数据通路为(以[逻辑位置TPosition](../../basic_api/aux_data_structures/TPosition.md)表示): |
| 86 | 86 | ||
| 87 | -- Unified Buffer -> Unified Buffer | 87 | +- UB -> UB |
| 88 | - VECIN -> VECCALC | 88 | - VECIN -> VECCALC |
| 89 | - VECIN -> VECOUT | 89 | - VECIN -> VECOUT |
| 90 | - VECCALC -> VECIN | 90 | - VECCALC -> VECIN |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 搬运功能分类总览 | 3 | ## 搬运功能分类总览 |
| 4 | 4 | ||
| 5 | -数据搬运类接口提供了全面的数据搬运功能,覆盖从最基础的连续搬运到复杂的随路转换和量化激活。按照功能复杂度递增,搬运能力可以分为以下几个类别:基础数据搬运、高维切分搬运、切片搬运、随路格式转换搬运、随路量化激活搬运、非对齐搬运、UB内部搬运(Copy)、矩阵分形搬运和多维数据搬运NDDMA。每一类在后续章节中都有对应的详细接口说明。 | 5 | +数据搬运类接口提供了全面的数据搬运功能,覆盖从最基础的连续搬运到复杂的随路转换和量化激活。按照功能复杂度递增,搬运能力可以分为以下几个类别:基础数据搬运、高维切分搬运、切片搬运、随路格式转换搬运、随路量化激活搬运、非对齐搬运、Unified Buffer(UB)内部搬运(Copy)、矩阵分形搬运和多维数据搬运NDDMA。每一类在后续章节中都有对应的详细接口说明。 |
| 6 | 6 | ||
| 7 | ## 基础数据搬运(DataCopy连续) | 7 | ## 基础数据搬运(DataCopy连续) |
| 8 | 8 | ||
| @@ -43,8 +43,8 @@ | |||
| 43 | 43 | ||
| 44 | 在昇腾的矩阵计算流程中,数据通常需要从ND(Standard Normal Data,标准数据排列,即NHWC/NCHW等常规格式)转换为NZ(Normal Normal Data,分形矩阵排列,即按小矩阵块组织的行列排布)格式,计算完成后再从NZ转回ND。Ascend C提供了“随路转换”能力——在数据搬运的同时完成格式转换,无需额外的转换指令,从而实现“搬运零开销格式转换”。 | 44 | 在昇腾的矩阵计算流程中,数据通常需要从ND(Standard Normal Data,标准数据排列,即NHWC/NCHW等常规格式)转换为NZ(Normal Normal Data,分形矩阵排列,即按小矩阵块组织的行列排布)格式,计算完成后再从NZ转回ND。Ascend C提供了“随路转换”能力——在数据搬运的同时完成格式转换,无需额外的转换指令,从而实现“搬运零开销格式转换”。 |
| 45 | 45 | ||
| 46 | -- **ND2NZ搬运**:数据从Global Memory搬运到Unified Buffer/L1 Buffer的同时,将ND格式转换为NZ格式。通过Nd2NzParams参数配置源矩阵的分形维度信息。参考[DataCopy(GMToUB随路转换ND2NZ搬运)](../GM_UB_data_move.md#ZH-CN_TOPIC_0000002349187356)、[DataCopy(GMToL1随路转换-ND2NZ搬运)](../GM_L1_or_L0_data_move.md#ZH-CN_TOPIC_0000002573902841)等章节。 | 46 | +- **ND2NZ搬运**:数据从Global Memory搬运到UB/L1 Buffer的同时,将ND格式转换为NZ格式。通过Nd2NzParams参数配置源矩阵的分形维度信息。参考[DataCopy(GMToUB随路转换ND2NZ搬运)](../GM_UB_data_move.md#ZH-CN_TOPIC_0000002349187356)、[DataCopy(GMToL1随路转换-ND2NZ搬运)](../GM_L1_or_L0_data_move.md#ZH-CN_TOPIC_0000002573902841)等章节。 |
| 47 | -- **NZ2ND搬运**:数据从Unified Buffer搬运到Global Memory的同时,将NZ格式转换回ND格式。通过Nz2NdParamsFull参数配置目的矩阵的维度信息。参考[DataCopy(UBToGM随路转换NZ2ND搬运)](../GM_UB_data_move.md#ZH-CN_TOPIC_0000002391805265)等章节。 | 47 | +- **NZ2ND搬运**:数据从UB搬运到Global Memory的同时,将NZ格式转换回ND格式。通过Nz2NdParamsFull参数配置目的矩阵的维度信息。参考[DataCopy(UBToGM随路转换NZ2ND搬运)](../GM_UB_data_move.md#ZH-CN_TOPIC_0000002391805265)等章节。 |
| 48 | - **DN2NZ搬运**:(ISASI产品支持)从深度卷积的DN格式到NZ格式的转换搬运。参考[DataCopy(GMToL1随路转换-DN2NZ搬运)](../GM_L1_or_L0_data_move.md#ZH-CN_TOPIC_0000002573902899)章节。 | 48 | - **DN2NZ搬运**:(ISASI产品支持)从深度卷积的DN格式到NZ格式的转换搬运。参考[DataCopy(GMToL1随路转换-DN2NZ搬运)](../GM_L1_or_L0_data_move.md#ZH-CN_TOPIC_0000002573902899)章节。 |
| 49 | 49 | ||
| 50 | **图 4** ND2NZ格式转换示意图 | 50 | **图 4** ND2NZ格式转换示意图 |
| @@ -65,7 +65,7 @@ | |||
| 65 | 65 | ||
| 66 | ## UB内部搬运(Copy) | 66 | ## UB内部搬运(Copy) |
| 67 | 67 | ||
| 68 | -Copy是Unified Buffer内部专用的数据搬运指令,支持VECIN/VECCALC/VECOUT之间的数据搬运。与DataCopy不同,Copy接口支持mask操作(可以按位控制哪些元素参与搬运)和DataBlock间隔控制,适用于矢量计算内部的数据重排和中间结果暂存。参考[Copy(UBToUB连续数据搬运)](../UB_UB_data_move.md#ZH-CN_TOPIC_0000002575088175)、[Copy(UBToUB掩码式高维数据搬运)](../UB_UB_data_move.md#ZH-CN_TOPIC_0000002575088175)等章节。 | 68 | +Copy是UB内部专用的数据搬运指令,支持VECIN/VECCALC/VECOUT之间的数据搬运。与DataCopy不同,Copy接口支持mask操作(可以按位控制哪些元素参与搬运)和DataBlock间隔控制,适用于矢量计算内部的数据重排和中间结果暂存。参考[Copy(UBToUB连续数据搬运)](../UB_UB_data_move.md#ZH-CN_TOPIC_0000002575088175)、[Copy(UBToUB掩码式高维数据搬运)](../UB_UB_data_move.md#ZH-CN_TOPIC_0000002575088175)等章节。 |
| 69 | 69 | ||
| 70 | ## 矩阵分形搬运(LoadData(2D矩阵搬运)/LoadData(卷积数据搬运)) | 70 | ## 矩阵分形搬运(LoadData(2D矩阵搬运)/LoadData(卷积数据搬运)) |
| 71 | 71 | ||
| @@ -73,7 +73,7 @@ LoadData(2D矩阵搬运)和LoadData(卷积数据搬运)是专用于矩 | |||
| 73 | 73 | ||
| 74 | ## 多维数据搬运NDDMA(DataCopy) | 74 | ## 多维数据搬运NDDMA(DataCopy) |
| 75 | 75 | ||
| 76 | -NDDMA(N-Dimensional DMA)是一种更灵活的按维度配置的数据搬运方式,支持Global Memory到Unified Buffer之间的多维搬运。与高维切分搬运(使用blockLen/blockCount/repeat的固定模式)不同,NDDMA允许开发者逐维度自由配置搬运参数,搬运维度dim支持1\~5维。每个维度(循环)通过NdDmaLoopInfo结构体配置以下核心参数: | 76 | +NDDMA(N-Dimensional DMA)是一种更灵活的按维度配置的数据搬运方式,支持Global Memory到UB之间的多维搬运。与高维切分搬运(使用blockLen/blockCount/repeat的固定模式)不同,NDDMA允许开发者逐维度自由配置搬运参数,搬运维度dim支持1\~5维。每个维度(循环)通过NdDmaLoopInfo结构体配置以下核心参数: |
| 77 | 77 | ||
| 78 | - **loopSize**:该维度内需要搬运的元素个数。 | 78 | - **loopSize**:该维度内需要搬运的元素个数。 |
| 79 | - **loopSrcStride/loopDstStride**:该维度内源/目的操作数相邻元素之间的地址间隔(以元素个数为单位)。通过配置stride可实现跨步搬运、Transpose转置、BroadCast广播等效果。 | 79 | - **loopSrcStride/loopDstStride**:该维度内源/目的操作数相邻元素之间的地址间隔(以元素个数为单位)。通过配置stride可实现跨步搬运、Transpose转置、BroadCast广播等效果。 |
| @@ -28,8 +28,8 @@ AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../ | |||
| 28 | <!-- end id2 --> | 28 | <!-- end id2 --> |
| 29 | 29 | ||
| 30 | > [!NOTE]说明 | 30 | > [!NOTE]说明 |
| 31 | - > - 同一个物理内存可能对应多个不同的[TPosition](../../../basic_api/aux_data_structures/TPosition.md),例如Unified Buffer(UB)同时映射到VECIN、VECCALC和VECOUT三个逻辑位置,分别代表矢量计算的输入、中间计算和输出阶段。L1 Buffer同时映射到A1、B1、C1和TSCM,具体含义取决于当前所服务的计算流程(矩阵左/右矩阵暂存或共享通信)。这种设计使得同一物理内存可以在不同计算阶段被赋予不同的逻辑语义,开发者可根据编程模型的阶段需求选择合适的TPosition。 | 31 | + > - 同一个物理内存可能对应多个不同的[TPosition](../../../basic_api/aux_data_structures/TPosition.md),例如UB同时映射到VECIN、VECCALC和VECOUT三个逻辑位置,分别代表矢量计算的输入、中间计算和输出阶段。L1 Buffer同时映射到A1、B1、C1和TSCM,具体含义取决于当前所服务的计算流程(矩阵左/右矩阵暂存或共享通信)。这种设计使得同一物理内存可以在不同计算阶段被赋予不同的逻辑语义,开发者可根据编程模型的阶段需求选择合适的TPosition。 |
| 32 | - > - 同一个逻辑位置,在不同产品型号中可能对应不同的物理内存,例如逻辑位置CO2在Atlas A2 训练系列产品/Atlas A2 推理系列产品中映射到Global Memory,而在Atlas训练及推理系列产品中映射到Unified Buffer,详细情况请参考[逻辑位置和物理存储的映射关系](../../../general_description_and_constraints.md#section1359919519819)。 | 32 | + > - 同一个逻辑位置,在不同产品型号中可能对应不同的物理内存,例如逻辑位置CO2在Atlas A2 训练系列产品/Atlas A2 推理系列产品中映射到Global Memory,而在Atlas训练及推理系列产品中映射到UB,详细情况请参考[逻辑位置和物理存储的映射关系](../../../general_description_and_constraints.md#section1359919519819)。 |
| 33 | 33 | ||
| 34 | ## 数据通路与搬运流水 | 34 | ## 数据通路与搬运流水 |
| 35 | 35 | ||
| @@ -51,20 +51,20 @@ AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../ | |||
| 51 | | Global Memory | L1 Buffer | MTE2 | 将Global Memory中的NZ格式数据搬运至L1 Buffer。 | LoadData(2D矩阵搬运V2) | | 51 | | Global Memory | L1 Buffer | MTE2 | 将Global Memory中的NZ格式数据搬运至L1 Buffer。 | LoadData(2D矩阵搬运V2) | |
| 52 | | Global Memory | L0A Buffer | MTE2 | 将Global Memory中的2D格式分形矩阵搬运至L0A Buffer作为矩阵计算的左矩阵输入。 | LoadData(2D矩阵搬运) | | 52 | | Global Memory | L0A Buffer | MTE2 | 将Global Memory中的2D格式分形矩阵搬运至L0A Buffer作为矩阵计算的左矩阵输入。 | LoadData(2D矩阵搬运) | |
| 53 | | Global Memory | L0B Buffer | MTE2 | 将Global Memory中的2D格式分形矩阵搬运至L0B Buffer作为矩阵计算的右矩阵输入。 | LoadData(2D矩阵搬运) | | 53 | | Global Memory | L0B Buffer | MTE2 | 将Global Memory中的2D格式分形矩阵搬运至L0B Buffer作为矩阵计算的右矩阵输入。 | LoadData(2D矩阵搬运) | |
| 54 | -| Global Memory | Unified Buffer | MTE2 | 将Global Memory中的矩阵数据连续搬运至Unified Buffer。 | DataCopy | | 54 | +| Global Memory | UB | MTE2 | 将Global Memory中的矩阵数据连续搬运至UB。 | DataCopy | |
| 55 | -| Global Memory | Unified Buffer | MTE2 | 将Global Memory中的矩阵数据通过高维切分方式搬运至Unified Buffer。 | DataCopy | | 55 | +| Global Memory | UB | MTE2 | 将Global Memory中的矩阵数据通过高维切分方式搬运至UB。 | DataCopy | |
| 56 | -| Global Memory | Unified Buffer | MTE2 | 将Global Memory中的数据按切片方式搬运至Unified Buffer。 | DataCopy | | 56 | +| Global Memory | UB | MTE2 | 将Global Memory中的数据按切片方式搬运至UB。 | DataCopy | |
| 57 | -| Global Memory | Unified Buffer | MTE2 | 将Global Memory中的数据搬运至Unified Buffer的同时完成ND到NZ格式的随路转换。 | DataCopy | | 57 | +| Global Memory | UB | MTE2 | 将Global Memory中的数据搬运至UB的同时完成ND到NZ格式的随路转换。 | DataCopy | |
| 58 | -| Global Memory | Unified Buffer | MTE2 | 将Global Memory中的数据以NDDMA方式多维搬运至Unified Buffer。 | DataCopy | | 58 | +| Global Memory | UB | MTE2 | 将Global Memory中的数据以NDDMA方式多维搬运至UB。 | DataCopy | |
| 59 | -| Global Memory | Unified Buffer | MTE2 | 将Global Memory中的非对齐数据搬运至Unified Buffer,并对边界无效区域做Padding填充。 | DataCopyPad | | 59 | +| Global Memory | UB | MTE2 | 将Global Memory中的非对齐数据搬运至UB,并对边界无效区域做Padding填充。 | DataCopyPad | |
| 60 | -| Unified Buffer | Global Memory | MTE3 | 将Unified Buffer中的数据搬运到Global Memory的同时完成NZ到ND格式的随路转换。 | DataCopy | | 60 | +| UB | Global Memory | MTE3 | 将UB中的数据搬运到Global Memory的同时完成NZ到ND格式的随路转换。 | DataCopy | |
| 61 | -| Unified Buffer | Global Memory | MTE3 | 将Unified Buffer中的非对齐数据搬运到Global Memory,并对边界无效区域做Padding填充。 | DataCopyPad | | 61 | +| UB | Global Memory | MTE3 | 将UB中的非对齐数据搬运到Global Memory,并对边界无效区域做Padding填充。 | DataCopyPad | |
| 62 | -| Unified Buffer | L1 Buffer | MTE3 | 将Unified Buffer中的数据连续搬运至L1 Buffer。 | DataCopy | | 62 | +| UB | L1 Buffer | MTE3 | 将UB中的数据连续搬运至L1 Buffer。 | DataCopy | |
| 63 | -| Unified Buffer | L1 Buffer | MTE3 | 将Unified Buffer中的数据通过高维切分方式搬运至L1 Buffer。 | DataCopy | | 63 | +| UB | L1 Buffer | MTE3 | 将UB中的数据通过高维切分方式搬运至L1 Buffer。 | DataCopy | |
| 64 | -| Unified Buffer | L1 Buffer | MTE3 | 将Unified Buffer中的数据搬运到L1 Buffer的同时完成ND到NZ格式的随路转换。 | DataCopy | | 64 | +| UB | L1 Buffer | MTE3 | 将UB中的数据搬运到L1 Buffer的同时完成ND到NZ格式的随路转换。 | DataCopy | |
| 65 | -| Unified Buffer | L1 Buffer | MTE3 | 将Unified Buffer中的非对齐数据搬运到L1 Buffer,并对边界无效区域做Padding填充。 | DataCopyPad | | 65 | +| UB | L1 Buffer | MTE3 | 将UB中的非对齐数据搬运到L1 Buffer,并对边界无效区域做Padding填充。 | DataCopyPad | |
| 66 | -| L1 Buffer | Unified Buffer | MTE3 | 将L1 Buffer中的数据连续搬运至Unified Buffer。 | DataCopyL1ToUB | | 66 | +| L1 Buffer | UB | MTE3 | 将L1 Buffer中的数据连续搬运至UB。 | DataCopyL1ToUB | |
| 67 | -| L1 Buffer | Unified Buffer | MTE3 | 将L1 Buffer中的数据通过高维切分方式搬运至Unified Buffer。 | DataCopyL1ToUB | | 67 | +| L1 Buffer | UB | MTE3 | 将L1 Buffer中的数据通过高维切分方式搬运至UB。 | DataCopyL1ToUB | |
| 68 | | L1 Buffer | L0A Buffer | MTE1 | 将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。 | LoadData(2D矩阵搬运) | | 68 | | L1 Buffer | L0A Buffer | MTE1 | 将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。 | LoadData(2D矩阵搬运) | |
| 69 | | L1 Buffer | L0A Buffer | MTE1 | 将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。 | LoadData(2D矩阵搬运V2) | | 69 | | L1 Buffer | L0A Buffer | MTE1 | 将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。 | LoadData(2D矩阵搬运V2) | |
| 70 | | L1 Buffer | L0A Buffer | MTE1 | 将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。 | LoadData(MX矩阵搬运) | | 70 | | L1 Buffer | L0A Buffer | MTE1 | 将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。 | LoadData(MX矩阵搬运) | |
| @@ -86,9 +86,9 @@ AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../ | |||
| 86 | | L0C Buffer | Global Memory | FixPipe | 将Cube计算结果从L0C Buffer搬运到Global Memory,通过FixPipe流水完成量化、激活、格式转换。 | FixPipe | | 86 | | L0C Buffer | Global Memory | FixPipe | 将Cube计算结果从L0C Buffer搬运到Global Memory,通过FixPipe流水完成量化、激活、格式转换。 | FixPipe | |
| 87 | | L0C Buffer | L1 Buffer | FixPipe | 将Cube计算结果从L0C Buffer搬运至L1 Buffer做中转,支持随路量化和激活。 | DataCopy | | 87 | | L0C Buffer | L1 Buffer | FixPipe | 将Cube计算结果从L0C Buffer搬运至L1 Buffer做中转,支持随路量化和激活。 | DataCopy | |
| 88 | | L0C Buffer | L1 Buffer | FixPipe | 将Cube计算结果从L0C Buffer搬运至L1 Buffer做中转,通过FixPipe完成量化、激活、格式转换。 | FixPipe | | 88 | | L0C Buffer | L1 Buffer | FixPipe | 将Cube计算结果从L0C Buffer搬运至L1 Buffer做中转,通过FixPipe完成量化、激活、格式转换。 | FixPipe | |
| 89 | -| L0C Buffer | Unified Buffer | MTE3 | 将Cube计算结果从L0C Buffer搬运至Unified Buffer,支持随路量化和激活后处理。 | DataCopy | | 89 | +| L0C Buffer | UB | MTE3 | 将Cube计算结果从L0C Buffer搬运至UB,支持随路量化和激活后处理。 | DataCopy | |
| 90 | -| L0C Buffer | Unified Buffer | MTE3 | 将Cube计算结果从L0C Buffer搬运至Unified Buffer,通过FixPipe完成量化、激活、格式转换。 | FixPipe | | 90 | +| L0C Buffer | UB | MTE3 | 将Cube计算结果从L0C Buffer搬运至UB,通过FixPipe完成量化、激活、格式转换。 | FixPipe | |
| 91 | -| Unified Buffer | Unified Buffer | PIPE_V | Unified Buffer内部连续数据搬移。 | DataCopy | | 91 | +| UB | UB | PIPE_V | UB内部连续数据搬移。 | DataCopy | |
| 92 | -| Unified Buffer | Unified Buffer | PIPE_V | Unified Buffer内部通过高维切分方式搬移数据。 | DataCopy | | 92 | +| UB | UB | PIPE_V | UB内部通过高维切分方式搬移数据。 | DataCopy | |
| 93 | -| Unified Buffer | Unified Buffer | PIPE_V | Unified Buffer内部连续数据搬移。 | Copy | | 93 | +| UB | UB | PIPE_V | UB内部连续数据搬移。 | Copy | |
| 94 | -| Unified Buffer | Unified Buffer | PIPE_V | Unified Buffer内部掩码式高维数据搬移。 | Copy | | 94 | +| UB | UB | PIPE_V | UB内部掩码式高维数据搬移。 | Copy | |
| @@ -11,7 +11,7 @@ AI Core上的各类存储单元有不同的地址对齐要求。Ascend C API操 | |||
| 11 | | 存储单元 | 对齐要求 | 说明 | | 11 | | 存储单元 | 对齐要求 | 说明 | |
| 12 | |----------|----------|------| | 12 | |----------|----------|------| |
| 13 | | Global Memory | 1字节对齐 | 最宽松的对齐要求,任意字节地址均可 | | 13 | | Global Memory | 1字节对齐 | 最宽松的对齐要求,任意字节地址均可 | |
| 14 | -| Unified Buffer | 32字节对齐 | 与DataBlock大小一致,地址必须为32的整数倍 | | 14 | +| UB | 32字节对齐 | 与DataBlock大小一致,地址必须为32的整数倍 | |
| 15 | | L1 Buffer | 32字节对齐 | 同UB,地址必须为32的整数倍 | | 15 | | L1 Buffer | 32字节对齐 | 同UB,地址必须为32的整数倍 | |
| 16 | | L0A Buffer/L0B Buffer | 512字节对齐 | 矩阵计算输入的高对齐要求 | | 16 | | L0A Buffer/L0B Buffer | 512字节对齐 | 矩阵计算输入的高对齐要求 | |
| 17 | | L0C Buffer | 64字节对齐 | 矩阵计算结果缓冲区 | | 17 | | L0C Buffer | 64字节对齐 | 矩阵计算结果缓冲区 | |
| @@ -24,7 +24,7 @@ AI Core上的各类存储单元有不同的地址对齐要求。Ascend C API操 | |||
| 24 | 24 | ||
| 25 | ## 多指令同步<a name="section711085812111"></a> | 25 | ## 多指令同步<a name="section711085812111"></a> |
| 26 | 26 | ||
| 27 | -如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要调用[PipeBarrier](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的GM地址存在重叠,两条搬运指令之间需要通过调用PipeBarrier<PIPE\_MTE3>\(\)进行MTE3流水的同步;如下图右侧示意图所示,搬运的目的地址UB存在重叠,两条搬运指令之间需要调用PipeBarrier<PIPE\_MTE2>\(\)进行MTE2流水的同步。多指令同步的核心代码示例如下: | 27 | +如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要调用[PipeBarrier](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的GM地址存在重叠,两条搬运指令之间需要通过调用PipeBarrier<PIPE\_MTE3>\(\)进行MTE3流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer(UB)存在重叠,两条搬运指令之间需要调用PipeBarrier<PIPE\_MTE2>\(\)进行MTE2流水的同步。多指令同步的核心代码示例如下: |
| 28 | 28 | ||
| 29 | ```cpp | 29 | ```cpp |
| 30 | AscendC::DataCopy(src2Local, src2Global, srcDataSize); | 30 | AscendC::DataCopy(src2Local, src2Global, srcDataSize); |
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | - **存储层级与数据通路:** AI Core内部的物理存储单元有哪些,数据可以在哪些通路之间流动,以及搬运所依赖的硬件流水类型。 | 7 | - **存储层级与数据通路:** AI Core内部的物理存储单元有哪些,数据可以在哪些通路之间流动,以及搬运所依赖的硬件流水类型。 |
| 8 | - **逻辑位置(TPosition)与物理内存的映射:** Ascend C通过TPosition机制隐藏硬件差异,开发者需理解VECIN/VECOUT/A1/B1/CO1等逻辑位置对应的实际物理存储。 | 8 | - **逻辑位置(TPosition)与物理内存的映射:** Ascend C通过TPosition机制隐藏硬件差异,开发者需理解VECIN/VECOUT/A1/B1/CO1等逻辑位置对应的实际物理存储。 |
| 9 | -- **搬运功能分类:** 基础数据搬运、高维切分搬运、切片搬运、随路格式转换(ND2NZ/NZ2ND/DN2NZ)、随路量化激活、非对齐搬运、UB内部搬运(Copy)、矩阵分形搬运(LoadData(2D矩阵搬运)/LoadData(卷积数据搬运))、多维数据搬运NDDMA等功能的概念与适用场景。 | 9 | +- **搬运功能分类:** 基础数据搬运、高维切分搬运、切片搬运、随路格式转换(ND2NZ/NZ2ND/DN2NZ)、随路量化激活、非对齐搬运、Unified Buffer(UB)内部搬运(Copy)、矩阵分形搬运(LoadData(2D矩阵搬运)/LoadData(卷积数据搬运))、多维数据搬运NDDMA等功能的概念与适用场景。 |
| 10 | - **关键参数概念:** DataBlock、blockLen、blockCount、srcStride/dstStride、repeat等参数的物理含义与配置方式。 | 10 | - **关键参数概念:** DataBlock、blockLen、blockCount、srcStride/dstStride、repeat等参数的物理含义与配置方式。 |
| 11 | - **通用约束:** 所有数据搬运接口共性的地址对齐要求、数据量约束、同步规则等。 | 11 | - **通用约束:** 所有数据搬运接口共性的地址对齐要求、数据量约束、同步规则等。 |
| 12 | 12 | ||
| @@ -75,7 +75,7 @@ MakeMemPtr提供三种调用形式: | |||
| 75 | | Location::L0ScaleA | L0 ScaleA Buffer | MX矩阵计算ScaleA缓存 | | 75 | | Location::L0ScaleA | L0 ScaleA Buffer | MX矩阵计算ScaleA缓存 | |
| 76 | | Location::L0ScaleB | L0 ScaleB Buffer | MX矩阵计算ScaleB缓存 | | 76 | | Location::L0ScaleB | L0 ScaleB Buffer | MX矩阵计算ScaleB缓存 | |
| 77 | | Location::L0C | L0C Buffer | 矩阵计算结果缓存 | | 77 | | Location::L0C | L0C Buffer | 矩阵计算结果缓存 | |
| 78 | -| Location::UB | Unified Buffer | 统一缓存,矢量计算的数据存储区 | | 78 | +| Location::UB | UB | 统一缓存,矢量计算的数据存储区 | |
| 79 | | Location::BIAS | BiasTable Buffer | 偏置表缓存,带偏置矩阵计算的偏置存放区 | | 79 | | Location::BIAS | BiasTable Buffer | 偏置表缓存,带偏置矩阵计算的偏置存放区 | |
| 80 | | Location::FIXBUF | Fixpipe Buffer | Fixpipe输出缓存,L0C到GM/UB的中转区 | | 80 | | Location::FIXBUF | Fixpipe Buffer | Fixpipe输出缓存,L0C到GM/UB的中转区 | |
| 81 | 81 | ||
| @@ -38,7 +38,7 @@ __ubuf__ float ubData[size]; | |||
| 38 | __cbuf__ float l1Data[size]; | 38 | __cbuf__ float l1Data[size]; |
| 39 | __ca__ float l0AData[size]; | 39 | __ca__ float l0AData[size]; |
| 40 | 40 | ||
| 41 | -// 创建Unified Buffer指针 | 41 | +// 创建Unified Buffer(UB)指针 |
| 42 | auto ubPtr = AscendC::Te::MakeMemPtr(ubData); | 42 | auto ubPtr = AscendC::Te::MakeMemPtr(ubData); |
| 43 | 43 | ||
| 44 | // 创建L1 Buffer指针 | 44 | // 创建L1 Buffer指针 |
| @@ -1,6 +1,6 @@ | |||
| 1 | # LocalTensor简介<a name="ZH-CN_TOPIC_0000002364805793"></a> | 1 | # LocalTensor简介<a name="ZH-CN_TOPIC_0000002364805793"></a> |
| 2 | 2 | ||
| 3 | -LocalTensor表达AI Core中Local Memory(内部存储)内的L1/L0A/L0B/L0C Buffer及Unified Buffer中的数据。 | 3 | +LocalTensor表达AI Core中Local Memory(内部存储)内的L1/L0A/L0B/L0C Buffer及Unified Buffer(UB)中的数据。 |
| 4 | 4 | ||
| 5 | ## 需要包含的头文件<a name="zh-cn_topic_0000002213064918_section78885814919"></a> | 5 | ## 需要包含的头文件<a name="zh-cn_topic_0000002213064918_section78885814919"></a> |
| 6 | 6 | ||
| @@ -34,7 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"tools/cpudebug/include/stub_def.h"`。 | 35 | 头文件路径为:`"tools/cpudebug/include/stub_def.h"`。 |
| 36 | 36 | ||
| 37 | -进行核函数的CPU侧运行验证时,用于创建共享内存:在/tmp目录下创建一个共享文件,并返回该文件的映射指针。 | 37 | +进行核函数(Kernel)的CPU侧运行验证时,用于创建共享内存:在/tmp目录下创建一个共享文件,并返回该文件的映射指针。 |
| 38 | 38 | ||
| 39 | ## 函数原型<a name="zh-cn_topic_0000001963639306_zh-cn_topic_0000001541764188_section2067518173415"></a> | 39 | ## 函数原型<a name="zh-cn_topic_0000001963639306_zh-cn_topic_0000001541764188_section2067518173415"></a> |
| 40 | 40 | ||
| @@ -34,7 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"tools/cpudebug/include/stub_def.h"`。 | 35 | 头文件路径为:`"tools/cpudebug/include/stub_def.h"`。 |
| 36 | 36 | ||
| 37 | -进行核函数的CPU侧运行验证时,用于释放通过[GmAlloc](GmAlloc.md)申请的共享内存。 | 37 | +进行核函数(Kernel)的CPU侧运行验证时,用于释放通过[GmAlloc](GmAlloc.md)申请的共享内存。 |
| 38 | 38 | ||
| 39 | ## 函数原型<a name="zh-cn_topic_0000002000199397_zh-cn_topic_0000001592243993_section2067518173415"></a> | 39 | ## 函数原型<a name="zh-cn_topic_0000002000199397_zh-cn_topic_0000001592243993_section2067518173415"></a> |
| 40 | 40 | ||
| @@ -34,7 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"tools/cpudebug/include/kern_fwk.h"`。 | 35 | 头文件路径为:`"tools/cpudebug/include/kern_fwk.h"`。 |
| 36 | 36 | ||
| 37 | -进行核函数的CPU侧运行验证时,CPU调测总入口,完成CPU侧的算子程序调用。 | 37 | +进行核函数(Kernel)的CPU侧运行验证时,CPU调测总入口,完成CPU侧的算子程序调用。 |
| 38 | 38 | ||
| 39 | ## 函数原型<a name="zh-cn_topic_0000001963799134_zh-cn_topic_0000001541924164_section2067518173415"></a> | 39 | ## 函数原型<a name="zh-cn_topic_0000001963799134_zh-cn_topic_0000001541924164_section2067518173415"></a> |
| 40 | 40 | ||
| @@ -63,7 +63,7 @@ | |||
| 63 | 63 | ||
| 64 | ## 调用示例<a name="zh-cn_topic_0000001963799134_zh-cn_topic_0000001541924164_section82241477610"></a> | 64 | ## 调用示例<a name="zh-cn_topic_0000001963799134_zh-cn_topic_0000001541924164_section82241477610"></a> |
| 65 | 65 | ||
| 66 | -下面代码以add_custom算子为例,介绍算子核函数在CPU侧验证时,算子调用的应用程序如何编写。您在实现自己的应用程序时,需要关注由于算子核函数不同带来的修改,包括算子核函数名,入参出参的不同等,合理安排相应的内存分配、内存拷贝和文件读写等,相关API的调用方式直接复用即可。 | 66 | +下面代码以add_custom算子为例,介绍算子核函数(Kernel)在CPU侧验证时,算子调用的应用程序如何编写。您在实现自己的应用程序时,需要关注由于算子核函数(Kernel)不同带来的修改,包括算子核函数(Kernel)名,入参出参的不同等,合理安排相应的内存分配、内存拷贝和文件读写等,相关API的调用方式直接复用即可。 |
| 67 | 67 | ||
| 68 | 1. 按需包含头文件,通过ASCENDC_CPU_DEBUG宏区分CPU和NPU侧需要包含的头文件。 | 68 | 1. 按需包含头文件,通过ASCENDC_CPU_DEBUG宏区分CPU和NPU侧需要包含的头文件。 |
| 69 | 69 | ||
| @@ -73,11 +73,11 @@ | |||
| 73 | #include "acl/acl.h" | 73 | #include "acl/acl.h" |
| 74 | #else | 74 | #else |
| 75 | #include "tikicpulib.h" | 75 | #include "tikicpulib.h" |
| 76 | - extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z); // 核函数声明。 | 76 | + extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z); // 核函数(Kernel)声明。 |
| 77 | #endif | 77 | #endif |
| 78 | ``` | 78 | ``` |
| 79 | 79 | ||
| 80 | -2. CPU侧运行验证。完成算子核函数CPU侧运行验证的步骤如下: | 80 | +2. CPU侧运行验证。完成算子核函数(Kernel)CPU侧运行验证的步骤如下: |
| 81 | 81 | ||
| 82 | **图1** CPU侧运行验证步骤<a name="fig13576112114442"></a> | 82 | **图1** CPU侧运行验证步骤<a name="fig13576112114442"></a> |
| 83 |  | 83 |  |
| @@ -98,7 +98,7 @@ | |||
| 98 | ReadFile("./input/input_y.bin", inputByteSize, y, inputByteSize); | 98 | ReadFile("./input/input_y.bin", inputByteSize, y, inputByteSize); |
| 99 | // 矢量算子需要设置内核模式为AIV模式。 | 99 | // 矢量算子需要设置内核模式为AIV模式。 |
| 100 | AscendC::SetKernelMode(KernelMode::AIV_MODE); | 100 | AscendC::SetKernelMode(KernelMode::AIV_MODE); |
| 101 | - // 调用ICPU_RUN_KF调测宏,完成核函数CPU侧的调用。 | 101 | + // 调用ICPU_RUN_KF调测宏,完成核函数(Kernel)CPU侧的调用。 |
| 102 | ICPU_RUN_KF(add_custom, numBlocks, x, y, z); | 102 | ICPU_RUN_KF(add_custom, numBlocks, x, y, z); |
| 103 | // 输出数据写出。 | 103 | // 输出数据写出。 |
| 104 | WriteFile("./output/output_z.bin", z, outputByteSize); | 104 | WriteFile("./output/output_z.bin", z, outputByteSize); |
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | 头文件路径为:`"tools/cpudebug/include/kern_fwk.h"`。 | 5 | 头文件路径为:`"tools/cpudebug/include/kern_fwk.h"`。 |
| 6 | 6 | ||
| 7 | -用于指定本次CPU调测使用的tilingKey。调测执行时,将只执行算子核函数中该tilingKey对应的分支。 | 7 | +用于指定本次CPU调测使用的tilingKey。调测执行时,将只执行算子核函数(Kernel)中该tilingKey对应的分支。 |
| 8 | 8 | ||
| 9 | ## 函数原型<a name="zh-cn_topic_0000002000279997_zh-cn_topic_0000001610028277_section2067518173415"></a> | 9 | ## 函数原型<a name="zh-cn_topic_0000002000279997_zh-cn_topic_0000001610028277_section2067518173415"></a> |
| 10 | 10 | ||
| @@ -7,7 +7,7 @@ | |||
| 7 | ## 使用示例 | 7 | ## 使用示例 |
| 8 | 8 | ||
| 9 | - CMake编译选项控制方式 | 9 | - CMake编译选项控制方式 |
| 10 | - - Kernel直调工程 | 10 | + - 核函数(Kernel)直调工程 |
| 11 | 修改CMakeList.txt文件中中ascendc_compile_definitions命令增加ASCENDC_DUMP=0宏定义来关闭ASCENDC_DUMP开关。示例如下: | 11 | 修改CMakeList.txt文件中中ascendc_compile_definitions命令增加ASCENDC_DUMP=0宏定义来关闭ASCENDC_DUMP开关。示例如下: |
| 12 | ```plain | 12 | ```plain |
| 13 | // 关闭所有算子的打印功能 | 13 | // 关闭所有算子的打印功能 |
| @@ -27,7 +27,7 @@ | |||
| 27 | ## 功能说明<a name="section618mcpsimp"></a> | 27 | ## 功能说明<a name="section618mcpsimp"></a> |
| 28 | 28 | ||
| 29 | 头文件路径为:`"basic_api/kernel_operator_common_intf.h"`。 | 29 | 头文件路径为:`"basic_api/kernel_operator_common_intf.h"`。 |
| 30 | -check设定范围内的UB读写行为,如果有设定范围的读写行为则会出现EXCEPTION报错,无设定范围的读写行为则不会报错。 | 30 | +check设定范围内的Unified Buffer(UB)读写行为,如果有设定范围的读写行为则会出现EXCEPTION报错,无设定范围的读写行为则不会报错。 |
| 31 | 31 | ||
| 32 | ## 函数原型<a name="section620mcpsimp"></a> | 32 | ## 函数原型<a name="section620mcpsimp"></a> |
| 33 | 33 | ||
| @@ -34,7 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"basic_api/kernel_operator_sys_var_intf.h"`。 | 35 | 头文件路径为:`"basic_api/kernel_operator_sys_var_intf.h"`。 |
| 36 | 36 | ||
| 37 | -在Kernel侧调用,NPU模式下会中断AI Core的运行,CPU模式下等同于assert。可用于Kernel侧异常场景的调试。 | 37 | +在核函数(Kernel)侧调用,NPU模式下会中断AI Core的运行,CPU模式下等同于assert。可用于核函数(Kernel)侧异常场景的调试。 |
| 38 | 38 | ||
| 39 | ## 函数原型<a name="section2067518173415"></a> | 39 | ## 函数原型<a name="section2067518173415"></a> |
| 40 | 40 | ||
| @@ -30,7 +30,7 @@ | |||
| 30 | 30 | ||
| 31 | ascendc_assert提供了一种在CPU/NPU域实现断言功能的接口。当断言条件不满足时,系统会输出断言信息并格式化打印在屏幕上。 | 31 | ascendc_assert提供了一种在CPU/NPU域实现断言功能的接口。当断言条件不满足时,系统会输出断言信息并格式化打印在屏幕上。 |
| 32 | 32 | ||
| 33 | -在算子Kernel侧实现代码中需要增加断言的地方使用ascendc_assert检查代码,并格式化输出一些调测信息。 | 33 | +在算子核函数(Kernel)侧实现代码中需要增加断言的地方使用ascendc_assert检查代码,并格式化输出一些调测信息。 |
| 34 | 34 | ||
| 35 | > [!CAUTION]注意 | 35 | > [!CAUTION]注意 |
| 36 | > 该接口主要用于调试分析,开启后会对算子性能产生一定影响,通常在调试阶段使用,生产环境建议关闭。<br> | 36 | > 该接口主要用于调试分析,开启后会对算子性能产生一定影响,通常在调试阶段使用,生产环境建议关闭。<br> |
| @@ -36,7 +36,7 @@ | |||
| 36 | 36 | ||
| 37 | 该接口实现CPU/NPU域assert断言功能。算子执行中,如果assert内部条件判断不为真,则输出assert条件并将输入的信息格式化打印在屏幕上。 | 37 | 该接口实现CPU/NPU域assert断言功能。算子执行中,如果assert内部条件判断不为真,则输出assert条件并将输入的信息格式化打印在屏幕上。 |
| 38 | 38 | ||
| 39 | -在算子Kernel侧实现代码中需要增加断言的地方使用assert检查代码,并格式化输出一些调测信息。示例如下: | 39 | +在算子核函数(Kernel)侧实现代码中需要增加断言的地方使用assert检查代码,并格式化输出一些调测信息。示例如下: |
| 40 | 40 | ||
| 41 | ```cpp | 41 | ```cpp |
| 42 | int assertFlag = 10; | 42 | int assertFlag = 10; |
| @@ -66,7 +66,7 @@ __aicore__ inline void DumpAccChkPoint(const GlobalTensor<T> &tensor, uint32_t i | |||
| 66 | 66 | ||
| 67 | | 参数名称 | 输入/输出 | 描述 | | 67 | | 参数名称 | 输入/输出 | 描述 | |
| 68 | | ------ | ------ | ------ | | 68 | | ------ | ------ | ------ | |
| 69 | -| tensor | 输入 | 需要dump的Tensor。<br>•待dump的tensor位于Unified Buffer/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。<br>•待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。| | 69 | +| tensor | 输入 | 需要dump的Tensor。<br>•待dump的tensor位于UB/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。<br>•待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。| |
| 70 | | index | 输入 | 用户自定义附加信息(行号或其他自定义数字)。| | 70 | | index | 输入 | 用户自定义附加信息(行号或其他自定义数字)。| |
| 71 | | countOff | 输入 | 偏移元素个数。偏移后的Tensor地址需要满足所在物理位置的对齐约束。具体参考[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。| | 71 | | countOff | 输入 | 偏移元素个数。偏移后的Tensor地址需要满足所在物理位置的对齐约束。具体参考[通用地址对齐约束](../../../general_description_and_constraints.md#section796754519912)。| |
| 72 | | dumpSize | 输入 | 需要dump的元素个数。| | 72 | | dumpSize | 输入 | 需要dump的元素个数。| |
| @@ -92,7 +92,7 @@ __aicore__ inline void DumpAccChkPoint(const GlobalTensor<T> &tensor, uint32_t i | |||
| 92 | 92 | ||
| 93 | ## 约束说明<a name="section794123819592"></a> | 93 | ## 约束说明<a name="section794123819592"></a> |
| 94 | 94 | ||
| 95 | -- 当前仅支持打印存储位置为Unified Buffer/L1 Buffer/L0C Buffer/Global Memory的Tensor信息。 | 95 | +- 当前仅支持打印存储位置为Unified Buffer(UB)/L1 Buffer/L0C Buffer/Global Memory的Tensor信息。 |
| 96 | <!-- npu="950" id100 --> | 96 | <!-- npu="950" id100 --> |
| 97 | - 针对Ascend 950PR/Ascend 950DT,使用该接口打印L1 Tensor数据时,HDK版本需要至少升级到25.7.0以上。 | 97 | - 针对Ascend 950PR/Ascend 950DT,使用该接口打印L1 Tensor数据时,HDK版本需要至少升级到25.7.0以上。 |
| 98 | <!-- end id100 --> | 98 | <!-- end id100 --> |
| @@ -90,7 +90,7 @@ DumpTensor: desc=5, addr=0, data_type=float16, position=UB, dump_size=32 | |||
| 90 | 90 | ||
| 91 | | 参数名称 | 输入/输出 | 描述 | | 91 | | 参数名称 | 输入/输出 | 描述 | |
| 92 | | ------ | ------ | ------ | | 92 | | ------ | ------ | ------ | |
| 93 | -| tensor | 输入 | 需要dump的Tensor。<br>•待dump的tensor位于Unified Buffer/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。<br>•待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。| | 93 | +| tensor | 输入 | 需要dump的Tensor。<br>•待dump的tensor位于UB/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。<br>•待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。| |
| 94 | | desc | 输入 | 用户自定义附加信息(行号或其他自定义数字)。<br>在使用DumpTensor功能时,用户可通过desc参数附加自定义信息,以便在不同场景下区分Dump内容的来源。此功能有助于精准定位具体DumpTensor的输出,提升调试与分析效率。| | 94 | | desc | 输入 | 用户自定义附加信息(行号或其他自定义数字)。<br>在使用DumpTensor功能时,用户可通过desc参数附加自定义信息,以便在不同场景下区分Dump内容的来源。此功能有助于精准定位具体DumpTensor的输出,提升调试与分析效率。| |
| 95 | | dumpSize | 输入 | 需要dump的元素个数。| | 95 | | dumpSize | 输入 | 需要dump的元素个数。| |
| 96 | | shapeInfo | 输入 | 传入Tensor的shape信息,可按照shape信息进行打印。<br>•当Shape尺寸大于dumpSize元素个数时,按照ShapeInfo打印元素,不足的Dump数据用"-"展示。<br>•当Shape尺寸小于等于dumpSize元素个数时,按照ShapeInfo打印元素,多出的Dump数据不展示。| | 96 | | shapeInfo | 输入 | 传入Tensor的shape信息,可按照shape信息进行打印。<br>•当Shape尺寸大于dumpSize元素个数时,按照ShapeInfo打印元素,不足的Dump数据用"-"展示。<br>•当Shape尺寸小于等于dumpSize元素个数时,按照ShapeInfo打印元素,多出的Dump数据不展示。| |
| @@ -114,7 +114,7 @@ DumpTensor: desc=5, addr=0, data_type=float16, position=UB, dump_size=32 | |||
| 114 | 114 | ||
| 115 | ## 约束说明<a name="section794123819592"></a> | 115 | ## 约束说明<a name="section794123819592"></a> |
| 116 | 116 | ||
| 117 | -- 当前支持打印存储位置为Unified Buffer/L1 Buffer/L0C Buffer/Global Memory的Tensor信息。 | 117 | +- 当前支持打印存储位置为Unified Buffer(UB)/L1 Buffer/L0C Buffer/Global Memory的Tensor信息。 |
| 118 | <!-- npu="950" id111 --> | 118 | <!-- npu="950" id111 --> |
| 119 | - 在Ascend 950PR/Ascend 950DT下新增BiasTable Buffer和Fixpipe Buffer的Tensor数据打印。 | 119 | - 在Ascend 950PR/Ascend 950DT下新增BiasTable Buffer和Fixpipe Buffer的Tensor数据打印。 |
| 120 | <!-- end id111 --> | 120 | <!-- end id111 --> |
| @@ -28,7 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | 头文件路径为:`"basic_api/kernel_operator_dump_tensor_intf.h"`。 | 29 | 头文件路径为:`"basic_api/kernel_operator_dump_tensor_intf.h"`。 |
| 30 | 30 | ||
| 31 | -提供时间戳打点功能,用于在算子Kernel代码中标记关键执行点。调用后会打印如下信息: | 31 | +提供时间戳打点功能,用于在算子核函数(Kernel)代码中标记关键执行点。调用后会打印如下信息: |
| 32 | 32 | ||
| 33 | - descId:用户自定义标识符,用于区分不同打点位置; | 33 | - descId:用户自定义标识符,用于区分不同打点位置; |
| 34 | - rsv:保留值,默认为0,无需关注; | 34 | - rsv:保留值,默认为0,无需关注; |
| @@ -20,7 +20,7 @@ Exp(dst, src, mask, repeatTime, {dstBlkStride, ..., dstRepStride, ...}); | |||
| 20 | 20 | ||
| 21 | ## 迭代控制 | 21 | ## 迭代控制 |
| 22 | 22 | ||
| 23 | -Vector计算单元每个迭代会从UB中取出**8**个**DataBlock**(每个DataBlock数据块内部地址连续,长度为32Byte)进行计算,并写入对应的8个DataBlock中。下图为单次迭代内的8个DataBlock进行Exp计算的示意图。 | 23 | +Vector计算单元每个迭代会从Unified Buffer(UB)中取出**8**个**DataBlock**(每个DataBlock数据块内部地址连续,长度为32Byte)进行计算,并写入对应的8个DataBlock中。下图为单次迭代内的8个DataBlock进行Exp计算的示意图。 |
| 24 | 24 | ||
| 25 | **图1** 单次迭代内的8个DataBlock进行Exp计算示意图 | 25 | **图1** 单次迭代内的8个DataBlock进行Exp计算示意图 |
| 26 | <a id="图1-单次迭代内的8个datablock进行exp计算示意图"></a> | 26 | <a id="图1-单次迭代内的8个datablock进行exp计算示意图"></a> |
| @@ -295,6 +295,6 @@ Mask操作的使用方式如下: | |||
| 295 | 295 | ||
| 296 | > [!CAUTION]注意 | 296 | > [!CAUTION]注意 |
| 297 | > | 297 | > |
| 298 | -> - 参数count的最大取值受限于输入数据总容量,该容量由系统UB大小限制及操作数数据类型共同约束:不同数据类型下,相同UB容量内可容纳的最大元素数量不同。 | 298 | +> - 参数count的最大取值受限于输入数据总容量,该容量由系统Unified Buffer(UB)大小限制及操作数数据类型共同约束:不同数据类型下,相同UB容量内可容纳的最大元素数量不同。 |
| 299 | > | 299 | > |
| 300 | > - 参数mask\[\]/mask仅在高维切分计算时有效,mask为0时,目的操作数保持原值。 | 300 | > - 参数mask\[\]/mask仅在高维切分计算时有效,mask为0时,目的操作数保持原值。 |
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/Vector_logical_arch/Vector_logical_arch.md+13-13
| @@ -15,7 +15,7 @@ Vector计算单元专用于执行向量计算。如下图所示,高亮部分 | |||
| 15 | 15 | ||
| 16 | | 存储单元 | 说明 | | 16 | | 存储单元 | 说明 | |
| 17 | | --- | --- | | 17 | | --- | --- | |
| 18 | - | Unified Buffer | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 | | 18 | + | Unified Buffer(UB) | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 | |
| 19 | <!-- end id1 --> | 19 | <!-- end id1 --> |
| 20 | 20 | ||
| 21 | <!-- npu="950" id2 --> | 21 | <!-- npu="950" id2 --> |
| @@ -29,26 +29,26 @@ Vector计算单元专用于执行向量计算。如下图所示,高亮部分 | |||
| 29 | 29 | ||
| 30 | | 存储单元 | 说明 | | 30 | | 存储单元 | 说明 | |
| 31 | | --- | --- | | 31 | | --- | --- | |
| 32 | - | Unified Buffer | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 | | 32 | + | UB | AI Core内部物理存储单元,通常用于存储向量计算的输入/输出数据。 | |
| 33 | - | SIMD Register File | AI Core内部物理存储单元,在SIMD程序中,数据从Unified Buffer搬运到Register进行计算,产生的中间结果可以不用传回Unified Buffer,直接在寄存器计算。 | | 33 | + | SIMD Register File | AI Core内部物理存储单元,在SIMD程序中,数据从UB搬运到Register进行计算,产生的中间结果可以不用传回UB,直接在寄存器计算。 | |
| 34 | <!-- end id2 --> | 34 | <!-- end id2 --> |
| 35 | 35 | ||
| 36 | -## Unified Buffer介绍<a name="ZH-CN_TOPIC_0000002574022839"></a> | 36 | +## UB介绍<a name="ZH-CN_TOPIC_0000002574022839"></a> |
| 37 | 37 | ||
| 38 | -### Unified Buffer的通用约束说明 | 38 | +### UB的通用约束说明 |
| 39 | 39 | ||
| 40 | -- Unified Buffer地址对齐约束,请参考[通用地址对齐约束](../../../general_description_and_constraints.md#通用地址对齐约束)。 | 40 | +- UB地址对齐约束,请参考[通用地址对齐约束](../../../general_description_and_constraints.md#通用地址对齐约束)。 |
| 41 | -- Unified Buffer地址重叠约束,请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 | 41 | +- UB地址重叠约束,请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 42 | 42 | ||
| 43 | -### Unified Buffer的内存结构与bank冲突 | 43 | +### UB的内存结构与bank冲突 |
| 44 | 44 | ||
| 45 | -为了提高数据访问的效率和吞吐量,Unified Buffer采用了大小相等的内存模块(bank)结构设计。当多条读写指令同时访问Unified Buffer时,由于硬件资源的限制,这些指令不能同时执行,从而引发bank冲突。在这种情况下,指令需要排队等待资源,无法在一个指令周期内完成。 | 45 | +为了提高数据访问的效率和吞吐量,UB采用了大小相等的内存模块(bank)结构设计。当多条读写指令同时访问UB时,由于硬件资源的限制,这些指令不能同时执行,从而引发bank冲突。在这种情况下,指令需要排队等待资源,无法在一个指令周期内完成。 |
| 46 | 46 | ||
| 47 | <!-- npu="A3,910b" id3 --> | 47 | <!-- npu="A3,910b" id3 --> |
| 48 | - 针对Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品 | 48 | - 针对Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| 49 | - - Unified Buffer的内存结构 | 49 | + - UB的内存结构 |
| 50 | 50 | ||
| 51 | - **图3** Unified Buffer的内存结构图 | 51 | + **图3** UB的内存结构图 |
| 52 | 52 | ||
| 53 |  | 53 |  |
| 54 | 54 | ||
| @@ -64,9 +64,9 @@ Vector计算单元专用于执行向量计算。如下图所示,高亮部分 | |||
| 64 | 64 | ||
| 65 | <!-- npu="950" id4 --> | 65 | <!-- npu="950" id4 --> |
| 66 | - 针对Ascend 950PR/Ascend 950DT | 66 | - 针对Ascend 950PR/Ascend 950DT |
| 67 | - - Unified Buffer的内存结构 | 67 | + - UB的内存结构 |
| 68 | 68 | ||
| 69 | - **图4** Unified Buffer的内存结构图 | 69 | + **图4** UB的内存结构图 |
| 70 | 70 | ||
| 71 |  | 71 |  |
| 72 | 72 | ||
| @@ -146,9 +146,9 @@ $dst_i = |src_i|$ | |||
| 146 | <!-- end id27 --> | 146 | <!-- end id27 --> |
| 147 | <!-- end id20 --> | 147 | <!-- end id20 --> |
| 148 | <!-- npu="950" id21 --> | 148 | <!-- npu="950" id21 --> |
| 149 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 149 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 150 | - - tensor高维切分计算占用8KB Unified Buffer。 | 150 | + - tensor高维切分计算占用8KB UB。 |
| 151 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 151 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 152 | <!-- end id21 --> | 152 | <!-- end id21 --> |
| 153 | 153 | ||
| 154 | ## 调用示例<a name="section176061616102911"></a> | 154 | ## 调用示例<a name="section176061616102911"></a> |
| @@ -141,9 +141,9 @@ $dst_i = src0_i + src1_i$ | |||
| 141 | <!-- end id27 --> | 141 | <!-- end id27 --> |
| 142 | <!-- end id20 --> | 142 | <!-- end id20 --> |
| 143 | <!-- npu="950" id21 --> | 143 | <!-- npu="950" id21 --> |
| 144 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 144 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 145 | - - tensor高维切分计算占用8KB Unified Buffer。 | 145 | + - tensor高维切分计算占用8KB UB。 |
| 146 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 146 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 147 | <!-- end id21 --> | 147 | <!-- end id21 --> |
| 148 | 148 | ||
| 149 | ## 调用示例<a name="section642mcpsimp"></a> | 149 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -160,9 +160,9 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 160 | <!-- end id31 --> | 160 | <!-- end id31 --> |
| 161 | <!-- end id24 --> | 161 | <!-- end id24 --> |
| 162 | <!-- npu="950" id32 --> | 162 | <!-- npu="950" id32 --> |
| 163 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 163 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 164 | - - tensor高维切分计算占用8KB Unified Buffer。 | 164 | + - tensor高维切分计算占用8KB UB。 |
| 165 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 165 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 166 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 166 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 167 | <!-- end id32 --> | 167 | <!-- end id32 --> |
| 168 | 168 | ||
| @@ -102,9 +102,9 @@ $dst_i = scalar + src_i$ | |||
| 102 | 102 | ||
| 103 | <!-- npu="950" id9 --> | 103 | <!-- npu="950" id9 --> |
| 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 | 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 |
| 105 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 105 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 106 | - - tensor高维切分计算占用8KB Unified Buffer。 | 106 | + - tensor高维切分计算占用8KB UB。 |
| 107 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 107 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 109 | <!-- end id9 --> | 109 | <!-- end id9 --> |
| 110 | 110 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/basic_arithmetic/BilinearInterpolation_ISASI.md+1-1
| @@ -215,7 +215,7 @@ hRepeat = 2;vRepeat = 2;mask = 128;vROffset = 128。 | |||
| 215 | - 参数src0Offset的取值要求如下: | 215 | - 参数src0Offset的取值要求如下: |
| 216 | - 取值应保证src0元素类型位宽对齐。 | 216 | - 取值应保证src0元素类型位宽对齐。 |
| 217 | - 偏移地址后需要32字节对齐。 | 217 | - 偏移地址后需要32字节对齐。 |
| 218 | - - 偏移地址后不能超出UB大小数据的范围。 | 218 | + - 偏移地址后不能超出Unified Buffer(UB)大小数据的范围。 |
| 219 | - 地址偏移的取值范围:不能超出uint32\_t的范围。 | 219 | - 地址偏移的取值范围:不能超出uint32\_t的范围。 |
| 220 | - 当参数repeatMode配置为true时,需确保src1的有效数据长度*16 ≥ src0的数据长度。 | 220 | - 当参数repeatMode配置为true时,需确保src1的有效数据长度*16 ≥ src0的数据长度。 |
| 221 | 221 | ||
| @@ -200,9 +200,9 @@ $dst_i = src0_i / src1_i$ | |||
| 200 | <!-- end id33 --> | 200 | <!-- end id33 --> |
| 201 | <!-- end id28 --> | 201 | <!-- end id28 --> |
| 202 | <!-- npu="950" id32 --> | 202 | <!-- npu="950" id32 --> |
| 203 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 203 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 204 | - - tensor高维切分计算占用8KB Unified Buffer。 | 204 | + - tensor高维切分计算占用8KB UB。 |
| 205 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 205 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 206 | <!-- end id32 --> | 206 | <!-- end id32 --> |
| 207 | 207 | ||
| 208 | ## 调用示例<a name="section642mcpsimp"></a> | 208 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -106,9 +106,9 @@ $dst_i = scalar \div src_i$ | |||
| 106 | 106 | ||
| 107 | <!-- npu="950" id9 --> | 107 | <!-- npu="950" id9 --> |
| 108 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 | 108 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 |
| 109 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 109 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 110 | - - tensor高维切分计算占用8KB Unified Buffer。 | 110 | + - tensor高维切分计算占用8KB UB。 |
| 111 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 111 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 112 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 112 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 113 | <!-- end id9 --> | 113 | <!-- end id9 --> |
| 114 | 114 | ||
| @@ -170,9 +170,9 @@ T支持的数据类型为:half、float。 | |||
| 170 | <!-- end id30 --> | 170 | <!-- end id30 --> |
| 171 | <!-- end id20 --> | 171 | <!-- end id20 --> |
| 172 | <!-- npu="950" id21 --> | 172 | <!-- npu="950" id21 --> |
| 173 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 173 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 174 | - - tensor高维切分计算占用8KB Unified Buffer。 | 174 | + - tensor高维切分计算占用8KB UB。 |
| 175 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 175 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 176 | <!-- end id21 --> | 176 | <!-- end id21 --> |
| 177 | 177 | ||
| 178 | <!-- npu="950" id24 --> | 178 | <!-- npu="950" id24 --> |
| @@ -147,9 +147,9 @@ T和U支持的数据类型为:half、float。 | |||
| 147 | <!-- end id23 --> | 147 | <!-- end id23 --> |
| 148 | <!-- end id16 --> | 148 | <!-- end id16 --> |
| 149 | <!-- npu="950" id24 --> | 149 | <!-- npu="950" id24 --> |
| 150 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 150 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 151 | - - tensor高维切分计算占用8KB Unified Buffer。 | 151 | + - tensor高维切分计算占用8KB UB。 |
| 152 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 152 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 153 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 153 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 154 | <!-- end id24 --> | 154 | <!-- end id24 --> |
| 155 | 155 | ||
| @@ -172,9 +172,9 @@ T支持的数据类型为:half、float。 | |||
| 172 | <!-- end id30 --> | 172 | <!-- end id30 --> |
| 173 | <!-- end id20 --> | 173 | <!-- end id20 --> |
| 174 | <!-- npu="950" id21 --> | 174 | <!-- npu="950" id21 --> |
| 175 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 175 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 176 | - - tensor高维切分计算占用8KB Unified Buffer。 | 176 | + - tensor高维切分计算占用8KB UB。 |
| 177 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 177 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 178 | <!-- end id21 --> | 178 | <!-- end id21 --> |
| 179 | 179 | ||
| 180 | <!-- npu="950" id24 --> | 180 | <!-- npu="950" id24 --> |
| @@ -134,9 +134,9 @@ $dst_i = max(src0_i, src1_i)$ | |||
| 134 | <!-- end id27 --> | 134 | <!-- end id27 --> |
| 135 | <!-- end id20 --> | 135 | <!-- end id20 --> |
| 136 | <!-- npu="950" id21 --> | 136 | <!-- npu="950" id21 --> |
| 137 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 137 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 138 | - - tensor高维切分计算占用8KB Unified Buffer。 | 138 | + - tensor高维切分计算占用8KB UB。 |
| 139 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 139 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 140 | <!-- end id21 --> | 140 | <!-- end id21 --> |
| 141 | 141 | ||
| 142 | ## 调用示例<a name="section642mcpsimp"></a> | 142 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -157,9 +157,9 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 157 | <!-- end id30 --> | 157 | <!-- end id30 --> |
| 158 | <!-- end id23 --> | 158 | <!-- end id23 --> |
| 159 | <!-- npu="950" id31 --> | 159 | <!-- npu="950" id31 --> |
| 160 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 160 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 161 | - - tensor高维切分计算占用8KB Unified Buffer。 | 161 | + - tensor高维切分计算占用8KB UB。 |
| 162 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 162 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 163 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 163 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 164 | <!-- end id31 --> | 164 | <!-- end id31 --> |
| 165 | 165 | ||
| @@ -102,9 +102,9 @@ $dst_i = \operatorname{Max}(scalar, src_i)$ | |||
| 102 | 102 | ||
| 103 | <!-- npu="950" id9 --> | 103 | <!-- npu="950" id9 --> |
| 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 | 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 |
| 105 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 105 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 106 | - - tensor高维切分计算占用8KB Unified Buffer。 | 106 | + - tensor高维切分计算占用8KB UB。 |
| 107 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 107 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 109 | <!-- end id9 --> | 109 | <!-- end id9 --> |
| 110 | 110 | ||
| @@ -134,9 +134,9 @@ $dst_i = min(src0_i, src1_i)$ | |||
| 134 | <!-- end id27 --> | 134 | <!-- end id27 --> |
| 135 | <!-- end id20 --> | 135 | <!-- end id20 --> |
| 136 | <!-- npu="950" id21 --> | 136 | <!-- npu="950" id21 --> |
| 137 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 137 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 138 | - - tensor高维切分计算占用8KB Unified Buffer。 | 138 | + - tensor高维切分计算占用8KB UB。 |
| 139 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 139 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 140 | <!-- end id21 --> | 140 | <!-- end id21 --> |
| 141 | 141 | ||
| 142 | ## 调用示例<a name="section642mcpsimp"></a> | 142 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -157,9 +157,9 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 157 | <!-- end id30 --> | 157 | <!-- end id30 --> |
| 158 | <!-- end id23 --> | 158 | <!-- end id23 --> |
| 159 | <!-- npu="950" id31 --> | 159 | <!-- npu="950" id31 --> |
| 160 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 160 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 161 | - - tensor高维切分计算占用8KB Unified Buffer。 | 161 | + - tensor高维切分计算占用8KB UB。 |
| 162 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 162 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 163 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 163 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 164 | <!-- end id31 --> | 164 | <!-- end id31 --> |
| 165 | 165 | ||
| @@ -102,9 +102,9 @@ $dst_i = \operatorname{Min}(scalar, src_i)$ | |||
| 102 | 102 | ||
| 103 | <!-- npu="950" id9 --> | 103 | <!-- npu="950" id9 --> |
| 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 | 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 |
| 105 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 105 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 106 | - - tensor高维切分计算占用8KB Unified Buffer。 | 106 | + - tensor高维切分计算占用8KB UB。 |
| 107 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 107 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 109 | <!-- end id9 --> | 109 | <!-- end id9 --> |
| 110 | 110 | ||
| @@ -141,9 +141,9 @@ $dst_i = src0_i \times src1_i$ | |||
| 141 | <!-- end id27 --> | 141 | <!-- end id27 --> |
| 142 | <!-- end id20 --> | 142 | <!-- end id20 --> |
| 143 | <!-- npu="950" id21 --> | 143 | <!-- npu="950" id21 --> |
| 144 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 144 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 145 | - - tensor高维切分计算占用8KB Unified Buffer。 | 145 | + - tensor高维切分计算占用8KB UB。 |
| 146 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 146 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 147 | <!-- end id21 --> | 147 | <!-- end id21 --> |
| 148 | 148 | ||
| 149 | ## 调用示例<a name="section642mcpsimp"></a> | 149 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -160,9 +160,9 @@ dst和src使用[TensorTrait](../../aux_data_structures/TensorTrait/TensorTrait.m | |||
| 160 | <!-- end id31 --> | 160 | <!-- end id31 --> |
| 161 | <!-- end id24 --> | 161 | <!-- end id24 --> |
| 162 | <!-- npu="950" id32 --> | 162 | <!-- npu="950" id32 --> |
| 163 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 163 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 164 | - - tensor高维切分计算占用8KB Unified Buffer。 | 164 | + - tensor高维切分计算占用8KB UB。 |
| 165 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 165 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 166 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 166 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 167 | <!-- end id32 --> | 167 | <!-- end id32 --> |
| 168 | 168 | ||
| @@ -102,9 +102,9 @@ $dst_i = scalar * src_i$ | |||
| 102 | 102 | ||
| 103 | <!-- npu="950" id9 --> | 103 | <!-- npu="950" id9 --> |
| 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 | 104 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 |
| 105 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 105 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 106 | - - tensor高维切分计算占用8KB Unified Buffer。 | 106 | + - tensor高维切分计算占用8KB UB。 |
| 107 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 107 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 108 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 109 | <!-- end id9 --> | 109 | <!-- end id9 --> |
| 110 | 110 | ||
| @@ -193,9 +193,9 @@ $dst_i = \frac{1}{src_i}$ | |||
| 193 | <!-- end id33 --> | 193 | <!-- end id33 --> |
| 194 | <!-- end id28 --> | 194 | <!-- end id28 --> |
| 195 | <!-- npu="950" id34 --> | 195 | <!-- npu="950" id34 --> |
| 196 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 196 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 197 | - - tensor高维切分计算占用8KB Unified Buffer。 | 197 | + - tensor高维切分计算占用8KB UB。 |
| 198 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 198 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 199 | <!-- end id34 --> | 199 | <!-- end id34 --> |
| 200 | 200 | ||
| 201 | - 如果src中的数值为0,可能会产生未知结果。 | 201 | - 如果src中的数值为0,可能会产生未知结果。 |
| @@ -138,9 +138,9 @@ $dst_i = \max(0, src_i)$ | |||
| 138 | <!-- end id27 --> | 138 | <!-- end id27 --> |
| 139 | <!-- end id20 --> | 139 | <!-- end id20 --> |
| 140 | <!-- npu="950" id21 --> | 140 | <!-- npu="950" id21 --> |
| 141 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 141 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 142 | - - tensor高维切分计算占用8KB Unified Buffer。 | 142 | + - tensor高维切分计算占用8KB UB。 |
| 143 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 143 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 144 | <!-- end id21 --> | 144 | <!-- end id21 --> |
| 145 | 145 | ||
| 146 | ## 调用示例<a name="section642mcpsimp"></a> | 146 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -170,9 +170,9 @@ T支持的数据类型为:half、float。 | |||
| 170 | <!-- end id30 --> | 170 | <!-- end id30 --> |
| 171 | <!-- end id20 --> | 171 | <!-- end id20 --> |
| 172 | <!-- npu="950" id21 --> | 172 | <!-- npu="950" id21 --> |
| 173 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 173 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 174 | - - tensor高维切分计算占用8KB Unified Buffer。 | 174 | + - tensor高维切分计算占用8KB UB。 |
| 175 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 175 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 176 | <!-- end id21 --> | 176 | <!-- end id21 --> |
| 177 | 177 | ||
| 178 | - 如果src中的数值为非正数,可能会产生未知结果。 | 178 | - 如果src中的数值为非正数,可能会产生未知结果。 |
| @@ -170,9 +170,9 @@ T支持的数据类型为:half、float。 | |||
| 170 | <!-- end id30 --> | 170 | <!-- end id30 --> |
| 171 | <!-- end id20 --> | 171 | <!-- end id20 --> |
| 172 | <!-- npu="950" id21 --> | 172 | <!-- npu="950" id21 --> |
| 173 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 173 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 174 | - - tensor高维切分计算占用8KB Unified Buffer。 | 174 | + - tensor高维切分计算占用8KB UB。 |
| 175 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 175 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 176 | - 针对Ascend 950PR/Ascend 950DT,SqrtAlgo::FAST\_INVERSE、SqrtAlgo::PRECISION\_0ULP\_FTZ\_FALSE,使用快速求逆算法得出结果。适用于输入值在\[0, 85070596800837026223494223584045301760\]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为0。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。 | 176 | - 针对Ascend 950PR/Ascend 950DT,SqrtAlgo::FAST\_INVERSE、SqrtAlgo::PRECISION\_0ULP\_FTZ\_FALSE,使用快速求逆算法得出结果。适用于输入值在\[0, 85070596800837026223494223584045301760\]范围内的计算。在该范围内,算法保证输出的最大精度误差为0ulp;当输入值大于85070596800837026223494223584045301760时,输出为0。目前,该算法仅支持float数据类型,并在该模式下支持Subnormal数据计算。 |
| 177 | <!-- end id21 --> | 177 | <!-- end id21 --> |
| 178 | 178 | ||
| @@ -141,9 +141,9 @@ $dst_i = src0_i - src1_i$ | |||
| 141 | <!-- end id27 --> | 141 | <!-- end id27 --> |
| 142 | <!-- end id20 --> | 142 | <!-- end id20 --> |
| 143 | <!-- npu="950" id21 --> | 143 | <!-- npu="950" id21 --> |
| 144 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 144 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 145 | - - tensor高维切分计算占用8KB Unified Buffer。 | 145 | + - tensor高维切分计算占用8KB UB。 |
| 146 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 146 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 147 | <!-- end id21 --> | 147 | <!-- end id21 --> |
| 148 | 148 | ||
| 149 | ## 调用示例<a name="section642mcpsimp"></a> | 149 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -105,9 +105,9 @@ $dst_i = scalar - src_i$ | |||
| 105 | 105 | ||
| 106 | <!-- npu="950" id9 --> | 106 | <!-- npu="950" id9 --> |
| 107 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 | 107 | - 针对Ascend 950PR/Ascend 950DT:该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,当参数count或repeatTime取值为0时,软仿行为不保证该接口被视为NOP(空操作)。 |
| 108 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 108 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 109 | - - tensor高维切分计算占用8KB Unified Buffer。 | 109 | + - tensor高维切分计算占用8KB UB。 |
| 110 | - - tensor前n个数据连续计算不涉及8KB Unified Buffer的占用。 | 110 | + - tensor前n个数据连续计算不涉及8KB UB的占用。 |
| 111 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 | 111 | - 针对Ascend 950PR/Ascend 950DT,tensor前n个数据计算API中的isSetMask参数不生效,保持默认值即可。 |
| 112 | <!-- end id9 --> | 112 | <!-- end id9 --> |
| 113 | 113 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/compare_and_select/Compare_store_to_register.md+1-1
| @@ -95,7 +95,7 @@ | |||
| 95 | - 本接口将结果写入128bit的CmpMask寄存器中,可以用[GetCmpMask](GetCmpMask_ISASI.md)接口获取寄存器保存的数据。 | 95 | - 本接口将结果写入128bit的CmpMask寄存器中,可以用[GetCmpMask](GetCmpMask_ISASI.md)接口获取寄存器保存的数据。 |
| 96 | 96 | ||
| 97 | <!-- npu="950" id8 --> | 97 | <!-- npu="950" id8 --> |
| 98 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT,该接口占用8KB Unified Buffer临时空间。 | 98 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT,该接口占用8KB UB临时空间。 |
| 99 | <!-- end id8 --> | 99 | <!-- end id8 --> |
| 100 | 100 | ||
| 101 | <!-- npu="A3,910b" id9 --> | 101 | <!-- npu="A3,910b" id9 --> |
| @@ -262,9 +262,9 @@ repeatTimes值不生效,指令的迭代次数由源操作数和mask共同决 | |||
| 262 | - 若调用该接口前为Counter模式,在调用该接口后需要显式设置回Counter模式(接口内部执行结束后会设置为Normal模式)。 | 262 | - 若调用该接口前为Counter模式,在调用该接口后需要显式设置回Counter模式(接口内部执行结束后会设置为Normal模式)。 |
| 263 | 263 | ||
| 264 | <!-- npu="950" id26 --> | 264 | <!-- npu="950" id26 --> |
| 265 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 265 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 266 | - - 内置固定模式占用8KB Unified Buffer临时空间。 | 266 | + - 内置固定模式占用8KB UB临时空间。 |
| 267 | - - 用户自定义模式不涉及8KB Unified Buffer临时空间的占用。 | 267 | + - 用户自定义模式不涉及8KB UB临时空间的占用。 |
| 268 | <!-- end id26 --> | 268 | <!-- end id26 --> |
| 269 | 269 | ||
| 270 | ## 调用示例<a name="section642mcpsimp"></a> | 270 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -226,9 +226,9 @@ Kirin 9030,支持模式0、1、2。 | |||
| 226 | - 当参数count或repeatTime取值为0时,针对Ascend 950PR/Ascend 950DT,该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,不保证该接口将被视为NOP(空操作)。 | 226 | - 当参数count或repeatTime取值为0时,针对Ascend 950PR/Ascend 950DT,该接口通过VF调用[Reg矢量计算API](../../reg_vector_compute/reg_vector_compute.md)实现兼容,不保证该接口将被视为NOP(空操作)。 |
| 227 | <!-- end id10 --> | 227 | <!-- end id10 --> |
| 228 | <!-- npu="A3,910b,310p,950" id11 --> | 228 | <!-- npu="A3,910b,310p,950" id11 --> |
| 229 | -- 对UB空间的占用说明。 | 229 | +- 对Unified Buffer(UB)空间的占用说明。 |
| 230 | <!-- npu="A3,910b,310p" id12 --> | 230 | <!-- npu="A3,910b,310p" id12 --> |
| 231 | - - 针对如下型号,对于模式1和模式2,使用时需要预留8KB的Unified Buffer空间,作为接口的临时数据存放区: | 231 | + - 针对如下型号,对于模式1和模式2,使用时需要预留8KB的UB空间,作为接口的临时数据存放区: |
| 232 | <!-- npu="A3" id13 --> | 232 | <!-- npu="A3" id13 --> |
| 233 | - Atlas A3 训练系列产品/Atlas A3 推理系列产品 | 233 | - Atlas A3 训练系列产品/Atlas A3 推理系列产品 |
| 234 | <!-- end id13 --> | 234 | <!-- end id13 --> |
| @@ -241,8 +241,8 @@ Kirin 9030,支持模式0、1、2。 | |||
| 241 | <!-- end id12 --> | 241 | <!-- end id12 --> |
| 242 | <!-- npu="950" id16 --> | 242 | <!-- npu="950" id16 --> |
| 243 | - 针对Ascend 950PR/Ascend 950DT: | 243 | - 针对Ascend 950PR/Ascend 950DT: |
| 244 | - - 不传入mask参数的tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 244 | + - 不传入mask参数的tensor高维切分计算接口占用8KB UB临时空间。 |
| 245 | - - tensor前n个数据计算接口以及传入mask参数的tensor高维切分计算接口不涉及8KB Unified Buffer临时空间的占用。 | 245 | + - tensor前n个数据计算接口以及传入mask参数的tensor高维切分计算接口不涉及8KB UB临时空间的占用。 |
| 246 | <!-- end id16 --> | 246 | <!-- end id16 --> |
| 247 | <!-- end id11 --> | 247 | <!-- end id11 --> |
| 248 | <!-- npu="310b" id33 --> | 248 | <!-- npu="310b" id33 --> |
| @@ -130,9 +130,9 @@ Atlas 推理系列产品 AI Core,支持的数据类型为:int16_t、half、f | |||
| 130 | <!-- end id17 --> | 130 | <!-- end id17 --> |
| 131 | <!-- end id13 --> | 131 | <!-- end id13 --> |
| 132 | <!-- npu="950" id18 --> | 132 | <!-- npu="950" id18 --> |
| 133 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 133 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 134 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 134 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 135 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 135 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 136 | <!-- end id18 --> | 136 | <!-- end id18 --> |
| 137 | 137 | ||
| 138 | ## 调用示例<a name="section642mcpsimp"></a> | 138 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -175,9 +175,9 @@ $$ | |||
| 175 | <!-- end id17 --> | 175 | <!-- end id17 --> |
| 176 | <!-- end id13 --> | 176 | <!-- end id13 --> |
| 177 | <!-- npu="950" id18 --> | 177 | <!-- npu="950" id18 --> |
| 178 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 178 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 179 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 179 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 180 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 180 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 181 | <!-- end id18 --> | 181 | <!-- end id18 --> |
| 182 | 182 | ||
| 183 | ## 调用示例<a name="section837496171220"></a> | 183 | ## 调用示例<a name="section837496171220"></a> |
| @@ -217,9 +217,9 @@ PAR列表示矢量计算单元一个迭代能够处理的元素个数。 | |||
| 217 | <!-- end id22 --> | 217 | <!-- end id22 --> |
| 218 | <!-- end id18 --> | 218 | <!-- end id18 --> |
| 219 | <!-- npu="950" id23 --> | 219 | <!-- npu="950" id23 --> |
| 220 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 220 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 221 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 221 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 222 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 222 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 223 | <!-- end id23 --> | 223 | <!-- end id23 --> |
| 224 | 224 | ||
| 225 | ## 调用示例<a name="section642mcpsimp"></a> | 225 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -176,9 +176,9 @@ | |||
| 176 | <!-- end id16 --> | 176 | <!-- end id16 --> |
| 177 | <!-- end id12 --> | 177 | <!-- end id12 --> |
| 178 | <!-- npu="950" id17 --> | 178 | <!-- npu="950" id17 --> |
| 179 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 179 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 180 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 180 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 181 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 181 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 182 | <!-- end id17 --> | 182 | <!-- end id17 --> |
| 183 | - 当输入类型为int16_t,开启向量量化模式时,`SetDeqScale`接口需要传入至少128B大小的UB空间,若空间不足128B,可能导致精度错误。 | 183 | - 当输入类型为int16_t,开启向量量化模式时,`SetDeqScale`接口需要传入至少128B大小的UB空间,若空间不足128B,可能导致精度错误。 |
| 184 | - 该接口需要与`SetDeqScale`配合使用,使用关系映射表如下: | 184 | - 该接口需要与`SetDeqScale`配合使用,使用关系映射表如下: |
| @@ -141,9 +141,9 @@ Kirin 9030,支持的数据类型为:half、float。 | |||
| 141 | 141 | ||
| 142 | 地址不重叠场景下,无法在一拍读取dst、src0、src1三块不同地址下的数据,因此只能达到一半的理论并行度,理论并行度将在原有基础上减半;在地址重叠场景下,则保持原有理论并行度。 | 142 | 地址不重叠场景下,无法在一拍读取dst、src0、src1三块不同地址下的数据,因此只能达到一半的理论并行度,理论并行度将在原有基础上减半;在地址重叠场景下,则保持原有理论并行度。 |
| 143 | <!-- npu="950" id22 --> | 143 | <!-- npu="950" id22 --> |
| 144 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 144 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 145 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 145 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 146 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 146 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 147 | <!-- end id22 --> | 147 | <!-- end id22 --> |
| 148 | 148 | ||
| 149 | ## 调用示例<a name="section837496171220"></a> | 149 | ## 调用示例<a name="section837496171220"></a> |
| @@ -208,9 +208,9 @@ PAR列表示矢量计算单元一个迭代能够处理的元素个数。 | |||
| 208 | 地址不重叠场景下,无法在一拍读取dst、src0、src1三块不同地址下的数据,因此只能达到一半的理论并行度,理论并行度将在原有基础上减半;在地址重叠场景下,则保持原有理论并行度。 | 208 | 地址不重叠场景下,无法在一拍读取dst、src0、src1三块不同地址下的数据,因此只能达到一半的理论并行度,理论并行度将在原有基础上减半;在地址重叠场景下,则保持原有理论并行度。 |
| 209 | - 使用tensor高维切分计算接口时,src和scalar的数据类型为half、dst的数据类型为float的情况下,一个迭代处理内最多处理64个输入数据。 | 209 | - 使用tensor高维切分计算接口时,src和scalar的数据类型为half、dst的数据类型为float的情况下,一个迭代处理内最多处理64个输入数据。 |
| 210 | <!-- npu="950" id22 --> | 210 | <!-- npu="950" id22 --> |
| 211 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 211 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 212 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 212 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 213 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 213 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 214 | <!-- end id22 --> | 214 | <!-- end id22 --> |
| 215 | 215 | ||
| 216 | ## 调用示例<a name="section837496171220"></a> | 216 | ## 调用示例<a name="section837496171220"></a> |
| @@ -133,9 +133,9 @@ Atlas 推理系列产品AI Core,支持的数据类型为:half、float。 | |||
| 133 | 133 | ||
| 134 | 地址不重叠场景下,无法在一拍读取dst、src0、src1三块不同地址下的数据,因此只能达到一半的理论并行度,理论并行度将在原有基础上减半;在地址重叠场景下,则保持原有理论并行度。 | 134 | 地址不重叠场景下,无法在一拍读取dst、src0、src1三块不同地址下的数据,因此只能达到一半的理论并行度,理论并行度将在原有基础上减半;在地址重叠场景下,则保持原有理论并行度。 |
| 135 | <!-- npu="950" id18 --> | 135 | <!-- npu="950" id18 --> |
| 136 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 136 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 137 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 137 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 138 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 138 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 139 | <!-- end id18 --> | 139 | <!-- end id18 --> |
| 140 | 140 | ||
| 141 | ## 调用示例<a name="section837496171220"></a> | 141 | ## 调用示例<a name="section837496171220"></a> |
| @@ -166,9 +166,9 @@ $$ | |||
| 166 | <!-- end id13 --> | 166 | <!-- end id13 --> |
| 167 | - 本指令涉及精度转换,转换规则参考[精度转换规则](../../data_structures/precision_conversion.md)。 | 167 | - 本指令涉及精度转换,转换规则参考[精度转换规则](../../data_structures/precision_conversion.md)。 |
| 168 | <!-- npu="950" id18 --> | 168 | <!-- npu="950" id18 --> |
| 169 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 169 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 170 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 170 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 171 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 171 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 172 | <!-- end id18 --> | 172 | <!-- end id18 --> |
| 173 | 173 | ||
| 174 | ## 调用示例<a name="section642mcpsimp"></a> | 174 | ## 调用示例<a name="section642mcpsimp"></a> |
| @@ -130,9 +130,9 @@ Atlas 推理系列产品AI Core,支持的数据类型为:int16_t、half、fl | |||
| 130 | <!-- end id17 --> | 130 | <!-- end id17 --> |
| 131 | <!-- end id13 --> | 131 | <!-- end id13 --> |
| 132 | <!-- npu="950" id18 --> | 132 | <!-- npu="950" id18 --> |
| 133 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 133 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 134 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 134 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 135 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 135 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 136 | <!-- end id18 --> | 136 | <!-- end id18 --> |
| 137 | 137 | ||
| 138 | ## 调用示例<a name="section837496171220"></a> | 138 | ## 调用示例<a name="section837496171220"></a> |
| @@ -175,9 +175,9 @@ $$ | |||
| 175 | <!-- end id13 --> | 175 | <!-- end id13 --> |
| 176 | - 本指令涉及精度转换,转换规则参考[精度转换规则](../../data_structures/precision_conversion.md)。 | 176 | - 本指令涉及精度转换,转换规则参考[精度转换规则](../../data_structures/precision_conversion.md)。 |
| 177 | <!-- npu="950" id18 --> | 177 | <!-- npu="950" id18 --> |
| 178 | -- 对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT: | 178 | +- 对Unified Buffer(UB)空间的占用说明。针对Ascend 950PR/Ascend 950DT: |
| 179 | - - tensor高维切分计算接口占用8KB Unified Buffer临时空间。 | 179 | + - tensor高维切分计算接口占用8KB UB临时空间。 |
| 180 | - - tensor前n个数据连续计算接口不涉及8KB Unified Buffer临时空间的占用。 | 180 | + - tensor前n个数据连续计算接口不涉及8KB UB临时空间的占用。 |
| 181 | <!-- end id18 --> | 181 | <!-- end id18 --> |
| 182 | 182 | ||
| 183 | ## 调用示例<a name="section837496171220"></a> | 183 | ## 调用示例<a name="section837496171220"></a> |
| @@ -23,7 +23,7 @@ | |||
| 23 | 23 | ||
| 24 | ## 推荐使用场景<a name="zh-cn_topic_0000002558185995_section23771839304"></a> | 24 | ## 推荐使用场景<a name="zh-cn_topic_0000002558185995_section23771839304"></a> |
| 25 | 25 | ||
| 26 | -- UB资源紧张场景。 | 26 | +- Unified Buffer(UB)资源紧张场景。 |
| 27 | 27 | ||
| 28 | 使用复合指令能在不修改源操作数原有数据的同时,减少UB空间的使用。 | 28 | 使用复合指令能在不修改源操作数原有数据的同时,减少UB空间的使用。 |
| 29 | 29 | ||
| @@ -34,11 +34,11 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 | 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 |
| 36 | 36 | ||
| 37 | -支持Unified Buffer和Unified Buffer之间的连续数据搬运,数据搬运时格式和内容保持不变。 | 37 | +支持Unified Buffer(UB)内部的连续数据搬运,数据搬运时格式和内容保持不变。 |
| 38 | 38 | ||
| 39 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 39 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 40 | 40 | ||
| 41 | -- Unified Buffer -> Unified Buffer | 41 | +- UB -> UB |
| 42 | - VECIN -> VECCALC | 42 | - VECIN -> VECCALC |
| 43 | - VECIN -> VECOUT | 43 | - VECIN -> VECOUT |
| 44 | - VECCALC -> VECIN | 44 | - VECCALC -> VECIN |
| @@ -83,7 +83,7 @@ Ascend 950PR/Ascend 950DT,支持的数据类型为:int8_t、uint8_t、fp4x2_ | |||
| 83 | 83 | ||
| 84 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> | 84 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> |
| 85 | 85 | ||
| 86 | -- 位于Unified Buffer的地址必须32字节对齐。 | 86 | +- 位于UB的地址必须32字节对齐。 |
| 87 | - 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 | 87 | - 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 88 | - isSetMask参数不生效,保持默认值true即可。 | 88 | - isSetMask参数不生效,保持默认值true即可。 |
| 89 | 89 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/Copy_UBToUB_mask_highdim_split.md+5-5
| @@ -34,11 +34,11 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 | 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 |
| 36 | 36 | ||
| 37 | -支持Unified Buffer和Unified Buffer之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 | 37 | +支持Unified Buffer(UB)内部的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。 |
| 38 | 38 | ||
| 39 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 39 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 40 | 40 | ||
| 41 | -- Unified Buffer -> Unified Buffer | 41 | +- UB -> UB |
| 42 | - VECIN -> VECCALC | 42 | - VECIN -> VECCALC |
| 43 | - VECIN -> VECOUT | 43 | - VECIN -> VECOUT |
| 44 | - VECCALC -> VECIN | 44 | - VECCALC -> VECIN |
| @@ -75,8 +75,8 @@ | |||
| 75 | 75 | ||
| 76 | | 参数名 | 输入/输出 | 描述 | | 76 | | 参数名 | 输入/输出 | 描述 | |
| 77 | | --- | --- | --- | | 77 | | --- | --- | --- | |
| 78 | -| dst | 输出 | 目的操作数,类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md),存储位置为Unified Buffer,目的地址需要32字节对齐。 | | 78 | +| dst | 输出 | 目的操作数,类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md),存储位置为UB,目的地址需要32字节对齐。 | |
| 79 | -| src | 输入 | 源操作数,类型为LocalTensor,存储位置为Unified Buffer,源地址需要32字节对齐。 | | 79 | +| src | 输入 | 源操作数,类型为LocalTensor,存储位置为UB,源地址需要32字节对齐。 | |
| 80 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | | 80 | | mask[]/mask | 输入 | mask用于控制每次迭代内参与计算的元素。详细设置参考[掩码](../SIMD_compute/mask.md)。 | |
| 81 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256字节数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体描述请参考[高维切分](../SIMD_compute/high_dim_split.md)。| | 81 | | repeatTime | 输入 | 重复迭代次数。矢量计算单元,每次读取连续的256字节数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。<br>关于该参数的具体描述请参考[高维切分](../SIMD_compute/high_dim_split.md)。| |
| 82 | | repeatParams | 输入 | 控制操作数地址步长的参数。<br>CopyRepeatParams类型,包含操作数相邻迭代间相同DataBlock的地址步长,操作数同一迭代内不同DataBlock的地址步长等参数。CopyRepeatParams参数说明请参考表3。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。 | | 82 | | repeatParams | 输入 | 控制操作数地址步长的参数。<br>CopyRepeatParams类型,包含操作数相邻迭代间相同DataBlock的地址步长,操作数同一迭代内不同DataBlock的地址步长等参数。CopyRepeatParams参数说明请参考表3。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。 | |
| @@ -136,7 +136,7 @@ | |||
| 136 | 136 | ||
| 137 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> | 137 | ## 约束说明<a name="zh-cn_topic_0000002567699435_section2045914466492"></a> |
| 138 | 138 | ||
| 139 | -- 位于Unified Buffer的地址必须32字节对齐。 | 139 | +- 位于UB的地址必须32字节对齐。 |
| 140 | - 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 | 140 | - 操作数地址重叠约束请参考[通用地址重叠约束](../../../general_description_and_constraints.md#通用地址重叠约束)。 |
| 141 | - CopyRepeatParams结构体参数的值需在取值范围内: | 141 | - CopyRepeatParams结构体参数的值需在取值范围内: |
| 142 | 142 | ||
| @@ -54,7 +54,7 @@ | |||
| 54 | 54 | ||
| 55 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 | 55 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 |
| 56 | 56 | ||
| 57 | -该接口提供将数据从Global Memory非对齐搬运至Unified Buffer的功能,可以根据开发者的需要自行填充数据。 | 57 | +该接口提供将数据从Global Memory非对齐搬运至Unified Buffer(UB)的功能,可以根据开发者的需要自行填充数据。 |
| 58 | 58 | ||
| 59 | 当每个搬运的数据块长度(blockLen)非32字节对齐时,每一个数据块都需要填充数据至32字节对齐。 | 59 | 当每个搬运的数据块长度(blockLen)非32字节对齐时,每一个数据块都需要填充数据至32字节对齐。 |
| 60 | 60 | ||
| @@ -64,7 +64,7 @@ | |||
| 64 | 64 | ||
| 65 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 65 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 66 | 66 | ||
| 67 | -- Global Memory -> Unified Buffer | 67 | +- Global Memory -> UB |
| 68 | - GM -> VECIN | 68 | - GM -> VECIN |
| 69 | - GM -> VECOUT | 69 | - GM -> VECOUT |
| 70 | <!-- npu="950" id16 --> | 70 | <!-- npu="950" id16 --> |
| @@ -110,7 +110,7 @@ | |||
| 110 | 110 | ||
| 111 | | 参数名 | 输入/输出 | 描述 | | 111 | | 参数名 | 输入/输出 | 描述 | |
| 112 | | :--- | :---: | :--- | | 112 | | :--- | :---: | :--- | |
| 113 | -| dst | 输出 | 目的操作数,类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md),存储位置为Unified Buffer,目的地址需要32字节对齐。 | | 113 | +| dst | 输出 | 目的操作数,类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md),存储位置为UB,目的地址需要32字节对齐。 | |
| 114 | | src | 输入 | 源操作数,类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md),存储位置为Global Memory,源地址需要1字节对齐。 | | 114 | | src | 输入 | 源操作数,类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md),存储位置为Global Memory,源地址需要1字节对齐。 | |
| 115 | | dataCopyParams | 输入 | 搬运参数。DataCopyExtParams类型,具体参数说明请参考[表3](#table_gm2ub_pad_3)。 | | 115 | | dataCopyParams | 输入 | 搬运参数。DataCopyExtParams类型,具体参数说明请参考[表3](#table_gm2ub_pad_3)。 | |
| 116 | | padParams | 输入 | 从Global Memory搬运数据至Local Memory时,可以根据开发者需要,在搬运数据左边或右边填充数据。padParams是用于控制数据填充过程的参数。DataCopyPadExtParams类型,具体参数请参考[表4](#table_gm2ub_pad_4)。 | | 116 | | padParams | 输入 | 从Global Memory搬运数据至Local Memory时,可以根据开发者需要,在搬运数据左边或右边填充数据。padParams是用于控制数据填充过程的参数。DataCopyPadExtParams类型,具体参数请参考[表4](#table_gm2ub_pad_4)。 | |
| @@ -251,7 +251,7 @@ | |||
| 251 | 251 | ||
| 252 | <!-- end id28 --> | 252 | <!-- end id28 --> |
| 253 | 253 | ||
| 254 | -- 位于Global Memory的源地址必须1字节对齐,位于Unified Buffer的目的地址必须32字节对齐。 | 254 | +- 位于Global Memory的源地址必须1字节对齐,位于UB的目的地址必须32字节对齐。 |
| 255 | - leftPadding、rightPadding所占字节数均不能超过32B。 | 255 | - leftPadding、rightPadding所占字节数均不能超过32B。 |
| 256 | - blockLen必须是sizeof\(T\)的整数倍。 | 256 | - blockLen必须是sizeof\(T\)的整数倍。 |
| 257 | - 结构体DataCopyPadExtParams的参数paddingValue数据类型和源操作数保持一致。当数据类型为b64时,paddingValue只能设置为0。 | 257 | - 结构体DataCopyPadExtParams的参数paddingValue数据类型和源操作数保持一致。当数据类型为b64时,paddingValue只能设置为0。 |
| @@ -355,7 +355,7 @@ | |||
| 355 | - 场景6:五维数据搬运(仅支持Ascend 950PR/Ascend 950DT) | 355 | - 场景6:五维数据搬运(仅支持Ascend 950PR/Ascend 950DT) |
| 356 | 356 | ||
| 357 | ```cpp | 357 | ```cpp |
| 358 | - // Global Memory[2, 4, 3, 128, 126]int8 -> Unified Buffer[512, 128]int8 | 358 | + // Global Memory[2, 4, 3, 128, 126]int8 -> UB[512, 128]int8 |
| 359 | // Normal模式,使用loop mode | 359 | // Normal模式,使用loop mode |
| 360 | // 搬运规格:[2, 2, 2, 64, 126],每个126字节补2字节padding到128字节。 | 360 | // 搬运规格:[2, 2, 2, 64, 126],每个126字节补2字节padding到128字节。 |
| 361 | // 最终UB连续存放为[512, 128]。 | 361 | // 最终UB连续存放为[512, 128]。 |
| @@ -54,16 +54,16 @@ | |||
| 54 | 54 | ||
| 55 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 | 55 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 |
| 56 | 56 | ||
| 57 | -该接口提供将数据从Unified Buffer非对齐搬运至Global Memory的功能。 | 57 | +该接口提供将数据从Unified Buffer(UB)非对齐搬运至Global Memory的功能。 |
| 58 | 58 | ||
| 59 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 59 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 60 | 60 | ||
| 61 | -- Unified Buffer -> Global Memory | 61 | +- UB -> Global Memory |
| 62 | - VECIN -> GM | 62 | - VECIN -> GM |
| 63 | - VECOUT -> GM | 63 | - VECOUT -> GM |
| 64 | 64 | ||
| 65 | -- 如[图1](#fig_datacopypad3)所示,对于32字节对齐搬运场景,从Unified Buffer读取的所有数据都会搬运至Global Memory。 | 65 | +- 如[图1](#fig_datacopypad3)所示,对于32字节对齐搬运场景,从UB读取的所有数据都会搬运至Global Memory。 |
| 66 | -- 如[图2](#fig_datacopypad4)所示,对于非32字节对齐的场景,在读取Unified Buffer数据时会填入dummy假数据,对齐到32B,搬入Global Memory时会将dummy空数据丢弃,从而实现Unified Buffer到Global Memory的非对齐搬运。 | 66 | +- 如[图2](#fig_datacopypad4)所示,对于非32字节对齐的场景,在读取UB数据时会填入dummy假数据,对齐到32B,搬入Global Memory时会将dummy空数据丢弃,从而实现UB到Global Memory的非对齐搬运。 |
| 67 | 67 | ||
| 68 | ## 函数原型<a name="section620mcpsimp"></a> | 68 | ## 函数原型<a name="section620mcpsimp"></a> |
| 69 | 69 | ||
| @@ -115,24 +115,24 @@ | |||
| 115 | | dstStride | 目的操作数,相邻连续数据块间的间隔(即前一个数据块**结束地址**与后一个数据块**起始地址**的差值)。<br>目的操作数的逻辑位置为GM,单位为字节。<br>数据类型为uint32_t,取值范围为[0, 2^32-1]。不同产品中dstStride的数据类型和支持的取值范围可能不同,详细请参考[约束说明](#section633mcpsimp)。 | | 115 | | dstStride | 目的操作数,相邻连续数据块间的间隔(即前一个数据块**结束地址**与后一个数据块**起始地址**的差值)。<br>目的操作数的逻辑位置为GM,单位为字节。<br>数据类型为uint32_t,取值范围为[0, 2^32-1]。不同产品中dstStride的数据类型和支持的取值范围可能不同,详细请参考[约束说明](#section633mcpsimp)。 | |
| 116 | | rsv | 保留字段。 | | 116 | | rsv | 保留字段。 | |
| 117 | 117 | ||
| 118 | -下面通过两个场景介绍Unified Buffer到Global Memory的非对齐搬运,分别对应32字节对齐和非32字节对齐: | 118 | +下面通过两个场景介绍UB到Global Memory的非对齐搬运,分别对应32字节对齐和非32字节对齐: |
| 119 | 119 | ||
| 120 | - 32字节对齐场景<a name="32字节对齐场景"></a> | 120 | - 32字节对齐场景<a name="32字节对齐场景"></a> |
| 121 | 121 | ||
| 122 | 如[图1](#fig_datacopypad3)所示,blockLen为64,每个连续传输数据块包含64字节;srcStride为1,源操作数的逻辑位置为VECIN/VECOUT,srcStride的单位为dataBlock(32字节),即源操作数相邻数据块之间间隔1个dataBlock;dstStride为1,目的操作数的逻辑位置为GM,dstStride的单位为字节,即目的操作数相邻数据块之间间隔1字节。 | 122 | 如[图1](#fig_datacopypad3)所示,blockLen为64,每个连续传输数据块包含64字节;srcStride为1,源操作数的逻辑位置为VECIN/VECOUT,srcStride的单位为dataBlock(32字节),即源操作数相邻数据块之间间隔1个dataBlock;dstStride为1,目的操作数的逻辑位置为GM,dstStride的单位为字节,即目的操作数相邻数据块之间间隔1字节。 |
| 123 | 123 | ||
| 124 | - 对于32字节对齐搬运场景,从Unified Buffer读取的所有数据都会搬运至Global Memory。 | 124 | + 对于32字节对齐搬运场景,从UB读取的所有数据都会搬运至Global Memory。 |
| 125 | 125 | ||
| 126 | - **图1** blockLen为32字节对齐时Unified Buffer到Global Memory的非对齐搬运示意图<a name="fig_datacopypad3"></a> | 126 | + **图1** blockLen为32字节对齐时UB到Global Memory的非对齐搬运示意图<a name="fig_datacopypad3"></a><br> |
| 127 |  | 127 |  |
| 128 | 128 | ||
| 129 | - 非32字节对齐场景<a name="非32字节对齐场景"></a> | 129 | - 非32字节对齐场景<a name="非32字节对齐场景"></a> |
| 130 | 130 | ||
| 131 | 如[图2](#fig_datacopypad4)所示,blockLen为47,每个连续传输数据块包含47字节,不满足32字节对齐;srcStride为1,表示源操作数相邻数据块之间间隔1个dataBlock;dstStride为1,表示目的操作数相邻数据块之间间隔1字节。 | 131 | 如[图2](#fig_datacopypad4)所示,blockLen为47,每个连续传输数据块包含47字节,不满足32字节对齐;srcStride为1,表示源操作数相邻数据块之间间隔1个dataBlock;dstStride为1,表示目的操作数相邻数据块之间间隔1字节。 |
| 132 | 132 | ||
| 133 | - 对于非32字节对齐的场景,由于Unified Buffer要求32字节对齐,框架在搬出时会自动补充17字节的假数据来保证对齐,搬到Global Memory时再自动将填充的假数据丢弃掉,从而实现Unified Buffer到Global Memory的非对齐搬运。 | 133 | + 对于非32字节对齐的场景,由于UB要求32字节对齐,框架在搬出时会自动补充17字节的假数据来保证对齐,搬到Global Memory时再自动将填充的假数据丢弃掉,从而实现UB到Global Memory的非对齐搬运。 |
| 134 | 134 | ||
| 135 | - **图2** blockLen不满足32字节对齐时Unified Buffer到Global Memory的非对齐搬运示意图<a name="fig_datacopypad4"></a> | 135 | + **图2** blockLen不满足32字节对齐时UB到Global Memory的非对齐搬运示意图<a name="fig_datacopypad4"></a><br> |
| 136 |  | 136 |  |
| 137 | 137 | ||
| 138 | ## 数据类型<a name="section4219135304818"></a> | 138 | ## 数据类型<a name="section4219135304818"></a> |
| @@ -167,7 +167,7 @@ | |||
| 167 | 167 | ||
| 168 | ## 约束说明<a name="section633mcpsimp"></a> | 168 | ## 约束说明<a name="section633mcpsimp"></a> |
| 169 | 169 | ||
| 170 | -- 位于Unified Buffer的源地址必须32字节对齐,位于Global Memory的目的地址必须1字节对齐。 | 170 | +- 位于UB的源地址必须32字节对齐,位于Global Memory的目的地址必须1字节对齐。 |
| 171 | - DataCopyExtParams结构体参数的值需在取值范围内: | 171 | - DataCopyExtParams结构体参数的值需在取值范围内: |
| 172 | 172 | ||
| 173 | **表4** DataCopyExtParams结构体参数取值范围 | 173 | **表4** DataCopyExtParams结构体参数取值范围 |
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_GMAndUB_continuous.md+12-12
| @@ -34,13 +34,13 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 | 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 |
| 36 | 36 | ||
| 37 | -支持Global Memory与Unified Buffer之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 | 37 | +支持Global Memory与Unified Buffer(UB)之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。 |
| 38 | 38 | ||
| 39 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 39 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 40 | 40 | ||
| 41 | -- Global Memory -> Unified Buffer | 41 | +- Global Memory -> UB |
| 42 | - GM -> VECIN | 42 | - GM -> VECIN |
| 43 | -- Unified Buffer -> Global Memory | 43 | +- UB -> Global Memory |
| 44 | - VECOUT -> GM | 44 | - VECOUT -> GM |
| 45 | <!-- npu="310p" id1 --> | 45 | <!-- npu="310p" id1 --> |
| 46 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 46 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -48,14 +48,14 @@ | |||
| 48 | 48 | ||
| 49 | ## 函数原型<a name="section1954364615315"></a> | 49 | ## 函数原型<a name="section1954364615315"></a> |
| 50 | 50 | ||
| 51 | -- Global Memory -> Unified Buffer | 51 | +- Global Memory -> UB |
| 52 | 52 | ||
| 53 | ```cpp | 53 | ```cpp |
| 54 | template <typename T> | 54 | template <typename T> |
| 55 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const uint32_t count) | 55 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const uint32_t count) |
| 56 | ``` | 56 | ``` |
| 57 | 57 | ||
| 58 | -- Unified Buffer -> Global Memory | 58 | +- UB -> Global Memory |
| 59 | 59 | ||
| 60 | ```cpp | 60 | ```cpp |
| 61 | template <typename T> | 61 | template <typename T> |
| @@ -74,8 +74,8 @@ | |||
| 74 | 74 | ||
| 75 | | 参数名 | 输入/输出 | 描述 | | 75 | | 参数名 | 输入/输出 | 描述 | |
| 76 | | :--- | :---: | :--- | | 76 | | :--- | :---: | :--- | |
| 77 | -| dst | 输出 | 目的操作数。<br>•类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)时,存储位置为Unified Buffer,目的地址需要32字节对齐。<br>•类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)时,存储位置为Global Memory,目的地址需要按照对应数据类型所占字节数对齐。 | | 77 | +| dst | 输出 | 目的操作数。<br>•类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)时,存储位置为UB,目的地址需要32字节对齐。<br>•类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)时,存储位置为Global Memory,目的地址需要按照对应数据类型所占字节数对齐。 | |
| 78 | -| src | 输入 | 源操作数。<br>•类型为GlobalTensor时,存储位置为Global Memory,源地址需要按照对应数据类型所占字节数对齐。<br>•类型为LocalTensor时,存储位置为Unified Buffer,源地址需要32字节对齐。 | | 78 | +| src | 输入 | 源操作数。<br>•类型为GlobalTensor时,存储位置为Global Memory,源地址需要按照对应数据类型所占字节数对齐。<br>•类型为LocalTensor时,存储位置为UB,源地址需要32字节对齐。 | |
| 79 | | count | 输入 | 参与搬运的元素个数。<br>**注:count * sizeof(T)需要32字节对齐,若未对齐,搬运量会向下取整到32字节对齐。** | | 79 | | count | 输入 | 参与搬运的元素个数。<br>**注:count * sizeof(T)需要32字节对齐,若未对齐,搬运量会向下取整到32字节对齐。** | |
| 80 | 80 | ||
| 81 | 以half数据类型为例,源操作数的shape为1 \* 128。当count = 128时,[图1](#zh-cn_topic_0000002534928976_fig54801848104717)将源操作数中128个元素连续搬运至目的操作数。 | 81 | 以half数据类型为例,源操作数的shape为1 \* 128。当count = 128时,[图1](#zh-cn_topic_0000002534928976_fig54801848104717)将源操作数中128个元素连续搬运至目的操作数。 |
| @@ -85,7 +85,7 @@ | |||
| 85 | 85 | ||
| 86 | ## 数据类型<a name="section4219135304818"></a> | 86 | ## 数据类型<a name="section4219135304818"></a> |
| 87 | 87 | ||
| 88 | -源操作数和目的操作数支持的数据类型保持一致,Global Memory -> Unified Buffer和Unified Buffer -> Global Memory两个数据通路对同一产品支持的数据类型相同,具体如下: | 88 | +源操作数和目的操作数支持的数据类型保持一致,Global Memory -> UB和UB -> Global Memory两个数据通路对同一产品支持的数据类型相同,具体如下: |
| 89 | 89 | ||
| 90 | <!-- npu="950" id2 --> | 90 | <!-- npu="950" id2 --> |
| 91 | - Ascend 950PR/Ascend 950DT,支持的数据类型为:b8、b16、b32、b64。 | 91 | - Ascend 950PR/Ascend 950DT,支持的数据类型为:b8、b16、b32、b64。 |
| @@ -129,9 +129,9 @@ | |||
| 129 | 129 | ||
| 130 | ## 约束说明<a name="section633mcpsimp"></a> | 130 | ## 约束说明<a name="section633mcpsimp"></a> |
| 131 | 131 | ||
| 132 | -- 位于Global Memory的地址必须按照对应数据类型所占字节数对齐,位于Unified Buffer的地址必须32字节对齐。 | 132 | +- 位于Global Memory的地址必须按照对应数据类型所占字节数对齐,位于UB的地址必须32字节对齐。 |
| 133 | - 调用连续搬运接口时,count \* sizeof\(T\)需要32字节对齐,若未对齐,则搬运量会向下取整到32字节对齐。 | 133 | - 调用连续搬运接口时,count \* sizeof\(T\)需要32字节对齐,若未对齐,则搬运量会向下取整到32字节对齐。 |
| 134 | -- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier(ISASI)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的Global Memory地址存在重叠,两条搬运指令之间需要通过调用`PipeBarrier<PIPE_MTE3>()`添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer存在重叠,两条搬运指令之间需要调用`PipeBarrier<PIPE_MTE2>()`添加MTE2搬入流水的同步。 | 134 | +- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier(ISASI)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的Global Memory地址存在重叠,两条搬运指令之间需要通过调用`PipeBarrier<PIPE_MTE3>()`添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址UB存在重叠,两条搬运指令之间需要调用`PipeBarrier<PIPE_MTE2>()`添加MTE2搬入流水的同步。 |
| 135 | 135 | ||
| 136 |  | 136 |  |
| 137 | 137 | ||
| @@ -145,7 +145,7 @@ | |||
| 145 | 145 | ||
| 146 | ## 调用示例<a name="section122101199486"></a> | 146 | ## 调用示例<a name="section122101199486"></a> |
| 147 | 147 | ||
| 148 | -- Global Memory -> Unified Buffer | 148 | +- Global Memory -> UB |
| 149 | 149 | ||
| 150 | ```cpp | 150 | ```cpp |
| 151 | // srcLocal为half类型的LocalTensor,srcGlobal为half类型的GlobalTensor。 | 151 | // srcLocal为half类型的LocalTensor,srcGlobal为half类型的GlobalTensor。 |
| @@ -160,7 +160,7 @@ | |||
| 160 | 输出数据srcLocal:[1 2 3 ... 512] | 160 | 输出数据srcLocal:[1 2 3 ... 512] |
| 161 | ``` | 161 | ``` |
| 162 | 162 | ||
| 163 | -- Unified Buffer -> Global Memory | 163 | +- UB -> Global Memory |
| 164 | 164 | ||
| 165 | ```cpp | 165 | ```cpp |
| 166 | // dstLocal为half类型的LocalTensor,dstGlobal为half类型的GlobalTensor。 | 166 | // dstLocal为half类型的LocalTensor,dstGlobal为half类型的GlobalTensor。 |
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_GMAndUB_highdim_split.md+12-12
| @@ -34,15 +34,15 @@ | |||
| 34 | 34 | ||
| 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 | 35 | 头文件路径为:`"basic_api/kernel_operator_data_copy_intf.h"`。 |
| 36 | 36 | ||
| 37 | -支持Global Memory与Unified Buffer之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 | 37 | +支持Global Memory与Unified Buffer(UB)之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。 |
| 38 | 38 | ||
| 39 | 高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。 | 39 | 高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。 |
| 40 | 40 | ||
| 41 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 41 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 42 | 42 | ||
| 43 | -- Global Memory -> Unified Buffer | 43 | +- Global Memory -> UB |
| 44 | - GM -> VECIN | 44 | - GM -> VECIN |
| 45 | -- Unified Buffer -> Global Memory | 45 | +- UB -> Global Memory |
| 46 | - VECOUT -> GM | 46 | - VECOUT -> GM |
| 47 | <!-- npu="310p" id10 --> | 47 | <!-- npu="310p" id10 --> |
| 48 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 48 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -52,14 +52,14 @@ | |||
| 52 | 52 | ||
| 53 | 接口同时支持非连续搬运和连续搬运,对于连续搬运场景,推荐使用[DataCopy\(GM与UB连续数据搬运\)](DataCopy_GMAndUB_continuous.md)。 | 53 | 接口同时支持非连续搬运和连续搬运,对于连续搬运场景,推荐使用[DataCopy\(GM与UB连续数据搬运\)](DataCopy_GMAndUB_continuous.md)。 |
| 54 | 54 | ||
| 55 | -- Global Memory -> Unified Buffer | 55 | +- Global Memory -> UB |
| 56 | 56 | ||
| 57 | ```cpp | 57 | ```cpp |
| 58 | template <typename T> | 58 | template <typename T> |
| 59 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& repeatParams) | 59 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& repeatParams) |
| 60 | ``` | 60 | ``` |
| 61 | 61 | ||
| 62 | -- Unified Buffer -> Global Memory | 62 | +- UB -> Global Memory |
| 63 | 63 | ||
| 64 | ```cpp | 64 | ```cpp |
| 65 | template <typename T> | 65 | template <typename T> |
| @@ -78,8 +78,8 @@ | |||
| 78 | 78 | ||
| 79 | | 参数名 | 输入/输出 | 描述 | | 79 | | 参数名 | 输入/输出 | 描述 | |
| 80 | | :--- | :---: | :--- | | 80 | | :--- | :---: | :--- | |
| 81 | -| dst | 输出 | 目的操作数。<br>•类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)时,存储位置为Unified Buffer,目的地址需要32字节对齐。<br>•类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)时,存储位置为Global Memory,目的地址需要按照对应数据类型所占字节数对齐。 | | 81 | +| dst | 输出 | 目的操作数。<br>•类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)时,存储位置为UB,目的地址需要32字节对齐。<br>•类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)时,存储位置为Global Memory,目的地址需要按照对应数据类型所占字节数对齐。 | |
| 82 | -| src | 输入 | 源操作数。<br>•类型为GlobalTensor时,存储位置为Global Memory,源地址需要按照对应数据类型所占字节数对齐。<br>•类型为LocalTensor时,存储位置为Unified Buffer,源地址需要32字节对齐。 | | 82 | +| src | 输入 | 源操作数。<br>•类型为GlobalTensor时,存储位置为Global Memory,源地址需要按照对应数据类型所占字节数对齐。<br>•类型为LocalTensor时,存储位置为UB,源地址需要32字节对齐。 | |
| 83 | | repeatParams | 输入 | 搬运参数,DataCopyParams类型,参数说明请参考[表3](#table_highdim_3)。通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。 | | 83 | | repeatParams | 输入 | 搬运参数,DataCopyParams类型,参数说明请参考[表3](#table_highdim_3)。通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。 | |
| 84 | 84 | ||
| 85 | **表3** DataCopyParams结构体参数定义<a name="table_highdim_3"></a> | 85 | **表3** DataCopyParams结构体参数定义<a name="table_highdim_3"></a> |
| @@ -125,7 +125,7 @@ | |||
| 125 | 125 | ||
| 126 | ## 数据类型<a name="section4219135304818"></a> | 126 | ## 数据类型<a name="section4219135304818"></a> |
| 127 | 127 | ||
| 128 | -源操作数和目的操作数支持的数据类型保持一致,Global Memory -> Unified Buffer和Unified Buffer -> Global Memory两个数据通路对同一产品支持的数据类型相同,具体如下: | 128 | +源操作数和目的操作数支持的数据类型保持一致,Global Memory -> UB和UB -> Global Memory两个数据通路对同一产品支持的数据类型相同,具体如下: |
| 129 | 129 | ||
| 130 | <!-- npu="950" id11 --> | 130 | <!-- npu="950" id11 --> |
| 131 | 131 | ||
| @@ -187,7 +187,7 @@ | |||
| 187 | 187 | ||
| 188 | ## 约束说明<a name="section633mcpsimp"></a> | 188 | ## 约束说明<a name="section633mcpsimp"></a> |
| 189 | 189 | ||
| 190 | -- 位于Global Memory的地址必须按照对应数据类型所占字节数对齐,位于Unified Buffer的地址必须32字节对齐。 | 190 | +- 位于Global Memory的地址必须按照对应数据类型所占字节数对齐,位于UB的地址必须32字节对齐。 |
| 191 | <!-- npu="A3,910b,950" id23 --> | 191 | <!-- npu="A3,910b,950" id23 --> |
| 192 | - 当DataCopyParams结构体参数blockCount、blockLen任意一个值为0时,该接口将被视为NOP(空操作)。该说明针对如下型号生效: | 192 | - 当DataCopyParams结构体参数blockCount、blockLen任意一个值为0时,该接口将被视为NOP(空操作)。该说明针对如下型号生效: |
| 193 | <!-- npu="A3" id20 --> | 193 | <!-- npu="A3" id20 --> |
| @@ -211,7 +211,7 @@ | |||
| 211 | | srcGap | [0, 65535] | | 211 | | srcGap | [0, 65535] | |
| 212 | | dstGap | [0, 65535] | | 212 | | dstGap | [0, 65535] | |
| 213 | 213 | ||
| 214 | -- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier(ISASI)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的Global Memory地址存在重叠,两条搬运指令之间需要通过调用`PipeBarrier<PIPE_MTE3>()`添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址Unified Buffer存在重叠,两条搬运指令之间需要调用`PipeBarrier<PIPE_MTE2>()`添加MTE2搬入流水的同步。 | 214 | +- 如果需要执行多个DataCopy指令,且DataCopy的目的地址存在重叠,需要通过调用[PipeBarrier(ISASI)](../../sync_control/intra_core_sync/PipeBarrier_ISASI.md)来插入同步指令,保证多个DataCopy指令的串行化,防止出现异常数据。如下图左侧示意图,执行两个DataCopy指令,搬运的目的Global Memory地址存在重叠,两条搬运指令之间需要通过调用`PipeBarrier<PIPE_MTE3>()`添加MTE3搬出流水的同步;如下图右侧示意图所示,搬运的目的地址UB存在重叠,两条搬运指令之间需要调用`PipeBarrier<PIPE_MTE2>()`添加MTE2搬入流水的同步。 |
| 215 | 215 | ||
| 216 |  | 216 |  |
| 217 | 217 | ||
| @@ -227,7 +227,7 @@ | |||
| 227 | 227 | ||
| 228 | ## 调用示例<a name="section122101199486"></a> | 228 | ## 调用示例<a name="section122101199486"></a> |
| 229 | 229 | ||
| 230 | -- Global Memory -> Unified Buffer | 230 | +- Global Memory -> UB |
| 231 | 231 | ||
| 232 | ```cpp | 232 | ```cpp |
| 233 | // srcLocal为half类型的LocalTensor,srcGlobal为half类型的GlobalTensor。 | 233 | // srcLocal为half类型的LocalTensor,srcGlobal为half类型的GlobalTensor。 |
| @@ -247,7 +247,7 @@ | |||
| 247 | 输出数据srcLocal:[1 2 3 ... 512] | 247 | 输出数据srcLocal:[1 2 3 ... 512] |
| 248 | ``` | 248 | ``` |
| 249 | 249 | ||
| 250 | -- Unified Buffer -> Global Memory | 250 | +- UB -> Global Memory |
| 251 | 251 | ||
| 252 | ```cpp | 252 | ```cpp |
| 253 | // dstLocal为half类型的LocalTensor,dstGlobal为half类型的GlobalTensor。 | 253 | // dstLocal为half类型的LocalTensor,dstGlobal为half类型的GlobalTensor。 |
| @@ -32,9 +32,9 @@ | |||
| 32 | 32 | ||
| 33 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): | 33 | 具体支持的数据通路为(以[逻辑位置TPosition](../../aux_data_structures/TPosition.md)表示): |
| 34 | 34 | ||
| 35 | -- Global Memory -> Unified Buffer | 35 | +- Global Memory -> UB |
| 36 | - GM -> VECIN | 36 | - GM -> VECIN |
| 37 | -- Unified Buffer -> Global Memory | 37 | +- UB -> Global Memory |
| 38 | - VECOUT -> GM | 38 | - VECOUT -> GM |
| 39 | <!-- npu="310p" id8 --> | 39 | <!-- npu="310p" id8 --> |
| 40 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) | 40 | - CO2 -> GM(仅Atlas 推理系列产品AI Core支持) |
| @@ -42,14 +42,14 @@ | |||
| 42 | 42 | ||
| 43 | ## 函数原型<a name="zh-cn_topic_0000002565968945_section82039854412"></a> | 43 | ## 函数原型<a name="zh-cn_topic_0000002565968945_section82039854412"></a> |
| 44 | 44 | ||
| 45 | -- Global Memory -> Unified Buffer | 45 | +- Global Memory -> UB |
| 46 | 46 | ||
| 47 | ```cpp | 47 | ```cpp |
| 48 | template <typename T> | 48 | template <typename T> |
| 49 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const SliceInfo dstSliceInfo[], const SliceInfo srcSliceInfo[], const uint32_t dimValue = 1) | 49 | __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const SliceInfo dstSliceInfo[], const SliceInfo srcSliceInfo[], const uint32_t dimValue = 1) |
| 50 | ``` | 50 | ``` |
| 51 | 51 | ||
| 52 | -- Unified Buffer -> Global Memory | 52 | +- UB -> Global Memory |
| 53 | 53 | ||
| 54 | ```cpp | 54 | ```cpp |
| 55 | template <typename T> | 55 | template <typename T> |
| @@ -71,8 +71,8 @@ | |||
| 71 | 71 | ||
| 72 | | 参数名 | 输入/输出 | 描述 | | 72 | | 参数名 | 输入/输出 | 描述 | |
| 73 | | :--- | :---: | :--- | | 73 | | :--- | :---: | :--- | |
| 74 | -| dst | 输出 | 目的操作数。<br>•类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)时,存储位置为Unified Buffer,目的地址需要32字节对齐。<br>•类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)时,存储位置为Global Memory,目的地址需要1字节对齐。 | | 74 | +| dst | 输出 | 目的操作数。<br>•类型为[LocalTensor](../../data_structures/LocalTensor/LocalTensor_intro.md)时,存储位置为Unified Buffer(UB),目的地址需要32字节对齐。<br>•类型为[GlobalTensor](../../data_structures/GlobalTensor/GlobalTensor_intro.md)时,存储位置为Global Memory,目的地址需要1字节对齐。 | |
| 75 | -| src | 输入 | 源操作数。<br>•类型为GlobalTensor时,存储位置为Global Memory,源地址需要1字节对齐。<br>•类型为LocalTensor时,存储位置为Unified Buffer,源地址需要32字节对齐。 | | 75 | +| src | 输入 | 源操作数。<br>•类型为GlobalTensor时,存储位置为Global Memory,源地址需要1字节对齐。<br>•类型为LocalTensor时,存储位置为UB,源地址需要32字节对齐。 | |
| 76 | | dstSliceInfo | 输入 | 目的操作数切片信息,类型为SliceInfo。通过该参数可以配置切片的起始和终止元素个数、间隔、长度等信息。<br>SliceInfo参数说明请参考[表3](#table_slice_3)。 | | 76 | | dstSliceInfo | 输入 | 目的操作数切片信息,类型为SliceInfo。通过该参数可以配置切片的起始和终止元素个数、间隔、长度等信息。<br>SliceInfo参数说明请参考[表3](#table_slice_3)。 | |
| 77 | | srcSliceInfo | 输入 | 源操作数切片信息,类型为SliceInfo。通过该参数可以配置切片的起始和终止元素个数、间隔、长度等信息。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。<br>SliceInfo参数说明请参考[表3](#table_slice_3)。 | | 77 | | srcSliceInfo | 输入 | 源操作数切片信息,类型为SliceInfo。通过该参数可以配置切片的起始和终止元素个数、间隔、长度等信息。<br>具体定义请参考`${INSTALL_DIR}/asc/include/basic_api/kernel_struct_data_copy.h`,`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。<br>SliceInfo参数说明请参考[表3](#table_slice_3)。 | |
| 78 | | dimValue | 输入 | 操作数维度信息,默认值为1。 | | 78 | | dimValue | 输入 | 操作数维度信息,默认值为1。 | |
| @@ -145,7 +145,7 @@ | |||
| 145 | 145 | ||
| 146 | ## 数据类型<a name="zh-cn_topic_0000002565968945_section4219135304818"></a> | 146 | ## 数据类型<a name="zh-cn_topic_0000002565968945_section4219135304818"></a> |
| 147 | 147 | ||
| 148 | -源操作数和目的操作数支持的数据类型保持一致,Global Memory -> Unified Buffer和Unified Buffer -> Global Memory两个数据通路的数据类型支持情况相同,具体如下: | 148 | +源操作数和目的操作数支持的数据类型保持一致,Global Memory -> UB和UB -> Global Memory两个数据通路的数据类型支持情况相同,具体如下: |
| 149 | 149 | ||
| 150 | <!-- npu="950" id9 --> | 150 | <!-- npu="950" id9 --> |
| 151 | 151 | ||
| @@ -178,7 +178,7 @@ | |||
| 178 | ## 约束说明<a name="zh-cn_topic_0000002565968945_section2045914466492"></a> | 178 | ## 约束说明<a name="zh-cn_topic_0000002565968945_section2045914466492"></a> |
| 179 | 179 | ||
| 180 | - 该接口为软仿接口,从易用性角度出发进行设计。 | 180 | - 该接口为软仿接口,从易用性角度出发进行设计。 |
| 181 | -- 位于Global Memory的地址必须1字节对齐,位于Unified Buffer的地址必须32字节对齐。 | 181 | +- 位于Global Memory的地址必须1字节对齐,位于UB的地址必须32字节对齐。 |
| 182 | - burstLen,仅在dimValue = 1时生效,超出1维的情况下,必须配置为1,不支持配置成其他值。 | 182 | - burstLen,仅在dimValue = 1时生效,超出1维的情况下,必须配置为1,不支持配置成其他值。 |
| 183 | - 切片数据搬运中的横向burstLen大小设置,需要用户自己通过计算:横向切片元素个数\* sizeof\(T\)/32字节。横向切片元素个数\* sizeof\(T\)的大小必须是32字节的倍数。 | 183 | - 切片数据搬运中的横向burstLen大小设置,需要用户自己通过计算:横向切片元素个数\* sizeof\(T\)/32字节。横向切片元素个数\* sizeof\(T\)的大小必须是32字节的倍数。 |
| 184 | - SliceInfo结构体的成员变量startIndex、endIndex、stride、burstLen的取值须满足: | 184 | - SliceInfo结构体的成员变量startIndex、endIndex、stride、burstLen的取值须满足: |
| @@ -217,12 +217,12 @@ for (uint32_t i = 0; i < dimValueIn; i++) { | |||
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | // 先后进行两个数据通路的切片搬运。 | 219 | // 先后进行两个数据通路的切片搬运。 |
| 220 | -// Global Memory -> Unified Buffer: MTE2流水搬运。 | 220 | +// Global Memory -> UB: MTE2流水搬运。 |
| 221 | AscendC::DataCopy(srcLocal, srcGlobal, dstSliceInfo, srcSliceInfo, dimValue); | 221 | AscendC::DataCopy(srcLocal, srcGlobal, dstSliceInfo, srcSliceInfo, dimValue); |
| 222 | // 等待MTE2搬运完成,MTE3可以开始。 | 222 | // 等待MTE2搬运完成,MTE3可以开始。 |
| 223 | AscendC::SetFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); | 223 | AscendC::SetFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); |
| 224 | AscendC::WaitFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); | 224 | AscendC::WaitFlag<AscendC::HardEvent::MTE2_MTE3>(EVENT_ID0); |
| 225 | -// Unified Buffer -> Global Memory: MTE3流水搬运。 | 225 | +// UB -> Global Memory: MTE3流水搬运。 |
| 226 | AscendC::DataCopy(dstGlobal, srcLocal, dstSliceInfo, dstSliceInfo, dimValue); | 226 | AscendC::DataCopy(dstGlobal, srcLocal, dstSliceInfo, dstSliceInfo, dimValue); |
| 227 | ``` | 227 | ``` |
| 228 | 228 | ||
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_UBToUB_highdim_split.md+5-5
Mdocs/zh/api/SIMD-API/basic_api/reg_vector_compute/register_data_types/UnalignRegForLoad-UnalignRegForStore.md+1-1
Mdocs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_constructor.md+2-2
Mdocs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_intro.md+2-2
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetSubBlockNum_ISASI.md+3-3
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetUBSizeInBytes.md+1-1
Mdocs/zh/api/SIMD-API/c_api/vector_data_move/asc_copy_gm2ub_align/asc_copy_gm2ub_align_arch_2201.md+1-1
Mdocs/zh/api/SIMD-API/c_api/vector_data_move/asc_copy_ub2gm_align/asc_copy_ub2gm_align_arch_2201.md+1-1
Mdocs/zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/function_execution_space_qualifier.md+3-3
Mdocs/zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/kernel_function_config.md+10-10
Mdocs/zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/memory_space_qualifier.md+2-2
Mdocs/zh/api/SIMT-API/SIMT_programming_intro/extended_syntax/function_execution_space_qualifier.md+1-1
Mdocs/zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/basic_api_migration.md+2-2
Mdocs/zh/guide/operator_practice/best_practices/matmul_tuning_cases/matmul_multi_core_split_k.md+3-3
Mdocs/zh/guide/operator_practice/best_practices/matmul_tuning_cases/matmul_optimization_overview.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/fusion_operator_programming/cv_fusion/basics.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/fusion_operator_programming/general_fusion/operator_impl.md+14-14
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/4_2_sparse_matmul.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/aic_aiv_independent_execution.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/async_scenario.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/batch_matmul_basics.md+3-3
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/matmul_output_n_alignment.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/matmul_output_quant_dequant.md+7-7
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/matrix_vector_multiply.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/multi_core_aligned_split.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/matrix_advanced_api/feature_scenarios/mx_matmul_scenario.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/basic_vector_operator.md+16-16
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/double_buffer_scenario.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/multi_core_tiling/main_block_even_split.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/multi_core_tiling/overview.md+6-6
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/multi_core_tiling/tail_block_even_split.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/multi_core_tiling/tail_core_split.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_impl/vector_programming/multi_core_tiling/tail_core_tail_block_split.md+2-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/matrix_compute/bt_buffer_bias_compute.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/matrix_compute/fp_buffer_quantization.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/matrix_compute/l0c_buffer_matmul_accumulate.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/avoid_same_address_access.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/avoid_ub_bank_conflict/avoid_bank_conflict_npu_arch_2201.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/avoid_ub_bank_conflict/avoid_bank_conflict_npu_arch_3510.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/avoid_ub_bank_conflict/overview.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/gm_address_512b_alignment.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/reduce_invalid_data_transfer.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/memory_access/transfer_larger_data_blocks.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/overhead_optimization/avoid_tpipe_init_in_object.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/overhead_optimization/core_count_kernel_type.md+4-4
Mdocs/zh/guide/operator_practice/simd_operator_optimization/overhead_optimization/limit_tiling_data_size.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/overhead_optimization/remove_workspace_redundancy.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_optimization/vector_compute/ub_fusion_vector_compute.md+2-2
Mdocs/zh/guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/continuous_unaligned_optimization.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/dual_issue_optimization.md+1-1
Mdocs/zh/guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/vf_fusion_optimization.md+1-1
Mdocs/zh/guide/operator_practice/simd_simt_hybrid_optimization/compute_optimization/simt_branch_judgment.md+2-2
Mdocs/zh/guide/operator_practice/simd_simt_hybrid_optimization/execution_control/thread_block_config.md+1-1
Mdocs/zh/guide/operator_practice/simd_simt_hybrid_optimization/instruction_optimization/fast_integer_division.md+2-2
Mdocs/zh/guide/operator_practice/simd_simt_hybrid_optimization/memory_access/ub_memory_access.md+3-3
Mdocs/zh/guide/operator_practice/simt_operator_optimization/execution_config/thread_block_config.md+2-2
Mdocs/zh/guide/operator_practice/simt_operator_optimization/execution_config/thread_count_register_overflow.md+4-4
Mdocs/zh/guide/operator_practice/simt_operator_optimization/instruction_optimization/atomic_instruction_optimization.md+4-4
Mdocs/zh/guide/operator_practice/simt_operator_optimization/memory_access/avoid_ub_bank_conflict_simt.md+1-1
Mdocs/zh/guide/operator_practice/simt_operator_optimization/memory_access/memory_access_merge.md+1-1
Mdocs/zh/guide/operator_practice/simt_operator_optimization/memory_access/type_alignment_transfer.md+1-1
Mdocs/zh/guide/operator_practice/typical_operator_cases/simd_operator_impl/add_vector_operator/getting_started.md+2-2
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/aclnn_quick_start.md+8-8
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/cmake_function_reference.md+12-12
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/external_sample_links.md+3-3
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/naming_conversion_table.md+7-7
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md+31-31
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/kernel_operator_implementation.md+30-30
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/invocation/runtime_loading_mechanism.md+16-16
Mdocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/invocation/single_operator_api_call.md+1-1
Mdocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/abstract_hardware_architecture.md+2-2
Mdocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/kernel_and_vf_functions.md+16-16
Mdocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/memory_hierarchy.md+1-1
Mdocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md+4-4
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2002.md+7-7
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2201.md+7-7
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3002.md+6-6
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md+13-13
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md+5-5
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2002.md+1-1
Mdocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2201.md+2-2
Mdocs/zh/guide/programming_guide/advanced_programming/super_kernel/kernel_direct_call_adaptation.md+12-12
Mdocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md+3-3
Mdocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_cpu_operator_compilation.md+5-5
Mdocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/rtc_runtime_compilation.md+10-10
Mdocs/zh/guide/programming_guide/library_api/advanced_api/quick_reference/how_to_use_kernel_temp_space.md+9-9
Mdocs/zh/guide/programming_guide/library_api/advanced_api/quick_reference/how_to_use_tiling_headers.md+1-1
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/cube_matrix_computation.md+1-1
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/memory_vector_computation.md+1-1
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/reg_vector_computation.md+2-2
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md+7-7
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cube_matrix_computation.md+2-2
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/memory_vector_computation.md+1-1
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md+1-1
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md+3-3
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md+8-8
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/abstract_hardware_architecture.md+4-4
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/atomic_operations.md+2-2
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/kernel_function.md+22-22
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/memory_hierarchy.md+13-13
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/programming_examples.md+4-4
Mdocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/thread_architecture.md+2-2