已合并
docs: rename programming_guide directory and files to English with underscores and update all references #5124
ai_xin创建于 11 天前
docs: rename programming_guide directory and files to English with underscores and update all references #5124
已合并
ai_xin创建于 11 天前
312 个文件变更+913-913
M.agent/skills/asc-ar-dev/references/02_local_environment.md+2-2
@@ -59,9 +59,9 @@ Resolve `CANN_PATH` at task time:
59- DumpTensor API:59- DumpTensor API:
60 `${DEVKIT_PATH}/docs/zh/api/context/DumpTensor.md`60 `${DEVKIT_PATH}/docs/zh/api/context/DumpTensor.md`
61- NPU board debugging guide:61- NPU board debugging guide:
62- `${DEVKIT_PATH}/docs/zh/guide/编程指南/调试调优/功能调试/NPU域上板调试.md`62+ `${DEVKIT_PATH}/docs/zh/guide/programming_guide/debug_and_tuning/functional_debug/npu_board_debug.md`
63- `show_kernel_debug_data` guide:63- `show_kernel_debug_data` guide:
64- `${DEVKIT_PATH}/docs/zh/guide/编程指南/附录/show_kernel_debug_data工具.md`64+ `${DEVKIT_PATH}/docs/zh/guide/programming_guide/appendix/show_kernel_debug_data_tool.md`
65 65 
66## Build Shortcut66## Build Shortcut
67 67 
M.agent/skills/asc-ar-dev/references/04_debug_dump.md+1-1
@@ -59,7 +59,7 @@ Resolved tool locations:
59 59 
60Repository reference doc:60Repository reference doc:
61 61 
62-- `${DEVKIT_PATH}/docs/zh/guide/编程指南/附录/show_kernel_debug_data工具.md`62+- `${DEVKIT_PATH}/docs/zh/guide/programming_guide/appendix/show_kernel_debug_data_tool.md`
63 63 
64Basic usage:64Basic usage:
65 65 
M.agent/skills/asc-doc-checker/SKILL.md+1-1
@@ -267,7 +267,7 @@ description: |
267- [ ] 单个反引号包裹路径267- [ ] 单个反引号包裹路径
268 268 
269### 14. 已变更接口检查269### 14. 已变更接口检查
270-- [ ] 先读取 `docs/zh/api/附录/接口变更说明.md`,从其中的接口变更表格获取最新的旧→新接口名映射关系。270+- [ ] 先读取 `docs/zh/api/appendix/接口变更说明.md`,从其中的接口变更表格获取最新的旧→新接口名映射关系。
271- [ ] 依据读取到的最新映射关系,检查文档中是否出现已废弃的旧接口名(代码块和调用示例中的也需要检查)。271- [ ] 依据读取到的最新映射关系,检查文档中是否出现已废弃的旧接口名(代码块和调用示例中的也需要检查)。
272- [ ] 如果发现旧接口名,应提示用户替换为新接口名,报告中明确指出具体位置、旧名称和推荐的新名称。272- [ ] 如果发现旧接口名,应提示用户替换为新接口名,报告中明确指出具体位置、旧名称和推荐的新名称。
273 273 
Mdocs/README.md+1-1
@@ -45,7 +45,7 @@
45| [资料设计规范](./zh/asc_doc_design_rules.md) | 完善Ascend C现有资料的开发者。 | 介绍Ascend C资料体系架构与总体设计原则。|45| [资料设计规范](./zh/asc_doc_design_rules.md) | 完善Ascend C现有资料的开发者。 | 介绍Ascend C资料体系架构与总体设计原则。|
46| [代码贡献规范](./zh/contributing/README.md) | 参与Ascend C代码贡献的开发者。 | 代码风格、接口设计、目录结构、测试等贡献规范索引。 |46| [代码贡献规范](./zh/contributing/README.md) | 参与Ascend C代码贡献的开发者。 | 代码风格、接口设计、目录结构、测试等贡献规范索引。 |
47| [Ascend C入门教程](./zh/guide/getting_started/ascend_c_overview_and_learning_path.md) | Ascend C初学者 | 介绍算子编程基本概念与Ascend C学习路径,旨在帮助开发者快速上手算子开发。 |47| [Ascend C入门教程](./zh/guide/getting_started/ascend_c_overview_and_learning_path.md) | Ascend C初学者 | 介绍算子编程基本概念与Ascend C学习路径,旨在帮助开发者快速上手算子开发。 |
48-| [Ascend C编程指南](./zh/guide/编程指南/本文档组织结构.md) | 基于昇腾AI硬件,使用Ascend C编写算子程序,开发自定义算子的开发者。 | Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,兼具开发效率和运行性能。使用Ascend C编写算子程序,运行在昇腾AI处理器上,实现自定义的创新算法。 |48+| [Ascend C编程指南](./zh/guide/programming_guide/document_structure.md) | 基于昇腾AI硬件,使用Ascend C编写算子程序,开发自定义算子的开发者。 | Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,兼具开发效率和运行性能。使用Ascend C编写算子程序,运行在昇腾AI处理器上,实现自定义的创新算法。 |
49| [Ascend C算子实践参考](./zh/guide/算子实践参考/本文档组织结构.md) | 基于已完成开发的Ascend C算子,需要进一步优化算子性能的开发者。 | 异构计算的特点、算子功能的调试方法以及算子性能的优化策略。通过介绍Ascend C编程中的调试与优化思路,结合多种性能优化手段,并辅以具体案例,旨在帮助开发者实现高性能算子的开发。|49| [Ascend C算子实践参考](./zh/guide/算子实践参考/本文档组织结构.md) | 基于已完成开发的Ascend C算子,需要进一步优化算子性能的开发者。 | 异构计算的特点、算子功能的调试方法以及算子性能的优化策略。通过介绍Ascend C编程中的调试与优化思路,结合多种性能优化手段,并辅以具体案例,旨在帮助开发者实现高性能算子的开发。|
50| [Ascend C兼容性迁移指南](./zh/guide/cross_gen_migration_guide/overview.md) | 需将已有算子跨代迁移至不同昇腾AI处理器的开发者。 | 指导如何实现跨代芯片间的功能对等与性能最优适配。|50| [Ascend C兼容性迁移指南](./zh/guide/cross_gen_migration_guide/overview.md) | 需将已有算子跨代迁移至不同昇腾AI处理器的开发者。 | 指导如何实现跨代芯片间的功能对等与性能最优适配。|
51 51 
Mdocs/README_en.md+1-1
@@ -44,7 +44,7 @@ To help developers quickly familiarize with this project, corresponding document
44| [Documentation Design Rules](./en/asc_doc_design_rules.md) | Developers improving existing Ascend C documentation. | Introduces the Ascend C documentation architecture and overall design principles. |44| [Documentation Design Rules](./en/asc_doc_design_rules.md) | Developers improving existing Ascend C documentation. | Introduces the Ascend C documentation architecture and overall design principles. |
45| [Code Contribution Standards](./en/contributing/README.md) | Developers contributing code to Ascend C. | Index of contribution standards: code style, API design, directory structure, testing. |45| [Code Contribution Standards](./en/contributing/README.md) | Developers contributing code to Ascend C. | Index of contribution standards: code style, API design, directory structure, testing. |
46| [Ascend C Getting Started Guide](./zh/guide/getting_started/ascend_c_overview_and_learning_path.md) | Beginners of Ascend C | Introduces basic concepts of operator programming and the Ascend C learning path, helping developers quickly get started with operator development. |46| [Ascend C Getting Started Guide](./zh/guide/getting_started/ascend_c_overview_and_learning_path.md) | Beginners of Ascend C | Introduces basic concepts of operator programming and the Ascend C learning path, helping developers quickly get started with operator development. |
47-| [Ascend C Programming Guide](./zh/guide/编程指南/本文档组织结构.md) | Developers writing operator programs with Ascend C on Ascend AI hardware and developing custom operators. | Ascend C is a programming language launched by CANN for operator development scenarios. It natively supports C and C++ standards, offering both development efficiency and runtime performance. Write operator programs with Ascend C to run on Ascend AI processors and implement custom innovative algorithms. |47+| [Ascend C Programming Guide](./zh/guide/programming_guide/document_structure.md) | Developers writing operator programs with Ascend C on Ascend AI hardware and developing custom operators. | Ascend C is a programming language launched by CANN for operator development scenarios. It natively supports C and C++ standards, offering both development efficiency and runtime performance. Write operator programs with Ascend C to run on Ascend AI processors and implement custom innovative algorithms. |
48| [Ascend C Operator Practice Reference](./zh/guide/算子实践参考/本文档组织结构.md) | Developers who have completed Ascend C operator development and need to further optimize operator performance. | Characteristics of heterogeneous computing, debugging methods for operator functionality, and performance optimization strategies. By introducing debugging and optimization approaches in Ascend C programming, combined with various performance optimization techniques and specific cases, this guide aims to help developers achieve high-performance operator development. |48| [Ascend C Operator Practice Reference](./zh/guide/算子实践参考/本文档组织结构.md) | Developers who have completed Ascend C operator development and need to further optimize operator performance. | Characteristics of heterogeneous computing, debugging methods for operator functionality, and performance optimization strategies. By introducing debugging and optimization approaches in Ascend C programming, combined with various performance optimization techniques and specific cases, this guide aims to help developers achieve high-performance operator development. |
49| [Ascend C Cross-Generation Migration Guide](./zh/guide/cross_gen_migration_guide/overview.md) | Developers who need to migrate existing operators across different generations of Ascend AI processors. | Guides how to achieve functional equivalence and optimal performance adaptation across chip generations. |49| [Ascend C Cross-Generation Migration Guide](./zh/guide/cross_gen_migration_guide/overview.md) | Developers who need to migrate existing operators across different generations of Ascend AI processors. | Guides how to achieve functional equivalence and optimal performance adaptation across chip generations. |
50 50 
Mdocs/en/asc_950_feature_guide.md+6-6
@@ -12,10 +12,10 @@ This document indexes the new hardware features of Ascend 950PR/Ascend 950DT (NP
12 12 
13| No. | New Feature | Corresponding Programming Model and Feature | Corresponding API | Corresponding Operator Practice Material |13| No. | New Feature | Corresponding Programming Model and Feature | Corresponding API | Corresponding Operator Practice Material |
14|-----|-------------|---------------------------------------------|-------------------|------------------------------------------|14|-----|-------------|---------------------------------------------|-------------------|------------------------------------------|
15-| 1 | **RegBase architecture**: The AIV core Vector computation switches from MemBase to RegBase. Data is moved from UB to the register for computation, and intermediate results are operated directly in the register without writing back to UB. | [Reg Vector Computation Programming](../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.md) | [Reg Vector Computation API List](../zh/api/SIMD-API/basic_api/reg_vector_compute/reg_vector_compute.md) | [VF Fusion Optimization](../zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md), [VF Loop Optimization](../zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md) |15+| 1 | **RegBase architecture**: The AIV core Vector computation switches from MemBase to RegBase. Data is moved from UB to the register for computation, and intermediate results are operated directly in the register without writing back to UB. | [Reg Vector Computation Programming](../zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md) | [Reg Vector Computation API List](../zh/api/SIMD-API/basic_api/reg_vector_compute/reg_vector_compute.md) | [VF Fusion Optimization](../zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md), [VF Loop Optimization](../zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md) |
16-| 2 | **SIMT programming model**: A new SIMT hardware unit (DCache, Warp Scheduler, 128 KB Register File) is added to support thread-level parallel programming. | [AI Core SIMT Programming](../zh/guide/编程指南/编程模型/AI-Core-SIMT编程/AI-Core-SIMT编程.md) | [SIMT API List](../zh/api/SIMT-API/overview.md) | [SIMT Operator Implementation](../zh/guide/算子实践参考/SIMT算子实现/基础知识.md), [SIMT Operator Performance Optimization](../zh/guide/算子实践参考/SIMT算子性能优化/内存访问/访存合并.md) |16+| 2 | **SIMT programming model**: A new SIMT hardware unit (DCache, Warp Scheduler, 128 KB Register File) is added to support thread-level parallel programming. | [AI Core SIMT Programming](../zh/guide/programming_guide/programming_model/ai_core_simt_programming/ai_core_simt_programming.md) | [SIMT API List](../zh/api/SIMT-API/overview.md) | [SIMT Operator Implementation](../zh/guide/算子实践参考/SIMT算子实现/基础知识.md), [SIMT Operator Performance Optimization](../zh/guide/算子实践参考/SIMT算子性能优化/内存访问/访存合并.md) |
17-| 3 | **SIMD and SIMT hybrid programming**: SIMD and SIMT code work together in the same kernel. | [SIMD and SIMT Hybrid Programming](<../zh/guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md>) | [Hybrid Programming API List](../zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md), [Built-in Variables](../zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_variables.md) | [Hybrid Programming Operator Implementation](../zh/guide/算子实践参考/SIMD与SIMT混合算子实现/基础知识.md), [Hybrid Programming Performance Optimization](../zh/guide/算子实践参考/SIMD与SIMT混合算子性能优化/内存访问/使用Unified-Buffer提升内存访问效率.md) |17+| 3 | **SIMD and SIMT hybrid programming**: SIMD and SIMT code work together in the same kernel. | [SIMD and SIMT Hybrid Programming](../zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md) | [Hybrid Programming API List](../zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md), [Built-in Variables](../zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_variables.md) | [Hybrid Programming Operator Implementation](../zh/guide/算子实践参考/SIMD与SIMT混合算子实现/基础知识.md), [Hybrid Programming Performance Optimization](../zh/guide/算子实践参考/SIMD与SIMT混合算子性能优化/内存访问/使用Unified-Buffer提升内存访问效率.md) |
18-| 4 | **HiF8 (hifloat8_t) data type**: The Cube computation unit supports matrix multiplication with the HiF8 data type. | Data types supported by Cube in [3510 Architecture Specifications](../zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md) | [Built-in Data Type Description](../zh/api/SIMD-API/basic_api/data_structures/builtin_data_types.md), [Cast Type Conversion](../zh/api/SIMD-API/basic_api/reg_vector_compute/type_conversion/Cast.md), [asc_float2hif8 (deprecated)](../zh/api/SIMD-API/c_api/reg/data_type_convert/asc_float2hif8_deprecated.md) | Under development |18+| 4 | **HiF8 (hifloat8_t) data type**: The Cube computation unit supports matrix multiplication with the HiF8 data type. | Data types supported by Cube in [3510 Architecture Specifications](../zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md) | [Built-in Data Type Description](../zh/api/SIMD-API/basic_api/data_structures/builtin_data_types.md), [Cast Type Conversion](../zh/api/SIMD-API/basic_api/reg_vector_compute/type_conversion/Cast.md), [asc_float2hif8 (deprecated)](../zh/api/SIMD-API/c_api/reg/data_type_convert/asc_float2hif8_deprecated.md) | Under development |
19| 5 | **UB-to-L1 Buffer path**: Data can be moved directly from UB to L1 Buffer without going through GM. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | Newly supported [UB-to-L1 Buffer Data Move](../zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md) | Under development |19| 5 | **UB-to-L1 Buffer path**: Data can be moved directly from UB to L1 Buffer without going through GM. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | Newly supported [UB-to-L1 Buffer Data Move](../zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md) | Under development |
20| 6 | **L0C-to-UB path**: Data can be moved directly from L0C Buffer to UB without going through GM. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [asc_copy_l0c2ub](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2ub.md) | [Matrix Multiplication Result Accumulation](../zh/guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |20| 6 | **L0C-to-UB path**: Data can be moved directly from L0C Buffer to UB without going through GM. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [asc_copy_l0c2ub](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2ub.md) | [Matrix Multiplication Result Accumulation](../zh/guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |
21| 7 | **ND-DMA move instruction**: Extends the DataCopy capability to freely configure the dimension information and stride of the data to be moved in. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [Multi-dimensional Data Move ISASI](../zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md), [asc_ndim_copy_gm2ub](../zh/api/SIMD-API/c_api/vector_data_move/asc_ndim_copy_gm2ub.md) | [Reducing Move Count in Non-contiguous Move Scenarios](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/非连续搬运场景减少搬运次数.md) |21| 7 | **ND-DMA move instruction**: Extends the DataCopy capability to freely configure the dimension information and stride of the data to be moved in. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [Multi-dimensional Data Move ISASI](../zh/api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md), [asc_ndim_copy_gm2ub](../zh/api/SIMD-API/c_api/vector_data_move/asc_ndim_copy_gm2ub.md) | [Reducing Move Count in Non-contiguous Move Scenarios](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/非连续搬运场景减少搬运次数.md) |
@@ -24,7 +24,7 @@ This document indexes the new hardware features of Ascend 950PR/Ascend 950DT (NP
24| 10 | **CrossCore inter-core synchronization**: AIV0 and AIV1 can independently trigger AIC waiting. | Under development | [CrossCoreSetFlag](<../zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md>), [CrossCoreWaitFlag](<../zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md>) | [CV Fusion Operator Implementation](../zh/guide/算子实践参考/SIMD算子实现/融合算子编程/CV融合/算子实现.md) |24| 10 | **CrossCore inter-core synchronization**: AIV0 and AIV1 can independently trigger AIC waiting. | Under development | [CrossCoreSetFlag](<../zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md>), [CrossCoreWaitFlag](<../zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md>) | [CV Fusion Operator Implementation](../zh/guide/算子实践参考/SIMD算子实现/融合算子编程/CV融合/算子实现.md) |
25| 11 | **MX (MicroScaling) data type**: Supports FP8_E4M3/MXFP4/8 low-bit matrix operations, halving memory usage and doubling compute throughput. | LoadData extension in [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [asc_mmad_mx](../zh/api/SIMD-API/c_api/cube_compute/asc_mmad_mx.md), [asc_copy_l12l0a_mx](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0a_mx.md), [asc_copy_l12l0b_mx](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0b_mx.md) | [Matmul Feature Introduction](../zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/Matmul特性介绍.md), [MxMatmul Scenario](../zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/MxMatmul场景.md), [Matrix Multiplication Quantization/Dequantization](../zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/矩阵乘输出的量化-反量化.md) |25| 11 | **MX (MicroScaling) data type**: Supports FP8_E4M3/MXFP4/8 low-bit matrix operations, halving memory usage and doubling compute throughput. | LoadData extension in [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [asc_mmad_mx](../zh/api/SIMD-API/c_api/cube_compute/asc_mmad_mx.md), [asc_copy_l12l0a_mx](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0a_mx.md), [asc_copy_l12l0b_mx](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0b_mx.md) | [Matmul Feature Introduction](../zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/Matmul特性介绍.md), [MxMatmul Scenario](../zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/MxMatmul场景.md), [Matrix Multiplication Quantization/Dequantization](../zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/矩阵乘输出的量化-反量化.md) |
26| 12 | **Fixpipe enhancement**: Adds NZ2DN in-flight conversion, enabling Fixpipe to convert NZ-format data to DN format in flight. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [Fixpipe API](../zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md), [asc_copy_l0c2gm](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2gm/asc_copy_l0c2gm_arch_3510.md), [asc_copy_l0c2l1](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2l1/asc_copy_l0c2l1_arch_3510.md) | [Matrix Multiplication Result Accumulation](../zh/guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |26| 12 | **Fixpipe enhancement**: Adds NZ2DN in-flight conversion, enabling Fixpipe to convert NZ-format data to DN format in flight. | [3510 Architecture Changes - Move Unit](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [Fixpipe API](../zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md), [asc_copy_l0c2gm](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2gm/asc_copy_l0c2gm_arch_3510.md), [asc_copy_l0c2l1](../zh/api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2l1/asc_copy_l0c2l1_arch_3510.md) | [Matrix Multiplication Result Accumulation](../zh/guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |
27-| 13 | **UB interconnect/bank structure change**: In the 3510 architecture, the UB changes from 16 bank groups (each with three 4 KB banks) to 8 bank groups (each with two 16 KB banks). | [3510 Architecture Specifications - Storage Unit](../zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md) | Not applicable | [Avoiding UB Bank Conflicts Overview](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md), [2201 Bank Conflict](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md), [3510 Bank Conflict](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_3510.md), [SIMT Avoiding Bank Conflicts](../zh/guide/算子实践参考/SIMT算子性能优化/内存访问/避免UB的Bank冲突.md) |27+| 13 | **UB interconnect/bank structure change**: In the 3510 architecture, the UB changes from 16 bank groups (each with three 4 KB banks) to 8 bank groups (each with two 16 KB banks). | [3510 Architecture Specifications - Storage Unit](../zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md) | Not applicable | [Avoiding UB Bank Conflicts Overview](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md), [2201 Bank Conflict](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md), [3510 Bank Conflict](../zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_3510.md), [SIMT Avoiding Bank Conflicts](../zh/guide/算子实践参考/SIMT算子性能优化/内存访问/避免UB的Bank冲突.md) |
28 28 
29---29---
30 30 
@@ -45,4 +45,4 @@ This document indexes the new hardware features of Ascend 950PR/Ascend 950DT (NP
45- [Basic API Migration Guide](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/basic_api_migration.md)45- [Basic API Migration Guide](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/basic_api_migration.md)
46- [High-level API Migration Guide](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/advanced_api_migration.md)46- [High-level API Migration Guide](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/advanced_api_migration.md)
47- [Operator Compilation Migration Guide](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/op_compilation_migration.md)47- [Operator Compilation Migration Guide](../zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/op_compilation_migration.md)
48-- [NPU Architecture Version 3510 Specifications](../zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md)48+- [NPU Architecture Version 3510 Specifications](../zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md)
Mdocs/en/asc_doc_contributing.md+1-1
@@ -576,7 +576,7 @@ Refer to existing cases under `算子实践参考/优秀实践/` (e.g., FlashAtt
576Before submitting a documentation PR, check each item:576Before submitting a documentation PR, check each item:
577 577 
578**Content Accuracy**:578**Content Accuracy**:
579-- [ ] All hardware parameter values (capacity, granularity, range) are consistent with Architecture Specifications579+- [ ] All hardware parameter values (capacity, granularity, range) are consistent with [Architecture Specifications](../../docs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/architecture_spec.md)
580- [ ] "Fixed value" and other absolute descriptions have been verified (many "fixed values" are actually determined by configuration parameters)580- [ ] "Fixed value" and other absolute descriptions have been verified (many "fixed values" are actually determined by configuration parameters)
581- [ ] Data path descriptions match actual routes (no contradictions with other documents)581- [ ] Data path descriptions match actual routes (no contradictions with other documents)
582 582 
Mdocs/en/contributing/directory-structure.md+1-1
@@ -111,7 +111,7 @@ The following lists some common architecture directories; for the complete list,
111| `dav_c220` | `2201` | Atlas A2 training series products / Atlas A2 inference series products, Atlas A3 training series products / Atlas A3 inference series products |111| `dav_c220` | `2201` | Atlas A2 training series products / Atlas A2 inference series products, Atlas A3 training series products / Atlas A3 inference series products |
112| `dav_3510` | `3510` | Ascend 950PR/Ascend 950DT |112| `dav_3510` | `3510` | Ascend 950PR/Ascend 950DT |
113 113 
114-> For the complete mapping between product models and `__NPU_ARCH__`, see the [**NPU_ARCH** documentation](../../zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch).114+> For the complete mapping between product models and `__NPU_ARCH__`, see the [**NPU_ARCH** documentation](../../zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch).
115 115 
116### Architecture Dispatch Pattern116### Architecture Dispatch Pattern
117 117 
Mdocs/zh/api/SIMD-API/basic_api/cache_control/system_cache_overview.md+4-4
@@ -6,13 +6,13 @@ Cache(缓存)的主要作用是在搬运单元或Scalar单元与外部存储
6 6 
7[表1](#table1)展示了不同类型的Cache的功能,不同产品中支持的Cache类型不同,具体情况如下:7[表1](#table1)展示了不同类型的Cache的功能,不同产品中支持的Cache类型不同,具体情况如下:
8<!-- npu="950" id1 -->8<!-- npu="950" id1 -->
9-以[NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)为例,图1展示了AI Core中支持的五类Cache(L2 Cache、DCache、ICache、SIMT DCache、NDDMA Cache)在硬件架构中的位置关系。9+以[NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)为例,图1展示了AI Core中支持的五类Cache(L2 Cache、DCache、ICache、SIMT DCache、NDDMA Cache)在硬件架构中的位置关系。
10 10 
11**图1** 五类Cache在AI Core中的位置关系示意图 11**图1** 五类Cache在AI Core中的位置关系示意图
12![](../../../../api/figures/atlas_950_cache_architecture_diagram.png "atlas_950_cache_architecture_diagram")12![](../../../../api/figures/atlas_950_cache_architecture_diagram.png "atlas_950_cache_architecture_diagram")
13<!-- end id1 -->13<!-- end id1 -->
14<!-- npu="A3,910b" id2 -->14<!-- npu="A3,910b" id2 -->
15-以[NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)为例,图2展示了AI Core中支持的三类Cache(L2 Cache、DCache和ICache)在硬件架构中的位置关系。15+以[NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)为例,图2展示了AI Core中支持的三类Cache(L2 Cache、DCache和ICache)在硬件架构中的位置关系。
16 16 
17**图2** 三类Cache在AI Core中的位置关系示意图<a name="zh-cn_topic_0000002583420201_fig496311278412"></a> 17**图2** 三类Cache在AI Core中的位置关系示意图<a name="zh-cn_topic_0000002583420201_fig496311278412"></a>
18![](../../../../api/figures/atlas_a2_a3_cache_architecture_diagram.png "atlas_a2_a3_cache_architecture_diagram")18![](../../../../api/figures/atlas_a2_a3_cache_architecture_diagram.png "atlas_a2_a3_cache_architecture_diagram")
@@ -72,7 +72,7 @@ Cache一致性是多核中确保数据正确性的核心机制。简单来说,
72<!-- npu="950,A3,910b" id5 -->72<!-- npu="950,A3,910b" id5 -->
73下面介绍不同产品中每种类型Cache是否需要考虑多核间数据不一致:73下面介绍不同产品中每种类型Cache是否需要考虑多核间数据不一致:
74<!-- npu="950" id3 -->74<!-- npu="950" id3 -->
75-- 针对[NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md),该产品支持的五类Cache在多核间数据一致性方面的情况如下:75+- 针对[NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md),该产品支持的五类Cache在多核间数据一致性方面的情况如下:
76 - L2 Cache:多核间共享的缓存,因此不需要考虑多核间数据不一致的问题。76 - L2 Cache:多核间共享的缓存,因此不需要考虑多核间数据不一致的问题。
77 - DCache:多核独立缓存,因此需要考虑多核间数据一致性的问题。77 - DCache:多核独立缓存,因此需要考虑多核间数据一致性的问题。
78 - ICache:只读,因此不需要考虑多核间数据不一致的问题。78 - ICache:只读,因此不需要考虑多核间数据不一致的问题。
@@ -80,7 +80,7 @@ Cache一致性是多核中确保数据正确性的核心机制。简单来说,
80 - SIMT DCache:在SIMT中,写入数据时会立即写入GM,不存在一致性问题;从GM读取数据时,多核独立缓存,需要考虑多核间数据一致性的问题。80 - SIMT DCache:在SIMT中,写入数据时会立即写入GM,不存在一致性问题;从GM读取数据时,多核独立缓存,需要考虑多核间数据一致性的问题。
81<!-- end id3 -->81<!-- end id3 -->
82<!-- npu="A3,910b" id4 -->82<!-- npu="A3,910b" id4 -->
83-- 针对[NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md),支持的三类Cache在多核间数据一致性方面的情况如下:83+- 针对[NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md),支持的三类Cache在多核间数据一致性方面的情况如下:
84 - L2 Cache:多核间共享的缓存,因此不需要考虑多核间数据不一致的问题。84 - L2 Cache:多核间共享的缓存,因此不需要考虑多核间数据不一致的问题。
85 - DCache:多核独立缓存,因此需要考虑多核间数据一致性的问题。85 - DCache:多核独立缓存,因此需要考虑多核间数据一致性的问题。
86 - ICache:只读,因此不需要考虑多核间数据不一致的问题。86 - ICache:只读,因此不需要考虑多核间数据不一致的问题。
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/DataCopy_L0CToL1.md+2-2
@@ -34,13 +34,13 @@
34下图展示了随路量化、随路ReLU、随路通道合并的有效组合、中间数据类型和数据路径。下图中的F32-\>F16与F32-\>BF16为非量化模式,仅为Cast,其余为随路scalar/tensor量化模式。34下图展示了随路量化、随路ReLU、随路通道合并的有效组合、中间数据类型和数据路径。下图中的F32-\>F16与F32-\>BF16为非量化模式,仅为Cast,其余为随路scalar/tensor量化模式。
35 35 
36<!-- npu="A3,910b" id9 -->36<!-- npu="A3,910b" id9 -->
37-**图1** L0C2L1流程图([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002511188540_fig8956371257"></a> 37+**图1** L0C2L1流程图([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002511188540_fig8956371257"></a>
38 38 
39![](../../../../figures/L0C2L1_Function_Combination.png)39![](../../../../figures/L0C2L1_Function_Combination.png)
40<!-- end id9 -->40<!-- end id9 -->
41 41 
42<!-- npu="950" id11 -->42<!-- npu="950" id11 -->
43-**图2** L0C2L1流程图([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002542828493_fig1828513492475"></a> 43+**图2** L0C2L1流程图([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002542828493_fig1828513492475"></a>
44 44 
45![](../../../../figures/L0C2L1_Function_Combination_DataCopy_950.png)45![](../../../../figures/L0C2L1_Function_Combination_DataCopy_950.png)
46<!-- end id11 -->46<!-- end id11 -->
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md+2-2
@@ -41,13 +41,13 @@
41下图展示了随路量化、随路ReLU、随路格式转换、随路通道拆分以及随路通道合并的有效组合、中间数据类型和数据路径。下图中的F32-\>F16与F32-\>BF16为非量化模式,仅为Cast,其余为随路scalar/tensor量化模式。41下图展示了随路量化、随路ReLU、随路格式转换、随路通道拆分以及随路通道合并的有效组合、中间数据类型和数据路径。下图中的F32-\>F16与F32-\>BF16为非量化模式,仅为Cast,其余为随路scalar/tensor量化模式。
42 42 
43<!-- npu="A3,910b" id11 -->43<!-- npu="A3,910b" id11 -->
44-**图1** L0C2GM流程图([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002542828493_fig542810249417"></a> 44+**图1** L0C2GM流程图([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002542828493_fig542810249417"></a>
45 45 
46![](../../../../figures/L0C2GM_Function_Combination.png)46![](../../../../figures/L0C2GM_Function_Combination.png)
47<!-- end id11 -->47<!-- end id11 -->
48 48 
49<!-- npu="950" id13 -->49<!-- npu="950" id13 -->
50-**图 2** L0C2GM流程图([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002542828493_fig542810249613"></a> 50+**图 2** L0C2GM流程图([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002542828493_fig542810249613"></a>
51 51 
52![](../../../../figures/L0C2GM_Function_Combination_950.png)52![](../../../../figures/L0C2GM_Function_Combination_950.png)
53<!-- end id13 -->53<!-- end id13 -->
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToL1.md+2-2
@@ -41,13 +41,13 @@
41下图展示了随路量化、随路ReLU、随路通道合并的有效组合、中间数据类型和数据路径。下图中的F32-\>F16与F32-\>BF16为非量化模式,仅为Cast,其余为随路scalar/tensor量化模式。41下图展示了随路量化、随路ReLU、随路通道合并的有效组合、中间数据类型和数据路径。下图中的F32-\>F16与F32-\>BF16为非量化模式,仅为Cast,其余为随路scalar/tensor量化模式。
42 42 
43<!-- npu="A3,910b" id11 -->43<!-- npu="A3,910b" id11 -->
44-**图1** L0C2L1流程图([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002511188540_fig8956371257"></a> 44+**图1** L0C2L1流程图([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002511188540_fig8956371257"></a>
45 45 
46![](../../../../figures/L0C2L1_Function_Combination.png)46![](../../../../figures/L0C2L1_Function_Combination.png)
47<!-- end id11 -->47<!-- end id11 -->
48 48 
49<!-- npu="950" id13 -->49<!-- npu="950" id13 -->
50-**图2** L0C2L1流程图([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002542828493_fig1828513492547"></a> 50+**图2** L0C2L1流程图([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002542828493_fig1828513492547"></a>
51 51 
52![](../../../../figures/L0C2L1_Function_Combination_950.png)52![](../../../../figures/L0C2L1_Function_Combination_950.png)
53<!-- end id13 -->53<!-- end id13 -->
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/L0C_memory_structure_intro.md+2-2
@@ -21,7 +21,7 @@ L0C_ADDR[16:0] = { BANK_DEPTH[6:0], BANK[3:0], BANK_WIDTH[5:0] } // bit位顺
21// BANK_WIDTH表示地址在Bank一行上的偏移量,占用6位bit位,取值范围为[0, 63]21// BANK_WIDTH表示地址在Bank一行上的偏移量,占用6位bit位,取值范围为[0, 63]
22```22```
23 23 
24-**图1** L0C Buffer内存结构图([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002555148561_fig1715315610160"></a> 24+**图1** L0C Buffer内存结构图([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002555148561_fig1715315610160"></a>
25 25 
26![](../../../../figures/L0C_Memory_Structure.png)26![](../../../../figures/L0C_Memory_Structure.png)
27<!-- end id2 -->27<!-- end id2 -->
@@ -38,7 +38,7 @@ L0C_ADDR[17:0] = { BANK_DEPTH[7:0], BANK[3:0], BANK_WIDTH[5:0] } // bit位顺
38// BANK_WIDTH表示地址在Bank一行上的偏移量,占用6位bit位,取值范围为[0, 63]38// BANK_WIDTH表示地址在Bank一行上的偏移量,占用6位bit位,取值范围为[0, 63]
39```39```
40 40 
41-**图2** L0C Buffer内存结构图([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="fig179810301543"></a> 41+**图2** L0C Buffer内存结构图([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="fig179810301543"></a>
42 42 
43![](../../../../figures/L0C_Memory_Structure_950.png)43![](../../../../figures/L0C_Memory_Structure_950.png)
44<!-- end id1 -->44<!-- end id1 -->
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/overall_description.md+2-2
@@ -9,13 +9,13 @@
9<!-- end id1 -->9<!-- end id1 -->
10 10 
11<!-- npu="A3,910b" id2 -->11<!-- npu="A3,910b" id2 -->
12-**图1** 矩阵计算的搬出整体流程图([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))12+**图1** 矩阵计算的搬出整体流程图([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
13 13 
14![](../../../../figures/fixpipe_execution_flow_a2a3.png)14![](../../../../figures/fixpipe_execution_flow_a2a3.png)
15<!-- end id2 -->15<!-- end id2 -->
16 16 
17<!-- npu="950" id3 -->17<!-- npu="950" id3 -->
18-**图2** 矩阵计算的搬出整体流程图([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))18+**图2** 矩阵计算的搬出整体流程图([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
19 19 
20![](../../../../figures/fixpipe_execution_flow_a5.png)20![](../../../../figures/fixpipe_execution_flow_a5.png)
21<!-- end id3 -->21<!-- end id3 -->
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_store_key_features/NZ2NZ.md+2-2
@@ -81,7 +81,7 @@ for (j = 0; j < mSize; j++) {
81如下图所示,在L0C Buffer中有一个NZ格式的矩阵,该矩阵N方向上维度为48,M方向上维度为24,经过NZ2NZ转换,将数据格式变为右部分所示排布。81如下图所示,在L0C Buffer中有一个NZ格式的矩阵,该矩阵N方向上维度为48,M方向上维度为24,经过NZ2NZ转换,将数据格式变为右部分所示排布。
82 82 
83<!-- npu="A3,910b" id6 -->83<!-- npu="A3,910b" id6 -->
84-**图1** NZ2NZ示意图([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a name="zh-cn_topic_0000002515820868_fig199191646174210"></a> 84+**图1** NZ2NZ示意图([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a name="zh-cn_topic_0000002515820868_fig199191646174210"></a>
85 85 
86![](../../../../figures/Fixpipe_NZ2NZ.png)86![](../../../../figures/Fixpipe_NZ2NZ.png)
87 87 
@@ -95,7 +95,7 @@ for (j = 0; j < mSize; j++) {
95<!-- end id6 -->95<!-- end id6 -->
96 96 
97<!-- npu="950" id5 -->97<!-- npu="950" id5 -->
98-**图2** NZ2NZ示意图([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a name="zh-cn_topic_0000002515820868_fig199191646174233"></a> 98+**图2** NZ2NZ示意图([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a name="zh-cn_topic_0000002515820868_fig199191646174233"></a>
99 99 
100![](../../../../figures/Fixpipe_NZ2NZ_950.png)100![](../../../../figures/Fixpipe_NZ2NZ_950.png)
101 101 
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_store_key_features/accompanying_quantization.md+2-2
@@ -46,7 +46,7 @@ VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,
46量化参数比特位含义见下表:46量化参数比特位含义见下表:
47 47 
48<!-- npu="A3,910b" id3 -->48<!-- npu="A3,910b" id3 -->
49-**表1** 量化参数QUANT\_PRE比特位含义映射表([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002547300781_table1273124313613"></a>49+**表1** 量化参数QUANT\_PRE比特位含义映射表([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002547300781_table1273124313613"></a>
50 50 
51| 模式 | 比特位数 | 变量名 | 作用介绍 |51| 模式 | 比特位数 | 变量名 | 作用介绍 |
52| ------ | ---------- | -------- | ---------- |52| ------ | ---------- | -------- | ---------- |
@@ -59,7 +59,7 @@ VQF322F32_PRE, // Vector_Quant_Float32_2_Float32: float量化成float,
59<!-- end id3 -->59<!-- end id3 -->
60 60 
61<!-- npu="950" id4 -->61<!-- npu="950" id4 -->
62-**表2** 量化参数QUANT\_PRE比特位含义映射表([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh-cn_topic_0000002547300781_table1273124313714"></a>62+**表2** 量化参数QUANT\_PRE比特位含义映射表([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh-cn_topic_0000002547300781_table1273124313714"></a>
63 63 
64| 模式 | 比特位数 | 变量名 | 作用介绍 |64| 模式 | 比特位数 | 变量名 | 作用介绍 |
65| --- | --- | --- | --- |65| --- | --- | --- | --- |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_store_key_features/accompanying_quantization_and_relu_scenario_combination.md+2-2
@@ -6,7 +6,7 @@
6随路量化与随路ReLU的组合情况如下表所示:6随路量化与随路ReLU的组合情况如下表所示:
7 7 
8<!-- npu="A3,910b" id2 -->8<!-- npu="A3,910b" id2 -->
9-**表1** 随路量化与随路ReLU的组合表([NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))9+**表1** 随路量化与随路ReLU的组合表([NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
10 10 
11| quantPre\reluPre | no ReLU | Normal ReLU |11| quantPre\reluPre | no ReLU | Normal ReLU |
12| ------------------ | --------- | ------------ |12| ------------------ | --------- | ------------ |
@@ -15,7 +15,7 @@
15<!-- end id2 -->15<!-- end id2 -->
16 16 
17<!-- npu="950" id3 -->17<!-- npu="950" id3 -->
18-**表2** 随路量化与随路ReLU的组合表([NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))18+**表2** 随路量化与随路ReLU的组合表([NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
19 19 
20| quantPre\reluPre | no ReLU | Normal ReLU |20| quantPre\reluPre | no ReLU | Normal ReLU |
21| --- | --- | --- |21| --- | --- | --- |
Mdocs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/overview/cube_compute_unit.md+2-2
@@ -7,12 +7,12 @@ Cube计算单元专用于执行矩阵运算,直接访问的专用缓存如下
7<!-- end id1 -->7<!-- end id1 -->
8 8 
9<!-- npu="910b,A3" id2 -->9<!-- npu="910b,A3" id2 -->
10-**图1** [NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)矩阵计算单元架构图<a name="zh-cn_topic_0000002513373312_fig88330137205"></a> 10+**图1** [NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)矩阵计算单元架构图<a name="zh-cn_topic_0000002513373312_fig88330137205"></a>
11![](../../../../figures/architecture_of_cube_compute_unit_a2a3.png "矩阵计算单元架构图-A2A3")11![](../../../../figures/architecture_of_cube_compute_unit_a2a3.png "矩阵计算单元架构图-A2A3")
12<!-- end id2 -->12<!-- end id2 -->
13 13 
14<!-- npu="950" id3 -->14<!-- npu="950" id3 -->
15-**图2** [NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)矩阵计算单元架构图<a name="zh-cn_topic_0000002513373312_fig1082103513519"></a> 15+**图2** [NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)矩阵计算单元架构图<a name="zh-cn_topic_0000002513373312_fig1082103513519"></a>
16![](../../../../figures/architecture_of_cube_compute_unit_950.png "矩阵计算单元架构图-950")16![](../../../../figures/architecture_of_cube_compute_unit_950.png "矩阵计算单元架构图-950")
17<!-- end id3 -->17<!-- end id3 -->
18 18 
Mdocs/zh/api/SIMD-API/basic_api/data_move_guide/overview/data_path.md+2-2
@@ -3,7 +3,7 @@
3## AI Core硬件架构与存储单元3## AI Core硬件架构与存储单元
4 4 
5<!-- npu="910b,A3" id1 -->5<!-- npu="910b,A3" id1 -->
6-AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)为例,其内部分层存储架构如图1所示,主要包含以下组成部分:6+AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)为例,其内部分层存储架构如图1所示,主要包含以下组成部分:
7 7 
8- **计算单元(图中黄色高亮):** 包括Cube(矩阵)计算单元、Vector(矢量)计算单元和Scalar(标量)计算单元,分别负责矩阵乘加、向量运算和标量控制流。8- **计算单元(图中黄色高亮):** 包括Cube(矩阵)计算单元、Vector(矢量)计算单元和Scalar(标量)计算单元,分别负责矩阵乘加、向量运算和标量控制流。
9- **存储单元:** 按层级由外到内依次为Global Memory(GM,位于AI Core外部)、L1 Buffer、L0A/L0B/L0C Buffer、Unified Buffer(UB)、BiasTable Buffer、Fixpipe Buffer等。各存储单元的容量与对齐要求各异,详情参见[内存层级架构](./overall_constraints.md#地址对齐约束)。9- **存储单元:** 按层级由外到内依次为Global Memory(GM,位于AI Core外部)、L1 Buffer、L0A/L0B/L0C Buffer、Unified Buffer(UB)、BiasTable Buffer、Fixpipe Buffer等。各存储单元的容量与对齐要求各异,详情参见[内存层级架构](./overall_constraints.md#地址对齐约束)。
@@ -15,7 +15,7 @@ AI Core是昇腾处理器的核心计算单元,以[NPU架构版本2201](../../
15<!-- end id1 -->15<!-- end id1 -->
16 16 
17<!-- npu="950" id2 -->17<!-- npu="950" id2 -->
18-以[NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)为例,其内部分层存储架构如图2所示,该架构在数据通路上有如下变化:18+以[NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)为例,其内部分层存储架构如图2所示,该架构在数据通路上有如下变化:
19 19 
20- 新增L0C Buffer到UB的单向数据通路。20- 新增L0C Buffer到UB的单向数据通路。
21- 新增UB到L1 Buffer的数据通路。21- 新增UB到L1 Buffer的数据通路。
Mdocs/zh/api/SIMD-API/basic_api/data_structures/LocalTensor/LocalTensor_constructor.md+2-2
@@ -57,13 +57,13 @@ LocalTensor构造函数。
57 57 
58## 函数原型<a name="section620mcpsimp"></a>58## 函数原型<a name="section620mcpsimp"></a>
59 59 
60-- 适用于[Pipe编程框架](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md),通常情况下开发者不直接调用,该函数不会对LocaTensor成员变量赋初值,均为随机值。60+- 适用于[Pipe编程框架](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md),通常情况下开发者不直接调用,该函数不会对LocaTensor成员变量赋初值,均为随机值。
61 61 
62 ```cpp62 ```cpp
63 __aicore__ inline LocalTensor<T>() {}63 __aicore__ inline LocalTensor<T>() {}
64 ```64 ```
65 65 
66-- 适用于[静态Tensor编程](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md),根据指定的逻辑位置/地址/长度,返回Tensor对象。66+- 适用于[静态Tensor编程](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md),根据指定的逻辑位置/地址/长度,返回Tensor对象。
67 67 
68 ```cpp68 ```cpp
69 __aicore__ inline LocalTensor<T>(TPosition pos, uint32_t addr, uint32_t tileSize)69 __aicore__ inline LocalTensor<T>(TPosition pos, uint32_t addr, uint32_t tileSize)
Mdocs/zh/api/SIMD-API/basic_api/debug_interface/cpu_twin_debug/GmAlloc.md+1-1
@@ -56,7 +56,7 @@ void *GmAlloc(size_t size)
56 56 
57## 约束说明<a name="zh-cn_topic_0000001963639306_zh-cn_topic_0000001541764188_section794123819592"></a>57## 约束说明<a name="zh-cn_topic_0000001963639306_zh-cn_topic_0000001541764188_section794123819592"></a>
58 58 
59-- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/编程指南/调试调优/功能调试/CPU域孪生调试.md)编译使用。59+- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md)编译使用。
60- 该接口在系统的/tmp目录下生成临时文件,故需要磁盘空间足够才可以正常生成共享内存。60- 该接口在系统的/tmp目录下生成临时文件,故需要磁盘空间足够才可以正常生成共享内存。
61- 必须配合[GmFree](GmFree.md)进行释放。61- 必须配合[GmFree](GmFree.md)进行释放。
62 62 
Mdocs/zh/api/SIMD-API/basic_api/debug_interface/cpu_twin_debug/GmFree.md+1-1
@@ -56,7 +56,7 @@ void GmFree(void *ptr)
56 56 
57## 约束说明<a name="zh-cn_topic_0000002000199397_zh-cn_topic_0000001592243993_section794123819592"></a>57## 约束说明<a name="zh-cn_topic_0000002000199397_zh-cn_topic_0000001592243993_section794123819592"></a>
58 58 
59-- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/编程指南/调试调优/功能调试/CPU域孪生调试.md)编译使用。59+- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md)编译使用。
60- 传入的指针必须是之前通过GmAlloc申请过的共享内存的指针。60- 传入的指针必须是之前通过GmAlloc申请过的共享内存的指针。
61 61 
62## 调用示例<a name="zh-cn_topic_0000002000199397_zh-cn_topic_0000001592243993_section82241477610"></a>62## 调用示例<a name="zh-cn_topic_0000002000199397_zh-cn_topic_0000001592243993_section82241477610"></a>
Mdocs/zh/api/SIMD-API/basic_api/debug_interface/cpu_twin_debug/ICPU_RUN_KF.md+1-1
@@ -58,7 +58,7 @@
58 58 
59## 约束说明<a name="zh-cn_topic_0000001963799134_zh-cn_topic_0000001541924164_section794123819592"></a>59## 约束说明<a name="zh-cn_topic_0000001963799134_zh-cn_topic_0000001541924164_section794123819592"></a>
60 60 
61-- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/编程指南/调试调优/功能调试/CPU域孪生调试.md)编译使用。61+- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md)编译使用。
62- 除了func、blkdim以外,其他的变量都必须是通过[GmAlloc](GmAlloc.md)分配的共享内存的指针;传入的参数的数量和顺序都必须和kernel保持一致。62- 除了func、blkdim以外,其他的变量都必须是通过[GmAlloc](GmAlloc.md)分配的共享内存的指针;传入的参数的数量和顺序都必须和kernel保持一致。
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>
Mdocs/zh/api/SIMD-API/basic_api/debug_interface/cpu_twin_debug/ICPU_SET_TILING_KEY.md+1-1
@@ -27,7 +27,7 @@
27 27 
28## 约束说明<a name="zh-cn_topic_0000002000279997_zh-cn_topic_0000001610028277_section794123819592"></a>28## 约束说明<a name="zh-cn_topic_0000002000279997_zh-cn_topic_0000001610028277_section794123819592"></a>
29 29 
30-- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/编程指南/调试调优/功能调试/CPU域孪生调试.md)编译使用。30+- 为了保留接口兼容,推荐[<<<>>>](../../../../../guide/programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md)编译使用。
31- tilingKey建议传入正整数,如果设置为负数或者0,将会告警并继续调测。如果传入0,将会执行tilingKey为0的分支;tilingKey传入负数,将导致未定义的行为。31- tilingKey建议传入正整数,如果设置为负数或者0,将会告警并继续调测。如果传入0,将会执行tilingKey为0的分支;tilingKey传入负数,将导致未定义的行为。
32- 该接口需要在[ICPU_RUN_KF](ICPU_RUN_KF.md)前调用。32- 该接口需要在[ICPU_RUN_KF](ICPU_RUN_KF.md)前调用。
33 33 
Mdocs/zh/api/SIMD-API/basic_api/memory_vector_compute/data_padding/VectorPadding_ISASI.md+3-3
@@ -147,7 +147,7 @@
147</td>147</td>
148<td class="cellrowborder" valign="top" width="11.92%" headers="mcps1.2.4.1.2 "><p id="p755431341319"><a name="p755431341319"></a><a name="p755431341319"></a>输入</p>148<td class="cellrowborder" valign="top" width="11.92%" headers="mcps1.2.4.1.2 "><p id="p755431341319"><a name="p755431341319"></a><a name="p755431341319"></a>输入</p>
149</td>149</td>
150-<td class="cellrowborder" valign="top" width="71.59%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001530181537_p0554313181312"><a name="zh-cn_topic_0000001530181537_p0554313181312"></a><a name="zh-cn_topic_0000001530181537_p0554313181312"></a><span id="zh-cn_topic_0000001530181537_ph793119540147"><a name="zh-cn_topic_0000001530181537_ph793119540147"></a><a name="zh-cn_topic_0000001530181537_ph793119540147"></a><span id="zh-cn_topic_0000001530181537_ph199431319161515"><a name="zh-cn_topic_0000001530181537_ph199431319161515"></a><a name="zh-cn_topic_0000001530181537_ph199431319161515"></a><a href="../../../../../guide/编程指南/类库API/基础API/接口分类说明/高维切分API.md" target="_blank" rel="noopener noreferrer">mask</a></span>用于控制每次迭代内参与计算的元素。</span></p>150+<td class="cellrowborder" valign="top" width="71.59%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001530181537_p0554313181312"><a name="zh-cn_topic_0000001530181537_p0554313181312"></a><a name="zh-cn_topic_0000001530181537_p0554313181312"></a><span id="zh-cn_topic_0000001530181537_ph793119540147"><a name="zh-cn_topic_0000001530181537_ph793119540147"></a><a name="zh-cn_topic_0000001530181537_ph793119540147"></a><span id="zh-cn_topic_0000001530181537_ph199431319161515"><a name="zh-cn_topic_0000001530181537_ph199431319161515"></a><a name="zh-cn_topic_0000001530181537_ph199431319161515"></a><a href="../../../../../guide/programming_guide/library_api/basic_api/interface_classification/high_dim_split_api.md" target="_blank" rel="noopener noreferrer">mask</a></span>用于控制每次迭代内参与计算的元素。</span></p>
151<a name="zh-cn_topic_0000001530181537_ul1255411133132"></a><a name="zh-cn_topic_0000001530181537_ul1255411133132"></a><ul id="zh-cn_topic_0000001530181537_ul1255411133132"><li>逐bit模式:可以按位控制哪些元素参与计算,bit位的值为1表示参与计算,0表示不参与。<p id="zh-cn_topic_0000001530181537_p121114581013"><a name="zh-cn_topic_0000001530181537_p121114581013"></a><a name="zh-cn_topic_0000001530181537_p121114581013"></a>mask为数组形式,数组长度和数组元素的取值范围和操作数的数据类型有关。当操作数为16位时,数组长度为2,mask[0]、mask[1]∈[0, 2<sup id="zh-cn_topic_0000001530181537_sup1411059101"><a name="zh-cn_topic_0000001530181537_sup1411059101"></a><a name="zh-cn_topic_0000001530181537_sup1411059101"></a>64</sup>-1]并且不同时为0;当操作数为32位时,数组长度为1,mask[0]∈(0, 2<sup id="zh-cn_topic_0000001530181537_sup1711155161017"><a name="zh-cn_topic_0000001530181537_sup1711155161017"></a><a name="zh-cn_topic_0000001530181537_sup1711155161017"></a>64</sup>-1];当操作数为64位时,数组长度为1,mask[0]∈(0, 2<sup id="zh-cn_topic_0000001530181537_sup181195111019"><a name="zh-cn_topic_0000001530181537_sup181195111019"></a><a name="zh-cn_topic_0000001530181537_sup181195111019"></a>32</sup>-1]。</p>151<a name="zh-cn_topic_0000001530181537_ul1255411133132"></a><a name="zh-cn_topic_0000001530181537_ul1255411133132"></a><ul id="zh-cn_topic_0000001530181537_ul1255411133132"><li>逐bit模式:可以按位控制哪些元素参与计算,bit位的值为1表示参与计算,0表示不参与。<p id="zh-cn_topic_0000001530181537_p121114581013"><a name="zh-cn_topic_0000001530181537_p121114581013"></a><a name="zh-cn_topic_0000001530181537_p121114581013"></a>mask为数组形式,数组长度和数组元素的取值范围和操作数的数据类型有关。当操作数为16位时,数组长度为2,mask[0]、mask[1]∈[0, 2<sup id="zh-cn_topic_0000001530181537_sup1411059101"><a name="zh-cn_topic_0000001530181537_sup1411059101"></a><a name="zh-cn_topic_0000001530181537_sup1411059101"></a>64</sup>-1]并且不同时为0;当操作数为32位时,数组长度为1,mask[0]∈(0, 2<sup id="zh-cn_topic_0000001530181537_sup1711155161017"><a name="zh-cn_topic_0000001530181537_sup1711155161017"></a><a name="zh-cn_topic_0000001530181537_sup1711155161017"></a>64</sup>-1];当操作数为64位时,数组长度为1,mask[0]∈(0, 2<sup id="zh-cn_topic_0000001530181537_sup181195111019"><a name="zh-cn_topic_0000001530181537_sup181195111019"></a><a name="zh-cn_topic_0000001530181537_sup181195111019"></a>32</sup>-1]。</p>
152<p id="zh-cn_topic_0000001530181537_p711354105"><a name="zh-cn_topic_0000001530181537_p711354105"></a><a name="zh-cn_topic_0000001530181537_p711354105"></a>例如,mask=[8, 0],8=0b1000,表示仅第4个元素参与计算。</p>152<p id="zh-cn_topic_0000001530181537_p711354105"><a name="zh-cn_topic_0000001530181537_p711354105"></a><a name="zh-cn_topic_0000001530181537_p711354105"></a>例如,mask=[8, 0],8=0b1000,表示仅第4个元素参与计算。</p>
153</li></ul>153</li></ul>
@@ -159,7 +159,7 @@
159<td class="cellrowborder" valign="top" width="11.92%" headers="mcps1.2.4.1.2 "><p id="p135541313101314"><a name="p135541313101314"></a><a name="p135541313101314"></a>输入</p>159<td class="cellrowborder" valign="top" width="11.92%" headers="mcps1.2.4.1.2 "><p id="p135541313101314"><a name="p135541313101314"></a><a name="p135541313101314"></a>输入</p>
160</td>160</td>
161<td class="cellrowborder" valign="top" width="71.59%" headers="mcps1.2.4.1.3 "><p id="p141775514"><a name="p141775514"></a><a name="p141775514"></a>重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。</p>161<td class="cellrowborder" valign="top" width="71.59%" headers="mcps1.2.4.1.3 "><p id="p141775514"><a name="p141775514"></a><a name="p141775514"></a>重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。</p>
162-<p id="p9554151321320"><a name="p9554151321320"></a><a name="p9554151321320"></a>关于该参数的具体描述请参考<span id="zh-cn_topic_0000001530181537_ph43961850144019"><a name="zh-cn_topic_0000001530181537_ph43961850144019"></a><a name="zh-cn_topic_0000001530181537_ph43961850144019"></a><a href="../../../../../guide/编程指南/类库API/基础API/接口分类说明/高维切分API.md" target="_blank" rel="noopener noreferrer">高维切分API</a></span>。</p>162+<p id="p9554151321320"><a name="p9554151321320"></a><a name="p9554151321320"></a>关于该参数的具体描述请参考<span id="zh-cn_topic_0000001530181537_ph43961850144019"><a name="zh-cn_topic_0000001530181537_ph43961850144019"></a><a name="zh-cn_topic_0000001530181537_ph43961850144019"></a><a href="../../../../../guide/programming_guide/library_api/basic_api/interface_classification/high_dim_split_api.md" target="_blank" rel="noopener noreferrer">高维切分API</a></span>。</p>
163</td>163</td>
164</tr>164</tr>
165<tr id="row195541813181310"><td class="cellrowborder" valign="top" width="16.49%" headers="mcps1.2.4.1.1 "><p id="p15554121320132"><a name="p15554121320132"></a><a name="p15554121320132"></a>repeatParams</p>165<tr id="row195541813181310"><td class="cellrowborder" valign="top" width="16.49%" headers="mcps1.2.4.1.1 "><p id="p15554121320132"><a name="p15554121320132"></a><a name="p15554121320132"></a>repeatParams</p>
@@ -167,7 +167,7 @@
167<td class="cellrowborder" valign="top" width="11.92%" headers="mcps1.2.4.1.2 "><p id="p18554141331317"><a name="p18554141331317"></a><a name="p18554141331317"></a>输入</p>167<td class="cellrowborder" valign="top" width="11.92%" headers="mcps1.2.4.1.2 "><p id="p18554141331317"><a name="p18554141331317"></a><a name="p18554141331317"></a>输入</p>
168</td>168</td>
169<td class="cellrowborder" valign="top" width="71.59%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001530181537_p455461351319"><a name="zh-cn_topic_0000001530181537_p455461351319"></a><a name="zh-cn_topic_0000001530181537_p455461351319"></a>控制操作数地址步长的参数。<a href="../../aux_data_structures/UnaryRepeatParams.md">UnaryRepeatParams</a>类型,包含操作数相邻迭代间相同<span id="zh-cn_topic_0000001530181537_ph1256166185416"><a name="zh-cn_topic_0000001530181537_ph1256166185416"></a><a name="zh-cn_topic_0000001530181537_ph1256166185416"></a>DataBlock</span>的地址步长,操作数同一迭代内不同<span id="zh-cn_topic_0000001530181537_ph131833567170"><a name="zh-cn_topic_0000001530181537_ph131833567170"></a><a name="zh-cn_topic_0000001530181537_ph131833567170"></a>DataBlock</span>的地址步长等参数。</p>169<td class="cellrowborder" valign="top" width="71.59%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001530181537_p455461351319"><a name="zh-cn_topic_0000001530181537_p455461351319"></a><a name="zh-cn_topic_0000001530181537_p455461351319"></a>控制操作数地址步长的参数。<a href="../../aux_data_structures/UnaryRepeatParams.md">UnaryRepeatParams</a>类型,包含操作数相邻迭代间相同<span id="zh-cn_topic_0000001530181537_ph1256166185416"><a name="zh-cn_topic_0000001530181537_ph1256166185416"></a><a name="zh-cn_topic_0000001530181537_ph1256166185416"></a>DataBlock</span>的地址步长,操作数同一迭代内不同<span id="zh-cn_topic_0000001530181537_ph131833567170"><a name="zh-cn_topic_0000001530181537_ph131833567170"></a><a name="zh-cn_topic_0000001530181537_ph131833567170"></a>DataBlock</span>的地址步长等参数。</p>
170-<p id="zh-cn_topic_0000001530181537_p1156819418442"><a name="zh-cn_topic_0000001530181537_p1156819418442"></a><a name="zh-cn_topic_0000001530181537_p1156819418442"></a>相邻迭代间的地址步长参数说明请参考<span id="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph18976413195617"><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph18976413195617"></a><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph18976413195617"></a><a href="../../../../../guide/编程指南/类库API/基础API/接口分类说明/高维切分API.md" target="_blank" rel="noopener noreferrer">repeatStride</a></span>;同一迭代内DataBlock的地址步长参数说明请参考<span id="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph19976131385613"><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph19976131385613"></a><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph19976131385613"></a><a href="../../../../../guide/编程指南/类库API/基础API/接口分类说明/高维切分API.md" target="_blank" rel="noopener noreferrer">dataBlockStride</a></span>。</p>170+<p id="zh-cn_topic_0000001530181537_p1156819418442"><a name="zh-cn_topic_0000001530181537_p1156819418442"></a><a name="zh-cn_topic_0000001530181537_p1156819418442"></a>相邻迭代间的地址步长参数说明请参考<span id="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph18976413195617"><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph18976413195617"></a><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph18976413195617"></a><a href="../../../../../guide/programming_guide/library_api/basic_api/interface_classification/high_dim_split_api.md" target="_blank" rel="noopener noreferrer">repeatStride</a></span>;同一迭代内DataBlock的地址步长参数说明请参考<span id="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph19976131385613"><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph19976131385613"></a><a name="zh-cn_topic_0000001530181537_zh-cn_topic_0000001487959374_ph19976131385613"></a><a href="../../../../../guide/programming_guide/library_api/basic_api/interface_classification/high_dim_split_api.md" target="_blank" rel="noopener noreferrer">dataBlockStride</a></span>。</p>
171</td>171</td>
172</tr>172</tr>
173</tbody>173</tbody>
Mdocs/zh/api/SIMD-API/basic_api/reg_vector_compute/register_data_types/MaskReg.md+1-1
@@ -267,7 +267,7 @@ __simd_callee__ inline void Add(U& dstReg, U& srcReg0, U& srcReg1, MaskReg& mask
267 267 
268### NPU架构版本2201与NPU架构版本3510之间Mask机制对比268### NPU架构版本2201与NPU架构版本3510之间Mask机制对比
269 269 
270-本节对比[NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)在Normal模式的逐bit计算中Mask机制,与[NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)基于Reg矢量计算中Mask机制的差异。270+本节对比[NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)在Normal模式的逐bit计算中Mask机制,与[NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)基于Reg矢量计算中Mask机制的差异。
271 271 
272- 针对Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品272- 针对Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品
273 273 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/Alloc.md+1-1
@@ -129,7 +129,7 @@
129## 约束说明<a name="section633mcpsimp"></a>129## 约束说明<a name="section633mcpsimp"></a>
130 130 
131<!-- npu="950" id8 -->131<!-- npu="950" id8 -->
132-- 针对Ascend 950PR/Ascend 950DT,对UB的内存分配,会基于静态内存的基础上进行分配,即动态内存初始位置,参考[内存层级](../../../../../guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/内存层级.md)。132+- 针对Ascend 950PR/Ascend 950DT,对UB的内存分配,会基于静态内存的基础上进行分配,即动态内存初始位置,参考[内存层级](../../../../../guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/memory_hierarchy.md)。
133<!-- end id8 -->133<!-- end id8 -->
134- 当前暂不支持与L1 Buffer, L0A Buffer, L0B Buffer, L0C Buffer, BiasTable静态数组混用。134- 当前暂不支持与L1 Buffer, L0A Buffer, L0B Buffer, L0C Buffer, BiasTable静态数组混用。
135 135 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_intro.md+1-1
@@ -1,6 +1,6 @@
1# LocalMemAllocator简介<a name="ZH-CN_TOPIC_0000002337856509"></a>1# LocalMemAllocator简介<a name="ZH-CN_TOPIC_0000002337856509"></a>
2 2 
3-LocalMemAllocator是在使用[静态Tensor编程](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)时用于内存管理的类,用户无需构建TPipe/TQue,而是直接创建LocalTensor对象(也可以直接通过[LocalTensor构造函数](../../data_structures/LocalTensor/LocalTensor_constructor.md)进行构造)并开发算子,从而减少运行时的开销,实现更优的性能。3+LocalMemAllocator是在使用[静态Tensor编程](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)时用于内存管理的类,用户无需构建TPipe/TQue,而是直接创建LocalTensor对象(也可以直接通过[LocalTensor构造函数](../../data_structures/LocalTensor/LocalTensor_constructor.md)进行构造)并开发算子,从而减少运行时的开销,实现更优的性能。
4 4 
5LocalMemAllocator仅支持在Ascend C静态Tensor编程方式中使用,不可以与TPipe等接口混用。5LocalMemAllocator仅支持在Ascend C静态Tensor编程方式中使用,不可以与TPipe等接口混用。
6 6 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TPipe/InitBuffer.md+1-1
@@ -229,7 +229,7 @@
229- 一个kernel中所有使用的Buffer数量之和不能超过64。229- 一个kernel中所有使用的Buffer数量之和不能超过64。
230- 自定义地址InitBuffer方式分配不建议与不指定地址的混用,可能会导致内存冲突。230- 自定义地址InitBuffer方式分配不建议与不指定地址的混用,可能会导致内存冲突。
231<!-- npu="950" id10 -->231<!-- npu="950" id10 -->
232-- 针对Ascend 950PR/Ascend 950DT,对UB的内存分配,会基于静态内存的基础上进行分配,即动态内存初始位置,参考[内存层级](../../../../../guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/内存层级.md)。232+- 针对Ascend 950PR/Ascend 950DT,对UB的内存分配,会基于静态内存的基础上进行分配,即动态内存初始位置,参考[内存层级](../../../../../guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/memory_hierarchy.md)。
233<!-- end id10 -->233<!-- end id10 -->
234- 当前暂不支持与L1 Buffer, L0A Buffer, L0B Buffer, L0C Buffer, BiasTable静态数组混用。234- 当前暂不支持与L1 Buffer, L0A Buffer, L0B Buffer, L0C Buffer, BiasTable静态数组混用。
235 235 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/AllocTensor.md+1-1
@@ -45,7 +45,7 @@
45 __aicore__ inline LocalTensor<T> AllocTensor()45 __aicore__ inline LocalTensor<T> AllocTensor()
46 ```46 ```
47 47 
48-- inplace接口:直接使用传入的Tensor作为内存管理的对象,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md)。48+- inplace接口:直接使用传入的Tensor作为内存管理的对象,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md)。
49 49 
50 ```cpp50 ```cpp
51 template <typename T>51 template <typename T>
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/DeQue.md+1-1
@@ -46,7 +46,7 @@
46 __aicore__ inline LocalTensor<T> DeQue()46 __aicore__ inline LocalTensor<T> DeQue()
47 ```47 ```
48 48 
49- - inplace接口:通过出参的方式返回,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md)。49+ - inplace接口:通过出参的方式返回,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md)。
50 50 
51 ```cpp51 ```cpp
52 template <typename T>52 template <typename T>
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/GetTensorCountInQue.md+1-1
@@ -48,7 +48,7 @@ __aicore__ inline int32_t GetTensorCountInQue()
48 48 
49## 约束说明<a name="section633mcpsimp"></a>49## 约束说明<a name="section633mcpsimp"></a>
50 50 
51-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。51+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
52 52 
53## 返回值说明<a name="section640mcpsimp"></a>53## 返回值说明<a name="section640mcpsimp"></a>
54 54 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/HasIdleBuffer.md+1-1
@@ -48,7 +48,7 @@ __aicore__ inline bool HasIdleBuffer()
48 48 
49## 约束说明<a name="section633mcpsimp"></a>49## 约束说明<a name="section633mcpsimp"></a>
50 50 
51-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。51+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
52 52 
53## 返回值说明<a name="section640mcpsimp"></a>53## 返回值说明<a name="section640mcpsimp"></a>
54 54 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/HasTensorInQue.md+1-1
@@ -48,7 +48,7 @@ __aicore__ inline bool HasTensorInQue()
48 48 
49## 约束说明<a name="section633mcpsimp"></a>49## 约束说明<a name="section633mcpsimp"></a>
50 50 
51-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。51+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
52 52 
53## 返回值说明<a name="section640mcpsimp"></a>53## 返回值说明<a name="section640mcpsimp"></a>
54 54 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/TQue_intro.md+1-1
@@ -29,7 +29,7 @@ template <TPosition pos, int32_t depth, auto mask = 0> class TQue{...};
29<td class="cellrowborder" valign="top" width="85.9%" headers="mcps1.2.3.1.2 "><p id="p8510214185418"><a name="p8510214185418"></a><a name="p8510214185418"></a>队列的深度表示该队列可以连续进行入队/出队的次数,在代码运行时,对同一个队列有n次连续的EnQue(中间没有DeQue),那么该队列的深度就需要设置为n。</p>29<td class="cellrowborder" valign="top" width="85.9%" headers="mcps1.2.3.1.2 "><p id="p8510214185418"><a name="p8510214185418"></a><a name="p8510214185418"></a>队列的深度表示该队列可以连续进行入队/出队的次数,在代码运行时,对同一个队列有n次连续的EnQue(中间没有DeQue),那么该队列的深度就需要设置为n。</p>
30<p id="p7674135716528"><a name="p7674135716528"></a><a name="p7674135716528"></a>注意,这里的队列深度和double buffer无关,队列机制用于实现流水线并行,double buffer在此基础上进一步提高流水线的利用率。即使队列的深度为1,仍可以开启double buffer。</p>30<p id="p7674135716528"><a name="p7674135716528"></a><a name="p7674135716528"></a>注意,这里的队列深度和double buffer无关,队列机制用于实现流水线并行,double buffer在此基础上进一步提高流水线的利用率。即使队列的深度为1,仍可以开启double buffer。</p>
31<p id="p1334591855410"><a name="p1334591855410"></a><a name="p1334591855410"></a>非Tensor原地操作的场景下,队列的深度设置为1时,编译器对这种场景做了特殊优化,性能通常更好,<strong id="b0597122135416"><a name="b0597122135416"></a><a name="b0597122135416"></a>推荐设置为1</strong></p>31<p id="p1334591855410"><a name="p1334591855410"></a><a name="p1334591855410"></a>非Tensor原地操作的场景下,队列的深度设置为1时,编译器对这种场景做了特殊优化,性能通常更好,<strong id="b0597122135416"><a name="b0597122135416"></a><a name="b0597122135416"></a>推荐设置为1</strong></p>
32-<p id="p1167810565476"><a name="p1167810565476"></a><a name="p1167810565476"></a><span id="ph280915815592"><a name="ph280915815592"></a><a name="ph280915815592"></a><a href="../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md" target="_blank" rel="noopener noreferrer">Tensor原地操作</a></span>的场景下,需要设置为0。</p>32+<p id="p1167810565476"><a name="p1167810565476"></a><a name="p1167810565476"></a><span id="ph280915815592"><a name="ph280915815592"></a><a name="ph280915815592"></a><a href="../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md" target="_blank" rel="noopener noreferrer">Tensor原地操作</a></span>的场景下,需要设置为0。</p>
33<a name="ul26757572527"></a><a name="ul26757572527"></a><ul id="ul26757572527"><li>如下样例中队列没有连续入队,队列的深度设置为1。<a name="screen17724335125812"></a><a name="screen17724335125812"></a><pre class="screen" codetype="Cpp" id="screen17724335125812">a1 = que.AllocTensor(); 33<a name="ul26757572527"></a><a name="ul26757572527"></a><ul id="ul26757572527"><li>如下样例中队列没有连续入队,队列的深度设置为1。<a name="screen17724335125812"></a><a name="screen17724335125812"></a><pre class="screen" codetype="Cpp" id="screen17724335125812">a1 = que.AllocTensor();
34que.EnQue(a1);34que.EnQue(a1);
35a1 = que.DeQue();35a1 = que.DeQue();
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQue/VacantInQue.md+1-1
@@ -48,7 +48,7 @@ __aicore__ inline bool VacantInQue()
48 48 
49## 约束说明<a name="section633mcpsimp"></a>49## 约束说明<a name="section633mcpsimp"></a>
50 50 
51-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。51+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
52 52 
53## 返回值说明<a name="section640mcpsimp"></a>53## 返回值说明<a name="section640mcpsimp"></a>
54 54 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/AllocTensor.md+1-1
@@ -39,7 +39,7 @@
39 __aicore__ inline LocalTensor<T> AllocTensor()39 __aicore__ inline LocalTensor<T> AllocTensor()
40 ```40 ```
41 41 
42-- inplace接口:直接使用传入的Tensor作为内存管理的对象,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md)。42+- inplace接口:直接使用传入的Tensor作为内存管理的对象,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md)。
43 43 
44 ```cpp44 ```cpp
45 template <typename T>45 template <typename T>
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/DeQue.md+1-1
@@ -39,7 +39,7 @@
39 __aicore__ inline LocalTensor<T> DeQue()39 __aicore__ inline LocalTensor<T> DeQue()
40 ```40 ```
41 41 
42-- inplace接口:通过出参的方式返回,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md)。42+- inplace接口:通过出参的方式返回,可以减少Tensor反复创建的开销,具体使用指导可参考[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md)。
43 43 
44 ```cpp44 ```cpp
45 template <typename T>45 template <typename T>
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/FreeAllEvent.md+1-1
@@ -42,7 +42,7 @@ __aicore__ inline void FreeAllEvent()
42 42 
43## 约束说明<a name="section633mcpsimp"></a>43## 约束说明<a name="section633mcpsimp"></a>
44 44 
45-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。45+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
46 46 
47## 返回值说明<a name="section640mcpsimp"></a>47## 返回值说明<a name="section640mcpsimp"></a>
48 48 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/GetTensorCountInQue.md+1-1
@@ -42,7 +42,7 @@ __aicore__ inline int32_t GetTensorCountInQue()
42 42 
43## 约束说明<a name="section633mcpsimp"></a>43## 约束说明<a name="section633mcpsimp"></a>
44 44 
45-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。45+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
46 46 
47## 返回值说明<a name="section640mcpsimp"></a>47## 返回值说明<a name="section640mcpsimp"></a>
48 48 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/HasIdleBuffer.md+1-1
@@ -42,7 +42,7 @@ __aicore__ inline bool HasIdleBuffer()
42 42 
43## 约束说明<a name="section633mcpsimp"></a>43## 约束说明<a name="section633mcpsimp"></a>
44 44 
45-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。45+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
46 46 
47## 返回值说明<a name="section640mcpsimp"></a>47## 返回值说明<a name="section640mcpsimp"></a>
48 48 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/HasTensorInQue.md+1-1
@@ -42,7 +42,7 @@ __aicore__ inline bool HasTensorInQue()
42 42 
43## 约束说明<a name="section633mcpsimp"></a>43## 约束说明<a name="section633mcpsimp"></a>
44 44 
45-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。45+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
46 46 
47## 返回值说明<a name="section640mcpsimp"></a>47## 返回值说明<a name="section640mcpsimp"></a>
48 48 
Mdocs/zh/api/SIMD-API/basic_api/resource_management/TQueBind/VacantInQue.md+1-1
@@ -42,7 +42,7 @@ __aicore__ inline bool VacantInQue()
42 42 
43## 约束说明<a name="section633mcpsimp"></a>43## 约束说明<a name="section633mcpsimp"></a>
44 44 
45-该接口不支持[Tensor原地操作](../../../../../guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md),即TQue的depth设置为0的场景。45+该接口不支持[Tensor原地操作](../../../../../guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md),即TQue的depth设置为0的场景。
46 46 
47## 返回值说明<a name="section640mcpsimp"></a>47## 返回值说明<a name="section640mcpsimp"></a>
48 48 
Mdocs/zh/api/SIMD-API/basic_api/scalar_compute/WriteGmByPassDCache_ISASI.md+2-2
@@ -31,7 +31,7 @@
31不经过DCache向GM地址上写数据。31不经过DCache向GM地址上写数据。
32<!-- npu="A3,910b" id8 -->32<!-- npu="A3,910b" id8 -->
33> [!CAUTION]注意 33> [!CAUTION]注意
34-> 针对[NPU架构2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),接口能否将value成功写入GM还与目标地址addr有关,具体请参见[约束说明](#约束说明)。34+> 针对[NPU架构2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),接口能否将value成功写入GM还与目标地址addr有关,具体请参见[约束说明](#约束说明)。
35<!-- end id8 -->35<!-- end id8 -->
36 36 
37使用场景:37使用场景:
@@ -86,7 +86,7 @@ __aicore__ inline void WriteGmByPassDCache(__gm__ T* addr, T value)
86## 约束说明<a name="section633mcpsimp"></a>86## 约束说明<a name="section633mcpsimp"></a>
87 87 
88<!-- npu="A3,910b" id9 -->88<!-- npu="A3,910b" id9 -->
89-针对[NPU架构2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),接口是否执行写入取决于目标地址addr在当前128字节对齐区间内的偏移。令$\mathrm{offset} = addr \bmod 128$,当$0 \leq \mathrm{offset} < 32$时,写入生效;当$32 \leq \mathrm{offset} < 128$时,不执行写入,目标地址中的数据保持原值。即仅当目标地址位于每个128字节对齐区间的前32字节时,接口才执行写入。89+针对[NPU架构2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),接口是否执行写入取决于目标地址addr在当前128字节对齐区间内的偏移。令$\mathrm{offset} = addr \bmod 128$,当$0 \leq \mathrm{offset} < 32$时,写入生效;当$32 \leq \mathrm{offset} < 128$时,不执行写入,目标地址中的数据保持原值。即仅当目标地址位于每个128字节对齐区间的前32字节时,接口才执行写入。
90 90 
91设接口调用前后的目标地址数据分别为$\mathrm{GM}_{\mathrm{before}}(addr)$和$\mathrm{GM}_{\mathrm{after}}(addr)$,则:91设接口调用前后的目标地址数据分别为$\mathrm{GM}_{\mathrm{before}}(addr)$和$\mathrm{GM}_{\mathrm{after}}(addr)$,则:
92 92 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md+2-2
@@ -117,7 +117,7 @@ __aicore__ inline void CrossCoreSetFlag(uint16_t flagId)
117 117 
118## 约束说明<a id="section633mcpsimp"></a>118## 约束说明<a id="section633mcpsimp"></a>
119 119 
120-- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/set_Kernel_type.md)或[函数修饰符](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的情况如下:120+- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/set_Kernel_type.md)或[函数修饰符](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#section1074418132518)的情况如下:
121 - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。121 - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。
122 - 对于Vector和Cube混合场景(模式2和模式4),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。122 - 对于Vector和Cube混合场景(模式2和模式4),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。
123 123 
@@ -158,7 +158,7 @@ __aicore__ inline void CrossCoreSetFlag(uint16_t flagId)
158 - ≥2个并发算子使用了核间同步功能。158 - ≥2个并发算子使用了核间同步功能。
159 159 
160 具体而言,在多流场景下,某条流的核间同步算子虽分配到n个物理核,但可能仅有n-m个核先被调度执行,而其余m个核因被其他流的核间同步算子抢占而尚未启动。先启动的n-m个核执行到核间同步时等待剩余m核完成,而剩余m核因被其他流的核间同步算子占用而无法释放,形成死锁。160 具体而言,在多流场景下,某条流的核间同步算子虽分配到n个物理核,但可能仅有n-m个核先被调度执行,而其余m个核因被其他流的核间同步算子抢占而尚未启动。先启动的n-m个核执行到核间同步时等待剩余m核完成,而剩余m核因被其他流的核间同步算子占用而无法释放,形成死锁。
161- Kernel直调场景下通过[\_\_schedmode\_\_\(mode\)](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)限定符来设置batchmode模式;工程化算子开发场景下,通过TilingContext的SetScheduleMode接口来设置batchmode模式,具体请参考《[基础数据结构和接口](https://gitcode.com/cann/metadef/blob/master/docs/api/README.md)》。161+ Kernel直调场景下通过[\_\_schedmode\_\_\(mode\)](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)限定符来设置batchmode模式;工程化算子开发场景下,通过TilingContext的SetScheduleMode接口来设置batchmode模式,具体请参考《[基础数据结构和接口](https://gitcode.com/cann/metadef/blob/master/docs/zh/api/README.md)》。
162 162 
163## 调用示例<a id="section837496171220"></a>163## 调用示例<a id="section837496171220"></a>
164 164 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md+2-2
@@ -114,7 +114,7 @@ __aicore__ inline void CrossCoreWaitFlag(uint16_t flagId)
114 114 
115## 约束说明<a id="section633mcpsimp"></a>115## 约束说明<a id="section633mcpsimp"></a>
116 116 
117-- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/set_Kernel_type.md)或[函数修饰符](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的情况如下:117+- 由于当Kernel类型为KERNEL_TYPE_AIC_ONLY或KERNEL_TYPE_AIV_ONLY时,硬件不会开启调度模块,也就无法正常进行核间同步,因此不同的同步模式配置[Kernel类型](../../Kernel-Tiling/set_Kernel_type.md)或[函数修饰符](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#section1074418132518)的情况如下:
118 - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。118 - 在纯Vector/Cube场景下(模式0或模式1),建议设置Kernel类型为KERNEL\_TYPE\_MIX\_AIV\_1\_0或KERNEL\_TYPE\_MIX\_AIC\_1\_0,其它支持的Kernel类型请参考表3。
119 - 对于Vector和Cube混合场景(模式2和模式4),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。119 - 对于Vector和Cube混合场景(模式2和模式4),需根据AI Core中AIC和AIV的比例灵活配置Kernel类型,不同模式支持的函数修饰符和Kernel类型请参照表3。
120 120 
@@ -156,7 +156,7 @@ __aicore__ inline void CrossCoreWaitFlag(uint16_t flagId)
156 156 
157 具体而言,在多流场景下,某条流的核间同步算子虽分配到n个物理核,但可能仅有n-m个核先被调度执行,而其余m个核因被其他流的核间同步算子抢占而尚未启动。先启动的n-m个核执行到核间同步时等待剩余m核完成,而剩余m核因被其他流的核间同步算子占用而无法释放,形成死锁。157 具体而言,在多流场景下,某条流的核间同步算子虽分配到n个物理核,但可能仅有n-m个核先被调度执行,而其余m个核因被其他流的核间同步算子抢占而尚未启动。先启动的n-m个核执行到核间同步时等待剩余m核完成,而剩余m核因被其他流的核间同步算子占用而无法释放,形成死锁。
158 158 
159- Kernel直调场景下通过[\_\_schedmode\_\_\(mode\)](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)限定符来设置batchmode模式;工程化算子开发场景下,通过TilingContext的SetScheduleMode接口来设置batchmode模式,具体请参考《[基础数据结构和接口](https://gitcode.com/cann/metadef/blob/master/docs/api/README.md)》。159+ Kernel直调场景下通过[\_\_schedmode\_\_\(mode\)](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)限定符来设置batchmode模式;工程化算子开发场景下,通过TilingContext的SetScheduleMode接口来设置batchmode模式,具体请参考《[基础数据结构和接口](https://gitcode.com/cann/metadef/blob/master/docs/zh/api/README.md)》。
160 160 
161## 调用示例<a id="section837496171220"></a>161## 调用示例<a id="section837496171220"></a>
162 162 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/inter_core_sync/SyncAll.md+3-3
@@ -178,11 +178,11 @@ SyncAll硬件同步和软件同步接口的内部实现不同,约束条件也
178 - ≥2个并发算子使用了核间同步功能。178 - ≥2个并发算子使用了核间同步功能。
179 179 
180 具体而言,在多流场景下,某条流的核间同步算子虽分配到n个物理核,但可能仅有n-m个核先被调度执行,而其余m个核因被其他流的核间同步算子抢占而尚未启动。先启动的n-m个核执行到核间同步时等待剩余m核完成,而剩余m核因被其他流的核间同步算子占用而无法释放,形成死锁。180 具体而言,在多流场景下,某条流的核间同步算子虽分配到n个物理核,但可能仅有n-m个核先被调度执行,而其余m个核因被其他流的核间同步算子抢占而尚未启动。先启动的n-m个核执行到核间同步时等待剩余m核完成,而剩余m核因被其他流的核间同步算子占用而无法释放,形成死锁。
181- Kernel直调场景下通过[\_\_schedmode\_\_\(mode\)](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)限定符来设置batchmode模式;工程化算子开发场景下,通过TilingContext的SetScheduleMode接口来设置batchmode模式,具体请参考[《基础数据结构和接口》](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/900beta2/API/basicdataapi/atlasopapi_07_00001.html)。181+ Kernel直调场景下通过[\_\_schedmode\_\_\(mode\)](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)限定符来设置batchmode模式;工程化算子开发场景下,通过TilingContext的SetScheduleMode接口来设置batchmode模式,具体请参考[《基础数据结构和接口》](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/900beta2/API/basicdataapi/atlasopapi_07_00001.html)。
182<a id="syncall_flagId冲突说明"></a>182<a id="syncall_flagId冲突说明"></a>
183 - SyncAll硬件同步接口内部实现中使用了[CrossCoreSetFlag](CrossCoreSetFlag_ISASI.md)和[CrossCoreWaitFlag](CrossCoreWaitFlag_ISASI.md)进行核间同步控制,因此开发者同时使用CrossCoreSetFlag(或CrossCoreWaitFlag)和SyncAll硬件同步接口时,需注意避免以下[flagId](CrossCoreSetFlag_ISASI.md#flagId取值范围说明)冲突:183 - SyncAll硬件同步接口内部实现中使用了[CrossCoreSetFlag](CrossCoreSetFlag_ISASI.md)和[CrossCoreWaitFlag](CrossCoreWaitFlag_ISASI.md)进行核间同步控制,因此开发者同时使用CrossCoreSetFlag(或CrossCoreWaitFlag)和SyncAll硬件同步接口时,需注意避免以下[flagId](CrossCoreSetFlag_ISASI.md#flagId取值范围说明)冲突:
184 <!-- npu="950" id28 -->184 <!-- npu="950" id28 -->
185- - 针对[NPU架构版本3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md),SyncAll硬件同步接口的flagId占用情况如表3所示:185+ - 针对[NPU架构版本3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md),SyncAll硬件同步接口的flagId占用情况如表3所示:
186 186 
187 **表3** SyncAll硬件同步接口flagId占用情况187 **表3** SyncAll硬件同步接口flagId占用情况
188 188 
@@ -193,7 +193,7 @@ SyncAll硬件同步和软件同步接口的内部实现不同,约束条件也
193 | isAIVOnly=false(核函数使用`__mix__(1, 2)`修饰时) | 11、12、13、28、29 | AIC:11、12、13、28、29;AIV:12、13 |193 | isAIVOnly=false(核函数使用`__mix__(1, 2)`修饰时) | 11、12、13、28、29 | AIC:11、12、13、28、29;AIV:12、13 |
194 <!-- end id28 -->194 <!-- end id28 -->
195 <!-- npu="A3,910b" id29 -->195 <!-- npu="A3,910b" id29 -->
196- - 针对[NPU架构版本2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md),SyncAll硬件同步接口的flagId占用情况如表4所示:196+ - 针对[NPU架构版本2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md),SyncAll硬件同步接口的flagId占用情况如表4所示:
197 197 
198 **表4** SyncAll硬件同步接口flagId占用情况198 **表4** SyncAll硬件同步接口flagId占用情况
199 199 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/inter_task_sync/SetNextTaskStart.md+1-1
@@ -39,7 +39,7 @@
39 39 
40算子层面支持SuperKernel特性Early-Start能力的接口,调用后在TorchAir层面:1.GE图模式下进行默认启用; 2.npugraph_ex后端通过early_start选项进行控制启用。40算子层面支持SuperKernel特性Early-Start能力的接口,调用后在TorchAir层面:1.GE图模式下进行默认启用; 2.npugraph_ex后端通过early_start选项进行控制启用。
41 41 
42-在[SuperKernel](../../../../../guide/编程指南/高级编程/SuperKernel/原理介绍.md)的子Kernel中调用,调用后的指令可以和后续其他的子Kernel实现并行,提升整体性能。如[图1](#fig37581010773)所示,SuperKernel按序调用子Kernel,为保证子Kernel之间数据互不干扰,会在子Kernel间插入算子间同步进行保序,子Kernel<sub>N-1</sub>调用该接口后,之后的指令会和后续子Kernel<sub>N</sub>实现并行。42+在[SuperKernel](../../../../../guide/programming_guide/advanced_programming/super_kernel/principles.md)的子Kernel中调用,调用后的指令可以和后续其他的子Kernel实现并行,提升整体性能。如[图1](#fig37581010773)所示,SuperKernel按序调用子Kernel,为保证子Kernel之间数据互不干扰,会在子Kernel间插入算子间同步进行保序,子Kernel<sub>N-1</sub>调用该接口后,之后的指令会和后续子Kernel<sub>N</sub>实现并行。
43 43 
44SuperKernel是一种算子的二进制融合技术,与源码融合不同,它聚焦于内核函数 \(Kernel\)的二进制的调度方案,展开深度优化,于已编译的二进制代码基础上融合创建一个超级Kernel函数(SuperKernel),以调用子函数的方式调用多个其他内核函数,也就是子Kernel。相对于单算子下发,SuperKernel技术可以减少任务调度等待时间和调度开销,同时利用Task间隙资源进一步优化算子头开销。44SuperKernel是一种算子的二进制融合技术,与源码融合不同,它聚焦于内核函数 \(Kernel\)的二进制的调度方案,展开深度优化,于已编译的二进制代码基础上融合创建一个超级Kernel函数(SuperKernel),以调用子函数的方式调用多个其他内核函数,也就是子Kernel。相对于单算子下发,SuperKernel技术可以减少任务调度等待时间和调度开销,同时利用Task间隙资源进一步优化算子头开销。
45 45 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/inter_task_sync/WaitPreTaskEnd.md+1-1
@@ -39,7 +39,7 @@
39 39 
40算子层面支持SuperKernel特性Early-Start能力的接口,调用后在TorchAir层面:1.GE图模式下进行默认启用; 2.npugraph_ex后端通过early_start选项进行控制启用。40算子层面支持SuperKernel特性Early-Start能力的接口,调用后在TorchAir层面:1.GE图模式下进行默认启用; 2.npugraph_ex后端通过early_start选项进行控制启用。
41 41 
42-在[SuperKernel](../../../../../guide/编程指南/高级编程/SuperKernel/原理介绍.md)的子Kernel中调用,调用前的指令可以和前序其他的子Kernel实现并行,提升整体性能。如[图1](#fig99271836191110)所示,SuperKernel按序调用子Kernel,为保证子Kernel之间数据互不干扰,会在子Kernel间插入算子间同步进行保序,子Kernel<sub>N+1</sub>调用该接口之前的指令会和前序子Kernel<sub>N</sub>实现并行。42+在[SuperKernel](../../../../../guide/programming_guide/advanced_programming/super_kernel/principles.md)的子Kernel中调用,调用前的指令可以和前序其他的子Kernel实现并行,提升整体性能。如[图1](#fig99271836191110)所示,SuperKernel按序调用子Kernel,为保证子Kernel之间数据互不干扰,会在子Kernel间插入算子间同步进行保序,子Kernel<sub>N+1</sub>调用该接口之前的指令会和前序子Kernel<sub>N</sub>实现并行。
43 43 
44SuperKernel是一种算子的二进制融合技术,与源码融合不同,它聚焦于内核函数 \(Kernel\)的二进制的调度方案,展开深度优化,于已编译的二进制代码基础上融合创建一个超级Kernel函数(SuperKernel),以调用子函数的方式调用多个其他内核函数,也就是子Kernel。相对于单算子下发,SuperKernel技术可以减少任务调度等待时间和调度开销,同时利用Task间隙资源进一步优化算子头开销。44SuperKernel是一种算子的二进制融合技术,与源码融合不同,它聚焦于内核函数 \(Kernel\)的二进制的调度方案,展开深度优化,于已编译的二进制代码基础上融合创建一个超级Kernel函数(SuperKernel),以调用子函数的方式调用多个其他内核函数,也就是子Kernel。相对于单算子下发,SuperKernel技术可以减少任务调度等待时间和调度开销,同时利用Task间隙资源进一步优化算子头开销。
45 45 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/Lock.md+2-2
@@ -61,8 +61,8 @@ static __aicore__ inline void Lock(MutexID id)
61## 约束说明<a name="section184751024101111"></a>61## 约束说明<a name="section184751024101111"></a>
62 62 
63- 每个锁有固定的一个MutexID,在不同编程范式中,该ID的获取以及释放方式不同:63- 每个锁有固定的一个MutexID,在不同编程范式中,该ID的获取以及释放方式不同:
64- - 采用[TPipe-TQue框架编程范式](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md)时,MutexID需要通过[AllocMutexID](AllocMutexID_ISASI.md)/[ReleaseMutexID](ReleaseMutexID_ISASI.md)进行申请释放。64+ - 采用[TPipe-TQue框架编程范式](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md)时,MutexID需要通过[AllocMutexID](AllocMutexID_ISASI.md)/[ReleaseMutexID](ReleaseMutexID_ISASI.md)进行申请释放。
65- - 采用[静态Tensor编程范式](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)时,MutexID由开发者自行管理,建议使用0-27,28-31为系统内部规划预留,不建议使用。65+ - 采用[静态Tensor编程范式](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)时,MutexID由开发者自行管理,建议使用0-27,28-31为系统内部规划预留,不建议使用。
66- 对于同一个MutexID,必须先执行Lock,然后才能执行Unlock,且指定的pipe需要相同。如果Lock和Unlock没有按照这种"成对出现"的顺序排列,硬件行为将不可预测。以下是常见的错误用法与正确用法示例:66- 对于同一个MutexID,必须先执行Lock,然后才能执行Unlock,且指定的pipe需要相同。如果Lock和Unlock没有按照这种"成对出现"的顺序排列,硬件行为将不可预测。以下是常见的错误用法与正确用法示例:
67 67 
68 ```cpp68 ```cpp
Mdocs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/Mutex_ISASI.md+2-2
@@ -10,8 +10,8 @@ Mutex用于核内异步流水指令之间的同步控制,其功能类似于传
10 10 
11每个锁有固定的一个MutexID,在不同编程范式中,该ID的获取以及释放方式不同:11每个锁有固定的一个MutexID,在不同编程范式中,该ID的获取以及释放方式不同:
12 12 
13-- 采用[TPipe-TQue框架编程范式](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md)时,MutexID需要通过[AllocMutexID](AllocMutexID_ISASI.md)/[ReleaseMutexID](ReleaseMutexID_ISASI.md)进行申请释放。13+- 采用[TPipe-TQue框架编程范式](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md)时,MutexID需要通过[AllocMutexID](AllocMutexID_ISASI.md)/[ReleaseMutexID](ReleaseMutexID_ISASI.md)进行申请释放。
14-- 采用[静态Tensor编程范式](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)时,MutexID由开发者自行管理,建议使用0-27,28-31为系统内部规划预留,不建议使用。14+- 采用[静态Tensor编程范式](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)时,MutexID由开发者自行管理,建议使用0-27,28-31为系统内部规划预留,不建议使用。
15 15 
16相对于[SetFlag/WaitFlag](SetFlag_WaitFlag_ISASI.md)同步机制,使用Lock/Unlock接口有以下优势:16相对于[SetFlag/WaitFlag](SetFlag_WaitFlag_ISASI.md)同步机制,使用Lock/Unlock接口有以下优势:
17 17 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/SetFlag_WaitFlag_ISASI.md+2-2
@@ -73,9 +73,9 @@ __aicore__ inline void WaitFlag(int32_t eventID)
73 73 
74- SetFlag和WaitFlag必须成对使用,且SetFlag和WaitFlag的参数必须完全一致(包括模板参数event和输入参数eventID)。如果不匹配,会引发timeout问题。例如,`SetFlag<HardEvent::S_MTE3>(1)``WaitFlag<HardEvent::MTE3_MTE1>(1)`并不匹配,因为其模板参数event不同。74- SetFlag和WaitFlag必须成对使用,且SetFlag和WaitFlag的参数必须完全一致(包括模板参数event和输入参数eventID)。如果不匹配,会引发timeout问题。例如,`SetFlag<HardEvent::S_MTE3>(1)``WaitFlag<HardEvent::MTE3_MTE1>(1)`并不匹配,因为其模板参数event不同。
75 75 
76-- 在采用[TPipe-TQue框架编程范式](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md)时,eventID需要通过[AllocEventID](../../resource_management/TPipe/AllocEventID.md)或者[FetchEventID](../../resource_management/TPipe/FetchEventID.md)来获取。76+- 在采用[TPipe-TQue框架编程范式](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md)时,eventID需要通过[AllocEventID](../../resource_management/TPipe/AllocEventID.md)或者[FetchEventID](../../resource_management/TPipe/FetchEventID.md)来获取。
77 77 
78-- 在采用[静态Tensor编程范式](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)时,事件的类型和事件ID由开发者自行管理,建议使用事件ID0-5,事件ID6用于系统内部规划(当前未使用),事件ID7用于TPipe编程中的**自动同步**功能,目前暂不建议直接使用事件ID6-7。78+- 在采用[静态Tensor编程范式](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)时,事件的类型和事件ID由开发者自行管理,建议使用事件ID0-5,事件ID6用于系统内部规划(当前未使用),事件ID7用于TPipe编程中的**自动同步**功能,目前暂不建议直接使用事件ID6-7。
79 79 
80- eventID的取值范围如下:80- eventID的取值范围如下:
81 81 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/intra_core_sync_overview.md+4-4
@@ -6,7 +6,7 @@ AI Core内部的执行单元(如MTE2搬运单元、Vector计算单元等)以
6 6 
7<!-- npu="910b,A3" id1 -->7<!-- npu="910b,A3" id1 -->
8 8 
9-针对[NPU架构2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。9+针对[NPU架构2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。
10 10 
11**图 1** 架构图<a name="zh-cn_topic_0000002542725361_fig11732135516285"></a> 11**图 1** 架构图<a name="zh-cn_topic_0000002542725361_fig11732135516285"></a>
12![](../../../../figures/atlas_a2_a3_architecture.png "Atlas_A2_A3_硬件架构图")12![](../../../../figures/atlas_a2_a3_architecture.png "Atlas_A2_A3_硬件架构图")
@@ -15,7 +15,7 @@ AI Core内部的执行单元(如MTE2搬运单元、Vector计算单元等)以
15 15 
16<!-- npu="950" id2 -->16<!-- npu="950" id2 -->
17 17 
18-针对[NPU架构3510](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。18+针对[NPU架构3510](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。
19 19 
20**图 2** 架构图<a name="zh-cn_topic_0000002542725361_fig31512113433"></a> 20**图 2** 架构图<a name="zh-cn_topic_0000002542725361_fig31512113433"></a>
21![](../../../../figures/ascend_950pr_950dt_architecture.png "Ascend_950PR_950DT_硬件架构图")21![](../../../../figures/ascend_950pr_950dt_architecture.png "Ascend_950PR_950DT_硬件架构图")
@@ -39,7 +39,7 @@ AI Core内部的执行单元(如MTE2搬运单元、Vector计算单元等)以
39AI Core内部并行的指令流水类型和解释如下所示:39AI Core内部并行的指令流水类型和解释如下所示:
40 40 
41> [!NOTE]说明 41> [!NOTE]说明
42->不同的硬件架构,每一种硬件流水类型包含的具体流水会有所差异,详细介绍请参考[硬件实现](../../../../../guide/编程指南/高级编程/硬件实现/硬件实现.md)章节。42+>不同的硬件架构,每一种硬件流水类型包含的具体流水会有所差异,详细介绍请参考[硬件实现](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/hardware_implementation.md)章节。
43 43 
44**表1** 指令流水类型和相关说明44**表1** 指令流水类型和相关说明
45 45 
@@ -73,7 +73,7 @@ AI Core内部并行的指令流水类型和解释如下所示:
73 73 
74<!-- npu="910b,A3" id4 -->74<!-- npu="910b,A3" id4 -->
75 75 
76-以[NPU架构2201](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)为例,该硬件架构下所有合法的核内同步组合如[表2](#zh-cn_topic_0000002542725361_table13753342164113)和[表3](#zh-cn_topic_0000002542725361_table1555712177426)所示。其中,"不涉及"表示硬件层面不存在此种同步组合,"暂无应用场景"表示存在此种同步组合,但在实际开发场景中暂不需要使用。76+以[NPU架构2201](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)为例,该硬件架构下所有合法的核内同步组合如[表2](#zh-cn_topic_0000002542725361_table13753342164113)和[表3](#zh-cn_topic_0000002542725361_table1555712177426)所示。其中,"不涉及"表示硬件层面不存在此种同步组合,"暂无应用场景"表示存在此种同步组合,但在实际开发场景中暂不需要使用。
77 77 
78**表2** AIC中所有合法的核内同步组合<a name="zh-cn_topic_0000002542725361_table13753342164113"></a>78**表2** AIC中所有合法的核内同步组合<a name="zh-cn_topic_0000002542725361_table13753342164113"></a>
79 79 
Mdocs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/key_features.md+13-13
@@ -6,20 +6,20 @@
6 6 
7- 自动插入同步的范围是**SIMD-API的核内同步(包含单流水同步和多流水同步)**7- 自动插入同步的范围是**SIMD-API的核内同步(包含单流水同步和多流水同步)**
8- 部分接口间的同步由硬件保证,无需手动或者自动插入同步,具体内容请参考[硬件保证的同步](#硬件保证的同步)。8- 部分接口间的同步由硬件保证,无需手动或者自动插入同步,具体内容请参考[硬件保证的同步](#硬件保证的同步)。
9-- [TPipe-TQue框架编程范式](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md)和开启[cce-auto-sync编译选项](../../../../../../zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md#常用的编译选项)都能自动插入同步(后者由毕昇编译器自动插入),两种方式不互斥、各自插入的同步类型不同,可同时生效。9+- [TPipe-TQue框架编程范式](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md)和开启[cce-auto-sync编译选项](../../../../../../zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#常用的编译选项)都能自动插入同步(后者由毕昇编译器自动插入),两种方式不互斥、各自插入的同步类型不同,可同时生效。
10- TPipe-TQue框架编程范式和开启cce-auto-sync编译选项自动插入同步的前提是必须满足各自的使用约束。10- TPipe-TQue框架编程范式和开启cce-auto-sync编译选项自动插入同步的前提是必须满足各自的使用约束。
11 11 
12## 自动同步决策树12## 自动同步决策树
13 13 
14如图1所示,开发者可以按照图中流程判断一对接口之间是否需要手动插入同步,自动同步的支持情况见[表1](#table-aiv-tpipe-sync)、[表2](#table-aic-tpipe-sync)和[表3](#table-aiv-cce-sync)。14如图1所示,开发者可以按照图中流程判断一对接口之间是否需要手动插入同步,自动同步的支持情况见[表1](#table-aiv-tpipe-sync)、[表2](#table-aic-tpipe-sync)和[表3](#table-aiv-cce-sync)。
15 15 
16-Ascend C提供了[三层梯度化SIMD编程接口](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/概述.md#ascend-c多级编程接口),下面列出了各类接口管理同步的具体情况:16+Ascend C提供了[三层梯度化SIMD编程接口](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/overview.md#ascend-c多级编程接口),下面列出了各类接口管理同步的具体情况:
17 17 
18-- [基于TPipe-TQue框架编程-同步机制](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md#数据依赖与同步机制双api的协同工作)。18+- [基于TPipe-TQue框架编程-同步机制](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md#数据依赖与同步机制双api的协同工作)。
19-- [基于指针的C语言编程-同步机制](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.md#同步机制)。19+- [基于指针的C语言编程-同步机制](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md#同步机制)。
20-- [基于Tensor的CPP编程-同步机制](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/CPPTensor编程概述.md#同步机制)。20+- [基于Tensor的CPP编程-同步机制](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md#同步机制)。
21 21 
22-基于Tensor的CPP编程操作的Tensor可以分为基础Tensor和扩展Tensor,两种Tensor的具体含义和区别请参考[Tensor内存抽象](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/CPPTensor编程概述.md#tensor内存抽象)。22+基于Tensor的CPP编程操作的Tensor可以分为基础Tensor和扩展Tensor,两种Tensor的具体含义和区别请参考[Tensor内存抽象](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md#tensor内存抽象)。
23 23 
24两种方式的使用约束和支持的同步类型分别在后续章节展开:[TPipe-TQue框架范式自动同步](#tpipe-tque-auto-sync)和[开启cce-auto-sync编译选项自动同步](#cce-compiler-auto-sync)。24两种方式的使用约束和支持的同步类型分别在后续章节展开:[TPipe-TQue框架范式自动同步](#tpipe-tque-auto-sync)和[开启cce-auto-sync编译选项自动同步](#cce-compiler-auto-sync)。
25 25 
@@ -64,10 +64,10 @@ TPipe-TQue框架编程范式的自动同步功能需满足以下前提条件方
64 TPipe-TQue框架编程范式不支持插入单流水同步。64 TPipe-TQue框架编程范式不支持插入单流水同步。
65- 多流水同步65- 多流水同步
66 66 
67- 在TPipe-TQue框架编程范式下,框架能够自动插入部分多流水同步,以解决写后读(WAR,Write‑After‑Read)和读后写(RAW,Read‑After‑Write)两类数据依赖,具体原理参考[TPipe-TQue框架数据依赖与同步机制](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md#数据依赖与同步机制双api的协同工作)。67+ 在TPipe-TQue框架编程范式下,框架能够自动插入部分多流水同步,以解决写后读(WAR,Write‑After‑Read)和读后写(RAW,Read‑After‑Write)两类数据依赖,具体原理参考[TPipe-TQue框架数据依赖与同步机制](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md#数据依赖与同步机制双api的协同工作)。
68 68 
69 <!-- npu="A3,910b" id5 -->69 <!-- npu="A3,910b" id5 -->
70- 以[NPU架构2201](../../../../../../zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)为例,该硬件架构下AIV和AIC中不同流水线的自动同步支持情况分别如[表1](#table-aiv-tpipe-sync)和[表2](#table-aic-tpipe-sync)所示。70+ 以[NPU架构2201](../../../../../../zh/guide/programming_guide/language_extension/simd_builtin_keywords.md)为例,该硬件架构下AIV和AIC中不同流水线的自动同步支持情况分别如[表1](#table-aiv-tpipe-sync)和[表2](#table-aic-tpipe-sync)所示。
71 <!-- end id5 -->71 <!-- end id5 -->
72 72 
73 **表1** 在TPipe-TQue框架编程范式下,AIV中不同流水线的同步情况 <a id="table-aiv-tpipe-sync"></a>73 **表1** 在TPipe-TQue框架编程范式下,AIV中不同流水线的同步情况 <a id="table-aiv-tpipe-sync"></a>
@@ -94,7 +94,7 @@ TPipe-TQue框架编程范式的自动同步功能需满足以下前提条件方
94 94 
95以下反例展示了因未满足[使用约束](#使用约束)而无法自动插入同步的典型场景。95以下反例展示了因未满足[使用约束](#使用约束)而无法自动插入同步的典型场景。
96 96 
97-- 反例1:未使用TPipe-TQue框架编程范式。例如,将[基于TPipe-TQue框架编程范式的Add向量加法的样例](../../../../../../../examples/01_simd_cpp_api/00_introduction/01_add/add_tpipe_tque)改写为基于[静态Tensor编程范式](../../../../../../zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)时,静态Tensor编程范式无法自动插入MTE2_V,并最终导致样例执行失败。97+- 反例1:未使用TPipe-TQue框架编程范式。例如,将[基于TPipe-TQue框架编程范式的Add向量加法的样例](../../../../../../../examples/01_simd_cpp_api/00_introduction/01_add/add_tpipe_tque)改写为基于[静态Tensor编程范式](../../../../../../zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)时,静态Tensor编程范式无法自动插入MTE2_V,并最终导致样例执行失败。
98 98 
99 ```cpp99 ```cpp
100 AscendC::LocalMemAllocator<AscendC::Hardware::UB> ubAllocator;100 AscendC::LocalMemAllocator<AscendC::Hardware::UB> ubAllocator;
@@ -149,11 +149,11 @@ TPipe-TQue框架编程范式的自动同步功能需满足以下前提条件方
149- 单流水同步149- 单流水同步
150 150 
151 <!-- npu="A3,910b" id7 -->151 <!-- npu="A3,910b" id7 -->
152- - 针对[NPU架构2201](../../../../../../zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md),PIPE\_V之间由毕昇编译器自动完成同步插入。152+ - 针对[NPU架构2201](../../../../../../zh/guide/programming_guide/language_extension/simd_builtin_keywords.md),PIPE\_V之间由毕昇编译器自动完成同步插入。
153 <!-- end id7 -->153 <!-- end id7 -->
154 154 
155 <!-- npu="950" id8 -->155 <!-- npu="950" id8 -->
156- - 针对[NPU架构3510](../../../../../../zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md),PIPE\_V之间的同步由硬件保证。156+ - 针对[NPU架构3510](../../../../../../zh/guide/programming_guide/language_extension/simd_builtin_keywords.md),PIPE\_V之间的同步由硬件保证。
157 <!-- end id8 -->157 <!-- end id8 -->
158 158 
159 - PIPE\_MTE2/PIPE\_MTE3在搬运地址有重叠的情况下需要开发者插入同步(具体示例请参考[PipeBarrier约束说明](../intra_core_sync/PipeBarrier_ISASI.md))。159 - PIPE\_MTE2/PIPE\_MTE3在搬运地址有重叠的情况下需要开发者插入同步(具体示例请参考[PipeBarrier约束说明](../intra_core_sync/PipeBarrier_ISASI.md))。
@@ -163,7 +163,7 @@ TPipe-TQue框架编程范式的自动同步功能需满足以下前提条件方
163 - Cube计算单元中,毕昇编译器不支持自动插入任何类型的同步。163 - Cube计算单元中,毕昇编译器不支持自动插入任何类型的同步。
164 164 
165<!-- npu="A3,910b" id9 -->165<!-- npu="A3,910b" id9 -->
166-以[NPU架构2201](../../../../../../zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)为例,该硬件架构下AIV中不同流水线的自动同步支持情况如[表3](#table-aiv-cce-sync)所示。166+以[NPU架构2201](../../../../../../zh/guide/programming_guide/language_extension/simd_builtin_keywords.md)为例,该硬件架构下AIV中不同流水线的自动同步支持情况如[表3](#table-aiv-cce-sync)所示。
167<!-- end id9 -->167<!-- end id9 -->
168 168 
169**表3** 开启cce-auto-sync编译选项,AIV中不同流水线的同步情况 <a id="table-aiv-cce-sync"></a>169**表3** 开启cce-auto-sync编译选项,AIV中不同流水线的同步情况 <a id="table-aiv-cce-sync"></a>
@@ -253,7 +253,7 @@ AscendC::Add(zLocal, xLocal, yLocal, blockLength);
253毕昇编译器提供`--cce-auto-sync-log=<file>`编译选项可以输出同步插入信息到`<file>`文件中,帮助开发者显式地识别毕昇编译器在算子文件中插入的同步指令信息。253毕昇编译器提供`--cce-auto-sync-log=<file>`编译选项可以输出同步插入信息到`<file>`文件中,帮助开发者显式地识别毕昇编译器在算子文件中插入的同步指令信息。
254 254 
255> [!CAUTION]注意 255> [!CAUTION]注意
256-> 获取毕昇编译器自动同步日志,还需要设置[`-g`编译选项](../../../../../../zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md#常用的编译选项),用于获取算子代码文件行号。256+> 获取毕昇编译器自动同步日志,还需要设置[`-g`编译选项](../../../../../../zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#常用的编译选项),用于获取算子代码文件行号。
257 257 
258根据开发场景不同,添加该编译选项的方式如下:258根据开发场景不同,添加该编译选项的方式如下:
259 259 
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/execution_mode/Async.md+1-1
@@ -28,7 +28,7 @@
28 28 
29头文件路径为:`"basic_api/kernel_operator_utils_intf.h"`29头文件路径为:`"basic_api/kernel_operator_utils_intf.h"`
30 30 
31-基于[分离模式](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md)(AIC和AIV分离)开发融合算子时,算子逻辑中通常同时包含AIV和AIC的处理逻辑,此时需要使用Ascend C提供的宏`ASCEND_IS_AIV`/`ASCEND_IS_AIC`实现如下硬件条件分支来对AIV和AIC的代码进行隔离:31+基于[分离模式](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)(AIC和AIV分离)开发融合算子时,算子逻辑中通常同时包含AIV和AIC的处理逻辑,此时需要使用Ascend C提供的宏`ASCEND_IS_AIV`/`ASCEND_IS_AIC`实现如下硬件条件分支来对AIV和AIC的代码进行隔离:
32 32 
33```cpp33```cpp
34if ASCEND_IS_AIV {34if ASCEND_IS_AIV {
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/system_init/InitSocState.md+1-1
@@ -112,7 +112,7 @@ __aicore__ inline void InitSocState()
112- 在实际运行中,这些值可能被前序执行的算子修改,若不调用该接口进行初始化,非预期的值可能导致计算结果出现精度错误。112- 在实际运行中,这些值可能被前序执行的算子修改,若不调用该接口进行初始化,非预期的值可能导致计算结果出现精度错误。
113 113 
114 例如前序算子使用Counter模式但未重置为Normal模式,当前算子以默认的Normal模式设置Mask时,会导致Mask设置不符合预期,进而引发精度错误。114 例如前序算子使用Counter模式但未重置为Normal模式,当前算子以默认的Normal模式设置Mask时,会导致Mask设置不符合预期,进而引发精度错误。
115-- 在[TPipe框架编程](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md)中,初始化过程由TPipe完成,无需开发者关注;在[静态Tensor编程](../../../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)的场景中,用户必须在Kernel入口处调用此函数来初始化AI Core状态。115+- 在[TPipe框架编程](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md)中,初始化过程由TPipe完成,无需开发者关注;在[静态Tensor编程](../../../../../guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)的场景中,用户必须在Kernel入口处调用此函数来初始化AI Core状态。
116 116 
117## 调用示例117## 调用示例
118 118 
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetSubBlockIdx_ISASI.md+2-2
@@ -34,9 +34,9 @@
34 34 
35头文件路径为: `"basic_api/kernel_operator_sys_var_intf.h"`35头文件路径为: `"basic_api/kernel_operator_sys_var_intf.h"`
36 36 
37-在[分离模式架构](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md)下,获取逻辑AI Core上Cube Core(AIC)或者Vector Core(AIV)的逻辑索引。37+在[分离模式架构](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)下,获取逻辑AI Core上Cube Core(AIC)或者Vector Core(AIV)的逻辑索引。
38 38 
39-GetSubBlockIdx在使用`__mix__(1, 2)`作为[函数执行空间限定符](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)的场景下,可以用于区分同一个核上的两个不同Vector Core,取值分别为0和1。39+GetSubBlockIdx在使用`__mix__(1, 2)`作为[函数执行空间限定符](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#section1074418132518)的场景下,可以用于区分同一个核上的两个不同Vector Core,取值分别为0和1。
40 40 
41## 函数原型41## 函数原型
42 42 
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetSubBlockNum_ISASI.md+2-2
@@ -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-在[分离模式架构](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md)下,获取当前配置中,一个逻辑AI Core上Cube Core(AIC)或者Vector Core(AIV)的数量。37+在[分离模式架构](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)下,获取当前配置中,一个逻辑AI Core上Cube Core(AIC)或者Vector Core(AIV)的数量。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -48,7 +48,7 @@ __aicore__ inline int64_t GetSubBlockNum()
48 48 
49## 返回值说明49## 返回值说明
50 50 
51-在融合编译场景下,不同[算子类型](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)在AIC和AIV上调用该接口的返回值如下:51+在融合编译场景下,不同[算子类型](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#section1074418132518)在AIC和AIV上调用该接口的返回值如下:
52 52 
53**表1** 融合编译场景返回值列表53**表1** 融合编译场景返回值列表
54 54 
Mdocs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetTaskRatio.md+4-4
@@ -34,12 +34,12 @@
34 34 
35头文件路径为:`"basic_api/kernel_operator_sys_var_intf.h"`35头文件路径为:`"basic_api/kernel_operator_sys_var_intf.h"`
36 36 
37-[分离模式](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md)下,获取任务启动的Cube Core(AIC)或者Vector Core(AIV)的数量与逻辑AI Core数量的比例。37+[分离模式](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)下,获取任务启动的Cube Core(AIC)或者Vector Core(AIV)的数量与逻辑AI Core数量的比例。
38 38 
39- 在AIC上调用时返回AIC数量与逻辑AI Core数量的比例。39- 在AIC上调用时返回AIC数量与逻辑AI Core数量的比例。
40- 在AIV上调用时返回AIV数量与逻辑AI Core数量的比例。40- 在AIV上调用时返回AIV数量与逻辑AI Core数量的比例。
41 41 
42-[耦合模式](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md)下,固定返回1。42+[耦合模式](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)下,固定返回1。
43 43 
44## 函数原型44## 函数原型
45 45 
@@ -53,7 +53,7 @@ __aicore__ inline int64_t GetTaskRatio()
53 53 
54## 返回值说明54## 返回值说明
55 55 
56-- 针对[分离模式](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md),不同Kernel类型下(通过[设置Kernel类型](../../Kernel-Tiling/set_Kernel_type.md)接口设置),在AIC和AIV上调用该接口的返回值如下:56+- 针对[分离模式](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md),不同Kernel类型下(通过[设置Kernel类型](../../Kernel-Tiling/set_Kernel_type.md)接口设置),在AIC和AIV上调用该接口的返回值如下:
57 57 
58 **表1** 返回值列表58 **表1** 返回值列表
59 59 
@@ -62,7 +62,7 @@ __aicore__ inline int64_t GetTaskRatio()
62 | AIV | 1 | - | 2 | 1 | - | 1 |62 | AIV | 1 | - | 2 | 1 | - | 1 |
63 | AIC | - | 1 | 1 | 1 | 1 | - |63 | AIC | - | 1 | 1 | 1 | 1 | - |
64 64 
65-- 针对[耦合模式](../../../../../guide/编程指南/高级编程/硬件实现/基本架构.md),固定返回1。65+- 针对[耦合模式](../../../../../guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md),固定返回1。
66 66 
67## 约束说明67## 约束说明
68 68 
Mdocs/zh/api/SIMD-API/c_api/README.md+1-1
@@ -6,7 +6,7 @@ C API开放芯片完备编程能力,支持[以数组形式分配内存](genera
6 6 
7C API是Ascend C三层梯度化编程接口中的**语言扩展层SIMD API**,定位为最底层的C语言接口,基于指针编程,提供完备的C语言编程能力。C API可直接映射NPU硬件指令,开发者自主管理内存搬运与同步(与TPipe/TQue自动管理内存、同步不同),开放全部底层硬件能力。适配C语言开发习惯,适合对性能和可控性要求较高的算子开发场景,是追求极致性能、充分释放NPU硬件潜能的核心路径。7C API是Ascend C三层梯度化编程接口中的**语言扩展层SIMD API**,定位为最底层的C语言接口,基于指针编程,提供完备的C语言编程能力。C API可直接映射NPU硬件指令,开发者自主管理内存搬运与同步(与TPipe/TQue自动管理内存、同步不同),开放全部底层硬件能力。适配C语言开发习惯,适合对性能和可控性要求较高的算子开发场景,是追求极致性能、充分释放NPU硬件潜能的核心路径。
8 8 
9-详细内容请参考[C语言编程概述](../../../guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.md)。9+详细内容请参考[C语言编程概述](../../../guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md)。
10 10 
11## 需要包含的头文件11## 需要包含的头文件
12 12 
Mdocs/zh/api/SIMD-API/c_api/cube_compute/asc_enable_hf32.md+5-5
@@ -31,7 +31,7 @@
31是否开启HF32对Mmad计算理论性能的影响见下表:31是否开启HF32对Mmad计算理论性能的影响见下表:
32 32 
33<!-- npu="A3,910b" id8 -->33<!-- npu="A3,910b" id8 -->
34-**表1** HF32对Mmad计算理论性能的影响([NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123815311"></a>34+**表1** HF32对Mmad计算理论性能的影响([NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123815311"></a>
35 35 
36| 接口 | 左矩阵A | 右矩阵B | $cube_m$ | $cube_n$ | $cube_k$ | $k_0$ |36| 接口 | 左矩阵A | 右矩阵B | $cube_m$ | $cube_n$ | $cube_k$ | $k_0$ |
37| --- | --- | --- | --- | --- | --- | --- |37| --- | --- | --- | --- | --- | --- | --- |
@@ -40,7 +40,7 @@
40<!-- end id8 -->40<!-- end id8 -->
41 41 
42<!-- npu="950" id9 -->42<!-- npu="950" id9 -->
43-**表2** HF32对Mmad计算理论性能的影响([NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123815915"></a>43+**表2** HF32对Mmad计算理论性能的影响([NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123815915"></a>
44 44 
45| 接口 | 左矩阵A | 右矩阵B | $cube_m$ | $cube_n$ | $cube_k$ | $k_0$ |45| 接口 | 左矩阵A | 右矩阵B | $cube_m$ | $cube_n$ | $cube_k$ | $k_0$ |
46| --- | --- | --- | --- | --- | --- | --- |46| --- | --- | --- | --- | --- | --- | --- |
@@ -74,13 +74,13 @@ $$
74FP32与HF32格式的精度对比如下图所示:74FP32与HF32格式的精度对比如下图所示:
75 75 
76<!-- npu="A3,910b" id10 -->76<!-- npu="A3,910b" id10 -->
77-**图1** FP32与HF32格式精度示意图([NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh_cn_topic_hf32_figure1"></a>77+**图1** FP32与HF32格式精度示意图([NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh_cn_topic_hf32_figure1"></a>
78 78 
79![FP32与HF32格式精度示意图(NPU架构版本2201)](../../../figures/mmad_hf32.png "FP32与HF32格式精度示意图(NPU架构版本2201)")79![FP32与HF32格式精度示意图(NPU架构版本2201)](../../../figures/mmad_hf32.png "FP32与HF32格式精度示意图(NPU架构版本2201)")
80<!-- end id10 -->80<!-- end id10 -->
81 81 
82<!-- npu="950" id11 -->82<!-- npu="950" id11 -->
83-**图2** FP32与HF32格式精度示意图([NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="zh_cn_topic_hf32_figure2"></a>83+**图2** FP32与HF32格式精度示意图([NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="zh_cn_topic_hf32_figure2"></a>
84 84 
85![FP32与HF32格式精度示意图(NPU架构版本3510)](../../../figures/mmad_hf32_950.png "FP32与HF32格式精度示意图(NPU架构版本3510)")85![FP32与HF32格式精度示意图(NPU架构版本3510)](../../../figures/mmad_hf32_950.png "FP32与HF32格式精度示意图(NPU架构版本3510)")
86<!-- end id11 -->86<!-- end id11 -->
@@ -113,7 +113,7 @@ PIPE_S
113<!-- npu="950" id12 -->113<!-- npu="950" id12 -->
114## 调用示例114## 调用示例
115 115 
116-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。116+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
117 117 
118以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:118以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
119 119 
Mdocs/zh/api/SIMD-API/c_api/cube_compute/asc_mmad.md+9-9
@@ -35,7 +35,7 @@ $$
35其中,A、B、C分别为左、右、结果矩阵,C矩阵可以通过配置本接口的参数,初始化为全0矩阵、L0C Buffer中的矩阵或Bias矩阵,各矩阵的信息说明见下表:35其中,A、B、C分别为左、右、结果矩阵,C矩阵可以通过配置本接口的参数,初始化为全0矩阵、L0C Buffer中的矩阵或Bias矩阵,各矩阵的信息说明见下表:
36 36 
37<!-- npu="950" id8 -->37<!-- npu="950" id8 -->
38-**表** 矩阵信息说明([NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))38+**表** 矩阵信息说明([NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
39 39 
40| 矩阵 | 存储位置 | 形状(行数×列数) | 数据格式 | 分形大小(行数×列数) |40| 矩阵 | 存储位置 | 形状(行数×列数) | 数据格式 | 分形大小(行数×列数) |
41| --- | --- | --- | --- | --- |41| --- | --- | --- | --- | --- |
@@ -48,7 +48,7 @@ $$
48<!-- end id8 -->48<!-- end id8 -->
49 49 
50<!-- npu="A3,910b" id9 -->50<!-- npu="A3,910b" id9 -->
51-**表** 矩阵信息说明([NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))51+**表** 矩阵信息说明([NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
52 52 
53| 矩阵 | 存储位置 | 形状 | 数据格式 | 分形大小 |53| 矩阵 | 存储位置 | 形状 | 数据格式 | 分形大小 |
54| --- | --- | --- | --- | --- |54| --- | --- | --- | --- | --- |
@@ -65,7 +65,7 @@ $$
65## 函数原型65## 函数原型
66 66 
67<!-- npu="950" id12 -->67<!-- npu="950" id12 -->
68-### 函数原型([NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))68+### 函数原型([NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
69 69 
70**占位符形式:**70**占位符形式:**
71 71 
@@ -86,7 +86,7 @@ __aicore__ inline void asc_mmad(__cc__ <c_dtype>* c_matrix,
86 86 
87`c_dtype``a_dtype``b_dtype`的取值组合见下表:87`c_dtype``a_dtype``b_dtype`的取值组合见下表:
88 88 
89-**表** 支持的数据类型组合([NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="asc_mmad_data_type"></a>89+**表** 支持的数据类型组合([NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="asc_mmad_data_type"></a>
90 90 
91| a_dtype | b_dtype | c_dtype | Bias数据类型 |91| a_dtype | b_dtype | c_dtype | Bias数据类型 |
92| --- | --- | --- | --- |92| --- | --- | --- | --- |
@@ -117,7 +117,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
117<!-- end id12 -->117<!-- end id12 -->
118 118 
119<!-- npu="A3,910b" id13 -->119<!-- npu="A3,910b" id13 -->
120-### 函数原型([NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))120+### 函数原型([NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
121 121 
122**占位符形式:**122**占位符形式:**
123 123 
@@ -130,7 +130,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
130 130 
131 `c_dtype``a_dtype``b_dtype`的取值组合见下表:131 `c_dtype``a_dtype``b_dtype`的取值组合见下表:
132 132 
133- **表** 支持的数据类型组合([NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))133+ **表** 支持的数据类型组合([NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
134 134 
135 | a_dtype | b_dtype | c_dtype | Bias数据类型 |135 | a_dtype | b_dtype | c_dtype | Bias数据类型 |
136 | --- | --- | --- | --- |136 | --- | --- | --- | --- |
@@ -150,7 +150,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
150## 参数说明150## 参数说明
151 151 
152<!-- npu="950" id14 -->152<!-- npu="950" id14 -->
153-**表** 参数说明([NPU架构版本3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="asc_mmad_param_table"></a>153+**表** 参数说明([NPU架构版本3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="asc_mmad_param_table"></a>
154 154 
155| 参数名 | 输入/输出 | 描述 |155| 参数名 | 输入/输出 | 描述 |
156| --- | --- | --- |156| --- | --- | --- |
@@ -167,7 +167,7 @@ __aicore__ inline void asc_mmad(__cc__ float* c_matrix,
167<!-- end id14 -->167<!-- end id14 -->
168 168 
169<!-- npu="A3,910b" id15 -->169<!-- npu="A3,910b" id15 -->
170-**表** 参数说明([NPU架构版本2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))170+**表** 参数说明([NPU架构版本2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md))
171 171 
172| 参数名 | 输入/输出 | 描述 |172| 参数名 | 输入/输出 | 描述 |
173| --- | --- | --- |173| --- | --- | --- |
@@ -243,7 +243,7 @@ PIPE_M
243<!-- npu="950" id18 -->243<!-- npu="950" id18 -->
244## 调用示例244## 调用示例
245 245 
246-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。246+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
247 247 
248以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:248以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
249 249 
Mdocs/zh/api/SIMD-API/c_api/cube_compute/asc_mmad_mx.md+1-1
@@ -163,7 +163,7 @@ PIPE_M
163<!-- npu="950" id8 -->163<!-- npu="950" id8 -->
164## 调用示例164## 调用示例
165 165 
166-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。166+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
167 167 
168以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:168以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
169 169 
Mdocs/zh/api/SIMD-API/c_api/cube_compute/asc_set_fp32_mode.md+1-1
@@ -54,7 +54,7 @@ PIPE_S
54<!-- npu="950" id8 -->54<!-- npu="950" id8 -->
55## 调用示例55## 调用示例
56 56 
57-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。57+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
58 58 
59以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:59以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
60 60 
Mdocs/zh/api/SIMD-API/c_api/cube_compute/asc_set_mmad_direction_m.md+1-1
@@ -60,7 +60,7 @@ PIPE_S
60<!-- npu="950" id8 -->60<!-- npu="950" id8 -->
61## 调用示例61## 调用示例
62 62 
63-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。63+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
64 64 
65以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:65以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
66 66 
Mdocs/zh/api/SIMD-API/c_api/cube_compute/asc_set_mmad_direction_n.md+1-1
@@ -59,7 +59,7 @@ PIPE_S
59<!-- npu="950" id8 -->59<!-- npu="950" id8 -->
60## 调用示例60## 调用示例
61 61 
62-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。62+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
63 63 
64以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:64以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
65 65 
Mdocs/zh/api/SIMD-API/c_api/general_description_and_constraints.md+2-2
@@ -15,7 +15,7 @@ AI Core内外包含多级存储单元,各存储单元的主要用途如下:
15<!-- npu="950" id1 -->15<!-- npu="950" id1 -->
16**针对Ascend 950PR/Ascend 950DT:**16**针对Ascend 950PR/Ascend 950DT:**
17 17 
18-各存储单元的空间大小和对齐要求请参见[存储单元规格](../../../guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md#section6500173264510)。如果具体C API中已明确操作数起始地址的对齐要求,则以具体C API中的说明为准。18+各存储单元的空间大小和对齐要求请参见[存储单元规格](../../../guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md#section6500173264510)。如果具体C API中已明确操作数起始地址的对齐要求,则以具体C API中的说明为准。
19 19 
20> [!NOTE]说明20> [!NOTE]说明
21>21>
@@ -30,7 +30,7 @@ AI Core内外包含多级存储单元,各存储单元的主要用途如下:
30<!-- npu="910b" id4 -->30<!-- npu="910b" id4 -->
31- Atlas A2 训练系列产品/Atlas A2 推理系列产品31- Atlas A2 训练系列产品/Atlas A2 推理系列产品
32<!-- end id4 -->32<!-- end id4 -->
33-各存储单元的空间大小和对齐要求请参见[存储单元规格](../../../guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本2201.md#section6500173264510)。如果具体C API中已明确操作数起始地址的对齐要求,则以具体C API中的说明为准。33+各存储单元的空间大小和对齐要求请参见[存储单元规格](../../../guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2201.md#section6500173264510)。如果具体C API中已明确操作数起始地址的对齐要求,则以具体C API中的说明为准。
34 34 
35> [!NOTE]说明35> [!NOTE]说明
36>36>
Mdocs/zh/api/SIMD-API/c_api/misc/asc_init.md+1-1
@@ -92,7 +92,7 @@ __aicore__ inline void asc_init()
92 92 
93## 调用示例93## 调用示例
94 94 
95-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。95+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
96 96 
97<!-- npu="950" id11 -->97<!-- npu="950" id11 -->
98以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:98以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/arithmetic_compute/asc_mul.md+1-1
@@ -81,7 +81,7 @@ __simd_callee__ inline void asc_mul(vector_half& dst,
81 81 
82## 调用示例82## 调用示例
83 83 
84-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。84+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
85 85 
86<!-- npu="950" id8 -->86<!-- npu="950" id8 -->
87以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:87以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/compare_and_select/asc_eq.md+1-1
@@ -86,7 +86,7 @@ __simd_callee__ inline void asc_eq(vector_bool& dst,
86 86 
87## 调用示例87## 调用示例
88 88 
89-将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。89+将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
90 90 
91<!-- npu="950" id8 -->91<!-- npu="950" id8 -->
92以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:92以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/compare_and_select/asc_select.md+1-1
@@ -84,7 +84,7 @@ __simd_callee__ inline void asc_select(vector_half& dst,
84 84 
85## 调用示例85## 调用示例
86 86 
87-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。87+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
88 88 
89<!-- npu="950" id8 -->89<!-- npu="950" id8 -->
90以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:90以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_rearrange/asc_deintlv.md+1-1
@@ -117,7 +117,7 @@ __simd_callee__ inline void asc_deintlv_b32(vector_bool& dst0,
117 117 
118## 调用示例118## 调用示例
119 119 
120-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。120+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
121 121 
122<!-- npu="950" id10 -->122<!-- npu="950" id10 -->
123以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:123以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_type_convert/asc_float2bfloat16.md+1-1
@@ -100,7 +100,7 @@ __simd_callee__ inline void asc_float2bfloat16_rn(vector_bfloat16_t& dst,
100 100 
101## 调用示例101## 调用示例
102 102 
103-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。103+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
104 104 
105<!-- npu="950" id8 -->105<!-- npu="950" id8 -->
106以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:106以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_type_convert/asc_int322float.md+1-1
@@ -86,7 +86,7 @@ __simd_callee__ inline void asc_int322float_rn(vector_float& dst,
86 86 
87## 调用示例87## 调用示例
88 88 
89-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。89+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
90 90 
91<!-- npu="950" id8 -->91<!-- npu="950" id8 -->
92以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:92以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_type_convert/asc_int322int16.md+1-1
@@ -96,7 +96,7 @@ __simd_callee__ inline void asc_int322int16(vector_int16_t& dst,
96 96 
97## 调用示例97## 调用示例
98 98 
99-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。99+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
100 100 
101<!-- npu="950" id8 -->101<!-- npu="950" id8 -->
102以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:102以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_type_convert/asc_int322int64.md+1-1
@@ -91,7 +91,7 @@ __simd_callee__ inline void asc_int322int64(vector_int64_t& dst,
91 91 
92## 调用示例92## 调用示例
93 93 
94-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。94+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
95 95 
96<!-- npu="950" id8 -->96<!-- npu="950" id8 -->
97以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:97以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_type_convert/asc_int322uint16.md+1-1
@@ -96,7 +96,7 @@ __simd_callee__ inline void asc_int322uint16(vector_uint16_t& dst,
96 96 
97## 调用示例97## 调用示例
98 98 
99-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。99+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
100 100 
101<!-- npu="950" id8 -->101<!-- npu="950" id8 -->
102以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:102以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/data_type_convert/asc_uint82uint16.md+1-1
@@ -92,7 +92,7 @@ __simd_callee__ inline void asc_uint82uint16(vector_uint16_t& dst,
92 92 
93## 调用示例93## 调用示例
94 94 
95-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。95+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
96 96 
97<!-- npu="950" id8 -->97<!-- npu="950" id8 -->
98以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:98以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/index_operate/asc_arange.md+1-1
@@ -109,7 +109,7 @@ __simd_callee__ inline void asc_arange_descend(vector_half& dst,
109 109 
110## 调用示例110## 调用示例
111 111 
112-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。112+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
113 113 
114<!-- npu="950" id8 -->114<!-- npu="950" id8 -->
115以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:115以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/logic_compute/asc_and.md+1-1
@@ -101,7 +101,7 @@ __simd_callee__ inline void asc_and(vector_bool& dst,
101 101 
102## 调用示例102## 调用示例
103 103 
104-将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。104+将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
105 105 
106<!-- npu="950" id8 -->106<!-- npu="950" id8 -->
107以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:107以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/logic_compute/asc_or.md+1-1
@@ -101,7 +101,7 @@ __simd_callee__ inline void asc_or(vector_bool& dst,
101 101 
102## 调用示例102## 调用示例
103 103 
104-将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。104+将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
105 105 
106<!-- npu="950" id8 -->106<!-- npu="950" id8 -->
107以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:107以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reduce_compute/asc_reduce_sum.md+1-1
@@ -109,7 +109,7 @@ __simd_callee__ inline void asc_reduce_sum(vector_float& dst,
109 109 
110## 调用示例110## 调用示例
111 111 
112-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。112+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
113 113 
114<!-- npu="950" id8 -->114<!-- npu="950" id8 -->
115以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:115以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reduce_compute/asc_reduce_sum_datablock.md+1-1
@@ -115,7 +115,7 @@ __simd_callee__ inline void asc_reduce_sum_datablock(vector_half& dst,
115 115 
116## 调用示例116## 调用示例
117 117 
118-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。118+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[__NPU_ARCH__](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
119 119 
120<!-- npu="950" id8 -->120<!-- npu="950" id8 -->
121以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:121以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reg_data_types/asc_create_mask.md+1-1
@@ -67,7 +67,7 @@ vector_bool,掩码寄存器。
67 67 
68## 调用示例68## 调用示例
69 69 
70-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。70+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
71 71 
72<!-- npu="950" id10 -->72<!-- npu="950" id10 -->
73以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:73以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reg_load/asc_loadalign.md+1-1
@@ -206,7 +206,7 @@ __simd_callee__ inline void asc_loadalign(vector_float& dst,
206 206 
207## 调用示例207## 调用示例
208 208 
209-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。209+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
210 210 
211<!-- npu="950" id8 -->211<!-- npu="950" id8 -->
212以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:212以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reg_load/asc_loadalign_postupdate.md+1-1
@@ -132,7 +132,7 @@ __simd_callee__ inline void asc_loadalign_postupdate(vector_float& dst,
132 132 
133## 调用示例133## 调用示例
134 134 
135-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。135+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
136 136 
137<!-- npu="950" id8 -->137<!-- npu="950" id8 -->
138以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:138以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reg_store/asc_storealign.md+1-1
@@ -294,7 +294,7 @@ __simd_callee__ inline void asc_storealign(__ubuf__ uint8_t* dst,
294 294 
295## 调用示例295## 调用示例
296 296 
297-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。297+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
298 298 
299<!-- npu="950" id8 -->299<!-- npu="950" id8 -->
300以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:300以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/reg/reg_store/asc_storealign_postupdate.md+1-1
@@ -170,7 +170,7 @@ __simd_callee__ inline void asc_storealign_postupdate(__ubuf__ uint8_t*& dst,
170 170 
171## 调用示例171## 调用示例
172 172 
173-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。173+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
174 174 
175<!-- npu="950" id8 -->175<!-- npu="950" id8 -->
176以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:176以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/scalar_compute/asc_store_dev.md+2-2
@@ -64,11 +64,11 @@ __aicore__ inline void asc_store_dev(__gm__ uint32_t* addr,
64- `addr`起始地址须按写入dtype字节数对齐。64- `addr`起始地址须按写入dtype字节数对齐。
65- `addr`须落在GM可访问地址空间内。65- `addr`须落在GM可访问地址空间内。
66- 本接口运行在标量流水上,与后续依赖该写入结果的指令之间存在标量数据依赖;如后续有读取同一GM地址的指令,须通过同步指令建立依赖顺序,标量流水本身的顺序执行不保证跨指令访存可见性。66- 本接口运行在标量流水上,与后续依赖该写入结果的指令之间存在标量数据依赖;如后续有读取同一GM地址的指令,须通过同步指令建立依赖顺序,标量流水本身的顺序执行不保证跨指令访存可见性。
67-- 本接口访问GM时绕过DCache,不维护缓存一致性。若其他核或其他通路通过缓存访问同一GM地址,调用方需使用[asc_dcci](../cache_ctrl/asc_dcci.md)清理或失效对应Cache Line,并使用[asc_sync_data_barrier](../sync/asc_sync_data_barrier.md)保证相关访存操作的执行顺序和数据可见性。详情可参考[Scalar原子操作与DCache一致性](../../../../guide/编程指南/高级编程/内存模型/缓存一致性.md#scalar原子操作与dcache一致性)。67+- 本接口访问GM时绕过DCache,不维护缓存一致性。若其他核或其他通路通过缓存访问同一GM地址,调用方需使用[asc_dcci](../cache_ctrl/asc_dcci.md)清理或失效对应Cache Line,并使用[asc_sync_data_barrier](../sync/asc_sync_data_barrier.md)保证相关访存操作的执行顺序和数据可见性。详情可参考[Scalar原子操作与DCache一致性](../../../../guide/programming_guide/advanced_programming/memory_model/cache_coherence.md#scalar原子操作与dcache一致性)。
68 68 
69## 调用示例69## 调用示例
70 70 
71-将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。71+将代码保存为example.asc后,可通过bisheng命令编译运行,其中--npu-arch参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
72 72 
73<!-- npu="950" id8 -->73<!-- npu="950" id8 -->
74以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:74以Ascend 950PR/Ascend 950DT产品(对应NPU架构为dav-3510)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/simd_atomic/asc_set_atomic_add.md+1-1
@@ -89,7 +89,7 @@ PIPE_S
89 89 
90## 调用示例90## 调用示例
91 91 
92-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。92+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
93 93 
94<!-- npu="950" id10 -->94<!-- npu="950" id10 -->
95以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:95以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/sync/asc_sync_notify.md+1-1
@@ -86,7 +86,7 @@ PIPE_S
86 86 
87## 调用示例87## 调用示例
88 88 
89-将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。89+将代码保存为`examples.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
90 90 
91<!-- npu="950" id8 -->91<!-- npu="950" id8 -->
92以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:92以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/sync/intra_core_sync_overview.md+4-4
@@ -6,7 +6,7 @@ AI Core内部的执行单元(如MTE2搬运单元、Vector计算单元等)以
6 6 
7<!-- npu="950" id2 -->7<!-- npu="950" id2 -->
8 8 
9-针对[NPU架构3510](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。9+针对[NPU架构3510](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。
10 10 
11**图1** NPU架构3510架构图 11**图1** NPU架构3510架构图
12![](../../../figures/ascend_950pr_950dt_architecture.png "Ascend_950PR_950DT_硬件架构图")12![](../../../figures/ascend_950pr_950dt_architecture.png "Ascend_950PR_950DT_硬件架构图")
@@ -15,7 +15,7 @@ AI Core内部的执行单元(如MTE2搬运单元、Vector计算单元等)以
15 15 
16<!-- npu="A3,910b" id1 -->16<!-- npu="A3,910b" id1 -->
17 17 
18-针对[NPU架构2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。18+针对[NPU架构2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),硬件架构图如下,高亮部分展示了并行执行的计算单元和搬运单元。
19 19 
20**图2** NPU架构2201架构图 20**图2** NPU架构2201架构图
21![](../../../figures/atlas_a2_a3_architecture.png)21![](../../../figures/atlas_a2_a3_architecture.png)
@@ -41,7 +41,7 @@ AI Core内部的执行单元(如MTE2搬运单元、Vector计算单元等)以
41AI Core内部并行的指令流水类型和解释如下所示:41AI Core内部并行的指令流水类型和解释如下所示:
42 42 
43> [!NOTE]说明43> [!NOTE]说明
44->不同的硬件架构,每一种硬件流水类型包含的具体流水会有所差异,详细介绍请参考[硬件实现](../../../../guide/编程指南/高级编程/硬件实现/硬件实现.md)章节。44+>不同的硬件架构,每一种硬件流水类型包含的具体流水会有所差异,详细介绍请参考[硬件实现](../../../../guide/programming_guide/advanced_programming/hardware_implementation/hardware_implementation.md)章节。
45 45 
46**表1** 指令流水类型和相关说明46**表1** 指令流水类型和相关说明
47 47 
@@ -75,7 +75,7 @@ AI Core内部并行的指令流水类型和解释如下所示:
75- 通过[asc_sync_data_barrier](asc_sync_data_barrier.md)接口阻塞后续指令的执行,直到此前已发出但尚未完成的内存访问指令全部执行完成。开发者通过`arg`参数指定屏障作用的内存范围,确保屏障前后的内存访问指令按预期顺序完成。75- 通过[asc_sync_data_barrier](asc_sync_data_barrier.md)接口阻塞后续指令的执行,直到此前已发出但尚未完成的内存访问指令全部执行完成。开发者通过`arg`参数指定屏障作用的内存范围,确保屏障前后的内存访问指令按预期顺序完成。
76 76 
77<!-- npu="A3,910b" id4 -->77<!-- npu="A3,910b" id4 -->
78-以[NPU架构2201](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)为例,该硬件架构下所有合法的核内同步组合如[表2](#aic_intra_core_sync_combinations)和[表3](#aiv_intra_core_sync_combinations)所示。其中,“不涉及”表示硬件层面不存在此种同步组合,“暂无应用场景”表示存在此种同步组合,但在实际开发场景中暂不需要使用。78+以[NPU架构2201](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)为例,该硬件架构下所有合法的核内同步组合如[表2](#aic_intra_core_sync_combinations)和[表3](#aiv_intra_core_sync_combinations)所示。其中,“不涉及”表示硬件层面不存在此种同步组合,“暂无应用场景”表示存在此种同步组合,但在实际开发场景中暂不需要使用。
79 79 
80<a name="aic_intra_core_sync_combinations"></a>80<a name="aic_intra_core_sync_combinations"></a>
81 81 
Mdocs/zh/api/SIMD-API/c_api/sys_var/asc_get_block_idx.md+1-1
@@ -28,7 +28,7 @@
28 28 
29获取当前运行核的索引。29获取当前运行核的索引。
30 30 
31-**此接口后续版本会废弃,请使用内置变量[block_idx](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#内置变量)。**31+**此接口后续版本会废弃,请使用内置变量[block_idx](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#内置变量)。**
32 32 
33## 函数原型33## 函数原型
34 34 
Mdocs/zh/api/SIMD-API/c_api/sys_var/asc_get_block_num.md+1-1
@@ -28,7 +28,7 @@
28 28 
29获取当前任务配置的核数,用于代码内部的多核逻辑控制等。29获取当前任务配置的核数,用于代码内部的多核逻辑控制等。
30 30 
31-**此接口后续版本会废弃,请使用内置变量[block_num](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#内置变量)。**31+**此接口后续版本会废弃,请使用内置变量[block_num](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#内置变量)。**
32 32 
33## 函数原型33## 函数原型
34 34 
Mdocs/zh/api/SIMD-API/c_api/sys_var/asc_get_system_cycle.md+1-1
@@ -66,7 +66,7 @@ PIPE_S
66 66 
67## 调用示例67## 调用示例
68 68 
69-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。69+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
70 70 
71<!-- npu="950" id11 -->71<!-- npu="950" id11 -->
72以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:72以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMD-API/c_api/vector_data_move/asc_copy_gm2ub_align/asc_copy_gm2ub_align_arch_3510.md+1-1
@@ -169,7 +169,7 @@ PIPE_MTE2
169 169 
170## 调用示例170## 调用示例
171 171 
172-将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。172+将代码保存为`example.asc`后,可通过`bisheng`命令编译运行,其中`--npu-arch`参数需根据实际产品型号指定对应的NPU架构,具体产品与NPU架构的映射关系请参考[\_\_NPU\_ARCH\_\_](../../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
173 173 
174<!-- npu="950" id8 -->174<!-- npu="950" id8 -->
175以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:175以Ascend 950PR/Ascend 950DT产品(对应NPU架构为`dav-3510`)为例,编译运行命令如下:
Mdocs/zh/api/SIMT-API/SIMT_programming_intro/extended_syntax/kernel_function_config.md+2-2
@@ -46,11 +46,11 @@ __global__ void kernel_name(uint32_t* param1, float* param2, ...);
46<<<blocks_per_grid, threads_per_block, dyn_ubuf_size, stream>>>46<<<blocks_per_grid, threads_per_block, dyn_ubuf_size, stream>>>
47```47```
48 48 
49-执行配置由4个参数决定,详细用法说明参考[核函数配置](../../../../guide/编程指南/语言扩展层/SIMT-BuiltIn关键字.md#核函数配置):49+执行配置由4个参数决定,详细用法说明参考[核函数配置](../../../../guide/programming_guide/language_extension/simt_builtin_keywords.md#核函数配置):
50 50 
51- blocks\_per\_grid:[dim3](./builtin_data_types.md#dim3)类型,用于指定网格(grid)的维度与规模,blocks\_per\_grid.x \* blocks\_per\_grid.y \* blocks\_per\_grid.z等于启动的线程块总数,且不能超过65535。51- blocks\_per\_grid:[dim3](./builtin_data_types.md#dim3)类型,用于指定网格(grid)的维度与规模,blocks\_per\_grid.x \* blocks\_per\_grid.y \* blocks\_per\_grid.z等于启动的线程块总数,且不能超过65535。
52- threads\_per\_block:[dim3](./builtin_data_types.md#dim3)类型,用于指定每个线程块(block)的维度与规模,threads\_per\_block.x \* threads\_per\_block.y \* threads\_per\_block.z等于每个线程块包含的线程数,需要小于等于\_\_launch\_bounds\_\_配置。52- threads\_per\_block:[dim3](./builtin_data_types.md#dim3)类型,用于指定每个线程块(block)的维度与规模,threads\_per\_block.x \* threads\_per\_block.y \* threads\_per\_block.z等于每个线程块包含的线程数,需要小于等于\_\_launch\_bounds\_\_配置。
53-- dyn\_ubuf\_size:size\_t类型,用于指定每个线程块动态分配的共享内存大小,单位为字节。这部分内存供数组使用,具体用法请参考[共享内存](../../../../guide/编程指南/编程模型/AI-Core-SIMT编程/内存层级.md#共享内存)中的“动态申请”方式。53+- dyn\_ubuf\_size:size\_t类型,用于指定每个线程块动态分配的共享内存大小,单位为字节。这部分内存供数组使用,具体用法请参考[共享内存](../../../../guide/programming_guide/programming_model/ai_core_simt_programming/memory_hierarchy.md#共享内存)中的“动态申请”方式。
54- stream:aclrtStream类型指针,指定关联的流,用于维护异步操作的执行顺序。54- stream:aclrtStream类型指针,指定关联的流,用于维护异步操作的执行顺序。
55 55 
56以下示例展示了内核函数的声明与调用方式。56以下示例展示了内核函数的声明与调用方式。
Mdocs/zh/api/SIMT-API/cooperative_groups/grid_group/sync.md+1-1
@@ -45,7 +45,7 @@ void sync() const
45- 仅支持SIMT编程场景,不支持SIMD与SIMT混合编程场景。45- 仅支持SIMT编程场景,不支持SIMD与SIMT混合编程场景。
46- 必须保证Grid内所有线程都能执行到同一个`sync()`调用,否则是未定义行为。46- 必须保证Grid内所有线程都能执行到同一个`sync()`调用,否则是未定义行为。
47- 确保Grid中的线程块总数不超过设备的AIV物理核数,以避免程序卡死。开发者可以通过[《Runtime运行时API》](https://hiascend.com/document/redirect/CannCommunityRuntimeApi)中“Device管理”章节的aclrtGetDeviceInfo接口查询设备的AIV物理核数。47- 确保Grid中的线程块总数不超过设备的AIV物理核数,以避免程序卡死。开发者可以通过[《Runtime运行时API》](https://hiascend.com/document/redirect/CannCommunityRuntimeApi)中“Device管理”章节的aclrtGetDeviceInfo接口查询设备的AIV物理核数。
48-- `sync()`接口仅保证线程指令执行的同步,不保证各线程块的Data Cache和Global Memory间的[缓存一致性](../../../../guide/编程指南/高级编程/内存模型/缓存一致性.md)。48+- `sync()`接口仅保证线程指令执行的同步,不保证各线程块的Data Cache和Global Memory间的[缓存一致性](../../../../guide/programming_guide/advanced_programming/memory_model/cache_coherence.md)。
49 49 
50## 调用示例50## 调用示例
51 51 
Mdocs/zh/api/Utils-API/RTC/RTC_intro.md+1-1
@@ -1,6 +1,6 @@
1# RTC简介<a name="ZH-CN_TOPIC_0000002487578597"></a>1# RTC简介<a name="ZH-CN_TOPIC_0000002487578597"></a>
2 2 
3-RTC是Ascend C运行时编译库,通过aclrtc接口,在程序运行时,将中间代码动态编译成目标机器码,提升程序运行性能。开发指导请参考[RTC](../../../guide/编程指南/编译与运行/算子编译/RTC运行时编译.md)。3+RTC是Ascend C运行时编译库,通过aclrtc接口,在程序运行时,将中间代码动态编译成目标机器码,提升程序运行性能。开发指导请参考[RTC](../../../guide/programming_guide/compilation_and_execution/operator_compilation/rtc_runtime_compilation.md)。
4 4 
5使用aclrtc接口前需要包含如下头文件:5使用aclrtc接口前需要包含如下头文件:
6 6 
Mdocs/zh/api/Utils-API/SuperKernel/SK_BIND.md+3-3
@@ -32,7 +32,7 @@
32 32 
33## 功能说明<a name="section259105813316"></a>33## 功能说明<a name="section259105813316"></a>
34 34 
35-本接口为算子SuperKernel场景提供绑定原核函数和SK子函数的能力。核函数直调算子的完整适配方法请参见[核函数直调算子额外适配说明](../../../guide/编程指南/高级编程/SuperKernel/核函数直调算子额外适配说明.md)。35+本接口为算子SuperKernel场景提供绑定原核函数和SK子函数的能力。核函数直调算子的完整适配方法请参见[核函数直调算子额外适配说明](../../../guide/programming_guide/advanced_programming/super_kernel/kernel_direct_call_adaptation.md)。
36 36 
37## 函数原型<a name="section2067518173415"></a>37## 函数原型<a name="section2067518173415"></a>
38 38 
@@ -46,7 +46,7 @@
46| 参数名 | 输入/输出 | 描述 |46| 参数名 | 输入/输出 | 描述 |
47| --- | --- | --- |47| --- | --- | --- |
48| GF | 输入 | 核函数函数签名。 |48| GF | 输入 | 核函数函数签名。 |
49-| cap | 输入 | `uint64_t`类型,用于标记当前算子的SuperKernel特性。SuperKernel框架根据这些信息调整相应的同步和融合策略。各bit位可按位或组合:<br>&bull; 1:early start wait flag,表示算子内使用了[WaitPreTaskEnd](../../SIMD-API/basic_api/sync_control/inter_task_sync/WaitPreTaskEnd.md)接口。<br>&bull; 2:early start set flag,表示算子内使用了[SetNextTaskStart](../../SIMD-API/basic_api/sync_control/inter_task_sync/SetNextTaskStart.md)接口。<br>&bull; 4:disable_dcci,表示当前算子需要SuperKernel框架关闭调用前后的DCCI ALL指令。详细说明请参见[算子适配说明](../../../guide/编程指南/高级编程/SuperKernel/算子适配说明.md)。<br>&bull; 8:disable_batchmode_check,表示跳过当前算子的`__schedmode__`检查,使该算子可继续参与SuperKernel融合。<br>例如,同时配置early start wait flag和early start set flag时,cap取值为3。 |49+| cap | 输入 | `uint64_t`类型,用于标记当前算子的SuperKernel特性。SuperKernel框架根据这些信息调整相应的同步和融合策略。各bit位可按位或组合:<br>&bull; 1:early start wait flag,表示算子内使用了[WaitPreTaskEnd](../../SIMD-API/basic_api/sync_control/inter_task_sync/WaitPreTaskEnd.md)接口。<br>&bull; 2:early start set flag,表示算子内使用了[SetNextTaskStart](../../SIMD-API/basic_api/sync_control/inter_task_sync/SetNextTaskStart.md)接口。<br>&bull; 4:disable_dcci,表示当前算子需要SuperKernel框架关闭调用前后的DCCI ALL指令。详细说明请参见[算子适配说明](../../../guide/programming_guide/advanced_programming/super_kernel/operator_adaptation.md)。<br>&bull; 8:disable_batchmode_check,表示跳过当前算子的`__schedmode__`检查,使该算子可继续参与SuperKernel融合。<br>例如,同时配置early start wait flag和early start set flag时,cap取值为3。 |
50| SK0 | 输入 | SK子函数签名。 |50| SK0 | 输入 | SK子函数签名。 |
51| ... | 输入 | SK1~SK3。可提供多个SK子函数签名,包含SK0最多四个函数签名。 |51| ... | 输入 | SK1~SK3。可提供多个SK子函数签名,包含SK0最多四个函数签名。 |
52 52 
@@ -69,7 +69,7 @@
69 69 
70## 调用示例<a name="section990974612242"></a>70## 调用示例<a name="section990974612242"></a>
71 71 
72-以下示例展示SK_BIND接口的基本用法,SK子函数签名、参数结构体定义等完整规则请参见[核函数直调算子额外适配说明](../../../guide/编程指南/高级编程/SuperKernel/核函数直调算子额外适配说明.md)。72+以下示例展示SK_BIND接口的基本用法,SK子函数签名、参数结构体定义等完整规则请参见[核函数直调算子额外适配说明](../../../guide/programming_guide/advanced_programming/super_kernel/kernel_direct_call_adaptation.md)。
73 73 
74```cpp74```cpp
75#include "kernel_operator.h"75#include "kernel_operator.h"
Mdocs/zh/api/Utils-API/Tiling_sink/DEVICE_IMPL_OP_OPTILING.md+1-1
@@ -2,7 +2,7 @@
2 2 
3## 功能说明<a name="zh-cn_topic_0000001867289945_zh-cn_topic_0000001389787297_section36583473819"></a>3## 功能说明<a name="zh-cn_topic_0000001867289945_zh-cn_topic_0000001389787297_section36583473819"></a>
4 4 
5-在[Tiling下沉](../../../guide/编程指南/高级编程/算子入图开发/开启Tiling下沉.md)场景中,该宏定义用于生成Tiling下沉的注册类,再通过调用注册类的成员函数来注册需要下沉的Tiling函数。5+在[Tiling下沉](../../../guide/programming_guide/advanced_programming/operator_graph_development/enable_tiling_sink.md)场景中,该宏定义用于生成Tiling下沉的注册类,再通过调用注册类的成员函数来注册需要下沉的Tiling函数。
6 6 
7## 函数原型<a name="zh-cn_topic_0000001867289945_zh-cn_topic_0000001389787297_section13230182415108"></a>7## 函数原型<a name="zh-cn_topic_0000001867289945_zh-cn_topic_0000001389787297_section13230182415108"></a>
8 8 
Mdocs/zh/api/Utils-API/Tiling_tuning/OpTilingRegistry/LoadTilingLibrary.md+2-2
@@ -4,9 +4,9 @@
4 4 
5根据输入的路径,加载对应的Tiling动态库。开发者基于工程化算子开发开发方式完成算子实现后,可通过**算子包编译****算子动态库编译**获取对应的Tiling动态库文件。5根据输入的路径,加载对应的Tiling动态库。开发者基于工程化算子开发开发方式完成算子实现后,可通过**算子包编译****算子动态库编译**获取对应的Tiling动态库文件。
6 6 
7-- 算子包编译:Tiling实现对应的动态库为算子包部署目录下的liboptiling.so。具体路径可参考[算子包部署](../../../../guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#operator-package-deployment)。7+- 算子包编译:Tiling实现对应的动态库为算子包部署目录下的liboptiling.so。具体路径可参考[算子包部署](../../../../guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#operator-package-deployment)。
8 8 
9-- 动态库编译:Tiling实现集成在算子动态库libcust\_opapi.so中。具体路径可参考[算子动态库和静态库编译](../../../../guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/算子动态库和静态库编译.md)。9+- 动态库编译:Tiling实现集成在算子动态库libcust\_opapi.so中。具体路径可参考[算子动态库和静态库编译](../../../../guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/dynamic_static_lib_compilation.md)。
10 10 
11## 函数原型<a name="zh-cn_topic_0000002078486173_zh-cn_topic_0000001576727153_zh-cn_topic_0000001389787297_section13230182415108"></a>11## 函数原型<a name="zh-cn_topic_0000002078486173_zh-cn_topic_0000001576727153_zh-cn_topic_0000001389787297_section13230182415108"></a>
12 12 
Mdocs/zh/api/Utils-API/Tiling_tuning/OpTilingRegistry/intro.md+1-1
@@ -1,6 +1,6 @@
1# 简介<a name="ZH-CN_TOPIC_0000002333578885"></a>1# 简介<a name="ZH-CN_TOPIC_0000002333578885"></a>
2 2 
3-OpTilingRegistry类属于context\_ascendc命名空间,主要用于加载Tiling实现的动态库,并获取算子的Tiling函数指针以进行调试和验证。该类通常与[ContextBuilder](../ContextBuilder/ContextBuilder.md)类配合使用,后者用于构造Tiling函数所需的输入参数。具体用法可参考[如何进行Tiling调测](../../../../guide/编程指南/附录/常用操作/如何进行Tiling调测.md)。3+OpTilingRegistry类属于context\_ascendc命名空间,主要用于加载Tiling实现的动态库,并获取算子的Tiling函数指针以进行调试和验证。该类通常与[ContextBuilder](../ContextBuilder/ContextBuilder.md)类配合使用,后者用于构造Tiling函数所需的输入参数。具体用法可参考[如何进行Tiling调测](../../../../guide/programming_guide/appendix/common_operations/tiling_debug.md)。
4 4 
5## 所需的头文件和库文件<a name="section78885814919"></a>5## 所需的头文件和库文件<a name="section78885814919"></a>
6 6 
Mdocs/zh/api/Utils-API/prototype_register_management/OP_ADD.md+1-1
@@ -4,7 +4,7 @@
4 4 
5注册算子的原型定义,从而确保算子能够被框架正确识别、编译和执行。5注册算子的原型定义,从而确保算子能够被框架正确识别、编译和执行。
6 6 
7-算子原型主要描述了算子的输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联[tiling实现](../../../guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md)等函数。算子原型通过自定义的算子类来承载,该算子类继承自[OpDef类](OpDef/OpDef.md)。完成算子的原型定义等操作后,需要调用[OP\_ADD](OP_ADD.md)接口,传入算子类型(自定义算子类的类名),进行算子原型注册。详细内容请参考[算子原型定义](../../../guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子原型定义.md)。7+算子原型主要描述了算子的输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联[tiling实现](../../../guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md)等函数。算子原型通过自定义的算子类来承载,该算子类继承自[OpDef类](OpDef/OpDef.md)。完成算子的原型定义等操作后,需要调用[OP\_ADD](OP_ADD.md)接口,传入算子类型(自定义算子类的类名),进行算子原型注册。详细内容请参考[算子原型定义](../../../guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)。
8 8 
9## 函数原型<a name="zh-cn_topic_0000001600307121_zh-cn_topic_0000001576870453_zh-cn_topic_0000001525424352_section13230182415108"></a>9## 函数原型<a name="zh-cn_topic_0000001600307121_zh-cn_topic_0000001576870453_zh-cn_topic_0000001525424352_section13230182415108"></a>
10 10 
Mdocs/zh/api/Utils-API/prototype_register_management/OpAICoreConfig/Input.md+1-1
@@ -4,7 +4,7 @@
4 4 
5某些场景下,同一个算子在不同的AI处理器型号上,其支持的原型输入不同。5某些场景下,同一个算子在不同的AI处理器型号上,其支持的原型输入不同。
6 6 
7-通过该接口,可针对不同的AI处理器型号[注册差异化的算子原型](../../../../guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子原型定义.md)。调用该接口后会返回一个OpParamDef结构,后续可通过该结构配置算子输入信息。7+通过该接口,可针对不同的AI处理器型号[注册差异化的算子原型](../../../../guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)。调用该接口后会返回一个OpParamDef结构,后续可通过该结构配置算子输入信息。
8 8 
9## 函数原型<a name="zh-cn_topic_0000001712470512_zh-cn_topic_0000001526111046_zh-cn_topic_0000001525424352_section13230182415108"></a>9## 函数原型<a name="zh-cn_topic_0000001712470512_zh-cn_topic_0000001526111046_zh-cn_topic_0000001525424352_section13230182415108"></a>
10 10 
Mdocs/zh/api/Utils-API/prototype_register_management/OpDef/Comment.md+1-1
@@ -51,7 +51,7 @@ OpDef算子定义,OpDef请参考[OpDef](OpDef.md)。
51 51 
52当用户使用CATEGORY参数设置算子分组名称时,会对应生成同名的代码文件。若文件名过长在编译时可能超过tar的打包文件名称长度限制,导致报错。52当用户使用CATEGORY参数设置算子分组名称时,会对应生成同名的代码文件。若文件名过长在编译时可能超过tar的打包文件名称长度限制,导致报错。
53 53 
54-具体参考[算子工程编译时出现文件名过长报错](../../../../guide/编程指南/附录/FAQ/算子工程编译时出现文件名过长报错.md)。54+具体参考[算子工程编译时出现文件名过长报错](../../../../guide/programming_guide/appendix/faq/filename_too_long_error.md)。
55 55 
56## 调用示例<a name="zh-cn_topic_0000002091517061_zh-cn_topic_0000001526111046_zh-cn_topic_0000001575944081_section320753512363"></a>56## 调用示例<a name="zh-cn_topic_0000002091517061_zh-cn_topic_0000001526111046_zh-cn_topic_0000001575944081_section320753512363"></a>
57 57 
Mdocs/zh/api/Utils-API/prototype_register_management/OpParamDef/OutputShapeDependOnCompute.md+1-1
@@ -2,7 +2,7 @@
2 2 
3## 功能说明<a name="zh-cn_topic_0000002009944386_zh-cn_topic_0000001526594958_zh-cn_topic_0000001525424352_section36583473819"></a>3## 功能说明<a name="zh-cn_topic_0000002009944386_zh-cn_topic_0000001526594958_zh-cn_topic_0000001525424352_section36583473819"></a>
4 4 
5-标识算子输出的shape是否依赖于计算得到。某些算子,比如NonZero(统计tensor中非零值的个数),计算完成前无法得知算子输出的shape信息,算子计算完成后才能获取。该类算子在原型定义时,需要使用OutputShapeDependOnCompute接口进行标识,同时在算子核函数中将实际输出shape写入到出参中,便于框架侧基于该信息进行输出内存的管理。对应的kernel侧实现请参考[输出shape依赖计算的算子kernel实现](../../../../guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Kernel侧输出shape依赖计算.md)。5+标识算子输出的shape是否依赖于计算得到。某些算子,比如NonZero(统计tensor中非零值的个数),计算完成前无法得知算子输出的shape信息,算子计算完成后才能获取。该类算子在原型定义时,需要使用OutputShapeDependOnCompute接口进行标识,同时在算子核函数中将实际输出shape写入到出参中,便于框架侧基于该信息进行输出内存的管理。对应的kernel侧实现请参考[输出shape依赖计算的算子kernel实现](../../../../guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/kernel_output_shape_computation.md)。
6 6 
7## 函数原型<a name="zh-cn_topic_0000002009944386_zh-cn_topic_0000001526594958_zh-cn_topic_0000001525424352_section13230182415108"></a>7## 函数原型<a name="zh-cn_topic_0000002009944386_zh-cn_topic_0000001526594958_zh-cn_topic_0000001525424352_section13230182415108"></a>
8 8 
Mdocs/zh/api/Utils-API/prototype_register_management/REGISTER_OP_AICORE_CONFIG.md+1-1
@@ -2,7 +2,7 @@
2 2 
3## 功能说明<a name="zh-cn_topic_0000001600307121_zh-cn_topic_0000001576870453_zh-cn_topic_0000001525424352_section36583473819"></a>3## 功能说明<a name="zh-cn_topic_0000001600307121_zh-cn_topic_0000001576870453_zh-cn_topic_0000001525424352_section36583473819"></a>
4 4 
5-不同的硬件形态算子原型定义不同的情况,可以通过新增[OpAICoreConfig](OpAICoreConfig/OpAICoreConfig.md)的方式,针对不同的AI处理器型号[注册差异化的算子原型](../../../guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子原型定义.md)。REGISTER\_OP\_AICORE\_CONFIG宏在不改变原有注册的基础上,允许单独新增文件来注册算子在不同硬件形态上的差异化信息。5+不同的硬件形态算子原型定义不同的情况,可以通过新增[OpAICoreConfig](OpAICoreConfig/OpAICoreConfig.md)的方式,针对不同的AI处理器型号[注册差异化的算子原型](../../../guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)。REGISTER\_OP\_AICORE\_CONFIG宏在不改变原有注册的基础上,允许单独新增文件来注册算子在不同硬件形态上的差异化信息。
6 6 
7使用该注册宏需要包含以下头文件:7使用该注册宏需要包含以下头文件:
8 8 
Mdocs/zh/api/appendix/cube_instruction_theoretical_perf_summary.md+8-8
@@ -37,7 +37,7 @@ $$
37- $\Delta t$:头开销cycle数。37- $\Delta t$:头开销cycle数。
38 38 
39<!-- npu="A3,910b" id5 -->39<!-- npu="A3,910b" id5 -->
40-**表1** Mmad计算类指令理论性能计算公式中并行度和k0的取值([NPU架构版本2201](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123815211"></a> 40+**表1** Mmad计算类指令理论性能计算公式中并行度和k0的取值([NPU架构版本2201](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123815211"></a>
41 41 
42| 接口 | 左矩阵A | 右矩阵B | cube<sub>m</sub> | cube<sub>n</sub> | cube<sub>k</sub> | k<sub>0</sub> |42| 接口 | 左矩阵A | 右矩阵B | cube<sub>m</sub> | cube<sub>n</sub> | cube<sub>k</sub> | k<sub>0</sub> |
43| --- | --- | --- | --- | --- | --- | --- |43| --- | --- | --- | --- | --- | --- | --- |
@@ -51,7 +51,7 @@ $$
51<!-- end id5 -->51<!-- end id5 -->
52 52 
53<!-- npu="950" id6 -->53<!-- npu="950" id6 -->
54-**表2** Mmad计算类指令理论性能计算公式中并行度和k0的取值([NPU架构版本3510](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123815985"></a> 54+**表2** Mmad计算类指令理论性能计算公式中并行度和k0的取值([NPU架构版本3510](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123815985"></a>
55 55 
56| 接口 | 左矩阵A | 右矩阵B | cube<sub>m</sub> | cube<sub>n</sub> | cube<sub>k</sub> | k<sub>0</sub> |56| 接口 | 左矩阵A | 右矩阵B | cube<sub>m</sub> | cube<sub>n</sub> | cube<sub>k</sub> | k<sub>0</sub> |
57| --- | --- | --- | --- | --- | --- | --- |57| --- | --- | --- | --- | --- | --- | --- |
@@ -94,7 +94,7 @@ $$
94注意,下列表格中展示的理论性能为搬运带宽$bandwidth$,未考虑额外开销$\Delta T$。94注意,下列表格中展示的理论性能为搬运带宽$bandwidth$,未考虑额外开销$\Delta T$。
95 95 
96<!-- npu="A3,910b" id7 -->96<!-- npu="A3,910b" id7 -->
97-**表3** 矩阵计算搬入类指令理论性能说明([NPU架构版本2201](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123827121"></a> 97+**表3** 矩阵计算搬入类指令理论性能说明([NPU架构版本2201](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123827121"></a>
98 98 
99| 接口 | 搬运带宽(单位:Byte/cycle) |99| 接口 | 搬运带宽(单位:Byte/cycle) |
100| --- | --- |100| --- | --- |
@@ -108,7 +108,7 @@ $$
108 108 
109[LoadData(卷积数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md)指令的理论性能与参数相关,相关参数说明见[LoadData3DParamsV2结构体内参数说明](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md#zh-cn_topic_0000002512171652_table193501032193419),理论性能说明见下表:109[LoadData(卷积数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md)指令的理论性能与参数相关,相关参数说明见[LoadData3DParamsV2结构体内参数说明](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md#zh-cn_topic_0000002512171652_table193501032193419),理论性能说明见下表:
110 110 
111-**表4** LoadData(卷积数据搬运)指令理论性能说明([NPU架构版本2201](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123821113"></a> 111+**表4** LoadData(卷积数据搬运)指令理论性能说明([NPU架构版本2201](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123821113"></a>
112 112 
113| strideW的取值 | 卷积核在H方向滑动的行数n | L1 Buffer->L0A Buffer带宽(单位:Byte/cycle) | L1 Buffer->L0B Buffer带宽(单位:Byte/cycle) |113| strideW的取值 | 卷积核在H方向滑动的行数n | L1 Buffer->L0A Buffer带宽(单位:Byte/cycle) | L1 Buffer->L0B Buffer带宽(单位:Byte/cycle) |
114| --- | --- | --- | --- |114| --- | --- | --- | --- |
@@ -120,7 +120,7 @@ $$
120<!-- end id7 -->120<!-- end id7 -->
121 121 
122<!-- npu="950" id8 -->122<!-- npu="950" id8 -->
123-**表5** 矩阵计算搬入类指令理论性能说明([NPU架构版本3510](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123827112"></a> 123+**表5** 矩阵计算搬入类指令理论性能说明([NPU架构版本3510](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123827112"></a>
124 124 
125| 接口 | 搬运带宽(单位:Byte/cycle) |125| 接口 | 搬运带宽(单位:Byte/cycle) |
126| --- | --- |126| --- | --- |
@@ -153,7 +153,7 @@ $$
153 153 
154针对Ascend 950PR/Ascend 950DT,[LoadData(卷积数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md)和[LoadDataWithStride](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadDataWithStride.md)指令的理论性能与参数相关,相关参数说明见[LoadData3DParamsV2结构体内参数说明](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md#zh-cn_topic_0000002512171652_table193501032193419)。此外,LoadDataWithStride接口相比于LoadData(卷积数据搬运)接口,内部不包含针对其他芯片版本的兼容性实现,减少了兼容造成的额外开销,性能表现有所优化。两个接口的理论性能说明见下表:154针对Ascend 950PR/Ascend 950DT,[LoadData(卷积数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md)和[LoadDataWithStride](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadDataWithStride.md)指令的理论性能与参数相关,相关参数说明见[LoadData3DParamsV2结构体内参数说明](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_3D.md#zh-cn_topic_0000002512171652_table193501032193419)。此外,LoadDataWithStride接口相比于LoadData(卷积数据搬运)接口,内部不包含针对其他芯片版本的兼容性实现,减少了兼容造成的额外开销,性能表现有所优化。两个接口的理论性能说明见下表:
155 155 
156-**表6** LoadData(卷积数据搬运)和LoadDataWithStride理论性能说明([NPU架构版本3510](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877123821313"></a> 156+**表6** LoadData(卷积数据搬运)和LoadDataWithStride理论性能说明([NPU架构版本3510](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877123821313"></a>
157 157 
158| strideW的取值 | 卷积核在H方向滑动的行数n | L1 Buffer->L0A Buffer带宽(单位:Byte/cycle) | L1 Buffer->L0B Buffer带宽(单位:Byte/cycle) |158| strideW的取值 | 卷积核在H方向滑动的行数n | L1 Buffer->L0A Buffer带宽(单位:Byte/cycle) | L1 Buffer->L0B Buffer带宽(单位:Byte/cycle) |
159| --- | --- | --- | --- |159| --- | --- | --- | --- |
@@ -185,7 +185,7 @@ $$
185矩阵计算搬出类指令及其随路功能的详细介绍可参考[DataCopy(L0C到GM数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/DataCopy_L0CToGM.md)、[Fixpipe(L0C到GM数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)以及相同目录下的其他通路对应资料。以下为理论性能说明列表:185矩阵计算搬出类指令及其随路功能的详细介绍可参考[DataCopy(L0C到GM数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/DataCopy_L0CToGM.md)、[Fixpipe(L0C到GM数据搬运)](../SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)以及相同目录下的其他通路对应资料。以下为理论性能说明列表:
186 186 
187<!-- npu="A3,910b" id9 -->187<!-- npu="A3,910b" id9 -->
188-**表7** 矩阵计算搬出类指令理论性能说明([NPU架构版本2201](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877112315211"></a> 188+**表7** 矩阵计算搬出类指令理论性能说明([NPU架构版本2201](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877112315211"></a>
189 189 
190| 数据通路 | L0C Buffer上的数据类型 | 量化模式 | 格式转换模式 | 目的内存上的数据类型 | 并行度(单位:elements/cycle) | 搬运带宽(单位:Byte/cycle) |190| 数据通路 | L0C Buffer上的数据类型 | 量化模式 | 格式转换模式 | 目的内存上的数据类型 | 并行度(单位:elements/cycle) | 搬运带宽(单位:Byte/cycle) |
191| --- | --- | --- | --- | --- | --- | --- |191| --- | --- | --- | --- | --- | --- | --- |
@@ -197,7 +197,7 @@ $$
197<!-- end id9 -->197<!-- end id9 -->
198 198 
199<!-- npu="950" id10 -->199<!-- npu="950" id10 -->
200-**表8** 矩阵计算搬出类指令理论性能说明([NPU架构版本3510](../../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md))<a id="table1877112315211"></a> 200+**表8** 矩阵计算搬出类指令理论性能说明([NPU架构版本3510](../../guide/programming_guide/language_extension/simd_builtin_keywords.md))<a id="table1877112315211"></a>
201 201 
202| 数据通路 | L0C Buffer上的数据类型 | 量化模式 | 格式转换模式 | 目的内存上的数据类型 | 并行度(单位:elements/cycle) | 搬运带宽(单位:Byte/cycle) |202| 数据通路 | L0C Buffer上的数据类型 | 量化模式 | 格式转换模式 | 目的内存上的数据类型 | 并行度(单位:elements/cycle) | 搬运带宽(单位:Byte/cycle) |
203| --- | --- | --- | --- | --- | --- | --- |203| --- | --- | --- | --- | --- | --- | --- |
Mdocs/zh/asc_950_feature_guide.md+6-6
@@ -12,10 +12,10 @@
12 12 
13| 序号 | 新增特性 | 对应编程模型和编程特性 | 对应API | 对应算子实践资料 |13| 序号 | 新增特性 | 对应编程模型和编程特性 | 对应API | 对应算子实践资料 |
14|------|--------------|-------------------|---------|---------------|14|------|--------------|-------------------|---------|---------------|
15-| 1 | **RegBase架构**:AIV核Vector计算从MemBase切换到RegBase,数据从UB搬运到Register进行计算,中间结果直接在寄存器操作,无需回写UB | [Reg矢量计算编程](guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.md) | [Reg矢量计算API列表](api/SIMD-API/basic_api/reg_vector_compute/reg_vector_compute.md) | [VF融合优化](guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md)、[VF循环优化](guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md) |15+| 1 | **RegBase架构**:AIV核Vector计算从MemBase切换到RegBase,数据从UB搬运到Register进行计算,中间结果直接在寄存器操作,无需回写UB | [Reg矢量计算编程](guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md) | [Reg矢量计算API列表](api/SIMD-API/basic_api/reg_vector_compute/reg_vector_compute.md) | [VF融合优化](guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md)、[VF循环优化](guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md) |
16-| 2 | **SIMT编程模型**:新增SIMT硬件单元(DCache、Warp Scheduler、128KB Register File),支持线程级并行编程 | [AI Core SIMT编程](guide/编程指南/编程模型/AI-Core-SIMT编程/AI-Core-SIMT编程.md) | [SIMT API列表](api/SIMT-API/overview.md) | [SIMT算子实现](guide/算子实践参考/SIMT算子实现/基础知识.md)、[SIMT算子性能优化](guide/算子实践参考/SIMT算子性能优化/内存访问/访存合并.md) |16+| 2 | **SIMT编程模型**:新增SIMT硬件单元(DCache、Warp Scheduler、128KB Register File),支持线程级并行编程 | [AI Core SIMT编程](guide/programming_guide/programming_model/ai_core_simt_programming/ai_core_simt_programming.md) | [SIMT API列表](api/SIMT-API/overview.md) | [SIMT算子实现](guide/算子实践参考/SIMT算子实现/基础知识.md)、[SIMT算子性能优化](guide/算子实践参考/SIMT算子性能优化/内存访问/访存合并.md) |
17-| 3 | **SIMD与SIMT混合编程**:同一Kernel中SIMD和SIMT代码协同工作 | [SIMD与SIMT混合编程](<guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md>) | [混合编程API列表](api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md)、[内置变量](api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_variables.md) | [混合编程算子实现](guide/算子实践参考/SIMD与SIMT混合算子实现/基础知识.md)、[混合编程性能优化](guide/算子实践参考/SIMD与SIMT混合算子性能优化/内存访问/使用Unified-Buffer提升内存访问效率.md) |17+| 3 | **SIMD与SIMT混合编程**:同一Kernel中SIMD和SIMT代码协同工作 | [SIMD与SIMT混合编程](<guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md>) | [混合编程API列表](api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md)、[内置变量](api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/builtin_variables.md) | [混合编程算子实现](guide/算子实践参考/SIMD与SIMT混合算子实现/基础知识.md)、[混合编程性能优化](guide/算子实践参考/SIMD与SIMT混合算子性能优化/内存访问/使用Unified-Buffer提升内存访问效率.md) |
18-| 4 | **HiF8(hifloat8_t)数据类型**:Cube计算单元新增支持HiF8数据类型的矩阵乘 | [3510架构规格](guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md)中Cube支持的数据类型 | [内置数据类型说明](api/SIMD-API/basic_api/data_structures/builtin_data_types.md)、[Cast类型转换](api/SIMD-API/basic_api/reg_vector_compute/type_conversion/Cast.md)、[asc_float2hif8(废弃)](api/SIMD-API/c_api/reg/data_type_convert/asc_float2hif8_deprecated.md) | 资料开发中 |18+| 4 | **HiF8(hifloat8_t)数据类型**:Cube计算单元新增支持HiF8数据类型的矩阵乘 | [3510架构规格](guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md)中Cube支持的数据类型 | [内置数据类型说明](api/SIMD-API/basic_api/data_structures/builtin_data_types.md)、[Cast类型转换](api/SIMD-API/basic_api/reg_vector_compute/type_conversion/Cast.md)、[asc_float2hif8(废弃)](api/SIMD-API/c_api/reg/data_type_convert/asc_float2hif8_deprecated.md) | 资料开发中 |
19| 5 | **UB到L1 Buffer通路**:支持数据直接从UB搬运到L1 Buffer,无需经GM中转 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | 新增支持[UB到L1 Buffer数据搬运](api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md) | 资料开发中 |19| 5 | **UB到L1 Buffer通路**:支持数据直接从UB搬运到L1 Buffer,无需经GM中转 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | 新增支持[UB到L1 Buffer数据搬运](api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/DataCopy_UBToL1_continuous.md) | 资料开发中 |
20| 6 | **L0C到UB通路**:支持数据直接从L0C Buffer搬运到UB,无需经GM中转 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [asc_copy_l0c2ub](api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2ub.md) | [矩阵乘结果累加](guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |20| 6 | **L0C到UB通路**:支持数据直接从L0C Buffer搬运到UB,无需经GM中转 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [asc_copy_l0c2ub](api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2ub.md) | [矩阵乘结果累加](guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |
21| 7 | **ND-DMA搬运指令**:扩展DataCopy能力,可自由配置搬入数据的维度信息及Stride | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [多维数据搬运ISASI](api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md)、[asc_ndim_copy_gm2ub](api/SIMD-API/c_api/vector_data_move/asc_ndim_copy_gm2ub.md) | [非连续搬运减少搬运次数](guide/算子实践参考/SIMD算子性能优化/内存访问/非连续搬运场景减少搬运次数.md) |21| 7 | **ND-DMA搬运指令**:扩展DataCopy能力,可自由配置搬入数据的维度信息及Stride | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [多维数据搬运ISASI](api/SIMD-API/basic_api/memory_vector_compute/data_move/DataCopy_GMToUB_NDDMA.md)、[asc_ndim_copy_gm2ub](api/SIMD-API/c_api/vector_data_move/asc_ndim_copy_gm2ub.md) | [非连续搬运减少搬运次数](guide/算子实践参考/SIMD算子性能优化/内存访问/非连续搬运场景减少搬运次数.md) |
@@ -24,7 +24,7 @@
24| 10 | **CrossCore核间同步**:AIV0与AIV1可独立触发AIC等待 | 资料开发中 | [CrossCoreSetFlag](<api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md>)、[CrossCoreWaitFlag](<api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md>) | [CV融合算子实现](guide/算子实践参考/SIMD算子实现/融合算子编程/CV融合/算子实现.md) |24| 10 | **CrossCore核间同步**:AIV0与AIV1可独立触发AIC等待 | 资料开发中 | [CrossCoreSetFlag](<api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreSetFlag_ISASI.md>)、[CrossCoreWaitFlag](<api/SIMD-API/basic_api/sync_control/inter_core_sync/CrossCoreWaitFlag_ISASI.md>) | [CV融合算子实现](guide/算子实践参考/SIMD算子实现/融合算子编程/CV融合/算子实现.md) |
25| 11 | **MX(MicroScaling)数据类型**:支持FP8_E4M3/MXFP4/8低比特矩阵运算,内存占用减半、算力吞吐倍增 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md)中LoadData扩展 | [asc_mmad_mx](api/SIMD-API/c_api/cube_compute/asc_mmad_mx.md)、[asc_copy_l12l0a_mx](api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0a_mx.md)、[asc_copy_l12l0b_mx](api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0b_mx.md) | [Matmul特性介绍](guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/Matmul特性介绍.md)、[MxMatmul场景](guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/MxMatmul场景.md)、[矩阵乘量化/反量化](guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/矩阵乘输出的量化-反量化.md) |25| 11 | **MX(MicroScaling)数据类型**:支持FP8_E4M3/MXFP4/8低比特矩阵运算,内存占用减半、算力吞吐倍增 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md)中LoadData扩展 | [asc_mmad_mx](api/SIMD-API/c_api/cube_compute/asc_mmad_mx.md)、[asc_copy_l12l0a_mx](api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0a_mx.md)、[asc_copy_l12l0b_mx](api/SIMD-API/c_api/cube_data_move/asc_copy_l12l0b_mx.md) | [Matmul特性介绍](guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/Matmul特性介绍.md)、[MxMatmul场景](guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/MxMatmul场景.md)、[矩阵乘量化/反量化](guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/矩阵乘输出的量化-反量化.md) |
26| 12 | **Fixpipe增强**:新增NZ2DN随路转换,支持Fixpipe将NZ格式数据随路转为DN格式 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [Fixpipe API](api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)、[asc_copy_l0c2gm](api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2gm/asc_copy_l0c2gm_arch_3510.md)、[asc_copy_l0c2l1](api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2l1/asc_copy_l0c2l1_arch_3510.md) | [矩阵乘结果累加](guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |26| 12 | **Fixpipe增强**:新增NZ2DN随路转换,支持Fixpipe将NZ格式数据随路转为DN格式 | [3510架构变更-搬运单元](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md) | [Fixpipe API](api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)、[asc_copy_l0c2gm](api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2gm/asc_copy_l0c2gm_arch_3510.md)、[asc_copy_l0c2l1](api/SIMD-API/c_api/cube_data_move/asc_copy_l0c2l1/asc_copy_l0c2l1_arch_3510.md) | [矩阵乘结果累加](guide/算子实践参考/SIMD算子性能优化/矩阵计算/通过L0C-Buffer数据暂存实现高效的矩阵乘结果累加.md) |
27-| 13 | **UB互连/bank结构变化**:3510架构UB从16个bank group(各3个4KB bank)变为8个bank group(各2个16KB bank) | [3510架构规格-存储单元](guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md) | 不涉及 | [避免UB bank冲突概述](guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md)、[2201 bank冲突](guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md)、[3510 bank冲突](guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_3510.md)、[SIMT避免Bank冲突](guide/算子实践参考/SIMT算子性能优化/内存访问/避免UB的Bank冲突.md) |27+| 13 | **UB互连/bank结构变化**:3510架构UB从16个bank group(各3个4KB bank)变为8个bank group(各2个16KB bank) | [3510架构规格-存储单元](guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md) | 不涉及 | [避免UB bank冲突概述](guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md)、[2201 bank冲突](guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md)、[3510 bank冲突](guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_3510.md)、[SIMT避免Bank冲突](guide/算子实践参考/SIMT算子性能优化/内存访问/避免UB的Bank冲突.md) |
28 28 
29---29---
30 30 
@@ -45,4 +45,4 @@
45- [基础API迁移指导](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/basic_api_migration.md)45- [基础API迁移指导](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/basic_api_migration.md)
46- [高阶API迁移指导](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/advanced_api_migration.md)46- [高阶API迁移指导](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/advanced_api_migration.md)
47- [算子编译迁移指导](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/op_compilation_migration.md)47- [算子编译迁移指导](guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/op_compilation_migration.md)
48-- [NPU架构版本3510规格](guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md)48+- [NPU架构版本3510规格](guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md)
Mdocs/zh/asc_doc_contributing.md+1-1
@@ -657,7 +657,7 @@ __aicore__ inline void ExampleKernel(__gm__ uint8_t* x) { // __aicore__=核函
657提交资料PR前,请逐项检查:657提交资料PR前,请逐项检查:
658 658 
659**内容正确性**659**内容正确性**
660-- [ ] 所有硬件参数值(容量、粒度、范围)与[硬件规格](./guide/编程指南/高级编程/硬件实现/架构规格/架构规格.md)保持一致660+- [ ] 所有硬件参数值(容量、粒度、范围)与[硬件规格](./guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/architecture_spec.md)保持一致
661- [ ] "固定值"等绝对性描述已经核实(很多"固定值"实际由配置参数决定)661- [ ] "固定值"等绝对性描述已经核实(很多"固定值"实际由配置参数决定)
662- [ ] 数据通路描述与实际路径一致(不与其他文档矛盾)662- [ ] 数据通路描述与实际路径一致(不与其他文档矛盾)
663 663 
Mdocs/zh/contributing/directory-structure.md+1-1
@@ -111,7 +111,7 @@ exp_check_common.h
111| `dav_c220` | `2201` | Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品 |111| `dav_c220` | `2201` | Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品 |
112| `dav_3510` | `3510` | Ascend 950PR/Ascend 950DT |112| `dav_3510` | `3510` | Ascend 950PR/Ascend 950DT |
113 113 
114-> 产品型号与 `__NPU_ARCH__` 的完整对应关系见 [**NPU_ARCH** 文档](../guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。114+> 产品型号与 `__NPU_ARCH__` 的完整对应关系见 [**NPU_ARCH** 文档](../../zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
115 115 
116### 架构分发模式116### 架构分发模式
117 117 
Mdocs/zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md+2-2
@@ -1,13 +1,13 @@
1# 2201到3510架构变更<a name="ZH-CN_TOPIC_0000002503428217"></a>1# 2201到3510架构变更<a name="ZH-CN_TOPIC_0000002503428217"></a>
2 2 
3-[NPU架构版本3510](../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)的架构图如[图1](#fig1097417534526)所示,总体来看,3510架构新增了以下特性:3+[NPU架构版本3510](../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)的架构图如[图1](#fig1097417534526)所示,总体来看,3510架构新增了以下特性:
4 4 
5- 新增多条数据通路。5- 新增多条数据通路。
6- AI Core核数增加。6- AI Core核数增加。
7- UB容量提升。7- UB容量提升。
8- 新增SSBuffer核内存储单元,支持AIC核和AIV核通过Scalar访问。8- 新增SSBuffer核内存储单元,支持AIC核和AIV核通过Scalar访问。
9- SIMD编程基础上,支持SIMT编程、SIMD与SIMT混合编程。9- SIMD编程基础上,支持SIMT编程、SIMD与SIMT混合编程。
10-- AIV核采用Regbase架构,与[NPU架构版本2201](../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)的Membase架构相比,可以直接对芯片的Vector寄存器Register进行操作,实现更大的灵活性和更好的性能。10+- AIV核采用Regbase架构,与[NPU架构版本2201](../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)的Membase架构相比,可以直接对芯片的Vector寄存器Register进行操作,实现更大的灵活性和更好的性能。
11 11 
12**图1** 3510架构图<a name="fig1097417534526"></a> 12**图1** 3510架构图<a name="fig1097417534526"></a>
13![](../../figures/hw_arch.png "硬件架构")13![](../../figures/hw_arch.png "硬件架构")
Mdocs/zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/advanced_api_migration.md+1-1
@@ -1,6 +1,6 @@
1# 高阶API迁移指导<a name="ZH-CN_TOPIC_0000002503588125"></a>1# 高阶API迁移指导<a name="ZH-CN_TOPIC_0000002503588125"></a>
2 2 
3-Ascend C高阶API基本兼容[NPU架构版本3510](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)与[NPU架构版本2201](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),部分API进行了扩展。当前3510架构不支持卷积计算类高阶API。3+Ascend C高阶API基本兼容[NPU架构版本3510](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)与[NPU架构版本2201](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch),部分API进行了扩展。当前3510架构不支持卷积计算类高阶API。
4 4 
5## Matmul类高阶API<a name="section6925172655117"></a>5## Matmul类高阶API<a name="section6925172655117"></a>
6 6 
Mdocs/zh/guide/cross_gen_migration_guide/3510_arch_migration/2201_to_3510_guide/basic_api_migration.md+2-2
@@ -1,6 +1,6 @@
1# 基础API迁移指导<a name="ZH-CN_TOPIC_0000002470508258"></a>1# 基础API迁移指导<a name="ZH-CN_TOPIC_0000002470508258"></a>
2 2 
3-本节针对[NPU架构版本3510](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)的芯片变更对基础API兼容性产生的影响进行说明,并提供基础API的兼容性适配方案。3+本节针对[NPU架构版本3510](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)的芯片变更对基础API兼容性产生的影响进行说明,并提供基础API的兼容性适配方案。
4 4 
5## 矢量计算<a name="section7364115741514"></a>5## 矢量计算<a name="section7364115741514"></a>
6 6 
@@ -151,7 +151,7 @@
151 151 
152 **兼容方案**:152 **兼容方案**:
153 153 
154- - [NPU架构版本2201](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)的接口参数boundaryValue设置为0时与3510架构版本等价。154+ - [NPU架构版本2201](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)的接口参数boundaryValue设置为0时与3510架构版本等价。
155 - 如果需要在L1 Buffer上循环读取操作数,需要将对应的LoadData(卷积数据搬运)接口手动拆分成多条指令,手动绕回。具体代码可参考[SetLoadDataBoundary兼容性样例](../../../../../../examples/01_simd_cpp_api/06_compatibility_guide/set_loaddata_boundary)。155 - 如果需要在L1 Buffer上循环读取操作数,需要将对应的LoadData(卷积数据搬运)接口手动拆分成多条指令,手动绕回。具体代码可参考[SetLoadDataBoundary兼容性样例](../../../../../../examples/01_simd_cpp_api/06_compatibility_guide/set_loaddata_boundary)。
156 156 
157 ![](../../../figures/fig_1_zn.png)157 ![](../../../figures/fig_1_zn.png)
Mdocs/zh/guide/cross_gen_migration_guide/ascend_c_api_compatibility.md+1-1
@@ -2,7 +2,7 @@
2 2 
3本兼容性说明仅适用于Ascend C算子开发的兼容性迁移指导。总体兼容性策略见[表1](#table18109729593),兼容性范围不包含编译器BuiltIn API、Ascend C内部实现接口等。文档中涉及的兼容性分为两类:一是功能兼容,包括数据类型兼容、接口原型兼容和常量兼容;二是性能兼容,指对于同等数据量,新架构上执行API耗时不高于旧架构。3本兼容性说明仅适用于Ascend C算子开发的兼容性迁移指导。总体兼容性策略见[表1](#table18109729593),兼容性范围不包含编译器BuiltIn API、Ascend C内部实现接口等。文档中涉及的兼容性分为两类:一是功能兼容,包括数据类型兼容、接口原型兼容和常量兼容;二是性能兼容,指对于同等数据量,新架构上执行API耗时不高于旧架构。
4 4 
5-若开发者希望在[NPU架构版本3510](../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)下运行原本在[NPU架构版本2201](../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)上开发的Ascend C程序,需在3510架构上重新编译并运行,并可能需要根据迁移指导进行代码调整。5+若开发者希望在[NPU架构版本3510](../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)下运行原本在[NPU架构版本2201](../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)上开发的Ascend C程序,需在3510架构上重新编译并运行,并可能需要根据迁移指导进行代码调整。
6 6 
7**图1** Ascend C API层次结构<a name="fig1912418519815"></a> 7**图1** Ascend C API层次结构<a name="fig1912418519815"></a>
8![](../figures/api_hierarchy.png "Ascend-C-API层次结构")8![](../figures/api_hierarchy.png "Ascend-C-API层次结构")
Mdocs/zh/guide/cross_gen_migration_guide/overview.md+3-3
@@ -2,7 +2,7 @@
2 2 
3Ascend C的核心设计目标之一是实现跨代兼容。然而,每一代芯片在微架构上都存在独特的硬件特性,因此无法保证所有接口仅通过重编译就能达成完全的跨代兼容。基于这一前提,本手册旨在为Ascend C算子开发者提供系统化指导,帮助将算子Kernel代码从当前芯片平滑移植到目标代际芯片上运行,实现高效、可控的迁移。3Ascend C的核心设计目标之一是实现跨代兼容。然而,每一代芯片在微架构上都存在独特的硬件特性,因此无法保证所有接口仅通过重编译就能达成完全的跨代兼容。基于这一前提,本手册旨在为Ascend C算子开发者提供系统化指导,帮助将算子Kernel代码从当前芯片平滑移植到目标代际芯片上运行,实现高效、可控的迁移。
4 4 
5-如[SIMD-BuiltIn关键字](../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)中所述,\_\_NPU\_ARCH\_\_是Device侧AI Core代码中的一个预处理宏,用于标识AI处理器的架构版本。<!-- npu="950,A3,910b" id1 -->例如,Ascend 950PR/Ascend 950DT的\_\_NPU\_ARCH\_\_为3510,而Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品的\_\_NPU\_ARCH\_\_则为2201。<!-- end id1 -->因此,后续章节将以\_\_NPU\_ARCH\_\_为主线,重点介绍相邻代际芯片间的平滑迁移方法。5+如[SIMD-BuiltIn关键字](../programming_guide/language_extension/simd_builtin_keywords.md)中所述,\_\_NPU\_ARCH\_\_是Device侧AI Core代码中的一个预处理宏,用于标识AI处理器的架构版本。<!-- npu="950,A3,910b" id1 -->例如,Ascend 950PR/Ascend 950DT的\_\_NPU\_ARCH\_\_为3510,而Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品的\_\_NPU\_ARCH\_\_则为2201。<!-- end id1 -->因此,后续章节将以\_\_NPU\_ARCH\_\_为主线,重点介绍相邻代际芯片间的平滑迁移方法。
6 6 
7> [!NOTE]7> [!NOTE]
8> 为保证兼容性,建议开发者在开发过程中尽量避免使用以下接口或编程方式,否则需自行保证兼容性:8> 为保证兼容性,建议开发者在开发过程中尽量避免使用以下接口或编程方式,否则需自行保证兼容性:
@@ -20,8 +20,8 @@ Ascend C的核心设计目标之一是实现跨代兼容。然而,每一代芯
20 20 
21建议开发者采用以下实践:21建议开发者采用以下实践:
22- 使用兼容的API接口。22- 使用兼容的API接口。
23-- 若涉及特定领域的扩展特性,应在Device侧通过 [`__NPU_ARCH__`编译宏](../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)进行隔离,在Host侧通过`SocVersion`进行隔离。23+- 若涉及特定领域的扩展特性,应在Device侧通过 [`__NPU_ARCH__`编译宏](../programming_guide/language_extension/simd_builtin_keywords.md)进行隔离,在Host侧通过`SocVersion`进行隔离。
24-- 使用`<<<>>>`直调或 [Tiling模板编程](../编程指南/高级编程/Aclnn算子工程化开发/设计与实现/多分支策略.md)。24+- 使用`<<<>>>`直调或 [Tiling模板编程](../programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/multi_branch_strategy.md)。
25 25 
26<!-- npu="x90,9030" id2 -->26<!-- npu="x90,9030" id2 -->
27> 💡 请参考[昇腾到麒麟迁移指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-ascend-kirin-compatibility),了解如何将昇腾平台上开发的算子迁移到麒麟平台。27> 💡 请参考[昇腾到麒麟迁移指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-ascend-kirin-compatibility),了解如何将昇腾平台上开发的算子迁移到麒麟平台。
Mdocs/zh/guide/getting_started/ascend_c_overview_and_learning_path.md+16-16
@@ -71,35 +71,35 @@ CANN基于分层架构设计,实现了上层应用与底层硬件的无缝衔
71<p style="color: #555; font-size: 14px; line-height: 1.6; min-height: 65px; margin-bottom: 10px;">本阶段聚焦于理解并掌握Ascend C的SIMD与SIMT编程模型,使您具备自主开发矢量及矩阵类算子的能力,从而满足常规场景下的基本性能要求。</p>71<p style="color: #555; font-size: 14px; line-height: 1.6; min-height: 65px; margin-bottom: 10px;">本阶段聚焦于理解并掌握Ascend C的SIMD与SIMT编程模型,使您具备自主开发矢量及矩阵类算子的能力,从而满足常规场景下的基本性能要求。</p>
72 72 
73<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">73<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
74-<strong style="color: #1a1a1a;"><a href="../编程指南/编程模型/编程模型概述.md" style="color: #3b82f6; text-decoration: none;">📖 编程模型</a></strong><br/>74+<strong style="color: #1a1a1a;"><a href="../programming_guide/programming_model/programming_model_overview.md" style="color: #3b82f6; text-decoration: none;">📖 编程模型</a></strong><br/>
75<div style="display: flex; gap: 15px; margin-top: 10px;">75<div style="display: flex; gap: 15px; margin-top: 10px;">
76<div style="flex: 1; background: #f8f9fa; padding: 12px; border-radius: 8px; border: 1px solid #e5e7eb;">76<div style="flex: 1; background: #f8f9fa; padding: 12px; border-radius: 8px; border: 1px solid #e5e7eb;">
77-<a href="../编程指南/编程模型/AI-Core-SIMD编程/概述.md" style="color: #3b82f6; font-size: 14px; font-weight: bold;">SIMD编程</a><br/>77+<a href="../programming_guide/programming_model/ai_core_simd_programming/overview.md" style="color: #3b82f6; font-size: 14px; font-weight: bold;">SIMD编程</a><br/>
78-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.md" style="color: #3b82f6; font-size: 13px;">基于指针的C语言编程</a></span><br/>78+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md" style="color: #3b82f6; font-size: 13px;">基于指针的C语言编程</a></span><br/>
79-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/CPPTensor编程概述.md" style="color: #3b82f6; font-size: 13px;">基于Tensor的C++编程</a></span><br/>79+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md" style="color: #3b82f6; font-size: 13px;">基于Tensor的C++编程</a></span><br/>
80-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md" style="color: #3b82f6; font-size: 13px;">基于TPipe-TQue框架编程</a></span>80+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md" style="color: #3b82f6; font-size: 13px;">基于TPipe-TQue框架编程</a></span>
81</div>81</div>
82<div style="flex: 1; display: flex; flex-direction: column; gap: 10px;">82<div style="flex: 1; display: flex; flex-direction: column; gap: 10px;">
83<div style="background: #f8f9fa; padding: 12px; border-radius: 8px; border: 1px solid #e5e7eb;">83<div style="background: #f8f9fa; padding: 12px; border-radius: 8px; border: 1px solid #e5e7eb;">
84-<a href="../编程指南/编程模型/AI-Core-SIMT编程/AI-Core-SIMT编程.md" style="color: #3b82f6; font-size: 14px; font-weight: bold;">SIMT编程</a>84+<a href="../programming_guide/programming_model/ai_core_simt_programming/ai_core_simt_programming.md" style="color: #3b82f6; font-size: 14px; font-weight: bold;">SIMT编程</a>
85</div>85</div>
86<div style="background: #f8f9fa; padding: 12px; border-radius: 8px; border: 1px solid #e5e7eb;">86<div style="background: #f8f9fa; padding: 12px; border-radius: 8px; border: 1px solid #e5e7eb;">
87-<a href="../编程指南/语言扩展层/SIMD-BuiltIn关键字.md" style="color: #3b82f6; font-size: 14px; font-weight: bold;">语言扩展层概述</a>87+<a href="../programming_guide/language_extension/simd_builtin_keywords.md" style="color: #3b82f6; font-size: 14px; font-weight: bold;">语言扩展层概述</a>
88</div>88</div>
89</div>89</div>
90</div>90</div>
91</div>91</div>
92<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">92<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
93<strong style="color: #1a1a1a;">🔧 构建与运行</strong><br/>93<strong style="color: #1a1a1a;">🔧 构建与运行</strong><br/>
94-<a href="../编程指南/编译与运行/异步执行.md" style="color: #3b82f6; font-size: 14px;">异步执行</a> | <a href="../编程指南/编译与运行/算子编译/毕昇编译器.md" style="color: #3b82f6; font-size: 14px;">算子编译</a>94+<a href="../programming_guide/compilation_and_execution/async_execution.md" style="color: #3b82f6; font-size: 14px;">异步执行</a> | <a href="../programming_guide/compilation_and_execution/operator_compilation/bisheng_compiler.md" style="color: #3b82f6; font-size: 14px;">算子编译</a>
95</div>95</div>
96<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">96<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
97-<strong style="color: #1a1a1a;"><a href="../编程指南/调试调优/概述.md" style="color: #3b82f6; text-decoration: none;">🔧 调试与调优</a></strong><br/>97+<strong style="color: #1a1a1a;"><a href="../programming_guide/debug_and_tuning/overview.md" style="color: #3b82f6; text-decoration: none;">🔧 调试与调优</a></strong><br/>
98-<a href="../编程指南/调试调优/功能调试/CPU域孪生调试.md" style="color: #3b82f6; font-size: 14px;">功能调试</a> <span style="color: #999; font-size: 13px;">(<a href="../编程指南/调试调优/功能调试/CPU域孪生调试.md" style="color: #3b82f6; font-size: 13px;">CPU域孪生调试</a> | <a href="../编程指南/调试调优/功能调试/NPU域上板调试.md" style="color: #3b82f6; font-size: 13px;">NPU域孪生调试</a>)</span> | <a href="../编程指南/调试调优/性能调优.md" style="color: #3b82f6; font-size: 14px;">性能调试</a>98+<a href="../programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md" style="color: #3b82f6; font-size: 14px;">功能调试</a> <span style="color: #999; font-size: 13px;">(<a href="../programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md" style="color: #3b82f6; font-size: 13px;">CPU域孪生调试</a> | <a href="../programming_guide/debug_and_tuning/functional_debug/npu_board_debug.md" style="color: #3b82f6; font-size: 13px;">NPU域孪生调试</a>)</span> | <a href="../programming_guide/debug_and_tuning/performance_tuning.md" style="color: #3b82f6; font-size: 14px;">性能调试</a>
99</div>99</div>
100<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">100<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
101<strong style="color: #1a1a1a;">📦 算子部署</strong><br/>101<strong style="color: #1a1a1a;">📦 算子部署</strong><br/>
102-<a href="../编程指南/高级编程/AI框架算子适配/PyTorch框架.md" style="color: #3b82f6; font-size: 14px;">PyTorch框架适配</a>102+<a href="../programming_guide/advanced_programming/ai_framework_adaptation/pytorch_framework.md" style="color: #3b82f6; font-size: 14px;">PyTorch框架适配</a>
103</div>103</div>
104<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">104<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
105<strong style="color: #1a1a1a;"><span style="color: #3b82f6;">💻</span> 实践巩固</strong><br/>105<strong style="color: #1a1a1a;"><span style="color: #3b82f6;">💻</span> 实践巩固</strong><br/>
@@ -116,11 +116,11 @@ CANN基于分层架构设计,实现了上层应用与底层硬件的无缝衔
116 116 
117<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">117<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
118<strong style="color: #1a1a1a;">📖 高级编程</strong><br/><span style="color: #666; font-size: 14px;">118<strong style="color: #1a1a1a;">📖 高级编程</strong><br/><span style="color: #666; font-size: 14px;">
119-<a href="../编程指南/高级编程/硬件实现/基本架构.md" style="color: #3b82f6; font-size: 14px;">硬件实现</a><br/>119+<a href="../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md" style="color: #3b82f6; font-size: 14px;">硬件实现</a><br/>
120-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md" style="color: #3b82f6; font-size: 14px;">SIMD & SIMT混合编程</a></span><br/>120+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md" style="color: #3b82f6; font-size: 14px;">SIMD & SIMT混合编程</a></span><br/>
121-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/高级编程/Aclnn算子工程化开发/概述.md" style="color: #3b82f6; font-size: 14px;">Aclnn算子工程化开发</a></span><br/>121+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/advanced_programming/aclnn_operator_development/overview.md" style="color: #3b82f6; font-size: 14px;">Aclnn算子工程化开发</a></span><br/>
122-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/高级编程/算子入图开发/概述.md" style="color: #3b82f6; font-size: 14px;">算子入图开发</a></span><br/>122+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/advanced_programming/operator_graph_development/overview.md" style="color: #3b82f6; font-size: 14px;">算子入图开发</a></span><br/>
123-<span style="color: #666; font-size: 14px;">• <a href="../编程指南/高级编程/AI框架算子适配/概述.md" style="color: #3b82f6; font-size: 14px;">AI框架算子适配</a></span>123+<span style="color: #666; font-size: 14px;">• <a href="../programming_guide/advanced_programming/ai_framework_adaptation/overview.md" style="color: #3b82f6; font-size: 14px;">AI框架算子适配</a></span>
124</div>124</div>
125<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">125<div style=" margin: 5px 0; padding: 8px; background: #fff; border-left: 3px solid #3b82f6; border-radius: 4px;">
126<strong style="color: #1a1a1a;"><span style="color: #3b82f6;">💻</span> 实践巩固</strong><br/><span style="color: #666; font-size: 14px;">126<strong style="color: #1a1a1a;"><span style="color: #3b82f6;">💻</span> 实践巩固</strong><br/><span style="color: #666; font-size: 14px;">
Mdocs/zh/guide/getting_started/quick_start/heterogeneous_system_and_programming_model.md+3-3
@@ -24,7 +24,7 @@
24| 代码类型 | 运行位置 | 编程语言 | 核心职责 |24| 代码类型 | 运行位置 | 编程语言 | 核心职责 |
25|----------|----------|----------|----------|25|----------|----------|----------|----------|
26| **Host代码** | CPU(Host侧) | 标准C/C++ | 管理Device设备、搬运数据、启动NPU任务、同步状态 |26| **Host代码** | CPU(Host侧) | 标准C/C++ | 管理Device设备、搬运数据、启动NPU任务、同步状态 |
27-| **Device代码** | NPU(Device侧) | **Ascend C** | 执行具体的并行计算任务,称为[核函数](../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md) |27+| **Device代码** | NPU(Device侧) | **Ascend C** | 执行具体的并行计算任务,称为[核函数](../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md) |
28 28 
29> ✅ **便捷提示**:Host代码与Device代码可编写在同一个`.asc`文件中,由毕昇编译器自动识别、分别编译,简化开发流程。29> ✅ **便捷提示**:Host代码与Device代码可编写在同一个`.asc`文件中,由毕昇编译器自动识别、分别编译,简化开发流程。
30 30 
@@ -36,7 +36,7 @@ Host侧通过调用**CANN Runtime API**完成与Device的协同工作。典型
36 36 
371. **分配内存**:在Device Memory中申请输入/输出所需的空间。371. **分配内存**:在Device Memory中申请输入/输出所需的空间。
382. **数据搬入**:将输入数据从Host Memory拷贝到Device Memory(数据需进入Device侧才能被NPU访问)。382. **数据搬入**:将输入数据从Host Memory拷贝到Device Memory(数据需进入Device侧才能被NPU访问)。
39-3. **启动NPU计算任务**:调用Device侧预先编写的[核函数](../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md),NPU开始并行计算。39+3. **启动NPU计算任务**:调用Device侧预先编写的[核函数](../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md),NPU开始并行计算。
404. **同步等待**:Host端等待NPU执行完成,确保数据计算完整(避免未完成就读取结果)。404. **同步等待**:Host端等待NPU执行完成,确保数据计算完整(避免未完成就读取结果)。
415. **数据搬出**:将计算结果从Device Memory拷贝回Host Memory,供后续处理。415. **数据搬出**:将计算结果从Device Memory拷贝回Host Memory,供后续处理。
42 42 
@@ -72,7 +72,7 @@ NPU是Device侧的计算核心,而 **AI Core**则是NPU内部的“最小计
72 72 
73### SIMD核函数编程基本步骤(遵循SPMD模型)73### SIMD核函数编程基本步骤(遵循SPMD模型)
74 74 
75-> **SPMD(Single Program, Multiple Data)**:将每个AI Core抽象成一个Block,通过内置变量[block_idx](../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)作为Block索引。每个Block执行同一份算子Kernel代码,基于block_idx划分每个Block的数据处理范围,实现多核负载均衡与并行调度。75+> **SPMD(Single Program, Multiple Data)**:将每个AI Core抽象成一个Block,通过内置变量[block_idx](../../programming_guide/language_extension/simd_builtin_keywords.md)作为Block索引。每个Block执行同一份算子Kernel代码,基于block_idx划分每个Block的数据处理范围,实现多核负载均衡与并行调度。
76 76 
771. **Tiling(分块)**:将数据划分为均匀的块,每个AI Core负责一块,实现负载均衡。771. **Tiling(分块)**:将数据划分为均匀的块,每个AI Core负责一块,实现负载均衡。
782. **数据搬入**:需要**显式调用数据搬运API**将数据从Device Memory搬到本地存储。782. **数据搬入**:需要**显式调用数据搬运API**将数据从Device Memory搬到本地存储。
Mdocs/zh/guide/getting_started/quick_start/simd_programming/add_op_quick_start.md+8-8
@@ -15,9 +15,9 @@
15- **算子设计**15- **算子设计**
16 16 
17 - **Device端核函数编程接口**17 - **Device端核函数编程接口**
18- - 核函数定义:通过 [\_\_global\_\_](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)修饰符声明。18+ - 核函数定义:通过 [\_\_global\_\_](../../../programming_guide/language_extension/simd_builtin_keywords.md)修饰符声明。
19- - 数据分块(Tiling):使用内置关键字 [block_idx](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)确定每个Block负责处理的数据。19+ - 数据分块(Tiling):使用内置关键字 [block_idx](../../../programming_guide/language_extension/simd_builtin_keywords.md)确定每个Block负责处理的数据。
20- - 数据搬入:通过[C API接口](../../../编程指南/语言扩展层/SIMD语言扩展层C-API.md) `asc_copy_gm2ub`或[C++接口](../../../编程指南/类库API/编程接口概述.md) `AscendC::DataCopy`完成。20+ - 数据搬入:通过[C API接口](../../../programming_guide/language_extension/simd_language_extension_c_api.md) `asc_copy_gm2ub`或[C++接口](../../../programming_guide/library_api/programming_interface_overview.md) `AscendC::DataCopy`完成。
21 - 数据计算:通过C API接口`asc_add`或C++接口`AscendC::Add`完成。21 - 数据计算:通过C API接口`asc_add`或C++接口`AscendC::Add`完成。
22 - 数据搬出:通过C API接口`asc_copy_ub2gm`或C++接口`AscendC::DataCopy`完成。22 - 数据搬出:通过C API接口`asc_copy_ub2gm`或C++接口`AscendC::DataCopy`完成。
23 - **Host端运行时接口**23 - **Host端运行时接口**
@@ -76,8 +76,8 @@
76 > <!-- npu="910b" id2 -->76 > <!-- npu="910b" id2 -->
77 > - Atlas A2训练系列产品/Atlas A2推理系列产品77 > - Atlas A2训练系列产品/Atlas A2推理系列产品
78 > <!-- end id2 -->78 > <!-- end id2 -->
79- > - SIMD算子的Kernel函数需要额外修饰符,[`__vector__`](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)修饰符表明该算子仅在向量计算单元上执行。79+ > - SIMD算子的Kernel函数需要额外修饰符,[`__vector__`](../../../programming_guide/language_extension/simd_builtin_keywords.md)修饰符表明该算子仅在向量计算单元上执行。
80- > - **性能提示**:示例中为简化同步操作,统一使用了 `asc_sync`。在实际算子开发中,建议根据流水线执行情况使用具体的同步控制指令,以获得更好的性能。详见[同步机制](../../../编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.md#同步机制)章节。80+ > - **性能提示**:示例中为简化同步操作,统一使用了 `asc_sync`。在实际算子开发中,建议根据流水线执行情况使用具体的同步控制指令,以获得更好的性能。详见[同步机制](../../../programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md#同步机制)章节。
81 81 
82 - **基于C++ Tensor实现Memory矢量计算示例**82 - **基于C++ Tensor实现Memory矢量计算示例**
83 83 
@@ -124,7 +124,7 @@
124 > <!-- npu="910b" id5 -->124 > <!-- npu="910b" id5 -->
125 > - Atlas A2训练系列产品/Atlas A2推理系列产品125 > - Atlas A2训练系列产品/Atlas A2推理系列产品
126 > <!-- end id5 -->126 > <!-- end id5 -->
127- > - SIMD算子的Kernel函数需要额外修饰符,[`__vector__`](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)修饰符表明该算子仅在向量计算单元上执行。127+ > - SIMD算子的Kernel函数需要额外修饰符,[`__vector__`](../../../programming_guide/language_extension/simd_builtin_keywords.md)修饰符表明该算子仅在向量计算单元上执行。
128 128 
129 - **Host端代码实现**129 - **Host端代码实现**
130 130 
@@ -197,7 +197,7 @@
197 ./c_api_add_example # 运行样例197 ./c_api_add_example # 运行样例
198 ```198 ```
199 > [!NOTE]说明199 > [!NOTE]说明
200- > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后面的数字为架构版本号,请替换为您实际使用的版本。各AI处理器型号与架构版本的对应关系请查阅[AI处理器型号和 \_\_NPU_ARCH\_\_ 的对应关系](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。200+ > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后面的数字为架构版本号,请替换为您实际使用的版本。各AI处理器型号与架构版本的对应关系请查阅[AI处理器型号和 \_\_NPU_ARCH\_\_ 的对应关系](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)。
201 201 
202此外,基于C/C++不同层级的编程接口和不同的矢量计算类型,Add算子有多种实现方式,具体可参考下表:202此外,基于C/C++不同层级的编程接口和不同的矢量计算类型,Add算子有多种实现方式,具体可参考下表:
203 203 
@@ -213,4 +213,4 @@
213> Ascend 950PR/Ascend 950DT新一代架构在传统[UB](../../../technical_appendix/concepts_and_terms/glossary.md)缓存体系的基础上,开放了寄存器(Register)可编程能力,单个寄存器大小为256B。基于寄存器的矢量计算称为Reg矢量计算,而基于传统UB的矢量计算称为Memory矢量计算。213> Ascend 950PR/Ascend 950DT新一代架构在传统[UB](../../../technical_appendix/concepts_and_terms/glossary.md)缓存体系的基础上,开放了寄存器(Register)可编程能力,单个寄存器大小为256B。基于寄存器的矢量计算称为Reg矢量计算,而基于传统UB的矢量计算称为Memory矢量计算。
214<!-- end id6 -->214<!-- end id6 -->
215 215 
216-若要深入理解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../编程指南/编程模型/编程模型概述.md)。216+若要深入理解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../programming_guide/programming_model/programming_model_overview.md)。
Mdocs/zh/guide/getting_started/quick_start/simd_programming/hello_world.md+3-3
@@ -18,7 +18,7 @@
18 }18 }
19 ```19 ```
20 > [!NOTE]说明20 > [!NOTE]说明
21- > - SIMD算子的Kernel函数需要额外的修饰符,如[`__vector__`](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md)修饰符说明该算子仅在向量计算单元上执行。21+ > - SIMD算子的Kernel函数需要额外的修饰符,如[`__vector__`](../../../programming_guide/language_extension/simd_builtin_keywords.md)修饰符说明该算子仅在向量计算单元上执行。
22 22
23- **Host端代码实现**23- **Host端代码实现**
24 24
@@ -60,6 +60,6 @@
60 > <!-- npu="910b" id3 -->60 > <!-- npu="910b" id3 -->
61 > - Atlas A2 训练系列产品/Atlas A2 推理系列产品61 > - Atlas A2 训练系列产品/Atlas A2 推理系列产品
62 > <!-- end id3 -->62 > <!-- end id3 -->
63- > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后为架构版本号,请替换为您实际使用的版本。各AI处理器型号对应的架构版本号请通过[AI处理器型号和 \_\_NPU\_ARCH\_\_ 的对应关系](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)查询。63+ > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后为架构版本号,请替换为您实际使用的版本。各AI处理器型号对应的架构版本号请通过[AI处理器型号和 \_\_NPU\_ARCH\_\_ 的对应关系](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)查询。
64 64 
65-如需进一步了解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../编程指南/编程模型/编程模型概述.md)。65+如需进一步了解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../programming_guide/programming_model/programming_model_overview.md)。
Mdocs/zh/guide/getting_started/quick_start/simt_programming/gather_op_quick_start.md+4-4
@@ -17,8 +17,8 @@
17- **算子设计**17- **算子设计**
18 18 
19 - **Device端核函数编程接口**19 - **Device端核函数编程接口**
20- - 核函数定义:通过[\_\_global\_\_](../../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#section204112391232)修饰符声明。20+ - 核函数定义:通过[\_\_global\_\_](../../../programming_guide/language_extension/simt_builtin_keywords.md#section204112391232)修饰符声明。
21- - 数据划分:使用内置变量[threadIdx](../../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#li7760123814919)、[blockIdx](../../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#li1676053814914)、[blockDim](../../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#li076017381191)计算线程索引,并为每个线程分配需要处理的数据元素。21+ - 数据划分:使用内置变量[threadIdx](../../../programming_guide/language_extension/simt_builtin_keywords.md#li7760123814919)、[blockIdx](../../../programming_guide/language_extension/simt_builtin_keywords.md#li1676053814914)、[blockDim](../../../programming_guide/language_extension/simt_builtin_keywords.md#li076017381191)计算线程索引,并为每个线程分配需要处理的数据元素。
22 - 数据搬入:无需额外接口,直接通过指针访问即可。22 - 数据搬入:无需额外接口,直接通过指针访问即可。
23 - 数据计算:根据`index`中的索引值及操作符`[]`读取输入数据。23 - 数据计算:根据`index`中的索引值及操作符`[]`读取输入数据。
24 - 数据搬出:无需额外接口,直接通过指针访问即可。24 - 数据搬出:无需额外接口,直接通过指针访问即可。
@@ -125,7 +125,7 @@
125 > <!-- npu="950" id1 -->125 > <!-- npu="950" id1 -->
126 > - Ascend 950PR/Ascend 950DT126 > - Ascend 950PR/Ascend 950DT
127 > <!-- end id1 -->127 > <!-- end id1 -->
128- > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后为架构版本号,请替换为您实际使用的版本。各AI处理器型号对应的架构版本号请通过[AI处理器型号和 \_\_NPU\_ARCH\_\_ 的对应关系](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)查询。128+ > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后为架构版本号,请替换为您实际使用的版本。各AI处理器型号对应的架构版本号请通过[AI处理器型号和 \_\_NPU\_ARCH\_\_ 的对应关系](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)查询。
129 > - 编译选项`--enable-simt`用于启用SIMT编程场景。129 > - 编译选项`--enable-simt`用于启用SIMT编程场景。
130 130 
131-如需进一步了解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../编程指南/编程模型/编程模型概述.md)。131+如需进一步了解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../programming_guide/programming_model/programming_model_overview.md)。
Mdocs/zh/guide/getting_started/quick_start/simt_programming/hello_world.md+2-2
@@ -52,7 +52,7 @@
52 > <!-- npu="950" id1 -->52 > <!-- npu="950" id1 -->
53 > - Ascend 950PR/Ascend 950DT53 > - Ascend 950PR/Ascend 950DT
54 > <!-- end id1 -->54 > <!-- end id1 -->
55- > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后为架构版本号,请替换为您实际使用的版本。各AI处理器型号对应的架构版本号请通过[AI处理器型号和 \_\_NPU\_ARCH\_\_ 的对应关系](../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)查询。55+ > - 编译选项`--npu-arch`用于指定NPU架构版本,`dav-`后为架构版本号,请替换为您实际使用的版本。各AI处理器型号对应的架构版本号请通过[AI处理器型号和 \_\_NPU\_ARCH\_\_ 的对应关系](../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)查询。
56 > - 编译选项`--enable-simt`用于启用SIMT编程场景。56 > - 编译选项`--enable-simt`用于启用SIMT编程场景。
57 57 
58-如需进一步了解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../编程指南/编程模型/编程模型概述.md)。58+如需进一步了解Ascend C的SIMD与SIMT编程模型,请参阅[Ascend C编程模型概述](../../../programming_guide/programming_model/programming_model_overview.md)。
Mdocs/zh/guide/index.md+154-154
@@ -13,181 +13,181 @@
13 - [HelloWorld](getting_started/quick_start/simt_programming/hello_world.md)13 - [HelloWorld](getting_started/quick_start/simt_programming/hello_world.md)
14 - [Gather算子快速入门](getting_started/quick_start/simt_programming/gather_op_quick_start.md)14 - [Gather算子快速入门](getting_started/quick_start/simt_programming/gather_op_quick_start.md)
15 15 
16-- [编程指南](编程指南/本文档组织结构.md)16+- [编程指南](programming_guide/document_structure.md)
17- - [本文档组织结构](编程指南/本文档组织结构.md)17+ - [本文档组织结构](programming_guide/document_structure.md)
18- - [编程模型](编程指南/编程模型/编程模型.md)18+ - [编程模型](programming_guide/programming_model/programming_model.md)
19- - [异构系统](编程指南/编程模型/异构系统.md)19+ - [异构系统](programming_guide/programming_model/heterogeneous_system.md)
20- - [编程模型概述](编程指南/编程模型/编程模型概述.md)20+ - [编程模型概述](programming_guide/programming_model/programming_model_overview.md)
21- - [AI Core SIMD编程](编程指南/编程模型/AI-Core-SIMD编程/AI-Core-SIMD编程.md)21+ - [AI Core SIMD编程](programming_guide/programming_model/ai_core_simd_programming/ai_core_simd_programming.md)
22- - [概述](编程指南/编程模型/AI-Core-SIMD编程/概述.md)22+ - [概述](programming_guide/programming_model/ai_core_simd_programming/overview.md)
23- - [抽象硬件架构](编程指南/编程模型/AI-Core-SIMD编程/抽象硬件架构.md)23+ - [抽象硬件架构](programming_guide/programming_model/ai_core_simd_programming/abstract_hardware_architecture.md)
24- - [核函数](编程指南/编程模型/AI-Core-SIMD编程/核函数.md)24+ - [核函数](programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)
25- - [基于指针的C语言编程](编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.md)25+ - [基于指针的C语言编程](programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md)
26- - [C语言编程概述](编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.md)26+ - [C语言编程概述](programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md)
27- - [Memory矢量计算编程](编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Memory矢量计算编程.md)27+ - [Memory矢量计算编程](programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/memory_vector_computation.md)
28- - [Reg矢量计算编程](编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Reg矢量计算编程.md)28+ - [Reg矢量计算编程](programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/reg_vector_computation.md)
29- - [Cube矩阵计算编程](编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Cube矩阵计算编程.md)29+ - [Cube矩阵计算编程](programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/cube_matrix_computation.md)
30- - [基于Tensor的C++编程](编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/CPPTensor编程概述.md)30+ - [基于Tensor的C++编程](programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md)
31- - [C++ Tensor编程概述](编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/CPPTensor编程概述.md)31+ - [C++ Tensor编程概述](programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md)
32- - [Memory矢量计算编程](编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Memory矢量计算编程.md)32+ - [Memory矢量计算编程](programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/memory_vector_computation.md)
33- - [Reg矢量计算编程](编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.md)33+ - [Reg矢量计算编程](programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md)
34- - [Cube矩阵计算编程](编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Cube矩阵计算编程.md)34+ - [Cube矩阵计算编程](programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cube_matrix_computation.md)
35- - [静态Tensor编程](编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)35+ - [静态Tensor编程](programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)
36- - [基于TPipe和TQue编程](编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md)36+ - [基于TPipe和TQue编程](programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md)
37- - [TPipe-TQue框架编程原理](编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md)37+ - [TPipe-TQue框架编程原理](programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md)
38- - [TPipe-TQue框架编程范式](编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md)38+ - [TPipe-TQue框架编程范式](programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md)
39- - [AI Core SIMT编程](编程指南/编程模型/AI-Core-SIMT编程/AI-Core-SIMT编程.md)39+ - [AI Core SIMT编程](programming_guide/programming_model/ai_core_simt_programming/ai_core_simt_programming.md)
40- - [概述](编程指南/编程模型/AI-Core-SIMT编程/概述.md)40+ - [概述](programming_guide/programming_model/ai_core_simt_programming/overview.md)
41- - [抽象硬件架构](编程指南/编程模型/AI-Core-SIMT编程/抽象硬件架构.md)41+ - [抽象硬件架构](programming_guide/programming_model/ai_core_simt_programming/abstract_hardware_architecture.md)
42- - [线程架构](编程指南/编程模型/AI-Core-SIMT编程/线程架构.md)42+ - [线程架构](programming_guide/programming_model/ai_core_simt_programming/thread_architecture.md)
43- - [内存层级](编程指南/编程模型/AI-Core-SIMT编程/内存层级.md)43+ - [内存层级](programming_guide/programming_model/ai_core_simt_programming/memory_hierarchy.md)
44- - [核函数](编程指南/编程模型/AI-Core-SIMT编程/核函数.md)44+ - [核函数](programming_guide/programming_model/ai_core_simt_programming/kernel_function.md)
45- - [同步机制](编程指南/编程模型/AI-Core-SIMT编程/同步机制.md)45+ - [同步机制](programming_guide/programming_model/ai_core_simt_programming/synchronization.md)
46- - [原子操作](编程指南/编程模型/AI-Core-SIMT编程/原子操作.md)46+ - [原子操作](programming_guide/programming_model/ai_core_simt_programming/atomic_operations.md)
47- - [编程示例](编程指南/编程模型/AI-Core-SIMT编程/编程示例.md)47+ - [编程示例](programming_guide/programming_model/ai_core_simt_programming/programming_examples.md)
48 48 
49- - [AI CPU编程](编程指南/编程模型/AI-CPU编程.md)49+ - [AI CPU编程](programming_guide/programming_model/ai_cpu_programming.md)
50 50 
51- - [编译与运行](编程指南/编译与运行/编译与运行.md)51+ - [编译与运行](programming_guide/compilation_and_execution/compilation_and_execution.md)
52- - [异步执行](编程指南/编译与运行/异步执行.md)52+ - [异步执行](programming_guide/compilation_and_execution/async_execution.md)
53- - [算子编译](编程指南/编译与运行/算子编译/毕昇编译器.md)53+ - [算子编译](programming_guide/compilation_and_execution/operator_compilation/bisheng_compiler.md)
54- - [毕昇编译器](编程指南/编译与运行/算子编译/毕昇编译器.md)54+ - [毕昇编译器](programming_guide/compilation_and_execution/operator_compilation/bisheng_compiler.md)
55- - [AI Core算子编译基本用法](编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md)55+ - [AI Core算子编译基本用法](programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)
56- - [AI CPU算子编译基本用法](编程指南/编译与运行/算子编译/AI-CPU算子编译基本用法.md)56+ - [AI CPU算子编译基本用法](programming_guide/compilation_and_execution/operator_compilation/ai_cpu_operator_compilation.md)
57- - [RTC运行时编译](编程指南/编译与运行/算子编译/RTC运行时编译.md)57+ - [RTC运行时编译](programming_guide/compilation_and_execution/operator_compilation/rtc_runtime_compilation.md)
58- - [约束说明](编程指南/编译与运行/算子编译/约束说明.md)58+ - [约束说明](programming_guide/compilation_and_execution/operator_compilation/constraints.md)
59 59 
60- - [语言扩展层](编程指南/语言扩展层/语言扩展层.md)60+ - [语言扩展层](programming_guide/language_extension/language_extension.md)
61- - [SIMD BuiltIn关键字](编程指南/语言扩展层/SIMD-BuiltIn关键字.md)61+ - [SIMD BuiltIn关键字](programming_guide/language_extension/simd_builtin_keywords.md)
62- - [SIMT BuiltIn关键字](编程指南/语言扩展层/SIMT-BuiltIn关键字.md)62+ - [SIMT BuiltIn关键字](programming_guide/language_extension/simt_builtin_keywords.md)
63- - [SIMD与SIMT混合编程BuiltIn关键字](编程指南/语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.md)63+ - [SIMD与SIMT混合编程BuiltIn关键字](programming_guide/language_extension/simd_simt_hybrid_builtin_keywords.md)
64- - [SIMD语言扩展层C API](编程指南/语言扩展层/SIMD语言扩展层C-API.md)64+ - [SIMD语言扩展层C API](programming_guide/language_extension/simd_language_extension_c_api.md)
65- - [SIMT语言扩展层C API](编程指南/语言扩展层/SIMT语言扩展层C-API.md)65+ - [SIMT语言扩展层C API](programming_guide/language_extension/simt_language_extension_c_api.md)
66 66 
67- - [C++类库API](编程指南/类库API/类库API.md)67+ - [C++类库API](programming_guide/library_api/library_api.md)
68- - [编程接口概述](编程指南/类库API/编程接口概述.md)68+ - [编程接口概述](programming_guide/library_api/programming_interface_overview.md)
69- - [基础API](编程指南/类库API/基础API/概述.md)69+ - [基础API](programming_guide/library_api/basic_api/overview.md)
70- - [概述](编程指南/类库API/基础API/概述.md)70+ - [概述](programming_guide/library_api/basic_api/overview.md)
71- - [接口分类说明](编程指南/类库API/基础API/接口分类说明/连续计算API.md)71+ - [接口分类说明](programming_guide/library_api/basic_api/interface_classification/continuous_compute_api.md)
72- - [连续计算API](编程指南/类库API/基础API/接口分类说明/连续计算API.md)72+ - [连续计算API](programming_guide/library_api/basic_api/interface_classification/continuous_compute_api.md)
73- - [高维切分API](编程指南/类库API/基础API/接口分类说明/高维切分API.md)73+ - [高维切分API](programming_guide/library_api/basic_api/interface_classification/high_dim_split_api.md)
74 74 
75- - [常用操作速查指导](编程指南/类库API/基础API/常用操作速查指导/如何使用掩码操作API.md)75+ - [常用操作速查指导](programming_guide/library_api/basic_api/quick_reference/how_to_use_mask_api.md)
76- - [如何使用掩码操作API](编程指南/类库API/基础API/常用操作速查指导/如何使用掩码操作API.md)76+ - [如何使用掩码操作API](programming_guide/library_api/basic_api/quick_reference/how_to_use_mask_api.md)
77- - [如何使用归约计算API](编程指南/类库API/基础API/常用操作速查指导/如何使用归约计算API.md)77+ - [如何使用归约计算API](programming_guide/library_api/basic_api/quick_reference/how_to_use_reduction_api.md)
78 78 
79- - [高阶API](编程指南/类库API/高阶API/概述.md)79+ - [高阶API](programming_guide/library_api/advanced_api/overview.md)
80- - [概述](编程指南/类库API/高阶API/概述.md)80+ - [概述](programming_guide/library_api/advanced_api/overview.md)
81- - [常用操作速查指导](编程指南/类库API/高阶API/常用操作速查指导/如何使用Tiling依赖的头文件.md)81+ - [常用操作速查指导](programming_guide/library_api/advanced_api/quick_reference/how_to_use_tiling_headers.md)
82- - [如何使用Tiling依赖的头文件](编程指南/类库API/高阶API/常用操作速查指导/如何使用Tiling依赖的头文件.md)82+ - [如何使用Tiling依赖的头文件](programming_guide/library_api/advanced_api/quick_reference/how_to_use_tiling_headers.md)
83- - [如何使用Kernel侧临时空间](编程指南/类库API/高阶API/常用操作速查指导/如何使用Kernel侧临时空间.md)83+ - [如何使用Kernel侧临时空间](programming_guide/library_api/advanced_api/quick_reference/how_to_use_kernel_temp_space.md)
84 84 
85- - [Utils API](编程指南/类库API/Utils-API.md)85+ - [Utils API](programming_guide/library_api/utils_api.md)
86 86 
87- - [调试调优](编程指南/调试调优/调试调优.md)87+ - [调试调优](programming_guide/debug_and_tuning/debug_and_tuning.md)
88- - [概述](编程指南/调试调优/概述.md)88+ - [概述](programming_guide/debug_and_tuning/overview.md)
89- - [功能调试](编程指南/调试调优/功能调试/功能调试.md)89+ - [功能调试](programming_guide/debug_and_tuning/functional_debug/functional_debug.md)
90- - [CPU域孪生调试](编程指南/调试调优/功能调试/CPU域孪生调试.md)90+ - [CPU域孪生调试](programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md)
91- - [NPU域上板调试](编程指南/调试调优/功能调试/NPU域上板调试.md)91+ - [NPU域上板调试](programming_guide/debug_and_tuning/functional_debug/npu_board_debug.md)
92 92 
93- - [性能调优](编程指南/调试调优/性能调优.md)93+ - [性能调优](programming_guide/debug_and_tuning/performance_tuning.md)
94 94 
95- - [高级编程](./编程指南/高级编程/高级编程.md)95+ - [高级编程](./programming_guide/advanced_programming/advanced_programming.md)
96- - [硬件实现](./编程指南/高级编程/硬件实现/硬件实现.md)96+ - [硬件实现](./programming_guide/advanced_programming/hardware_implementation/hardware_implementation.md)
97- - [基本架构](./编程指南/高级编程/硬件实现/基本架构.md)97+ - [基本架构](./programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)
98- - [架构规格](./编程指南/高级编程/硬件实现/架构规格/架构规格.md)98+ - [架构规格](./programming_guide/advanced_programming/hardware_implementation/architecture_spec/architecture_spec.md)
99- - [NPU架构版本2002](./编程指南/高级编程/硬件实现/架构规格/NPU架构版本2002.md)99+ - [NPU架构版本2002](./programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2002.md)
100- - [NPU架构版本2201](./编程指南/高级编程/硬件实现/架构规格/NPU架构版本2201.md)100+ - [NPU架构版本2201](./programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2201.md)
101- - [NPU架构版本3002](./编程指南/高级编程/硬件实现/架构规格/NPU架构版本3002.md)101+ - [NPU架构版本3002](./programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3002.md)
102- - [NPU架构版本3510](./编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md)102+ - [NPU架构版本3510](./programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md)
103 103 
104- - [硬件约束](./编程指南/高级编程/硬件实现/硬件约束/NPU架构版本2002.md)104+ - [硬件约束](./programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2002.md)
105- - [NPU架构版本2002](./编程指南/高级编程/硬件实现/硬件约束/NPU架构版本2002.md)105+ - [NPU架构版本2002](./programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2002.md)
106- - [NPU架构版本2201](./编程指南/高级编程/硬件实现/硬件约束/NPU架构版本2201.md)106+ - [NPU架构版本2201](./programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2201.md)
107 107
108- - [内存模型](./编程指南/高级编程/内存模型/内存模型.md)108+ - [内存模型](./programming_guide/advanced_programming/memory_model/memory_model.md)
109- - [缓存一致性](./编程指南/高级编程/内存模型/缓存一致性.md)109+ - [缓存一致性](./programming_guide/advanced_programming/memory_model/cache_coherence.md)
110 110 
111- - [高级AI Core编程模型](./编程指南/高级编程/高级AI-Core编程模型/高级AI-Core编程模型.md)111+ - [高级AI Core编程模型](./programming_guide/advanced_programming/advanced_ai_core_programming_model/advanced_ai_core_programming_model.md)
112- - [SIMD与SIMT混合编程](./编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md)112+ - [SIMD与SIMT混合编程](./programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md)
113- - [概述](./编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md)113+ - [概述](./programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md)
114- - [抽象硬件架构](./编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/抽象硬件架构.md)114+ - [抽象硬件架构](./programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/abstract_hardware_architecture.md)
115- - [核函数与VF函数](./编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/核函数与VF函数.md)115+ - [核函数与VF函数](./programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/kernel_and_vf_functions.md)
116- - [内存层级](./编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/内存层级.md)116+ - [内存层级](./programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/memory_hierarchy.md)
117- - [编程示例](./编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/编程示例.md)117+ - [编程示例](./programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/programming_examples.md)
118 118 
119- - [SuperKernel](./编程指南/高级编程/SuperKernel/原理介绍.md)119+ - [SuperKernel](./programming_guide/advanced_programming/super_kernel/principles.md)
120- - [原理介绍](./编程指南/高级编程/SuperKernel/原理介绍.md)120+ - [原理介绍](./programming_guide/advanced_programming/super_kernel/principles.md)
121- - [算子适配说明](./编程指南/高级编程/SuperKernel/算子适配说明.md)121+ - [算子适配说明](./programming_guide/advanced_programming/super_kernel/operator_adaptation.md)
122- - [核函数直调算子额外适配说明](./编程指南/高级编程/SuperKernel/核函数直调算子额外适配说明.md)122+ - [核函数直调算子额外适配说明](./programming_guide/advanced_programming/super_kernel/kernel_direct_call_adaptation.md)
123- - [算子自验证说明](./编程指南/高级编程/SuperKernel/算子自验证说明.md)123+ - [算子自验证说明](./programming_guide/advanced_programming/super_kernel/operator_self_verification.md)
124 124 
125- - [Aclnn算子工程化开发](./编程指南/高级编程/Aclnn算子工程化开发/概述.md)125+ - [Aclnn算子工程化开发](./programming_guide/advanced_programming/aclnn_operator_development/overview.md)
126- - [概述](./编程指南/高级编程/Aclnn算子工程化开发/概述.md)126+ - [概述](./programming_guide/advanced_programming/aclnn_operator_development/overview.md)
127- - [快速入门](./编程指南/高级编程/Aclnn算子工程化开发/Aclnn算子工程化开发快速入门.md)127+ - [快速入门](./programming_guide/advanced_programming/aclnn_operator_development/aclnn_quick_start.md)
128- - [设计与实现](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子功能设计.md)128+ - [设计与实现](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_function_design.md)
129- - [算子功能设计](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子功能设计.md)129+ - [算子功能设计](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_function_design.md)
130- - [算子原型定义](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子原型定义.md)130+ - [算子原型定义](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)
131- - [Host侧Tiling实现](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md)131+ - [Host侧Tiling实现](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md)
132- - [Kernel侧算子实现](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Kernel侧算子实现.md)132+ - [Kernel侧算子实现](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/kernel_operator_implementation.md)
133- - [多分支策略](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/多分支策略.md)133+ - [多分支策略](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/multi_branch_strategy.md)
134- - [通过TilingData传递属性信息](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/通过TilingData传递属性信息.md)134+ - [通过TilingData传递属性信息](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/tiling_data_attributes.md)
135- - [使用高阶API时配套的Tiling实现](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/使用高阶API时配套的Tiling实现.md)135+ - [使用高阶API时配套的Tiling实现](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/tiling_with_advanced_api.md)
136- - [Kernel侧输出shape依赖计算](./编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Kernel侧输出shape依赖计算.md)136+ - [Kernel侧输出shape依赖计算](./programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/kernel_output_shape_computation.md)
137- - [编译与部署](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md)137+ - [编译与部署](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md)
138- - [基本流程](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md)138+ - [基本流程](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md)
139- - [交叉编译](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/交叉编译.md)139+ - [交叉编译](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/cross_compilation.md)
140- - [多算子包组织](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/多算子包组织.md)140+ - [多算子包组织](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/multi_operator_package.md)
141- - [算子动态库和静态库编译](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/算子动态库和静态库编译.md)141+ - [算子动态库和静态库编译](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/dynamic_static_lib_compilation.md)
142- - [编译加速](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/编译加速.md)142+ - [编译加速](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/compilation_acceleration.md)
143- - [编译过程调试](./编程指南/高级编程/Aclnn算子工程化开发/编译与部署/编译过程调试.md)143+ - [编译过程调试](./programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/compilation_debug.md)
144- - [调用](./编程指南/高级编程/Aclnn算子工程化开发/调用/单算子API调用.md)144+ - [调用](./programming_guide/advanced_programming/aclnn_operator_development/invocation/single_operator_api_call.md)
145- - [单算子API调用](./编程指南/高级编程/Aclnn算子工程化开发/调用/单算子API调用.md)145+ - [单算子API调用](./programming_guide/advanced_programming/aclnn_operator_development/invocation/single_operator_api_call.md)
146- - [运行时加载机制](./编程指南/高级编程/Aclnn算子工程化开发/调用/运行时加载机制.md)146+ - [运行时加载机制](./programming_guide/advanced_programming/aclnn_operator_development/invocation/runtime_loading_mechanism.md)
147- - [附录](./编程指南/高级编程/Aclnn算子工程化开发/附录/附录.md)147+ - [附录](./programming_guide/advanced_programming/aclnn_operator_development/appendix/appendix.md)
148- - [命名转换规则对照表](./编程指南/高级编程/Aclnn算子工程化开发/附录/命名转换规则对照表.md)148+ - [命名转换规则对照表](./programming_guide/advanced_programming/aclnn_operator_development/appendix/naming_conversion_table.md)
149- - [CMake函数参考](./编程指南/高级编程/Aclnn算子工程化开发/附录/cmake函数参考.md)149+ - [CMake函数参考](./programming_guide/advanced_programming/aclnn_operator_development/appendix/cmake_function_reference.md)
150- - [外部样例链接汇总](./编程指南/高级编程/Aclnn算子工程化开发/附录/外部样例链接汇总.md)150+ - [外部样例链接汇总](./programming_guide/advanced_programming/aclnn_operator_development/appendix/external_sample_links.md)
151- - [算子入图开发](./编程指南/高级编程/算子入图开发/概述.md)151+ - [算子入图开发](./programming_guide/advanced_programming/operator_graph_development/overview.md)
152- - [概述](./编程指南/高级编程/算子入图开发/概述.md)152+ - [概述](./programming_guide/advanced_programming/operator_graph_development/overview.md)
153- - [基本开发流程](./编程指南/高级编程/算子入图开发/基本开发流程.md)153+ - [基本开发流程](./programming_guide/advanced_programming/operator_graph_development/basic_development_flow.md)
154- - [开启Tiling下沉](./编程指南/高级编程/算子入图开发/开启Tiling下沉.md)154+ - [开启Tiling下沉](./programming_guide/advanced_programming/operator_graph_development/enable_tiling_sink.md)
155- - [图编译和图执行](./编程指南/高级编程/算子入图开发/图编译和图执行.md)155+ - [图编译和图执行](./programming_guide/advanced_programming/operator_graph_development/graph_compilation_and_execution.md)
156 156 
157- - [AI框架算子适配](./编程指南/高级编程/AI框架算子适配/概述.md)157+ - [AI框架算子适配](./programming_guide/advanced_programming/ai_framework_adaptation/overview.md)
158- - [概述](./编程指南/高级编程/AI框架算子适配/概述.md)158+ - [概述](./programming_guide/advanced_programming/ai_framework_adaptation/overview.md)
159- - [PyTorch框架](./编程指南/高级编程/AI框架算子适配/PyTorch框架.md)159+ - [PyTorch框架](./programming_guide/advanced_programming/ai_framework_adaptation/pytorch_framework.md)
160- - [ONNX框架](./编程指南/高级编程/AI框架算子适配/ONNX框架/适配插件开发.md)160+ - [ONNX框架](./programming_guide/advanced_programming/ai_framework_adaptation/onnx_framework/adaptation_plugin_development.md)
161- - [适配插件开发](./编程指南/高级编程/AI框架算子适配/ONNX框架/适配插件开发.md)161+ - [适配插件开发](./programming_guide/advanced_programming/ai_framework_adaptation/onnx_framework/adaptation_plugin_development.md)
162- - [调用样例](./编程指南/高级编程/AI框架算子适配/ONNX框架/调用样例.md)162+ - [调用样例](./programming_guide/advanced_programming/ai_framework_adaptation/onnx_framework/call_examples.md)
163 163 
164- - [TensorFlow框架](./编程指南/高级编程/AI框架算子适配/TensorFlow框架.md)164+ - [TensorFlow框架](./programming_guide/advanced_programming/ai_framework_adaptation/tensorflow_framework.md)
165 165 
166- - [SIMT协作组](./编程指南/高级编程/SIMT协作组.md)166+ - [SIMT协作组](./programming_guide/advanced_programming/simt_cooperative_groups.md)
167 167 
168- - [AOT编译优化](./编程指南/高级编程/AOT编译优化.md)168+ - [AOT编译优化](./programming_guide/advanced_programming/aot_compilation_optimization.md)
169 169 
170- - [附录](编程指南/附录/show_kernel_debug_data工具.md)170+ - [附录](programming_guide/appendix/show_kernel_debug_data_tool.md)
171- - [show_kernel_debug_data工具](编程指南/附录/show_kernel_debug_data工具.md)171+ - [show_kernel_debug_data工具](programming_guide/appendix/show_kernel_debug_data_tool.md)
172- - [msobjdump工具](编程指南/附录/msobjdump工具.md)172+ - [msobjdump工具](programming_guide/appendix/msobjdump_tool.md)
173- - [optype_collector工具](编程指南/附录/optype_collector工具.md)173+ - [optype_collector工具](programming_guide/appendix/optype_collector_tool.md)
174- - [基于样例工程完成Kernel直调](编程指南/附录/基于样例工程完成Kernel直调.md)174+ - [基于样例工程完成Kernel直调](programming_guide/appendix/kernel_direct_call_from_sample.md)
175- - [常用操作](编程指南/附录/常用操作/如何开发动态输入算子.md)175+ - [常用操作](programming_guide/appendix/common_operations/develop_dynamic_input_operator.md)
176- - [如何开发动态输入算子](编程指南/附录/常用操作/如何开发动态输入算子.md)176+ - [如何开发动态输入算子](programming_guide/appendix/common_operations/develop_dynamic_input_operator.md)
177- - [如何在矢量编程时启用Vector Core](编程指南/附录/常用操作/如何在矢量编程时启用Vector-Core.md)177+ - [如何在矢量编程时启用Vector Core](programming_guide/appendix/common_operations/enable_vector_core.md)
178- - [如何使用workspace](编程指南/附录/常用操作/如何使用workspace.md)178+ - [如何使用workspace](programming_guide/appendix/common_operations/how_to_use_workspace.md)
179- - [如何进行Tiling调测](编程指南/附录/常用操作/如何进行Tiling调测.md)179+ - [如何进行Tiling调测](programming_guide/appendix/common_operations/tiling_debug.md)
180- - [如何使用Tensor原地操作提升算子性能](编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.md)180+ - [如何使用Tensor原地操作提升算子性能](programming_guide/appendix/common_operations/tensor_inplace_performance.md)
181 181 
182- - [FAQ](编程指南/附录/FAQ/核函数运行验证时算子存在精度问题.md)182+ - [FAQ](programming_guide/appendix/faq/kernel_precision_issue.md)
183- - [核函数运行验证时算子存在精度问题](编程指南/附录/FAQ/核函数运行验证时算子存在精度问题.md)183+ - [核函数运行验证时算子存在精度问题](programming_guide/appendix/faq/kernel_precision_issue.md)
184- - [运行验证时AllocTensor/FreeTensor失败](编程指南/附录/FAQ/运行验证时AllocTensor-FreeTensor失败.md)184+ - [运行验证时AllocTensor/FreeTensor失败](programming_guide/appendix/faq/alloc_free_tensor_failure.md)
185- - [kernel侧获取Tiling信息不正确](编程指南/附录/FAQ/kernel侧获取Tiling信息不正确.md)185+ - [kernel侧获取Tiling信息不正确](programming_guide/appendix/faq/kernel_tiling_info_incorrect.md)
186- - [Kernel编译时报错"error: out of jump/jumpc imm range"](编程指南/附录/FAQ/Kernel编译时报错-error-out-of-jump-jumpc-imm-range.md)186+ - [Kernel编译时报错"error: out of jump/jumpc imm range"](programming_guide/appendix/faq/kernel_compile_jump_range_error.md)
187- - [含有Matmul高阶API的算子精度问题](编程指南/附录/FAQ/含有Matmul高阶API的算子精度问题.md)187+ - [含有Matmul高阶API的算子精度问题](programming_guide/appendix/faq/matmul_advanced_api_precision.md)
188- - [算子工程编译时出现文件名过长报错](编程指南/附录/FAQ/算子工程编译时出现文件名过长报错.md)188+ - [算子工程编译时出现文件名过长报错](programming_guide/appendix/faq/filename_too_long_error.md)
189- - [调用算子时出现无法打开config.ini的报错](编程指南/附录/FAQ/调用算子时出现无法打开config-ini的报错.md)189+ - [调用算子时出现无法打开config.ini的报错](programming_guide/appendix/faq/config_ini_open_error.md)
190- - [算子包部署时出现权限不足报错](编程指南/附录/FAQ/算子包部署时出现权限不足报错.md)190+ - [算子包部署时出现权限不足报错](programming_guide/appendix/faq/operator_deploy_permission_error.md)
191 191 
192 192 
193- [算子实践参考](算子实践参考/本文档组织结构.md)193- [算子实践参考](算子实践参考/本文档组织结构.md)
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/Aclnn算子工程化开发快速入门.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/aclnn_quick_start.md+6-6
@@ -243,7 +243,7 @@ extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z
243}243}
244```244```
245 245 
246-> 以上代码展示了[Kernel侧算子实现](./设计与实现/Kernel侧算子实现.md)的基本模式。246+> 以上代码展示了[Kernel侧算子实现](./design_and_implementation/kernel_operator_implementation.md)的基本模式。
247 247 
248### 修改Tiling与Host侧实现248### 修改Tiling与Host侧实现
249 249 
@@ -294,9 +294,9 @@ static ge::graphStatus TilingFunc(gert::TilingContext *context)
294} // namespace optiling294} // namespace optiling
295```295```
296 296 
297-保留文件末尾自动生成的`namespace ge`(InferShape/InferDataType)和`namespace ops`([算子原型注册](./设计与实现/算子原型定义.md))代码不变。297+保留文件末尾自动生成的`namespace ge`(InferShape/InferDataType)和`namespace ops`([算子原型注册](./design_and_implementation/operator_prototype_definition.md))代码不变。
298 298 
299-> 以上代码展示了[Host侧Tiling实现](./设计与实现/Host侧Tiling实现.md)中Tiling函数和TilingData数据结构的基本写法。299+> 以上代码展示了[Host侧Tiling实现](./design_and_implementation/host_tiling_implementation.md)中Tiling函数和TilingData数据结构的基本写法。
300 300 
301### 编译301### 编译
302 302 
@@ -309,7 +309,7 @@ cd AddCustom
309 309 
310编译成功后,编译产物输出在`build_out`目录下,其中包含`.run`格式的算子安装包。310编译成功后,编译产物输出在`build_out`目录下,其中包含`.run`格式的算子安装包。
311 311 
312-> 如需了解编译配置选项、动态库/静态库编译等更多选项,请参考[算子工程编译](./编译与部署/基本流程.md)。312+> 如需了解编译配置选项、动态库/静态库编译等更多选项,请参考[算子工程编译](./compilation_and_deployment/basic_process.md)。
313 313 
314### 部署314### 部署
315 315 
@@ -337,7 +337,7 @@ customize
337export LD_LIBRARY_PATH=/usr/local/Ascend/cann/opp/vendors/customize/op_api/lib/:${LD_LIBRARY_PATH}337export LD_LIBRARY_PATH=/usr/local/Ascend/cann/opp/vendors/customize/op_api/lib/:${LD_LIBRARY_PATH}
338```338```
339 339 
340-> `LD_LIBRARY_PATH`用于设置加载动态库时的搜寻路径列表,如需了解算子包部署路径、多版本管理等更多选项,请参考[算子包部署](./编译与部署/基本流程.md)。340+> `LD_LIBRARY_PATH`用于设置加载动态库时的搜寻路径列表,如需了解算子包部署路径、多版本管理等更多选项,请参考[算子包部署](./compilation_and_deployment/basic_process.md)。
341 341 
342### 调用算子342### 调用算子
343 343 
@@ -560,4 +560,4 @@ test pass
560 560 
561## 下一步指引561## 下一步指引
562 562 
563-恭喜您完成了第一个算子的端到端开发!接下来建议按[概述](./概述.md)里的路径继续学习。563+恭喜您完成了第一个算子的端到端开发!接下来建议按[概述](./overview.md)里的路径继续学习。
Adocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/appendix.md+7-0
@@ -0,0 +1,7 @@
1+# 附录
2+ 
3+- **[命名转换规则对照表](naming_conversion_table.md)**
4+ 
5+- **[cmake函数参考](cmake_function_reference.md)**
6+ 
7+- **[外部样例链接汇总](external_sample_links.md)**
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/附录/cmake函数参考.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/cmake_function_reference.md+4-4
@@ -228,7 +228,7 @@ npu_op_kernel_sources(<target_name> [OP_TYPE <op_type>] [KERNEL_DIR <path>] [COM
228- `[OP_TYPE <op_type>]`(可选):算子类型,必须与`KERNEL_FILE`同时存在。228- `[OP_TYPE <op_type>]`(可选):算子类型,必须与`KERNEL_FILE`同时存在。
229- `[KERNEL_DIR <path>]`(可选):指定Kernel源码相对于`SRC_BASE`的相对路径。若算子的源码文件没有平铺在`SRC_BASE`目录(通过`npu_op_kernel_library`设置)下,可以通过`KERNEL_DIR`指定特定目录。229- `[KERNEL_DIR <path>]`(可选):指定Kernel源码相对于`SRC_BASE`的相对路径。若算子的源码文件没有平铺在`SRC_BASE`目录(通过`npu_op_kernel_library`设置)下,可以通过`KERNEL_DIR`指定特定目录。
230- `[COMPUTE_UNIT <soc_version>]`(可选):设置`KERNEL_FILE``<soc_version>`型号生效。默认`KERNEL_FILE`对所有型号生效。230- `[COMPUTE_UNIT <soc_version>]`(可选):设置`KERNEL_FILE``<soc_version>`型号生效。默认`KERNEL_FILE`对所有型号生效。
231-- `[KERNEL_FILE <file>]`(可选):指定算子入口的Kernel实现文件名。若算子的Kernel实现cpp文件需要自定义命名,需同时指定`OP_TYPE`(算子类型)和`KERNEL_FILE`(Kernel实现cpp文件名),以配置两者之间的对应关系。不配置时,Kernel实现cpp文件名和OpType之间需满足转换规则,参考[命名转换规则对照表](./命名转换规则对照表.md)。231+- `[KERNEL_FILE <file>]`(可选):指定算子入口的Kernel实现文件名。若算子的Kernel实现cpp文件需要自定义命名,需同时指定`OP_TYPE`(算子类型)和`KERNEL_FILE`(Kernel实现cpp文件名),以配置两者之间的对应关系。不配置时,Kernel实现cpp文件名和OpType之间需满足转换规则,参考[命名转换规则对照表](./naming_conversion_table.md)。
232 232 
233**示例:**233**示例:**
234 234 
@@ -300,6 +300,6 @@ npu_op_code_gen(
300 300 
301## 相关文档301## 相关文档
302 302 
303-- [算子工程编译拓展](../编译与部署/基本流程.md#advanced-build-organization) — 完整的CMakeLists.txt编写方法与编译命令说明。303+- [算子工程编译拓展](../compilation_and_deployment/basic_process.md#advanced-build-organization) — 完整的CMakeLists.txt编写方法与编译命令说明。
304-- [算子原型定义](../设计与实现/算子原型定义.md) — Kernel实现文件名与OpType的转换规则。304+- [算子原型定义](../design_and_implementation/operator_prototype_definition.md) — Kernel实现文件名与OpType的转换规则。
305-- [如何使用workspace](../../../附录/常用操作/如何使用workspace.md) — Tiling函数中workspace的设置方法。305+- [如何使用workspace](../../../appendix/common_operations/how_to_use_workspace.md) — Tiling函数中workspace的设置方法。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/附录/外部样例链接汇总.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/external_sample_links.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/附录/命名转换规则对照表.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/appendix/naming_conversion_table.md+3-3
@@ -82,6 +82,6 @@ Reduce -> reduce
82 82 
83## 相关文档83## 相关文档
84 84 
85-- [算子原型定义](../设计与实现/算子原型定义.md):了解OpType、`OpDef`类和`OP_ADD`注册方法。85+- [算子原型定义](../design_and_implementation/operator_prototype_definition.md):了解OpType、`OpDef`类和`OP_ADD`注册方法。
86-- [Kernel侧算子实现](../设计与实现/Kernel侧算子实现.md):了解Kernel入口格式和参数顺序。86+- [Kernel侧算子实现](../design_and_implementation/kernel_operator_implementation.md):了解Kernel入口格式和参数顺序。
87-- [单算子API调用](../调用/单算子API调用.md):了解两段式aclnn接口及其参数命名规则。87+- [单算子API调用](../invocation/single_operator_api_call.md):了解两段式aclnn接口及其参数命名规则。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/基本流程.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md+15-15
@@ -4,7 +4,7 @@
4 4 
5- 编译Ascend C算子Kernel侧代码实现文件\*.cpp,分为源码发布和二进制发布两种方式。5- 编译Ascend C算子Kernel侧代码实现文件\*.cpp,分为源码发布和二进制发布两种方式。
6 - **源码发布**<a id="source-release"></a>:不对算子Kernel侧实现进行编译,保留算子Kernel源码文件\*.cpp。该方式可以支持算子的在线编译、通过ATC模型转换的方式编译算子的场景。6 - **源码发布**<a id="source-release"></a>:不对算子Kernel侧实现进行编译,保留算子Kernel源码文件\*.cpp。该方式可以支持算子的在线编译、通过ATC模型转换的方式编译算子的场景。
7- - **二进制发布**:对算子Kernel侧实现进行编译,生成描述算子相关信息的json文件\*.json和算子二进制文件\*.o。算子调用时,如果需要直接调用算子二进制,则使用该编译方式,比如通过[单算子API调用](../调用/单算子API调用.md)的方式完成单算子的调用,PyTorch框架中单算子调用的场景,动态网络中调用算子的场景。7+ - **二进制发布**:对算子Kernel侧实现进行编译,生成描述算子相关信息的json文件\*.json和算子二进制文件\*.o。算子调用时,如果需要直接调用算子二进制,则使用该编译方式,比如通过[单算子API调用](../invocation/single_operator_api_call.md)的方式完成单算子的调用,PyTorch框架中单算子调用的场景,动态网络中调用算子的场景。
8 8 
9- 编译Ascend C算子Host侧代码实现文件\*.cpp、\*.h。9- 编译Ascend C算子Host侧代码实现文件\*.cpp、\*.h。
10 - 将原型定义和shape推导实现编译成算子原型定义动态库libcust\_opsproto\_\*.so,并生成算子原型对外接口op\_proto.h。10 - 将原型定义和shape推导实现编译成算子原型定义动态库libcust\_opsproto\_\*.so,并生成算子原型对外接口op\_proto.h。
@@ -18,7 +18,7 @@
18 18 
19### 基本流程19### 基本流程
20 20 
21-使用msOpGen生成的工程,已经包含完整CMake结构,不需要单独编写CMakeLists.txt处理;如果需要自行编写CMakeLists.txt,请参考[编译组织](#编译组织)。以[快速入门的AddCustom](../Aclnn算子工程化开发快速入门.md)为例,msOpGen生成的算子工程编译部署只需三步:21+使用msOpGen生成的工程,已经包含完整CMake结构,不需要单独编写CMakeLists.txt处理;如果需要自行编写CMakeLists.txt,请参考[编译组织](#编译组织)。以[快速入门的AddCustom](../aclnn_quick_start.md)为例,msOpGen生成的算子工程编译部署只需三步:
22 22 
231. 修改`CMakePresets.json`,填写`ASCEND_COMPUTE_UNIT`(AI处理器型号)和`vendor_name`(厂商名称)等编译配置选项;231. 修改`CMakePresets.json`,填写`ASCEND_COMPUTE_UNIT`(AI处理器型号)和`vendor_name`(厂商名称)等编译配置选项;
242. 执行`./build.sh`,生成`custom_opp_*.run`安装包;242. 执行`./build.sh`,生成`custom_opp_*.run`安装包;
@@ -44,7 +44,7 @@
44| PATH | ASCEND_CANN_PACKAGE_PATH | - | CANN软件包路径,默认路径示例如下:/usr/local/Ascend/cann。 |44| PATH | ASCEND_CANN_PACKAGE_PATH | - | CANN软件包路径,默认路径示例如下:/usr/local/Ascend/cann。 |
45| BOOL | ENABLE_SOURCE_PACKAGE | TRUE | 是否开启源码编译,如果使用npu_op_package配置了源码和二进制编译相关配置,npu_op_package配置的优先级更高。 |45| BOOL | ENABLE_SOURCE_PACKAGE | TRUE | 是否开启源码编译,如果使用npu_op_package配置了源码和二进制编译相关配置,npu_op_package配置的优先级更高。 |
46| BOOL | ENABLE_BINARY_PACKAGE | TRUE | 是否开启二进制编译,package的类型配置为SHARED或STATIC时,必须指定为TRUE。如果使用npu_op_package配置了源码和二进制编译相关配置,npu_op_package配置的优先级更高。 |46| BOOL | ENABLE_BINARY_PACKAGE | TRUE | 是否开启二进制编译,package的类型配置为SHARED或STATIC时,必须指定为TRUE。如果使用npu_op_package配置了源码和二进制编译相关配置,npu_op_package配置的优先级更高。 |
47-| BOOL | ENABLE_CROSS_COMPILE | FALSE | 是否启用交叉编译,参考[交叉编译](./交叉编译.md)。 |47+| BOOL | ENABLE_CROSS_COMPILE | FALSE | 是否启用交叉编译,参考[交叉编译](./cross_compilation.md)。 |
48| PATH | CMAKE_CROSS_PLATFORM_COMPILER | /your/cross/compiler/path | 交叉编译工具路径。 |48| PATH | CMAKE_CROSS_PLATFORM_COMPILER | /your/cross/compiler/path | 交叉编译工具路径。 |
49| BOOL | ASCEND_PACK_SHARED_LIBRARY | FALSE | 是否开启动态库编译。 |49| BOOL | ASCEND_PACK_SHARED_LIBRARY | FALSE | 是否开启动态库编译。 |
50| BOOL | ASCEND_SKIP_FAILED_COMPUTE_UNIT | FALSE | 该参数用于控制部分AI处理器型号对应的算子编译失败时,是否跳过失败并继续编译其他型号的算子,设置成True为跳过失败,跳过失败不影响其他AI处理器型号对应算子的编译流程;设置成False,遇到失败会影响其他AI处理器型号对应算子的编译流程。 |50| BOOL | ASCEND_SKIP_FAILED_COMPUTE_UNIT | FALSE | 该参数用于控制部分AI处理器型号对应的算子编译失败时,是否跳过失败并继续编译其他型号的算子,设置成True为跳过失败,跳过失败不影响其他AI处理器型号对应算子的编译流程;设置成False,遇到失败会影响其他AI处理器型号对应算子的编译流程。 |
@@ -106,7 +106,7 @@ npu_op_package(${vendor_name}
106)106)
107```107```
108 108 
109-其他配置(如动态库编译、交叉编译等)也可在CMakeLists.txt中通过变量或`npu_op_package` CONFIG参数设置。完整参数说明请参考[cmake函数参考](../附录/cmake函数参考.md)。109+其他配置(如动态库编译、交叉编译等)也可在CMakeLists.txt中通过变量或`npu_op_package` CONFIG参数设置。完整参数说明请参考[cmake函数参考](../appendix/cmake_function_reference.md)。
110 110 
111需要注意如果`npu_op_package(... CONFIG ...)`中硬编码了`ENABLE_SOURCE_PACKAGE``ENABLE_BINARY_PACKAGE`的值(如本节样例直接写True),命令行或`CMakePresets.json`中的同名变量将无法覆盖。要允许外部变量生效,CONFIG中应使用`${ENABLE_SOURCE_PACKAGE}``${ENABLE_BINARY_PACKAGE}`变量形式。111需要注意如果`npu_op_package(... CONFIG ...)`中硬编码了`ENABLE_SOURCE_PACKAGE``ENABLE_BINARY_PACKAGE`的值(如本节样例直接写True),命令行或`CMakePresets.json`中的同名变量将无法覆盖。要允许外部变量生效,CONFIG中应使用`${ENABLE_SOURCE_PACKAGE}``${ENABLE_BINARY_PACKAGE}`变量形式。
112 112 
@@ -429,7 +429,7 @@ npu_op_package_add(${package_name}
4291. 使用**npu\_op\_kernel\_options**添加[算子编译选项](#自定义编译选项进阶)。4291. 使用**npu\_op\_kernel\_options**添加[算子编译选项](#自定义编译选项进阶)。
4302. 使用**npu\_op\_kernel\_sources**指定算子特定目录与编译源文件。4302. 使用**npu\_op\_kernel\_sources**指定算子特定目录与编译源文件。
431 - 若算子的源码文件没有平铺在`SRC_BASE`目录(通过`npu_op_kernel_library`设置)下,可以通过`KERNEL_DIR`指定特定目录。431 - 若算子的源码文件没有平铺在`SRC_BASE`目录(通过`npu_op_kernel_library`设置)下,可以通过`KERNEL_DIR`指定特定目录。
432- - 若算子的Kernel实现cpp文件需要自定义命名,需同时指定`OP_TYPE`(算子类型)和`KERNEL_FILE`(Kernel实现cpp文件名),以配置两者之间的对应关系。不配置时,Kernel实现cpp文件名和OpType之间需满足[转换规则](../附录/命名转换规则对照表.md)。432+ - 若算子的Kernel实现cpp文件需要自定义命名,需同时指定`OP_TYPE`(算子类型)和`KERNEL_FILE`(Kernel实现cpp文件名),以配置两者之间的对应关系。不配置时,Kernel实现cpp文件名和OpType之间需满足[转换规则](../appendix/naming_conversion_table.md)。
433 433 
4343. 使用**npu\_op\_kernel\_library**编译Kernel库。4343. 使用**npu\_op\_kernel\_library**编译Kernel库。
4354. 使用**npu\_op\_package\_add**添加上述Kernel侧库到对应package中。4354. 使用**npu\_op\_package\_add**添加上述Kernel侧库到对应package中。
@@ -599,7 +599,7 @@ npu_op_package_add(${package_name}
599- `SRC_BASE`指向所有算子目录共同的源码根目录,`KERNEL_DIR`指向具体算子子目录。599- `SRC_BASE`指向所有算子目录共同的源码根目录,`KERNEL_DIR`指向具体算子子目录。
600- 各算子的Host、Kernel、Tiling文件集中在同一目录下。600- 各算子的Host、Kernel、Tiling文件集中在同一目录下。
601 601 
602-> 详细cmake函数参数请参考[cmake函数参考](../附录/cmake函数参考.md)。602+> 详细cmake函数参数请参考[cmake函数参考](../appendix/cmake_function_reference.md)。
603 603 
604完成编译组织之后,可按照[基本流程](#基本流程)的三个步骤完成算子编译与部署。604完成编译组织之后,可按照[基本流程](#基本流程)的三个步骤完成算子编译与部署。
605 605 
@@ -638,15 +638,15 @@ npu_op_kernel_options(ascendc_kernels AddCustom COMPUTE_UNIT ascendxxyy OPTIONS
638 638 
639Ascend C框架提供的编译选项介绍如下:639Ascend C框架提供的编译选项介绍如下:
640 640 
641-- `--tiling_key`,设置该选项后,只编译指定的[TilingKey](../设计与实现/多分支策略.md#compile-selected-tiling-keys)相关的Kernel代码,用于加速编译过程。若不指定TilingKey编译,则默认编译所有的TilingKey。配置多个TilingKey时,TilingKey之间不能有空格。示例如下,其中1、2为TilingKey取值。641+- `--tiling_key`,设置该选项后,只编译指定的[TilingKey](../design_and_implementation/multi_branch_strategy.md#compile-selected-tiling-keys)相关的Kernel代码,用于加速编译过程。若不指定TilingKey编译,则默认编译所有的TilingKey。配置多个TilingKey时,TilingKey之间不能有空格。示例如下,其中1、2为TilingKey取值。
642 642 
643 ```643 ```
644 --tiling_key=1,2644 --tiling_key=1,2
645 ```645 ```
646 646 
647-- 编译宏开关请参考[内置编译宏开关](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md)。647+- 编译宏开关请参考[内置编译宏开关](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
648- `--op_relocatable_kernel_binary`,设置该选项为true时,会额外编译一份可被重新链接的二进制文件;不配置或设置为false时该选项均不生效。该选项用于自定义Tiling下沉算子开启SuperKernel的场景,配置该选项所生成的二进制文件,可以使算子在SuperKernel编译时直接复用二进制文件,降低编译耗时。648- `--op_relocatable_kernel_binary`,设置该选项为true时,会额外编译一份可被重新链接的二进制文件;不配置或设置为false时该选项均不生效。该选项用于自定义Tiling下沉算子开启SuperKernel的场景,配置该选项所生成的二进制文件,可以使算子在SuperKernel编译时直接复用二进制文件,降低编译耗时。
649-- `--kernel-template-input`,编译指定的模板参数组合相关的Kernel代码,用于加速编译过程。更多信息参考[编译加速 — 选择性编译](./编译加速.md#选择性编译)。649+- `--kernel-template-input`,编译指定的模板参数组合相关的Kernel代码,用于加速编译过程。更多信息参考[编译加速 — 选择性编译](./compilation_acceleration.md#选择性编译)。
650- `-DFORCE_TILING_CONST_PROPAGATION`,该选项用于静态shape场景Tiling数据的常量化优化。对于复杂算子,该编译选项可以提升算子静态shape执行性能。该编译选项仅支持自定义算子工程,且仅在算子使用`BEGIN_TILING_DATA_DEF`注册Tiling结构体的情形下生效,对于算子使用标准C++语法定义Tiling结构体的情形下不生效。使用示例如下:650- `-DFORCE_TILING_CONST_PROPAGATION`,该选项用于静态shape场景Tiling数据的常量化优化。对于复杂算子,该编译选项可以提升算子静态shape执行性能。该编译选项仅支持自定义算子工程,且仅在算子使用`BEGIN_TILING_DATA_DEF`注册Tiling结构体的情形下生效,对于算子使用标准C++语法定义Tiling结构体的情形下不生效。使用示例如下:
651 ```651 ```
652 -DFORCE_TILING_CONST_PROPAGATION652 -DFORCE_TILING_CONST_PROPAGATION
@@ -667,9 +667,9 @@ Ascend C框架提供的编译选项介绍如下:
667 667 
668## 相关文档668## 相关文档
669 669 
670-- [单算子API调用](../调用/单算子API调用.md) — 调用编译部署后的算子。670+- [单算子API调用](../invocation/single_operator_api_call.md) — 调用编译部署后的算子。
671-- [多算子包组织](./多算子包组织.md) — 是否需要算子拆包建议。671+- [多算子包组织](./multi_operator_package.md) — 是否需要算子拆包建议。
672-- [算子动态库和静态库编译](./算子动态库和静态库编译.md) — 动态库/静态库编译方式。672+- [算子动态库和静态库编译](./dynamic_static_lib_compilation.md) — 动态库/静态库编译方式。
673-- [编译过程调试](./编译过程调试.md) — 查看实际编译命令、保留中间产物和常见错误诊断。673+- [编译过程调试](./compilation_debug.md) — 查看实际编译命令、保留中间产物和常见错误诊断。
674-- [编译加速](./编译加速.md) — 构建加速策略(选择性编译、缓存、增量编译等)。674+- [编译加速](./compilation_acceleration.md) — 构建加速策略(选择性编译、缓存、增量编译等)。
675-- [交叉编译](./交叉编译.md) — 跨平台架构编译。675+- [交叉编译](./cross_compilation.md) — 跨平台架构编译。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/编译加速.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/compilation_acceleration.md+1-1
@@ -160,7 +160,7 @@ ccache --show-stats -v
160 160 
161### TilingKey选择编译161### TilingKey选择编译
162 162 
163-只编译指定[TilingKey](../设计与实现/多分支策略.md#compile-selected-tiling-keys)相关的Kernel代码,用于加速编译过程。若不指定TilingKey编译,则默认编译所有的TilingKey。配置多个TilingKey时,TilingKey之间不能有空格。示例如下,其中1、2为TilingKey取值:163+只编译指定[TilingKey](../design_and_implementation/multi_branch_strategy.md#compile-selected-tiling-keys)相关的Kernel代码,用于加速编译过程。若不指定TilingKey编译,则默认编译所有的TilingKey。配置多个TilingKey时,TilingKey之间不能有空格。示例如下,其中1、2为TilingKey取值:
164 164 
165```bash165```bash
166# 在op_kernel/CMakeLists.txt中添加166# 在op_kernel/CMakeLists.txt中添加
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/编译过程调试.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/compilation_debug.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/交叉编译.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/cross_compilation.md+5-5
@@ -5,7 +5,7 @@
5 5 
6## 概述6## 概述
7 7 
8-完成算子代码实现后,如果编译平台和运行平台架构一致,直接参考[基本流程](基本流程.md)编译即可。如需交叉编译(编译平台架构与运行平台架构不同),参考本文档。8+完成算子代码实现后,如果编译平台和运行平台架构一致,直接参考[基本流程](basic_process.md)编译即可。如需交叉编译(编译平台架构与运行平台架构不同),参考本文档。
9 9 
10交叉编译的典型场景:10交叉编译的典型场景:
11- 在x86_64开发机上编译,部署到aarch64边缘设备。11- 在x86_64开发机上编译,部署到aarch64边缘设备。
@@ -134,10 +134,10 @@ file build_out/op_host/libcust_opapi.so
134# 2. 在目标平台的run包文件夹下执行安装134# 2. 在目标平台的run包文件夹下执行安装
135./custom_opp_ubuntu_x86_64.run 135./custom_opp_ubuntu_x86_64.run
136```136```
137-安装后,按照安装日志提示给LD_LIBRARY_PATH设置环境变量,之后调用算子的使用方式与普通编译部署一致,参考[算子包调用](../Aclnn算子工程化开发快速入门.md#部署)。137+安装后,按照安装日志提示给LD_LIBRARY_PATH设置环境变量,之后调用算子的使用方式与普通编译部署一致,参考[算子包调用](../aclnn_quick_start.md#部署)。
138 138 
139## 相关文档139## 相关文档
140 140 
141-- [基本流程](基本流程.md) — 标准编译与部署流程。141+- [基本流程](basic_process.md) — 标准编译与部署流程。
142-- [编译过程调试](编译过程调试.md) — 编译问题排查方法。142+- [编译过程调试](compilation_debug.md) — 编译问题排查方法。
143-- [单算子API调用](../调用/单算子API调用.md) — 调用编译部署后的算子。143+- [单算子API调用](../invocation/single_operator_api_call.md) — 调用编译部署后的算子。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/算子动态库和静态库编译.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/dynamic_static_lib_compilation.md+6-6
@@ -1,6 +1,6 @@
1# 算子动态库和静态库编译1# 算子动态库和静态库编译
2 2 
3-本文是扩展内容,介绍如何将自定义算子工程编译为动态库或静态库,并在应用程序或图模式场景中使用这些库。常规部署场景优先参考[编译与部署基本流程](./基本流程.md)生成`custom_opp_*.run`算子包;只有当应用需要直接链接算子库,或希望把算子库集成到其他工程中时,再考虑使用动态库或静态库编译。与`.run`算子包预先安装到OPP目录不同,动态库或静态库方式在进程拉起后会由运行时创建临时目录,将算子包结构恢复到临时目录中并从该目录加载算子相关文件,进程退出前再删除该临时目录。3+本文是扩展内容,介绍如何将自定义算子工程编译为动态库或静态库,并在应用程序或图模式场景中使用这些库。常规部署场景优先参考[编译与部署基本流程](./basic_process.md)生成`custom_opp_*.run`算子包;只有当应用需要直接链接算子库,或希望把算子库集成到其他工程中时,再考虑使用动态库或静态库编译。与`.run`算子包预先安装到OPP目录不同,动态库或静态库方式在进程拉起后会由运行时创建临时目录,将算子包结构恢复到临时目录中并从该目录加载算子相关文件,进程退出前再删除该临时目录。
4 4 
5## 算子动态库和静态库5## 算子动态库和静态库
6 6 
@@ -34,7 +34,7 @@
34 34 
35## 编译动态库35## 编译动态库
36 36 
37-动态库编译时,将`npu_op_package`的`TYPE`设置为`SHARED`。以[快速入门](../Aclnn算子工程化开发快速入门.md)里的AddCustom为例,将顶层CMakeLists.txt里的npu_op_package配置修改如下:37+动态库编译时,将`npu_op_package`的`TYPE`设置为`SHARED`。以[快速入门](../aclnn_quick_start.md)里的AddCustom为例,将顶层CMakeLists.txt里的npu_op_package配置修改如下:
38 38 
39```cmake39```cmake
40set(package_name ${vendor_name})40set(package_name ${vendor_name})
@@ -117,7 +117,7 @@ cmake --build build_out --target binary install -j$(nproc)
117export LD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib/:${LD_LIBRARY_PATH}117export LD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib/:${LD_LIBRARY_PATH}
118```118```
119 119 
120-之后调用方的应用工程可以通过`find_package`导入算子库,然后链接到自己的可执行文件或业务库中。以[快速入门](../Aclnn算子工程化开发快速入门.md#调用算子)里的AddCustom调用为例,向CMakeLists.txt里添加`${vendor_name}`库搜索,并链接,示例如下:120+之后调用方的应用工程可以通过`find_package`导入算子库,然后链接到自己的可执行文件或业务库中。以[快速入门](../aclnn_quick_start.md#调用算子)里的AddCustom调用为例,向CMakeLists.txt里添加`${vendor_name}`库搜索,并链接,示例如下:
121 121 
122### 动态库集成122### 动态库集成
123 123 
@@ -182,7 +182,7 @@ target_link_libraries(op_runner PRIVATE
182export ASCEND_CUSTOM_OPP_PATH=${CMAKE_INSTALL_PREFIX}/lib/:${ASCEND_CUSTOM_OPP_PATH}182export ASCEND_CUSTOM_OPP_PATH=${CMAKE_INSTALL_PREFIX}/lib/:${ASCEND_CUSTOM_OPP_PATH}
183```183```
184 184 
185-动态库编译和[算子包编译](基本流程.md)功能同时使用时,前者生成的动态库优先级更高。185+动态库编译和[算子包编译](basic_process.md)功能同时使用时,前者生成的动态库优先级更高。
186如下示例中,path1和path3是算子包的指定安装目录,path2和path4是动态库编译时的`CMAKE_INSTALL_PREFIX`,则编译产物的优先级为2>4>1>3。186如下示例中,path1和path3是算子包的指定安装目录,path2和path4是动态库编译时的`CMAKE_INSTALL_PREFIX`,则编译产物的优先级为2>4>1>3。
187 187 
188```bash188```bash
@@ -243,5 +243,5 @@ set_target_properties(${package_name} PROPERTIES
243 243 
244## 相关文档244## 相关文档
245 245 
246-- [编译与部署基本流程](./基本流程.md) — 基础编译配置和`npu_op_package`用法。246+- [编译与部署基本流程](./basic_process.md) — 基础编译配置和`npu_op_package`用法。
247-- [单算子API调用](../调用/单算子API调用.md) — 使用生成的aclnn接口调用算子。247+- [单算子API调用](../invocation/single_operator_api_call.md) — 使用生成的aclnn接口调用算子。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/编译与部署/多算子包组织.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/multi_operator_package.md+4-4
@@ -4,7 +4,7 @@
4 4 
5本文中的“算子包”指编译后生成的自定义算子安装包`custom_opp_*.run`。一个算子包可以包含一个或多个OpType,部署后通常位于`vendors/<vendor_name>`目录下。OpType是算子原型注册时的算子类型,例如`OP_ADD(AddCustom)`中的`AddCustom`5本文中的“算子包”指编译后生成的自定义算子安装包`custom_opp_*.run`。一个算子包可以包含一个或多个OpType,部署后通常位于`vendors/<vendor_name>`目录下。OpType是算子原型注册时的算子类型,例如`OP_ADD(AddCustom)`中的`AddCustom`
6 6 
7-本文主要讨论“多个算子如何拆分到一个或多个算子包”。如果需要了解多个算子如何编成一个算子包,需要如何组织多个算子的Host、Kernel、Tiling文件,请参考[编译与部署基本流程](./基本流程.md#编译组织)中的“按算子划分的目录结构”。7+本文主要讨论“多个算子如何拆分到一个或多个算子包”。如果需要了解多个算子如何编成一个算子包,需要如何组织多个算子的Host、Kernel、Tiling文件,请参考[编译与部署基本流程](./basic_process.md#编译组织)中的“按算子划分的目录结构”。
8 8 
9## 默认建议9## 默认建议
10 10 
@@ -54,9 +54,9 @@
54 54 
55默认安装场景下,通过`opp/vendors/config.ini`中的`load_priority`配置各vendor的优先级。指定目录安装场景下,通过执行各算子包安装目录下的`set_env.bash`脚本顺序控制优先级。55默认安装场景下,通过`opp/vendors/config.ini`中的`load_priority`配置各vendor的优先级。指定目录安装场景下,通过执行各算子包安装目录下的`set_env.bash`脚本顺序控制优先级。
56 56 
57-详细配置方法请参考[配置自定义算子优先级](./基本流程.md#配置自定义算子优先级)。57+详细配置方法请参考[配置自定义算子优先级](./basic_process.md#配置自定义算子优先级)。
58 58 
59## 相关文档59## 相关文档
60 60 
61-- [编译与部署基本流程](./基本流程.md) — 编译配置、部署流程、包内目录组织方式。61+- [编译与部署基本流程](./basic_process.md) — 编译配置、部署流程、包内目录组织方式。
62-- [算子动态库和静态库编译](./算子动态库和静态库编译.md) — 以动态库或静态库形态输出算子。62+- [算子动态库和静态库编译](./dynamic_static_lib_compilation.md) — 以动态库或静态库形态输出算子。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md+11-11
@@ -1,6 +1,6 @@
1# 基本流程1# 基本流程
2 2 
3-本文属于基础内容,介绍Host侧Tiling在aclnn工程化算子开发方式中的基本编写流程。Host侧Tiling承接[算子功能设计](./算子功能设计.md)中的Tiling设计结论,把输入shape、属性和运行场景转换成Kernel启动前需要的参数。3+本文属于基础内容,介绍Host侧Tiling在aclnn工程化算子开发方式中的基本编写流程。Host侧Tiling承接[算子功能设计](./operator_function_design.md)中的Tiling设计结论,把输入shape、属性和运行场景转换成Kernel启动前需要的参数。
4 4 
5## Tiling概念回顾5## Tiling概念回顾
6 6 
@@ -41,17 +41,17 @@ AscendC推荐使用**标准C++语法**定义Tiling结构体。这种方式便于
41 41 
42### numBlocks<a id="numblocks"></a>42### numBlocks<a id="numblocks"></a>
43 43 
44-`numBlocks`指定Kernel启动的SIMD Block数量,应根据数据规模、切分策略和硬件资源确定。可设置范围还受AI处理器型号、Kernel执行类型和运行时资源约束,更多信息请参考[核函数配置](../../../语言扩展层/SIMD-BuiltIn关键字.md#section97005415463)。44+`numBlocks`指定Kernel启动的SIMD Block数量,应根据数据规模、切分策略和硬件资源确定。可设置范围还受AI处理器型号、Kernel执行类型和运行时资源约束,更多信息请参考[核函数配置](../../../language_extension/simd_builtin_keywords.md#section97005415463)。
45 45 
46### workspace大小46### workspace大小
47 47 
48workspace是设备侧Global Memory上的临时内存,用于为Kernel计算提供辅助存储,例如保存中间结果、作为Ascend C API的临时缓存,或为Kernel提供临时空间。Host侧Tiling函数只负责计算并设置所需的workspace大小,不直接使用这块内存。单算子API执行场景下,开发者通过第一段接口获取workspace大小,并申请对应大小的Global Memory;入图场景下,框架会根据Host侧Tiling设置的大小自动申请。申请完成后,Kernel可以通过入口参数`workspace`访问这块内存。48workspace是设备侧Global Memory上的临时内存,用于为Kernel计算提供辅助存储,例如保存中间结果、作为Ascend C API的临时缓存,或为Kernel提供临时空间。Host侧Tiling函数只负责计算并设置所需的workspace大小,不直接使用这块内存。单算子API执行场景下,开发者通过第一段接口获取workspace大小,并申请对应大小的Global Memory;入图场景下,框架会根据Host侧Tiling设置的大小自动申请。申请完成后,Kernel可以通过入口参数`workspace`访问这块内存。
49 49 
50-Host侧需要设置的workspace内存分为系统workspace和用户workspace两部分,具体设置方法请参考[如何使用workspace](../../../附录/常用操作/如何使用workspace.md)。50+Host侧需要设置的workspace内存分为系统workspace和用户workspace两部分,具体设置方法请参考[如何使用workspace](../../../appendix/common_operations/how_to_use_workspace.md)。
51 51 
52### TilingKey(可选)52### TilingKey(可选)
53 53 
54-`TilingKey`用于区分同一个算子的不同Kernel实现分支。Host侧Tiling根据shape、dtype、属性或运行场景选择一个数字标识,并通过`context->SetTilingKey(...)`写入上下文。Kernel侧和编译工具链会基于这个数字选择对应实现,更多内容可参考[多分支策略](./多分支策略.md)。54+`TilingKey`用于区分同一个算子的不同Kernel实现分支。Host侧Tiling根据shape、dtype、属性或运行场景选择一个数字标识,并通过`context->SetTilingKey(...)`写入上下文。Kernel侧和编译工具链会基于这个数字选择对应实现,更多内容可参考[多分支策略](./multi_branch_strategy.md)。
55 55 
56## Tiling实现基本流程56## Tiling实现基本流程
57 57 
@@ -138,7 +138,7 @@ static ge::graphStatus TilingFunc(gert::TilingContext* context)
1384. 将workspace大小设置为0。1384. 将workspace大小设置为0。
1395. 返回`ge::GRAPH_SUCCESS`1395. 返回`ge::GRAPH_SUCCESS`
140 140 
141-标准C++结构体方式下,Host侧通过`GetTilingData<T>()`获取结构体指针并直接写字段,框架负责后续数据传递。Kernel侧读取方式会在[Kernel侧算子实现](./Kernel侧算子实现.md)中说明。141+标准C++结构体方式下,Host侧通过`GetTilingData<T>()`获取结构体指针并直接写字段,框架负责后续数据传递。Kernel侧读取方式会在[Kernel侧算子实现](./kernel_operator_implementation.md)中说明。
142 142 
143### 关联算子原型143### 关联算子原型
144 144 
@@ -153,7 +153,7 @@ this->AICore()
153>153>
154> 一个算子只能注册一个Host侧Tiling函数。如果不同AI处理器需要采用不同的Tiling配置,应在同一个Tiling函数中区分AI处理器并设置相应参数,不能按AI处理器分别注册多个Tiling函数。154> 一个算子只能注册一个Host侧Tiling函数。如果不同AI处理器需要采用不同的Tiling配置,应在同一个Tiling函数中区分AI处理器并设置相应参数,不能按AI处理器分别注册多个Tiling函数。
155 155 
156-`SetTiling`建立算子原型和Host侧Tiling函数之间的调用关系。本文只说明`TilingFunc`内部如何准备Kernel运行参数,完整原型配置见[算子原型定义](./算子原型定义.md)。156+`SetTiling`建立算子原型和Host侧Tiling函数之间的调用关系。本文只说明`TilingFunc`内部如何准备Kernel运行参数,完整原型配置见[算子原型定义](./operator_prototype_definition.md)。
157 157 
158## 使用约束<a id="tilingdata-constraints"></a>158## 使用约束<a id="tilingdata-constraints"></a>
159 159 
@@ -228,8 +228,8 @@ REGISTER_TILING_DEFAULT(AddCustomTiling);
228 228 
229## 相关文档229## 相关文档
230 230 
231-- [算子原型定义](./算子原型定义.md):了解如何通过`AICore().SetTiling(...)`把Tiling函数关联到算子原型。231+- [算子原型定义](./operator_prototype_definition.md):了解如何通过`AICore().SetTiling(...)`把Tiling函数关联到算子原型。
232-- [通过TilingData传递属性信息](./通过TilingData传递属性信息.md):了解如何读取算子属性,并通过TilingData传递到Kernel侧。232+- [通过TilingData传递属性信息](./tiling_data_attributes.md):了解如何读取算子属性,并通过TilingData传递到Kernel侧。
233-- [使用高阶API时配套的Tiling实现](./使用高阶API时配套的Tiling实现.md):了解使用高阶API时如何计算并传递配套Tiling参数。233+- [使用高阶API时配套的Tiling实现](./tiling_with_advanced_api.md):了解使用高阶API时如何计算并传递配套Tiling参数。
234-- [Kernel侧算子实现](./Kernel侧算子实现.md):了解Kernel侧如何读取`TilingData`并使用Host侧设置的运行参数。234+- [Kernel侧算子实现](./kernel_operator_implementation.md):了解Kernel侧如何读取`TilingData`并使用Host侧设置的运行参数。
235-- [多分支策略](./多分支策略.md):了解如何通过`TilingKey`选择不同Kernel实现分支。235+- [多分支策略](./multi_branch_strategy.md):了解如何通过`TilingKey`选择不同Kernel实现分支。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Kernel侧算子实现.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/kernel_operator_implementation.md+11-11
@@ -1,6 +1,6 @@
1# 基本流程1# 基本流程
2 2 
3-本文属于基础内容,介绍aclnn工程化算子开发方式中Kernel侧的基本接入流程,重点说明Kernel入口函数格式、参数顺序、TilingData处理和编译期信息获取方式。Global Memory地址绑定、UB管理、数据搬运、计算和同步等Kernel核心实现方法,请参考[核函数](../../../编程模型/AI-Core-SIMD编程/核函数.md)。3+本文属于基础内容,介绍aclnn工程化算子开发方式中Kernel侧的基本接入流程,重点说明Kernel入口函数格式、参数顺序、TilingData处理和编译期信息获取方式。Global Memory地址绑定、UB管理、数据搬运、计算和同步等Kernel核心实现方法,请参考[核函数](../../../programming_model/ai_core_simd_programming/kernel_function.md)。
4 4 
5## Kernel函数格式5## Kernel函数格式
6 6 
@@ -16,7 +16,7 @@ Kernel入口函数名需要和算子类型对应。算子类型采用大驼峰
16| `Conv2DCustom` | `conv2_d_custom` |16| `Conv2DCustom` | `conv2_d_custom` |
17| `GatherV2Custom` | `gather_v2_custom` |17| `GatherV2Custom` | `gather_v2_custom` |
18 18 
19-完整转换规则和更多示例会在[命名转换规则对照表](../附录/命名转换规则对照表.md)中展开。19+完整转换规则和更多示例会在[命名转换规则对照表](../appendix/naming_conversion_table.md)中展开。
20 20 
21### 函数形式21### 函数形式
22 22 
@@ -65,7 +65,7 @@ __global__ __aicore__ void add_custom_template(GM_ADDR x, GM_ADDR y, GM_ADDR z,
65}65}
66```66```
67 67 
68-上述代码使用`REGISTER_TILING_DEFAULT`注册默认TilingData结构体,并通过`GET_TILING_DATA_WITH_STRUCT`按指定类型解析Tiling数据。模板参数声明、Host侧选择和编译配置请参考[多分支策略](./多分支策略.md)的Tiling模板编程章节。68+上述代码使用`REGISTER_TILING_DEFAULT`注册默认TilingData结构体,并通过`GET_TILING_DATA_WITH_STRUCT`按指定类型解析Tiling数据。模板参数声明、Host侧选择和编译配置请参考[多分支策略](./multi_branch_strategy.md)的Tiling模板编程章节。
69 69 
70### 参数顺序70### 参数顺序
71 71 
@@ -105,7 +105,7 @@ AddCustom的Kernel入口按以下步骤串联算子实现:
1054. 调用`Add`完成逐元素加法计算。1054. 调用`Add`完成逐元素加法计算。
1065. 将计算结果从Local Memory搬运回Global Memory。1065. 将计算结果从Local Memory搬运回Global Memory。
107 107 
108-`Process`根据`tileNum`循环执行步骤3至步骤5,直到当前Block的所有Tile处理完成。搬运和计算之间需要根据数据依赖做好同步,具体实现请参考[核函数](../../../编程模型/AI-Core-SIMD编程/核函数.md)。108+`Process`根据`tileNum`循环执行步骤3至步骤5,直到当前Block的所有Tile处理完成。搬运和计算之间需要根据数据依赖做好同步,具体实现请参考[核函数](../../../programming_model/ai_core_simd_programming/kernel_function.md)。
109 109 
110## TilingData处理110## TilingData处理
111 111 
@@ -138,7 +138,7 @@ REGISTER_TILING_DATA_CLASS(AddCustom, AddStruct)
138 138 
139宏定义结构体的Kernel入口不使用`REGISTER_TILING_DEFAULT`,直接通过构建生成的TilingData访问宏获取数据。139宏定义结构体的Kernel入口不使用`REGISTER_TILING_DEFAULT`,直接通过构建生成的TilingData访问宏获取数据。
140 140 
141-本节只介绍默认TilingData的注册方式。同一算子需要组织多个Kernel分支时,分支专用TilingData的注册方式以及Kernel模板参数的配置方式,请参见[多分支策略](./多分支策略.md)。141+本节只介绍默认TilingData的注册方式。同一算子需要组织多个Kernel分支时,分支专用TilingData的注册方式以及Kernel模板参数的配置方式,请参见[多分支策略](./multi_branch_strategy.md)。
142 142 
143### 获取TilingData143### 获取TilingData
144 144 
@@ -170,9 +170,9 @@ op.Init(x, y, z, tilingData.totalLength, tilingData.tileNum);
170GET_TILING_DATA_WITH_STRUCT(TilingDataTemplate, tilingData, tiling);170GET_TILING_DATA_WITH_STRUCT(TilingDataTemplate, tilingData, tiling);
171```171```
172 172 
173-第一个参数可以是按TilingKey注册的分支专用结构体,也可以是TPL/SEL模板分支使用的模板TilingData结构体。两种分支组织方式的宏调用和字段访问方式相同;分支和结构体的具体配置方式请参见[多分支策略](./多分支策略.md)。使用默认结构体的分支仍通过`GET_TILING_DATA`解析。173+第一个参数可以是按TilingKey注册的分支专用结构体,也可以是TPL/SEL模板分支使用的模板TilingData结构体。两种分支组织方式的宏调用和字段访问方式相同;分支和结构体的具体配置方式请参见[多分支策略](./multi_branch_strategy.md)。使用默认结构体的分支仍通过`GET_TILING_DATA`解析。
174 174 
175-TilingData定义方式和Host侧写入流程请参考[Host侧Tiling实现](./Host侧Tiling实现.md)。175+TilingData定义方式和Host侧写入流程请参考[Host侧Tiling实现](./host_tiling_implementation.md)。
176 176 
177## 信息获取177## 信息获取
178 178 
@@ -224,7 +224,7 @@ extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z
224 224 
225## 相关文档225## 相关文档
226 226 
227-- [Host侧Tiling实现](./Host侧Tiling实现.md):了解TilingData定义、Tiling函数编写和workspace设置。227+- [Host侧Tiling实现](./host_tiling_implementation.md):了解TilingData定义、Tiling函数编写和workspace设置。
228-- [算子原型定义](./算子原型定义.md):了解输入输出顺序、dtype/format声明和AI处理器配置。228+- [算子原型定义](./operator_prototype_definition.md):了解输入输出顺序、dtype/format声明和AI处理器配置。
229-- [多分支策略](./多分支策略.md):了解`TilingKey`如何选择不同Kernel实现分支。229+- [多分支策略](./multi_branch_strategy.md):了解`TilingKey`如何选择不同Kernel实现分支。
230-- [输出shape依赖计算](./Kernel侧输出shape依赖计算.md):了解输出shape依赖Kernel计算结果时的处理方式。230+- [输出shape依赖计算](./kernel_output_shape_computation.md):了解输出shape依赖Kernel计算结果时的处理方式。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Kernel侧输出shape依赖计算.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/kernel_output_shape_computation.md+3-3
@@ -14,7 +14,7 @@ this->Output("y")
14 .OutputShapeDependOnCompute();14 .OutputShapeDependOnCompute();
15```15```
16 16 
17-算子有多个输出时,只在实际依赖计算的输出上增加该标记。输入输出声明方法见[算子原型定义](./算子原型定义.md)。17+算子有多个输出时,只在实际依赖计算的输出上增加该标记。输入输出声明方法见[算子原型定义](./operator_prototype_definition.md)。
18 18 
19## Kernel入口增加shape输出参数19## Kernel入口增加shape输出参数
20 20 
@@ -130,6 +130,6 @@ shapeGlobal.SetValue(13, 32);
130 130 
131## 相关文档131## 相关文档
132 132 
133-- [Kernel侧算子实现](./Kernel侧算子实现.md):Kernel入口格式和参数顺序。133+- [Kernel侧算子实现](./kernel_operator_implementation.md):Kernel入口格式和参数顺序。
134-- [算子原型定义](./算子原型定义.md):输入输出声明和shape推导关系。134+- [算子原型定义](./operator_prototype_definition.md):输入输出声明和shape推导关系。
135- [OutputShapeDependOnCompute](../../../../../api/Utils-API/prototype_register_management/OpParamDef/OutputShapeDependOnCompute.md):接口定义和工程版本约束。135- [OutputShapeDependOnCompute](../../../../../api/Utils-API/prototype_register_management/OpParamDef/OutputShapeDependOnCompute.md):接口定义和工程版本约束。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/多分支策略.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/multi_branch_strategy.md+4-4
@@ -126,7 +126,7 @@ npu_op_kernel_options(ascendc_kernels MyOp
126 OPTIONS --tiling_key=1)126 OPTIONS --tiling_key=1)
127```127```
128 128 
129-关于编译选项的完整说明见[编译与部署基本流程](../编译与部署/基本流程.md#custom-compile-options)。129+关于编译选项的完整说明见[编译与部署基本流程](../compilation_and_deployment/basic_process.md#custom-compile-options)。
130 130 
131## 使用Kernel模板组织分支131## 使用Kernel模板组织分支
132 132 
@@ -332,8 +332,8 @@ add_custom_template<float, float, float, 8, 0>
332 332 
333## 相关文档333## 相关文档
334 334 
335-- [算子功能设计](./算子功能设计.md):判断是否需要按dtype、shape或运行配置拆分Kernel。335+- [算子功能设计](./operator_function_design.md):判断是否需要按dtype、shape或运行配置拆分Kernel。
336-- [Host侧Tiling实现](./Host侧Tiling实现.md):设置TilingData、TilingKey和Kernel启动参数。336+- [Host侧Tiling实现](./host_tiling_implementation.md):设置TilingData、TilingKey和Kernel启动参数。
337-- [Kernel侧算子实现](./Kernel侧算子实现.md):注册和解析不同TilingData结构体。337+- [Kernel侧算子实现](./kernel_operator_implementation.md):注册和解析不同TilingData结构体。
338- [TILING_KEY_IS](../../../../../api/SIMD-API/basic_api/Kernel-Tiling/TILING_KEY_IS.md):Kernel侧分支判断接口。338- [TILING_KEY_IS](../../../../../api/SIMD-API/basic_api/Kernel-Tiling/TILING_KEY_IS.md):Kernel侧分支判断接口。
339- [ASCENDC_TPL_SEL_PARAM](../../../../../api/Utils-API/Tiling_template_programming/ASCENDC_TPL_SEL_PARAM.md):Host侧模板参数选择接口。339- [ASCENDC_TPL_SEL_PARAM](../../../../../api/Utils-API/Tiling_template_programming/ASCENDC_TPL_SEL_PARAM.md):Host侧模板参数选择接口。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子功能设计.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_function_design.md+11-11
@@ -34,14 +34,14 @@ z[i] = x[i] + y[i]
34 34 
35根据这条语义,可以先确定算子对外暴露的原型边界。AddCustom对外暴露两个输入`x``y`和一个输出`z`。这三个Tensor已经可以完整表达`z = x + y`的计算语义,每次调用都需要提供,因此在原型边界上都属于必选参数。AddCustom没有额外属性,调用方只需要准备两个输入Tensor和一个输出Tensor。35根据这条语义,可以先确定算子对外暴露的原型边界。AddCustom对外暴露两个输入`x``y`和一个输出`z`。这三个Tensor已经可以完整表达`z = x + y`的计算语义,每次调用都需要提供,因此在原型边界上都属于必选参数。AddCustom没有额外属性,调用方只需要准备两个输入Tensor和一个输出Tensor。
36 36 
37-如果算子带有标量、维度、阈值、开关等配置项,需要在功能设计阶段确定它们的承载方式。值较小且用于描述算子行为的配置项适合作为属性;需要按Tensor传入、参与动态图数据依赖或数据量较大的内容适合作为输入。属性识别和传递的完整示例请参考[通过TilingData传递属性信息](./通过TilingData传递属性信息.md)。37+如果算子带有标量、维度、阈值、开关等配置项,需要在功能设计阶段确定它们的承载方式。值较小且用于描述算子行为的配置项适合作为属性;需要按Tensor传入、参与动态图数据依赖或数据量较大的内容适合作为输入。属性识别和传递的完整示例请参考[通过TilingData传递属性信息](./tiling_data_attributes.md)。
38 38 
39除此之外,还需要确定算子支持什么场景:39除此之外,还需要确定算子支持什么场景:
40 40 
41- 数据类型和数据格式。41- 数据类型和数据格式。
42- 确定性:算子在相同输入下是否产生相同输出。42- 确定性:算子在相同输入下是否产生相同输出。
43 43 
44-将前两步确定的输入输出、dtype/format列表等合并,即得到完整的算子原型定义。完整的算子原型定义编写方法和API说明请参考[算子原型定义](./算子原型定义.md)。44+将前两步确定的输入输出、dtype/format列表等合并,即得到完整的算子原型定义。完整的算子原型定义编写方法和API说明请参考[算子原型定义](./operator_prototype_definition.md)。
45 45 
46完成算子原型设计后,功能设计可以继续拆解Host侧Tiling需要准备的运行参数,以及Kernel侧如何完成实际计算。46完成算子原型设计后,功能设计可以继续拆解Host侧Tiling需要准备的运行参数,以及Kernel侧如何完成实际计算。
47 47 
@@ -53,7 +53,7 @@ Host侧Tiling设计的重点,是确定Kernel启动前需要准备哪些运行
53 53 
54编写Tiling函数时,需要把这些设计结论转换成Host侧计算步骤。AddCustom的Tiling函数需要读取输入`x`的shape并计算`totalLength`,设置Kernel启动使用的`numBlocks`,写入`tileNum`,并给出workspace大小;更复杂的算子还可能需要根据场景设置TilingKey或调度模式。54编写Tiling函数时,需要把这些设计结论转换成Host侧计算步骤。AddCustom的Tiling函数需要读取输入`x`的shape并计算`totalLength`,设置Kernel启动使用的`numBlocks`,写入`tileNum`,并给出workspace大小;更复杂的算子还可能需要根据场景设置TilingKey或调度模式。
55 55 
56-TilingData结构体、Tiling函数写法、workspace设置、`numBlocks`配置和相关launch参数会在[Host侧Tiling实现](./Host侧Tiling实现.md)章节详细展开。56+TilingData结构体、Tiling函数写法、workspace设置、`numBlocks`配置和相关launch参数会在[Host侧Tiling实现](./host_tiling_implementation.md)章节详细展开。
57 57 
58## 围绕Kernel侧实现做功能设计58## 围绕Kernel侧实现做功能设计
59 59 
@@ -73,11 +73,11 @@ AscendC::Add(zLocal, xLocal, yLocal, length)
73GM(x, y) -> UB(xLocal, yLocal) -> Add -> UB(zLocal) -> GM(z)73GM(x, y) -> UB(xLocal, yLocal) -> Add -> UB(zLocal) -> GM(z)
74```74```
75 75 
76-功能设计阶段只需要明确这条计算映射和基础数据流。Kernel入口参数、TilingData读取等代码组织细节,会在[Kernel侧算子实现](./Kernel侧算子实现.md)章节展开。76+功能设计阶段只需要明确这条计算映射和基础数据流。Kernel入口参数、TilingData读取等代码组织细节,会在[Kernel侧算子实现](./kernel_operator_implementation.md)章节展开。
77 77 
78## 针对不同场景扩展Kernel实现78## 针对不同场景扩展Kernel实现
79 79 
80-完成基础Kernel设计后,还需要判断当前实现能覆盖哪些场景。后续若需要支持更多数据类型、更大shape范围或运行时配置时,需要在基础实现上增加扩展策略。功能设计阶段需要先判断扩展维度和触发条件,后续再通过[多分支策略](./多分支策略.md)说明TilingKey、Kernel模板或差异化编译配置的具体写法。80+完成基础Kernel设计后,还需要判断当前实现能覆盖哪些场景。后续若需要支持更多数据类型、更大shape范围或运行时配置时,需要在基础实现上增加扩展策略。功能设计阶段需要先判断扩展维度和触发条件,后续再通过[多分支策略](./multi_branch_strategy.md)说明TilingKey、Kernel模板或差异化编译配置的具体写法。
81 81 
82### 按数据类型扩展Kernel实现82### 按数据类型扩展Kernel实现
83 83 
@@ -106,12 +106,12 @@ AddCustom是逐元素加法,元素之间没有依赖关系,基础实现采
106 106 
107### 分支策略选择总结107### 分支策略选择总结
108 108 
109-关于TilingKey和Kernel模板的选择准则,请参考[多分支策略](./多分支策略.md)。109+关于TilingKey和Kernel模板的选择准则,请参考[多分支策略](./multi_branch_strategy.md)。
110 110 
111## 下一步111## 下一步
112 112 
113- - [算子原型定义](./算子原型定义.md):输入、输出、属性、dtype/format。113+ - [算子原型定义](./operator_prototype_definition.md):输入、输出、属性、dtype/format。
114- - [Host侧Tiling实现](./Host侧Tiling实现.md):TilingData定义和Tiling函数编写。114+ - [Host侧Tiling实现](./host_tiling_implementation.md):TilingData定义和Tiling函数编写。
115- - [Kernel侧算子实现](./Kernel侧算子实现.md):数据搬运、计算接口和Kernel编程流程。115+ - [Kernel侧算子实现](./kernel_operator_implementation.md):数据搬运、计算接口和Kernel编程流程。
116- - [多分支策略](./多分支策略.md):TilingKey和不同Kernel分支的选择方法。116+ - [多分支策略](./multi_branch_strategy.md):TilingKey和不同Kernel分支的选择方法。
117- - [通过TilingData传递属性信息](./通过TilingData传递属性信息.md):属性读取和传递介绍。117+ - [通过TilingData传递属性信息](./tiling_data_attributes.md):属性读取和传递介绍。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子原型定义.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_prototype_definition.md+9-9
@@ -1,6 +1,6 @@
1# 算子原型定义1# 算子原型定义
2 2 
3-本文属于基础内容,介绍如何通过算子原型定义描述算子对外暴露的接口和支持范围。本文承接[算子功能设计](./算子功能设计.md)的结论,说明如何将功能设计中的输入输出、属性、dtype/format和Tiling函数关联落地为`OpDef`代码,并介绍图模式下的输出shape和dtype推导配置。3+本文属于基础内容,介绍如何通过算子原型定义描述算子对外暴露的接口和支持范围。本文承接[算子功能设计](./operator_function_design.md)的结论,说明如何将功能设计中的输入输出、属性、dtype/format和Tiling函数关联落地为`OpDef`代码,并介绍图模式下的输出shape和dtype推导配置。
4 4 
5## 原型定义放在哪里5## 原型定义放在哪里
6 6 
@@ -46,7 +46,7 @@ OP_ADD(AddCustom);
46>46>
47> OpType应采用大驼峰命名,首字符为大写英文字母,后续只能使用英文字母或数字,例如`AddCustom`。不要使用下划线、连字符、空格、中文或其他特殊字符。47> OpType应采用大驼峰命名,首字符为大写英文字母,后续只能使用英文字母或数字,例如`AddCustom`。不要使用下划线、连字符、空格、中文或其他特殊字符。
48>48>
49-> 自定义算子的OpType不能与内置算子重名。确定OpType后,可使用[optype_collector工具](../../../附录/optype_collector工具.md)查询OpType信息并检测命名冲突。49+> 自定义算子的OpType不能与内置算子重名。确定OpType后,可使用[optype_collector工具](../../../appendix/optype_collector_tool.md)查询OpType信息并检测命名冲突。
50 50 
51## 定义输入和输出51## 定义输入和输出
52 52 
@@ -149,7 +149,7 @@ this->Attr("alpha")
149 149 
150`AttrType`描述属性是否必须提供,常用取值为`REQUIRED``OPTIONAL``Bool``Float``Int`等接口用于声明属性数据类型和默认值,具体说明请参考[OpAttrDef](../../../../../api/Utils-API/prototype_register_management/OpAttrDef/OpAttrDef_functions.md)。150`AttrType`描述属性是否必须提供,常用取值为`REQUIRED``OPTIONAL``Bool``Float``Int`等接口用于声明属性数据类型和默认值,具体说明请参考[OpAttrDef](../../../../../api/Utils-API/prototype_register_management/OpAttrDef/OpAttrDef_functions.md)。
151 151 
152-属性在原型中声明后,Host侧Tiling函数可以通过`context->GetAttrs()`获取属性值。Kernel侧需要使用属性参与计算时,可以通过TilingData将属性值传递到Kernel。属性传递方法见[通过TilingData传递属性信息](./通过TilingData传递属性信息.md)。152+属性在原型中声明后,Host侧Tiling函数可以通过`context->GetAttrs()`获取属性值。Kernel侧需要使用属性参与计算时,可以通过TilingData将属性值传递到Kernel。属性传递方法见[通过TilingData传递属性信息](./tiling_data_attributes.md)。
153 153 
154## 图模式下注册输出shape和dtype推导函数154## 图模式下注册输出shape和dtype推导函数
155 155 
@@ -164,7 +164,7 @@ this->SetInferShape(ge::InferShape)
164 164 
165如果输出shape可以通过`Follow`表达,则优先使用`Follow`,无需再注册`SetInferShape`。例如,AddCustom的输出`z`与输入`x`具有相同shape时,可以在输出定义中通过`Follow("x", FollowType::SHAPE)`指定shape跟随关系。165如果输出shape可以通过`Follow`表达,则优先使用`Follow`,无需再注册`SetInferShape`。例如,AddCustom的输出`z`与输入`x`具有相同shape时,可以在输出定义中通过`Follow("x", FollowType::SHAPE)`指定shape跟随关系。
166 166 
167-本文只说明原型定义中如何关联推导函数。推导函数内部如何读取输入shape、设置输出shape、读取输入dtype和设置输出dtype,属于图模式开发和Host侧实现细节,见[算子入图开发](../../算子入图开发/基本开发流程.md)。167+本文只说明原型定义中如何关联推导函数。推导函数内部如何读取输入shape、设置输出shape、读取输入dtype和设置输出dtype,属于图模式开发和Host侧实现细节,见[算子入图开发](../../operator_graph_development/basic_development_flow.md)。
168 168 
169## 关联Host侧Tiling实现169## 关联Host侧Tiling实现
170 170 
@@ -177,7 +177,7 @@ this->AICore()
177 177 
178`SetTiling`只负责建立原型和Tiling函数之间的调用关系。`TilingFunc`内部会读取输入shape等信息,计算Kernel需要的运行参数,并写入TilingData。178`SetTiling`只负责建立原型和Tiling函数之间的调用关系。`TilingFunc`内部会读取输入shape等信息,计算Kernel需要的运行参数,并写入TilingData。
179 179 
180-TilingData字段设计、Tiling函数写法、workspace设置和`numBlocks`配置见[Host侧Tiling实现](./Host侧Tiling实现.md)。180+TilingData字段设计、Tiling函数写法、workspace设置和`numBlocks`配置见[Host侧Tiling实现](./host_tiling_implementation.md)。
181 181 
182## 配置指定AI处理器的差异化配置182## 配置指定AI处理器的差异化配置
183 183 
@@ -271,7 +271,7 @@ OP_ADD(AddCustom);
271 271 
272## 相关文档272## 相关文档
273 273 
274-- [算子功能设计](./算子功能设计.md):了解如何确定算子的输入输出、属性和Host侧Tiling设计。274+- [算子功能设计](./operator_function_design.md):了解如何确定算子的输入输出、属性和Host侧Tiling设计。
275-- [Host侧Tiling实现](./Host侧Tiling实现.md):了解TilingData定义、Tiling函数编写和`SetTiling`关联关系。275+- [Host侧Tiling实现](./host_tiling_implementation.md):了解TilingData定义、Tiling函数编写和`SetTiling`关联关系。
276-- [Kernel侧算子实现](./Kernel侧算子实现.md):了解Kernel入口格式、参数顺序和TilingData读取方式。276+- [Kernel侧算子实现](./kernel_operator_implementation.md):了解Kernel入口格式、参数顺序和TilingData读取方式。
277-- [命名转换规则对照表](../附录/命名转换规则对照表.md):了解OpType、Kernel入口和aclnn接口之间的命名转换关系。277+- [命名转换规则对照表](../appendix/naming_conversion_table.md):了解OpType、Kernel入口和aclnn接口之间的命名转换关系。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/通过TilingData传递属性信息.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/tiling_data_attributes.md+7-7
@@ -2,7 +2,7 @@
2 2 
3本文属于扩展内容,介绍算子属性参与Kernel计算时所需的数据传递方法。算子属性在Host侧保存,Kernel不能直接读取。属性需要参与Kernel计算时,Host侧Tiling函数先读取属性值,再把Kernel真正需要的数据写入TilingData,由框架传到Kernel侧。3本文属于扩展内容,介绍算子属性参与Kernel计算时所需的数据传递方法。算子属性在Host侧保存,Kernel不能直接读取。属性需要参与Kernel计算时,Host侧Tiling函数先读取属性值,再把Kernel真正需要的数据写入TilingData,由框架传到Kernel侧。
4 4 
5-本文以LeakyReluCustom的`negative_slope`属性为例,介绍如何通过TilingData将属性从Host侧传递至Kernel侧,包括在算子原型中声明属性、在Host侧读取属性并写入TilingData,以及在Kernel侧从TilingData中读取并使用该属性。TilingData的基础定义和写入方法见[基本流程](./Host侧Tiling实现.md)。5+本文以LeakyReluCustom的`negative_slope`属性为例,介绍如何通过TilingData将属性从Host侧传递至Kernel侧,包括在算子原型中声明属性、在Host侧读取属性并写入TilingData,以及在Kernel侧从TilingData中读取并使用该属性。TilingData的基础定义和写入方法见[基本流程](./host_tiling_implementation.md)。
6 6 
7## 属性传递流程7## 属性传递流程
8 8 
@@ -37,7 +37,7 @@ this->Attr("negative_slope")
37 .Float(0.0f);37 .Float(0.0f);
38```38```
39 39 
40-`OPTIONAL`表示调用算子时可以不显式传入该属性;未传入时,使用`Float(0.0f)`设置的默认值。属性在原型中的声明位置和基础用法见[算子原型定义](./算子原型定义.md);`AttrType`以及`Bool`、`Float`、`Int`等属性类型接口的参数和默认值约束见[OpAttrDef](../../../../../api/Utils-API/prototype_register_management/OpAttrDef/OpAttrDef_functions.md)。40+`OPTIONAL`表示调用算子时可以不显式传入该属性;未传入时,使用`Float(0.0f)`设置的默认值。属性在原型中的声明位置和基础用法见[算子原型定义](./operator_prototype_definition.md);`AttrType`以及`Bool`、`Float`、`Int`等属性类型接口的参数和默认值约束见[OpAttrDef](../../../../../api/Utils-API/prototype_register_management/OpAttrDef/OpAttrDef_functions.md)。
41 41 
42## 在TilingData中增加字段42## 在TilingData中增加字段
43 43 
@@ -185,11 +185,11 @@ y = tmpTensor1 + tmpTensor2
185 185 
186计算完成后再按Kernel基本流程把`yLocal`写回Global Memory。示例中的属性值只在`Init`时读取一次,不在Tile循环中重复解析TilingData。186计算完成后再按Kernel基本流程把`yLocal`写回Global Memory。示例中的属性值只在`Init`时读取一次,不在Tile循环中重复解析TilingData。
187 187 
188-如果某个属性只用于Host侧选择TilingKey,例如根据`algorithm`属性选择不同Kernel分支,则可以直接调用`context->SetTilingKey(...)`,不再额外增加TilingData字段。分支组织方法见[多分支策略](./多分支策略.md)。188+如果某个属性只用于Host侧选择TilingKey,例如根据`algorithm`属性选择不同Kernel分支,则可以直接调用`context->SetTilingKey(...)`,不再额外增加TilingData字段。分支组织方法见[多分支策略](./multi_branch_strategy.md)。
189 189 
190## 相关文档190## 相关文档
191 191 
192-- [算子原型定义](./算子原型定义.md):声明属性及默认值。192+- [算子原型定义](./operator_prototype_definition.md):声明属性及默认值。
193-- [Host侧Tiling实现](./Host侧Tiling实现.md):定义和写入TilingData。193+- [Host侧Tiling实现](./host_tiling_implementation.md):定义和写入TilingData。
194-- [Kernel侧算子实现](./Kernel侧算子实现.md):注册、解析并使用TilingData。194+- [Kernel侧算子实现](./kernel_operator_implementation.md):注册、解析并使用TilingData。
195-- [多分支策略](./多分支策略.md):使用属性选择TilingKey或Kernel模板分支。195+- [多分支策略](./multi_branch_strategy.md):使用属性选择TilingKey或Kernel模板分支。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/设计与实现/使用高阶API时配套的Tiling实现.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/tiling_with_advanced_api.md+3-3
@@ -132,7 +132,7 @@ currentWorkspace[0] = systemWorkspaceSize + userWorkspaceSize;
132 132 
133即使算子没有自定义临时数据,也需要检查高阶API是否使用系统workspace,不能直接把workspace设为0。133即使算子没有自定义临时数据,也需要检查高阶API是否使用系统workspace,不能直接把workspace设为0。
134 134 
135-系统workspace和用户workspace的通用设置方法请参考[如何使用workspace](../../../附录/常用操作/如何使用workspace.md)。135+系统workspace和用户workspace的通用设置方法请参考[如何使用workspace](../../../appendix/common_operations/how_to_use_workspace.md)。
136 136 
137### 校验输入条件137### 校验输入条件
138 138 
@@ -214,6 +214,6 @@ Host侧`SetAType`、`SetBType`和`SetCType`配置的位置、format、dtype,
214 214 
215## 相关文档215## 相关文档
216 216 
217-- [Host侧Tiling实现](./Host侧Tiling实现.md):普通TilingData和Tiling函数的基本流程。217+- [Host侧Tiling实现](./host_tiling_implementation.md):普通TilingData和Tiling函数的基本流程。
218-- [Kernel侧算子实现](./Kernel侧算子实现.md):Kernel入口、TilingData解析和Kernel编程流程。218+- [Kernel侧算子实现](./kernel_operator_implementation.md):Kernel入口、TilingData解析和Kernel编程流程。
219- [Matmul-Tiling类](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/Matmul_Tiling.md):配套Tiling类接口说明。219- [Matmul-Tiling类](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/Matmul_Tiling.md):配套Tiling类接口说明。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/调用/运行时加载机制.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/invocation/runtime_loading_mechanism.md+7-7
@@ -44,7 +44,7 @@ binary查找的优先级顺序:
44 44 
45- 运行时会先加载`ASCEND_CUSTOM_OPP_PATH`配置路径下的算子包,再查找默认CANN路径下的算子包。45- 运行时会先加载`ASCEND_CUSTOM_OPP_PATH`配置路径下的算子包,再查找默认CANN路径下的算子包。
46- 默认安装到`$ASCEND_OPP_PATH/vendors/<vendor_name>`的场景下,算子包优先级根据`opp/vendors/config.ini`中的`load_priority`决定,排在前面的算子包优先级更高。46- 默认安装到`$ASCEND_OPP_PATH/vendors/<vendor_name>`的场景下,算子包优先级根据`opp/vendors/config.ini`中的`load_priority`决定,排在前面的算子包优先级更高。
47-- 动态库/静态库集成场景的加载方式与RUN包不同,应用直接链接或通过`ASCEND_CUSTOM_OPP_PATH`配置动态库时,应按[算子动态库和静态库编译](../编译与部署/算子动态库和静态库编译.md)中的优先级规则处理。47+- 动态库/静态库集成场景的加载方式与RUN包不同,应用直接链接或通过`ASCEND_CUSTOM_OPP_PATH`配置动态库时,应按[算子动态库和静态库编译](../compilation_and_deployment/dynamic_static_lib_compilation.md)中的优先级规则处理。
48 48 
49## 2. 代码写法如何影响运行行为49## 2. 代码写法如何影响运行行为
50 50 
@@ -54,7 +54,7 @@ binary查找的优先级顺序:
54 54 
55#### TilingKey / Kernel模板的分支数量55#### TilingKey / Kernel模板的分支数量
56 56 
57-算子有两种分支策略可选:[数字TilingKey](../设计与实现/多分支策略.md#使用tilingkey选择分支)或[命名Kernel模板参数](../设计与实现/多分支策略.md#使用kernel模板组织分支),两者互斥。57+算子有两种分支策略可选:[数字TilingKey](../design_and_implementation/multi_branch_strategy.md#使用tilingkey选择分支)或[命名Kernel模板参数](../design_and_implementation/multi_branch_strategy.md#使用kernel模板组织分支),两者互斥。
58 58 
59| 分支策略 | 编译耗时 | 运行表现 | 适用场景 |59| 分支策略 | 编译耗时 | 运行表现 | 适用场景 |
60|---------|---------|---------|---------|60|---------|---------|---------|---------|
@@ -136,8 +136,8 @@ TilingData中的tileNum决定每个Block上的分块个数:
136 136 
137## 相关文档137## 相关文档
138 138 
139-- [基本流程](../编译与部署/基本流程.md) — 编译与部署操作指南。139+- [基本流程](../compilation_and_deployment/basic_process.md) — 编译与部署操作指南。
140-- [Host侧Tiling实现](../设计与实现/Host侧Tiling实现.md) — Tiling函数、TilingData和workspace设置方法。140+- [Host侧Tiling实现](../design_and_implementation/host_tiling_implementation.md) — Tiling函数、TilingData和workspace设置方法。
141-- [多分支策略](../设计与实现/多分支策略.md) — TilingKey和Kernel模板的配置方法。141+- [多分支策略](../design_and_implementation/multi_branch_strategy.md) — TilingKey和Kernel模板的配置方法。
142-- [单算子API调用](./单算子API调用.md) — 两段式接口的使用方法。142+- [单算子API调用](./single_operator_api_call.md) — 两段式接口的使用方法。
143-- [算子动态库和静态库编译](../编译与部署/算子动态库和静态库编译.md) — 动态库/静态库形态下的集成方式。143+- [算子动态库和静态库编译](../compilation_and_deployment/dynamic_static_lib_compilation.md) — 动态库/静态库形态下的集成方式。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/调用/单算子API调用.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/invocation/single_operator_api_call.md+6-6
@@ -9,7 +9,7 @@
9- 调用算子的运行环境有NPU设备。9- 调用算子的运行环境有NPU设备。
10- 完成自定义算子工程的创建。10- 完成自定义算子工程的创建。
11- 完成算子原型定义、Kernel侧实现和Host侧Tiling实现。11- 完成算子原型定义、Kernel侧实现和Host侧Tiling实现。
12-- 对于算子包编译场景,参考[算子工程编译与部署](../编译与部署/基本流程.md)完成算子包的编译部署。算子二进制编译开关`ENABLE_BINARY_PACKAGE`默认开启;如果工程中显式设置为`False`,需要改为`True`后重新编译部署。12+- 对于算子包编译场景,参考[算子工程编译与部署](../compilation_and_deployment/basic_process.md)完成算子包的编译部署。算子二进制编译开关`ENABLE_BINARY_PACKAGE`默认开启;如果工程中显式设置为`False`,需要改为`True`后重新编译部署。
13 13 
14 算子编译部署后,会在算子包安装目录下的`op_api`目录生成单算子调用的头文件`aclnn_<op>.h`和动态库`libcust_opapi.so`。14 算子编译部署后,会在算子包安装目录下的`op_api`目录生成单算子调用的头文件`aclnn_<op>.h`和动态库`libcust_opapi.so`。
15 15 
@@ -27,7 +27,7 @@
27 │ │ └── libcust_opapi.so27 │ │ └── libcust_opapi.so
28 ...28 ...
29 ```29 ```
30-- 对于算子动态库或静态库编译场景,参考[算子动态库和静态库编译](../编译与部署/算子动态库和静态库编译.md)完成算子的编译安装。其中`CMAKE_INSTALL_PREFIX`为开发者在cmake文件中配置的安装路径。30+- 对于算子动态库或静态库编译场景,参考[算子动态库和静态库编译](../compilation_and_deployment/dynamic_static_lib_compilation.md)完成算子的编译安装。其中`CMAKE_INSTALL_PREFIX`为开发者在cmake文件中配置的安装路径。
31 - 动态库路径:`${CMAKE_INSTALL_PREFIX}/lib/libcust_opapi.so`31 - 动态库路径:`${CMAKE_INSTALL_PREFIX}/lib/libcust_opapi.so`
32 - 静态库路径:`${CMAKE_INSTALL_PREFIX}/lib/lib${vendor_name}.a`32 - 静态库路径:`${CMAKE_INSTALL_PREFIX}/lib/lib${vendor_name}.a`
33 - 头文件路径:`${CMAKE_INSTALL_PREFIX}/include`33 - 头文件路径:`${CMAKE_INSTALL_PREFIX}/include`
@@ -51,7 +51,7 @@ aclnnStatus aclnnXxx(void *workspace, uint64_t workspaceSize, aclOpExecutor *exe
51 51 
52## 准备调用工程52## 准备调用工程
53 53 
54-本节以[AddCustom自定义算子](../Aclnn算子工程化开发快速入门.md)调用为例,介绍如何编写单算子调用的代码逻辑。其他算子的调用逻辑与AddCustom算子类似,请根据实际情况自行修改代码。该工程包含两个文件:54+本节以[AddCustom自定义算子](../aclnn_quick_start.md)调用为例,介绍如何编写单算子调用的代码逻辑。其他算子的调用逻辑与AddCustom算子类似,请根据实际情况自行修改代码。该工程包含两个文件:
55 55 
56```text56```text
57├── CMakeLists.txt // 编译规则文件57├── CMakeLists.txt // 编译规则文件
@@ -168,7 +168,7 @@ aclnnFinalize();
168 168 
169### CMakeLists.txt关键配置169### CMakeLists.txt关键配置
170 170 
171-算子编译部署后,会生成单算子调用的头文件`aclnn_<op>.h`和算子API库。算子包部署场景通常链接`libcust_opapi.so`;动态库或静态库编译场景可参考[算子动态库和静态库编译](../编译与部署/算子动态库和静态库编译.md),通过`find_package`导入算子库或按实际路径直接链接。171+算子编译部署后,会生成单算子调用的头文件`aclnn_<op>.h`和算子API库。算子包部署场景通常链接`libcust_opapi.so`;动态库或静态库编译场景可参考[算子动态库和静态库编译](../compilation_and_deployment/dynamic_static_lib_compilation.md),通过`find_package`导入算子库或按实际路径直接链接。
172 172 
173编译算子调用程序时,需要在头文件的搜索路径include\_directories中增加单算子调用的头文件目录,便于找到该头文件;同时需要链接cust\_opapi动态库并在库文件的搜索路径link\_directories中增加libcust\_opapi.so所在目录。173编译算子调用程序时,需要在头文件的搜索路径include\_directories中增加单算子调用的头文件目录,便于找到该头文件;同时需要链接cust\_opapi动态库并在库文件的搜索路径link\_directories中增加libcust\_opapi.so所在目录。
174 174 
@@ -315,5 +315,5 @@ aclnnStatus aclnnXxxTensorGetWorkspaceSize(const aclTensor *x0, const aclTensor
315```315```
316## 相关文档316## 相关文档
317 317 
318-- [快速入门](../Aclnn算子工程化开发快速入门.md) — 创建并跑通AddCustom算子工程。318+- [快速入门](../aclnn_quick_start.md) — 创建并跑通AddCustom算子工程。
319-- [算子工程编译](../编译与部署/基本流程.md) — 部署算子包并查看部署目录。319+- [算子工程编译](../compilation_and_deployment/basic_process.md) — 部署算子包并查看部署目录。
Rdocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/概述.mddocs/zh/guide/programming_guide/advanced_programming/aclnn_operator_development/overview.md+21-21
@@ -1,6 +1,6 @@
1# 概述1# 概述
2 2 
3-本文是基础内容,说明Aclnn算子工程化开发这组文档的范围、阅读顺序和前置条件。建议先确认环境满足要求,再按[快速入门](./Aclnn算子工程化开发快速入门.md)跑通AddCustom示例,跑通后回到对应章节逐步补齐细节。3+本文是基础内容,说明Aclnn算子工程化开发这组文档的范围、阅读顺序和前置条件。建议先确认环境满足要求,再按[快速入门](./aclnn_quick_start.md)跑通AddCustom示例,跑通后回到对应章节逐步补齐细节。
4 4 
5 5 
6## 什么是工程化算子开发6## 什么是工程化算子开发
@@ -34,48 +34,48 @@
34 34 
35## 推荐阅读路径35## 推荐阅读路径
36 36 
37-首次接触建议从[快速入门](./Aclnn算子工程化开发快速入门.md)开始,先用5分钟跑通AddCustom算子的端到端流程。跑通后再按以下路径逐步补齐细节。37+首次接触建议从[快速入门](./aclnn_quick_start.md)开始,先用5分钟跑通AddCustom算子的端到端流程。跑通后再按以下路径逐步补齐细节。
38 38 
39本指南共22个文档,按开发流程分为四个部分。首次阅读只需关注`[基础]`文档,遇到具体问题时再查阅`[扩展]`文档。39本指南共22个文档,按开发流程分为四个部分。首次阅读只需关注`[基础]`文档,遇到具体问题时再查阅`[扩展]`文档。
40 40 
41### 设计与实现41### 设计与实现
42 42 
43`[基础]`(按顺序阅读):43`[基础]`(按顺序阅读):
44-- [算子功能设计](./设计与实现/算子功能设计.md) — 支持范围、场景划分、Kernel组织。44+- [算子功能设计](./design_and_implementation/operator_function_design.md) — 支持范围、场景划分、Kernel组织。
45-- [算子原型定义](./设计与实现/算子原型定义.md) — 输入输出属性定义、Shape推导。45+- [算子原型定义](./design_and_implementation/operator_prototype_definition.md) — 输入输出属性定义、Shape推导。
46-- [Host侧Tiling实现](./设计与实现/Host侧Tiling实现.md) — Tiling函数与数据结构、使用约束。46+- [Host侧Tiling实现](./design_and_implementation/host_tiling_implementation.md) — Tiling函数与数据结构、使用约束。
47-- [Kernel侧算子实现](./设计与实现/Kernel侧算子实现.md) — 核函数编程与API使用。47+- [Kernel侧算子实现](./design_and_implementation/kernel_operator_implementation.md) — 核函数编程与API使用。
48 48 
49`[扩展]`(遇到具体问题时查阅):49`[扩展]`(遇到具体问题时查阅):
50-- [通过TilingData传递属性信息](./设计与实现/通过TilingData传递属性信息.md) — 适用于算子属性需要传递到Kernel侧的场景。50+- [通过TilingData传递属性信息](./design_and_implementation/tiling_data_attributes.md) — 适用于算子属性需要传递到Kernel侧的场景。
51-- [多分支策略](./设计与实现/多分支策略.md) — 适用于算子需要按场景拆分Kernel入口的场景。51+- [多分支策略](./design_and_implementation/multi_branch_strategy.md) — 适用于算子需要按场景拆分Kernel入口的场景。
52-- [使用高阶API时配套的Tiling实现](./设计与实现/使用高阶API时配套的Tiling实现.md) — 适用于开发Matmul/Conv等复杂算子的场景。52+- [使用高阶API时配套的Tiling实现](./design_and_implementation/tiling_with_advanced_api.md) — 适用于开发Matmul/Conv等复杂算子的场景。
53-- [开启Tiling下沉](../算子入图开发/开启Tiling下沉.md) — 适用于需要在算子入图场景开启Tiling下沉的场景。53+- [开启Tiling下沉](../operator_graph_development/enable_tiling_sink.md) — 适用于需要在算子入图场景开启Tiling下沉的场景。
54 54 
55### 编译与部署55### 编译与部署
56 56 
57`[基础]`57`[基础]`
58-- [编译与部署基本流程](./编译与部署/基本流程.md) — 编译配置、算子包打包与部署。58+- [编译与部署基本流程](./compilation_and_deployment/basic_process.md) — 编译配置、算子包打包与部署。
59 59 
60`[扩展]`60`[扩展]`
61-- [多算子包组织](./编译与部署/多算子包组织.md) — 多算子包拆分策略。61+- [多算子包组织](./compilation_and_deployment/multi_operator_package.md) — 多算子包拆分策略。
62-- [算子动态库和静态库编译](./编译与部署/算子动态库和静态库编译.md) — 适用于需要以库形式集成到应用的场景。62+- [算子动态库和静态库编译](./compilation_and_deployment/dynamic_static_lib_compilation.md) — 适用于需要以库形式集成到应用的场景。
63-- [交叉编译](./编译与部署/交叉编译.md) — 适用于开发环境与运行环境架构不同的场景。63+- [交叉编译](./compilation_and_deployment/cross_compilation.md) — 适用于开发环境与运行环境架构不同的场景。
64-- [编译过程调试](./编译与部署/编译过程调试.md) — 适用于遇到编译问题的场景。64+- [编译过程调试](./compilation_and_deployment/compilation_debug.md) — 适用于遇到编译问题的场景。
65-- [编译加速](./编译与部署/编译加速.md) — 适用于需要加速构建的场景。65+- [编译加速](./compilation_and_deployment/compilation_acceleration.md) — 适用于需要加速构建的场景。
66 66 
67### 调用验证67### 调用验证
68 68 
69`[基础]`69`[基础]`
70-- [单算子API调用](./调用/单算子API调用.md) — 通过aclnn API调用验证算子功能。70+- [单算子API调用](./invocation/single_operator_api_call.md) — 通过aclnn API调用验证算子功能。
71 71 
72`[扩展]`72`[扩展]`
73-- [运行时加载机制](./调用/运行时加载机制.md) — 适用于需要了解二段式调用模型和代码写法如何影响运行表现的场景。73+- [运行时加载机制](./invocation/runtime_loading_mechanism.md) — 适用于需要了解二段式调用模型和代码写法如何影响运行表现的场景。
74 74 
75### 参考文档75### 参考文档
76 76 
77以下为查阅型内容,可在开发过程中按需检索:77以下为查阅型内容,可在开发过程中按需检索:
78 78 
79-- [命名转换规则对照表](./附录/命名转换规则对照表.md) — 算子类型名、文件名、核函数名的转换规则。79+- [命名转换规则对照表](./appendix/naming_conversion_table.md) — 算子类型名、文件名、核函数名的转换规则。
80-- [cmake函数参考](./附录/cmake函数参考.md) — CMake函数的参数与用法详解。80+- [cmake函数参考](./appendix/cmake_function_reference.md) — CMake函数的参数与用法详解。
81-- [外部样例链接汇总](./附录/外部样例链接汇总.md) — 文档中引用的外部样例与API链接汇总。81+- [外部样例链接汇总](./appendix/external_sample_links.md) — 文档中引用的外部样例与API链接汇总。
Rdocs/zh/guide/编程指南/高级编程/高级AI-Core编程模型/高级AI-Core编程模型.mddocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/advanced_ai_core_programming_model.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/抽象硬件架构.mddocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/abstract_hardware_architecture.md+3-3
@@ -9,7 +9,7 @@ Ascend C支持SIMD与SIMT混合编程,实现向量级并行与线程级并行
9 9 
10如上图硬件架构所示,AIV核的计算单元包括SIMD和SIMT两种。针对这两种硬件计算单元,Ascend C抽象出了Vector Function的软件概念,用于表示在SIMT或SIMD硬件计算单元上执行的特定功能代码段。用户通过编写SIMD Vector Function或SIMT Vector Function来调用对应的执行单元完成计算任务,在算子核函数中调用不同类型的Vector Function,以实现SIMD/SIMT硬件单元的切换使用。10如上图硬件架构所示,AIV核的计算单元包括SIMD和SIMT两种。针对这两种硬件计算单元,Ascend C抽象出了Vector Function的软件概念,用于表示在SIMT或SIMD硬件计算单元上执行的特定功能代码段。用户通过编写SIMD Vector Function或SIMT Vector Function来调用对应的执行单元完成计算任务,在算子核函数中调用不同类型的Vector Function,以实现SIMD/SIMT硬件单元的切换使用。
11 11 
12-如下图所示,simt\_func表示在SIMT硬件单元上执行的代码段,simd\_func表示在SIMD硬件单元上执行的代码段,代码段属性通过[\_\_simt\_vf\_\_](核函数与VF函数.md#zh-cn_topic_0000002571578013_section1780955884616)、[\_\_simd\_vf\_\_](../../../语言扩展层/SIMD-BuiltIn关键字.md#section192521344610)来标识。12+如下图所示,simt\_func表示在SIMT硬件单元上执行的代码段,simd\_func表示在SIMD硬件单元上执行的代码段,代码段属性通过[\_\_simt\_vf\_\_](kernel_and_vf_functions.md#zh-cn_topic_0000002571578013_section1780955884616)、[\_\_simd\_vf\_\_](../../../language_extension/simd_builtin_keywords.md#section192521344610)来标识。
13 13 
14**图2** SIMD与SIMT混合编程VF示意图 14**图2** SIMD与SIMT混合编程VF示意图
15![](../../../../figures/simt_vf.png)15![](../../../../figures/simt_vf.png)
@@ -18,7 +18,7 @@ AIV执行时,Scalar计算单元会将Vector Function发射到Vector Function Q
18 18 
19### SIMD Vector Function19### SIMD Vector Function
20 20 
21-当AIV核处于SIMD工作模式时,执行模型遵从[Reg矢量计算方式](../../../编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Reg矢量计算编程.md),核内参与Reg矢量计算的硬件单元包括:21+当AIV核处于SIMD工作模式时,执行模型遵从[Reg矢量计算方式](../../../programming_model/ai_core_simd_programming/c_pointer_programming/reg_vector_computation.md),核内参与Reg矢量计算的硬件单元包括:
22 22 
23- **Reg矢量执行单元**:用于执行Reg矢量计算,从寄存器读取数据,完成计算后将结果写回寄存器。23- **Reg矢量执行单元**:用于执行Reg矢量计算,从寄存器读取数据,完成计算后将结果写回寄存器。
24- **DMA单元**:用于执行Reg矢量搬运,负责在寄存器和UB之间搬运数据。24- **DMA单元**:用于执行Reg矢量搬运,负责在寄存器和UB之间搬运数据。
@@ -34,7 +34,7 @@ Reg矢量执行单元、DMA单元和Aux Scalar虽属于不同的硬件执行单
34 34 
35### SIMT Vector Function35### SIMT Vector Function
36 36 
37-当AIV核处于SIMT工作模式时,执行模型遵从由Thread、Block、Grid组成的[线程架构](../../../编程模型/AI-Core-SIMT编程/线程架构.md)。一个SIMT VF对应一个线程块(Block)的执行上下文,线程块内线程按线性线程号划分为多个Warp,每个Warp包含32个线程。37+当AIV核处于SIMT工作模式时,执行模型遵从由Thread、Block、Grid组成的[线程架构](../../../programming_model/ai_core_simt_programming/thread_architecture.md)。一个SIMT VF对应一个线程块(Block)的执行上下文,线程块内线程按线性线程号划分为多个Warp,每个Warp包含32个线程。
38 38 
39Warp内线程共享同一条指令流,各线程维护独立的线程索引、寄存器和栈等执行状态。硬件根据线程活跃掩码发射指令:当Warp内线程控制流一致时,可保持较高执行效率;发生分支发散时,硬件会按不同分支路径分批执行活跃线程,有效并行度随之下降。39Warp内线程共享同一条指令流,各线程维护独立的线程索引、寄存器和栈等执行状态。硬件根据线程活跃掩码发射指令:当Warp内线程控制流一致时,可保持较高执行效率;发生分支发散时,硬件会按不同分支路径分批执行活跃线程,有效并行度随之下降。
40 40 
Rdocs/zh/guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/核函数与VF函数.mddocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/kernel_and_vf_functions.md+3-3
@@ -97,7 +97,7 @@ asc_vf_call<function_name>(dim3(thread_num), arg1, arg2, ...);
97 97 
98SIMT VF函数有以下约束:98SIMT VF函数有以下约束:
99 99 
100-- 入参仅支持Ascend C的[内置数据类型](../../../语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.md#zh-cn_topic_0000002571575581_section1880403364916)(int32\_t、uint32\_t、float、half等)及其组成的指针、数组、结构体类型,且指针类型必须指向GM或者UB内存。100+- 入参仅支持Ascend C的[内置数据类型](../../../language_extension/simd_simt_hybrid_builtin_keywords.md#zh-cn_topic_0000002571575581_section1880403364916)(int32\_t、uint32\_t、float、half等)及其组成的指针、数组、结构体类型,且指针类型必须指向GM或者UB内存。
101- 不支持将核函数中局部变量的地址或引用传递给VF函数。101- 不支持将核函数中局部变量的地址或引用传递给VF函数。
102- 函数返回类型必须是void。102- 函数返回类型必须是void。
103- SIMT VF内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。103- SIMT VF内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。
@@ -118,6 +118,6 @@ return_type result = function_name(arg1, arg2, ...);
118 118 
119该函数有以下约束:119该函数有以下约束:
120 120 
121-- 入参仅支持Ascend C的[内置数据类型](../../../语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.md#zh-cn_topic_0000002571575581_section1880403364916)(int32\_t、uint32\_t、float、half等)和指针类型。121+- 入参仅支持Ascend C的[内置数据类型](../../../language_extension/simd_simt_hybrid_builtin_keywords.md#zh-cn_topic_0000002571575581_section1880403364916)(int32\_t、uint32\_t、float、half等)和指针类型。
122-- 函数返回值只能是Ascend C的[内置数据类型](../../../语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.md#zh-cn_topic_0000002571575581_section1880403364916)(int32\_t、uint32\_t、float、half等)及对应的指针类型。122+- 函数返回值只能是Ascend C的[内置数据类型](../../../language_extension/simd_simt_hybrid_builtin_keywords.md#zh-cn_topic_0000002571575581_section1880403364916)(int32\_t、uint32\_t、float、half等)及对应的指针类型。
123- 函数内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。123- 函数内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。
Rdocs/zh/guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/内存层级.mddocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/memory_hierarchy.md+2-2
@@ -25,7 +25,7 @@ UB内存空间总大小为256KB。UB按功能划分为四个主要区域,从
25 __ubuf__ char static_buf[1024];25 __ubuf__ char static_buf[1024];
26 ```26 ```
27 27 
28-2. 动态内存:位于静态内存之后,其大小由[<<<...\>\>\>](核函数与VF函数.md#zh-cn_topic_0000002571578013_section156822920311)中的`dyn_ub_size`参数指定,可通过以下方式申请使用。28+2. 动态内存:位于静态内存之后,其大小由[<<<...\>\>\>](kernel_and_vf_functions.md#zh-cn_topic_0000002571578013_section156822920311)中的`dyn_ub_size`参数指定,可通过以下方式申请使用。
29 29 
30 - 使用动态数组分配。30 - 使用动态数组分配。
31 31 
@@ -52,7 +52,7 @@ UB内存空间总大小为256KB。UB按功能划分为四个主要区域,从
52 52 
53> [!NOTE]说明53> [!NOTE]说明
54>54>
55-> 用户可选择禁用预留空间,禁用方法为:编译时增加[--cce-disable-vf-stack-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)选项。开启该选项后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用,Data Cache空间可按如下公式估算:55+> 用户可选择禁用预留空间,禁用方法为:编译时增加[--cce-disable-vf-stack-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)选项。开启该选项后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用,Data Cache空间可按如下公式估算:
56> ```56> ```
57> Data Cache空间大小 = min(UB总大小(256KB) - 静态内存 - 动态内存 - 预留空间(8KB), 128KB)57> Data Cache空间大小 = min(UB总大小(256KB) - 静态内存 - 动态内存 - 预留空间(8KB), 128KB)
58> ```58> ```
Rdocs/zh/guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.mddocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md+6-6
@@ -25,14 +25,14 @@
25 25 
26## 指南概览26## 指南概览
27 27 
28-混合编程作为高级编程方式,在阅读本章节内容前需对[SIMD编程模型](../../../编程模型/AI-Core-SIMD编程/AI-Core-SIMD编程.md)和[SIMT编程模型](../../../编程模型/AI-Core-SIMT编程/AI-Core-SIMT编程.md)有一定的了解。本章节将从以下几个方面展开介绍混合编程:28+混合编程作为高级编程方式,在阅读本章节内容前需对[SIMD编程模型](../../../programming_model/ai_core_simd_programming/ai_core_simd_programming.md)和[SIMT编程模型](../../../programming_model/ai_core_simt_programming/ai_core_simt_programming.md)有一定的了解。本章节将从以下几个方面展开介绍混合编程:
29 29 
30-- **[抽象硬件架构](抽象硬件架构.md)**:介绍了SIMD与SIMT混合编程场景的硬件架构,介绍VF(Vector Function)运行机制及SIMT VF、SIMD VF等概念。30+- **[抽象硬件架构](abstract_hardware_architecture.md)**:介绍了SIMD与SIMT混合编程场景的硬件架构,介绍VF(Vector Function)运行机制及SIMT VF、SIMD VF等概念。
31 31 
32-- **[核函数与VF函数](核函数与VF函数.md)**:详细介绍了混合编程场景的核函数定义、调用方式及执行配置,VF函数及各类函数的调用关系。32+- **[核函数与VF函数](kernel_and_vf_functions.md)**:详细介绍了混合编程场景的核函数定义、调用方式及执行配置,VF函数及各类函数的调用关系。
33 33 
34-- **[内存层级](内存层级.md)**:展示混合编程场景的内存层级,重点介绍了VF之间的通信方式,UB内存作为共享内存是如何分配与管理的。34+- **[内存层级](memory_hierarchy.md)**:展示混合编程场景的内存层级,重点介绍了VF之间的通信方式,UB内存作为共享内存是如何分配与管理的。
35 35 
36-- **[编程示例](编程示例.md)**:以实际样例展示混合编程关键语法,包括`asc_vf_call`调用SIMT VF函数和`<<<>>>`核函数启动配置。36+- **[编程示例](programming_examples.md)**:以实际样例展示混合编程关键语法,包括`asc_vf_call`调用SIMT VF函数和`<<<>>>`核函数启动配置。
37 37 
38-强烈建议开发者阅读[混合编程场景的扩展语法与约束说明](../../../语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.md),掌握基本扩展语法及使用约束后开发自定义算子。38+强烈建议开发者阅读[混合编程场景的扩展语法与约束说明](../../../language_extension/simd_simt_hybrid_builtin_keywords.md),掌握基本扩展语法及使用约束后开发自定义算子。
Rdocs/zh/guide/编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/编程示例.mddocs/zh/guide/programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/programming_examples.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/高级编程.mddocs/zh/guide/programming_guide/advanced_programming/advanced_programming.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/AI框架算子适配/ONNX框架/适配插件开发.mddocs/zh/guide/programming_guide/advanced_programming/ai_framework_adaptation/onnx_framework/adaptation_plugin_development.md+2-2
@@ -13,7 +13,7 @@
13 13 
14您可以参考本章节进行算子适配插件的开发,将ONNX框架的算子映射成适配AI处理器的算子(下文简称CANN算子),从而完成从ONNX框架调用Ascend C自定义算子的过程。如果只涉及插件开发,也可以不依赖自定义算子工程,参考[LINK](https://gitcode.com/cann/cann-samples/tree/master/Samples/0_Introduction/custom_op)生成算子插件so后,通过ASCEND_CUSTOM_OPP_PATH指定so所在路径进行使用。14您可以参考本章节进行算子适配插件的开发,将ONNX框架的算子映射成适配AI处理器的算子(下文简称CANN算子),从而完成从ONNX框架调用Ascend C自定义算子的过程。如果只涉及插件开发,也可以不依赖自定义算子工程,参考[LINK](https://gitcode.com/cann/cann-samples/tree/master/Samples/0_Introduction/custom_op)生成算子插件so后,通过ASCEND_CUSTOM_OPP_PATH指定so所在路径进行使用。
15 15 
16-完成[算子工程创建](../TensorFlow框架.md#li123241091016)后,会在算子工程目录下生成framework/onnx\_plugin目录,用于存放ONNX框架适配插件实现文件。以自定义CANN算子LeakyReluCustom为例,算子工程目录如下:16+完成[算子工程创建](../tensorflow_framework.md#li123241091016)后,会在算子工程目录下生成framework/onnx\_plugin目录,用于存放ONNX框架适配插件实现文件。以自定义CANN算子LeakyReluCustom为例,算子工程目录如下:
17 17 
18```18```
19LeakyReluCustom19LeakyReluCustom
@@ -55,7 +55,7 @@ namespace domi {
55 - json.hpp,用于进行ONNX数据定义的解析,将String类型的算子参数定义转换为json格式。若样例工程中未提供“json.hpp”文件,用户可以自行下载,并将“json.hpp”放在工程可以找到的任意路径下,然后包含此头文件即可,下载路径可参见[json.hpp](https://github.com/nlohmann/json/blob/develop/include/nlohmann/json.hpp)。55 - json.hpp,用于进行ONNX数据定义的解析,将String类型的算子参数定义转换为json格式。若样例工程中未提供“json.hpp”文件,用户可以自行下载,并将“json.hpp”放在工程可以找到的任意路径下,然后包含此头文件即可,下载路径可参见[json.hpp](https://github.com/nlohmann/json/blob/develop/include/nlohmann/json.hpp)。
56 56 
572. 使用REGISTER\_CUSTOM\_OP宏,完成CANN算子和ONNX框架的算子映射关系注册。使用方法如下:572. 使用REGISTER\_CUSTOM\_OP宏,完成CANN算子和ONNX框架的算子映射关系注册。使用方法如下:
58- - REGISTER\_CUSTOM\_OP:注册自定义算子,OpType为算子类型名称,需要与[算子原型注册](../../Aclnn算子工程化开发/设计与实现/算子原型定义.md)中的OpType保持一致。58+ - REGISTER\_CUSTOM\_OP:注册自定义算子,OpType为算子类型名称,需要与[算子原型注册](../../aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)中的OpType保持一致。
59 - FrameworkType:ONNX代表原始框架为ONNX。59 - FrameworkType:ONNX代表原始框架为ONNX。
60 - OriginOpType:算子在原始框架中的类型。例如自定义算子_OpTypeA_,对应ONNX算子库版本opset\_version=11,应传入“ai.onnx::11::_OpTypeA_”,当前支持的ONNX版本范围为9\~15。60 - OriginOpType:算子在原始框架中的类型。例如自定义算子_OpTypeA_,对应ONNX算子库版本opset\_version=11,应传入“ai.onnx::11::_OpTypeA_”,当前支持的ONNX版本范围为9\~15。
61 - ParseParamsByOperatorFn\(_ParseParamByOpFunc_\):用来注册解析算子参数实现映射关系的回调函数,需要用户自定义实现回调函数ParseParamByOpFunc。具体实现方式参考[3](#li213610403113)。61 - ParseParamsByOperatorFn\(_ParseParamByOpFunc_\):用来注册解析算子参数实现映射关系的回调函数,需要用户自定义实现回调函数ParseParamByOpFunc。具体实现方式参考[3](#li213610403113)。
Rdocs/zh/guide/编程指南/高级编程/AI框架算子适配/ONNX框架/调用样例.mddocs/zh/guide/programming_guide/advanced_programming/ai_framework_adaptation/onnx_framework/call_examples.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/AI框架算子适配/概述.mddocs/zh/guide/programming_guide/advanced_programming/ai_framework_adaptation/overview.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/AI框架算子适配/PyTorch框架.mddocs/zh/guide/programming_guide/advanced_programming/ai_framework_adaptation/pytorch_framework.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/AI框架算子适配/TensorFlow框架.mddocs/zh/guide/programming_guide/advanced_programming/ai_framework_adaptation/tensorflow_framework.md+5-5
@@ -14,19 +14,19 @@
141. 环境准备。141. 环境准备。
15 1. CANN软件安装请参考[环境准备](../../../getting_started/environment_setup.md)。15 1. CANN软件安装请参考[环境准备](../../../getting_started/environment_setup.md)。
16 2. 安装框架插件包,请参考[TensorFlow模型迁移](https://www.hiascend.com/document/detail/zh/TensorFlowCommunity/latest/index/index.html)中《TensorFlow 1.15模型迁移》或《TensorFlow 2.6.5模型迁移》的环境准备 \> 安装框架插件包章节,获取框架插件包详细的安装步骤。16 2. 安装框架插件包,请参考[TensorFlow模型迁移](https://www.hiascend.com/document/detail/zh/TensorFlowCommunity/latest/index/index.html)中《TensorFlow 1.15模型迁移》或《TensorFlow 2.6.5模型迁移》的环境准备 \> 安装框架插件包章节,获取框架插件包详细的安装步骤。
17- 3. <a name="li123241091016"></a>[创建算子工程](../Aclnn算子工程化开发/Aclnn算子工程化开发快速入门.md#create-project)。使用msOpGen工具创建算子开发工程。TensorFlow框架算子适配场景下,需要通过framework参数指定具体的框架为tf或者tensorflow,工具会自动生成框架适配代码。以自定义CANN算子AddCustom为例,使用msOpGen工具创建算子开发工程的具体命令如下:17+ 3. <a name="li123241091016"></a>[创建算子工程](../aclnn_operator_development/aclnn_quick_start.md#create-project)。使用msOpGen工具创建算子开发工程。TensorFlow框架算子适配场景下,需要通过framework参数指定具体的框架为tf或者tensorflow,工具会自动生成框架适配代码。以自定义CANN算子AddCustom为例,使用msOpGen工具创建算子开发工程的具体命令如下:
18 18 
19 ```19 ```
20 ${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i $HOME/sample/add_custom.json -f tf -c ai_core-<soc_version> -lan cpp -out $HOME/sample/AddCustom20 ${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i $HOME/sample/add_custom.json -f tf -c ai_core-<soc_version> -lan cpp -out $HOME/sample/AddCustom
21 ```21 ```
22 22 
232. 算子实现。232. 算子实现。
24- - [算子原型定义](../Aclnn算子工程化开发/设计与实现/算子原型定义.md)。通过原型定义来描述算子输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联tiling实现等函数。24+ - [算子原型定义](../aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)。通过原型定义来描述算子输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联tiling实现等函数。
25- - Kernel侧算子实现和host侧tiling实现请参考[SIMD算子实现](../../../算子实践参考/SIMD算子实现/概述.md);工程化算子开发,支持开发者调用Tiling API基于CANN提供的编程框架进行tiling开发,kernel侧也提供对应的接口方便开发者获取tiling参数,具体内容请参考[Kernel侧算子实现](../Aclnn算子工程化开发/设计与实现/Kernel侧算子实现.md)和[Host侧Tiling实现](../Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md),由此而带来的额外约束也在上述章节说明。25+ - Kernel侧算子实现和host侧tiling实现请参考[SIMD算子实现](../../../算子实践参考/SIMD算子实现/概述.md);工程化算子开发,支持开发者调用Tiling API基于CANN提供的编程框架进行tiling开发,kernel侧也提供对应的接口方便开发者获取tiling参数,具体内容请参考[Kernel侧算子实现](../aclnn_operator_development/design_and_implementation/kernel_operator_implementation.md)和[Host侧Tiling实现](../aclnn_operator_development/design_and_implementation/host_tiling_implementation.md),由此而带来的额外约束也在上述章节说明。
26 26 
27-3. [算子入图(GE图)开发](../算子入图开发/基本开发流程.md)。算子入图场景下,需要提供shape推导等算子入图适配函数的实现。27+3. [算子入图(GE图)开发](../operator_graph_development/basic_development_flow.md)。算子入图场景下,需要提供shape推导等算子入图适配函数的实现。
284. TensorFlow框架适配插件开发。详细说明见[适配插件开发](#section1820291291414)。284. TensorFlow框架适配插件开发。详细说明见[适配插件开发](#section1820291291414)。
29-5. 编译部署。通过工程编译脚本完成算子的编译部署,分为[算子包编译](../Aclnn算子工程化开发/编译与部署/基本流程.md)和[算子动态库编译](../Aclnn算子工程化开发/编译与部署/算子动态库和静态库编译.md)两种方式。29+5. 编译部署。通过工程编译脚本完成算子的编译部署,分为[算子包编译](../aclnn_operator_development/compilation_and_deployment/basic_process.md)和[算子动态库编译](../aclnn_operator_development/compilation_and_deployment/dynamic_static_lib_compilation.md)两种方式。
306. TensorFlow框架算子调用。详细说明见[TensorFlow原生算子映射到CANN算子](#section6342138121512)和[TensorFlow自定义算子开发并映射到CANN算子](#section18276103563719)。完整样例请参考[LINK](../../../../../../examples/01_simd_cpp_api/02_features/00_framework/01_tensorflow)。306. TensorFlow框架算子调用。详细说明见[TensorFlow原生算子映射到CANN算子](#section6342138121512)和[TensorFlow自定义算子开发并映射到CANN算子](#section18276103563719)。完整样例请参考[LINK](../../../../../../examples/01_simd_cpp_api/02_features/00_framework/01_tensorflow)。
31 31 
32## 适配插件开发<a name="section1820291291414"></a>32## 适配插件开发<a name="section1820291291414"></a>
Rdocs/zh/guide/编程指南/高级编程/AOT编译优化.mddocs/zh/guide/programming_guide/advanced_programming/aot_compilation_optimization.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/硬件实现/架构规格/架构规格.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/architecture_spec.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本2002.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2002.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本2201.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_2201.md+2-2
@@ -54,9 +54,9 @@
54>54>
55> UB总容量为192KB,Ascend C框架和编译器会在Cube和Vector融合算子开发场景预留256B空间,用户实际可使用的空间需要减去这部分预留空间,用户最多可使用`192KB - 256B`的UB空间。55> UB总容量为192KB,Ascend C框架和编译器会在Cube和Vector融合算子开发场景预留256B空间,用户实际可使用的空间需要减去这部分预留空间,用户最多可使用`192KB - 256B`的UB空间。
56>56>
57-> - 编译时开启[--cce-disable-asc-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)选项,用户可使用的实际UB空间大小为`192KB - 256B`。此时,Ascend C不再预留用于支持[部分Ascend C API](../../../编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md#使用预留ub空间的api范围)的8KB UB空间,该空间可作为普通UB空间使用。开启该选项后,上述API不可用,调用时会产生编译错误。57+> - 编译时开启[--cce-disable-asc-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)选项,用户可使用的实际UB空间大小为`192KB - 256B`。此时,Ascend C不再预留用于支持[部分Ascend C API](../../../programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md#使用预留ub空间的api范围)的8KB UB空间,该空间可作为普通UB空间使用。开启该选项后,上述API不可用,调用时会产生编译错误。
58>58>
59-> - 编译时不开启[--cce-disable-asc-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)选项,用户可使用的实际UB空间大小为`192KB - 256B - 8KB`。59+> - 编译时不开启[--cce-disable-asc-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)选项,用户可使用的实际UB空间大小为`192KB - 256B - 8KB`。
60>60>
61> L1 Buffer总容量为512KB,Ascend C框架和编译器会在Cube和Vector融合算子开发场景预留256B空间,用户实际可使用的空间需要减去这部分预留空间,用户最多可使用`512KB - 256B`的L1 Buffer空间。61> L1 Buffer总容量为512KB,Ascend C框架和编译器会在Cube和Vector融合算子开发场景预留256B空间,用户实际可使用的空间需要减去这部分预留空间,用户最多可使用`512KB - 256B`的L1 Buffer空间。
62 62 
Rdocs/zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3002.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3002.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md+5-5
@@ -1,6 +1,6 @@
1# NPU架构版本3510<a name="ZH-CN_TOPIC_0000002468380701"></a>1# NPU架构版本3510<a name="ZH-CN_TOPIC_0000002468380701"></a>
2 2 
3-本节介绍\_\_NPU\_ARCH\_\_版本号为[3510](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)的硬件架构和其功能说明。3+本节介绍\_\_NPU\_ARCH\_\_版本号为[3510](../../../language_extension/simd_builtin_keywords.md#npu-arch)的硬件架构和其功能说明。
4 4 
5## 硬件架构图<a name="section2189135013710"></a>5## 硬件架构图<a name="section2189135013710"></a>
6 6 
@@ -55,7 +55,7 @@
55- Vector计算单元支持U8、U16、U32、S8、S16、S32、BF16、FP16、FP32数据类型。55- Vector计算单元支持U8、U16、U32、S8、S16、S32、BF16、FP16、FP32数据类型。
56- Vector计算单元每拍可处理256字节的数据。56- Vector计算单元每拍可处理256字节的数据。
57- Vector计算单元处理的数据来源来自于Register。57- Vector计算单元处理的数据来源来自于Register。
58-- 在本架构版本中,高维切分接口中的传入的掩码值会被转化为MaskReg传入Vector计算单元,而在[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)中,掩码值从特殊的掩码寄存器中读取。58+- 在本架构版本中,高维切分接口中的传入的掩码值会被转化为MaskReg传入Vector计算单元,而在[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md#npu-arch)中,掩码值从特殊的掩码寄存器中读取。
59 59 
60 **图1** NPU架构版本2201高维切分<a name="fig7285103215410"></a>60 **图1** NPU架构版本2201高维切分<a name="fig7285103215410"></a>
61 ![](../../../../figures/npu_arch_2201_high_dim_split.png "NPU架构版本2201高维切分")61 ![](../../../../figures/npu_arch_2201_high_dim_split.png "NPU架构版本2201高维切分")
@@ -112,8 +112,8 @@
112>112>
113> 编译选项:113> 编译选项:
114>114>
115-> - 编译时开启[--cce-disable-vf-stack-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)选项,此时常量BISHENG_VF_STACK = 6K,原本预留的6KB SIMD VF栈空间可作为普通UB空间使用。该预留空间用于编译器缓存寄存器溢出数据。开启该选项后,编译器无法再使用该空间缓存寄存器溢出数据,开发者需确保不发生寄存器溢出。115+> - 编译时开启[--cce-disable-vf-stack-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)选项,此时常量BISHENG_VF_STACK = 6K,原本预留的6KB SIMD VF栈空间可作为普通UB空间使用。该预留空间用于编译器缓存寄存器溢出数据。开启该选项后,编译器无法再使用该空间缓存寄存器溢出数据,开发者需确保不发生寄存器溢出。
116-> - 编译时开启[--cce-disable-asc-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)选项,此时常量ASC_UB_RESERVE = 2K,原本用于支持[部分Ascend C API](../../../编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md#使用预留ub空间的api范围)的2KB UB空间可作为普通UB空间使用。开启该选项后,上述API不可用,调用时会产生编译错误。116+> - 编译时开启[--cce-disable-asc-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)选项,此时常量ASC_UB_RESERVE = 2K,原本用于支持[部分Ascend C API](../../../programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md#使用预留ub空间的api范围)的2KB UB空间可作为普通UB空间使用。开启该选项后,上述API不可用,调用时会产生编译错误。
117>117>
118> 编程场景:118> 编程场景:
119> - 在SIMD编程场景下,开启上述两个编译选项后,用户可使用的实际UB空间大小为:`248KB + 6KB + 2KB = 256KB`。119> - 在SIMD编程场景下,开启上述两个编译选项后,用户可使用的实际UB空间大小为:`248KB + 6KB + 2KB = 256KB`。
@@ -122,7 +122,7 @@
122>122>
123> 用户使用UB时,应根据实际编程场景和编译选项计算可用容量,并确保实际使用的UB空间不超过该容量。123> 用户使用UB时,应根据实际编程场景和编译选项计算可用容量,并确保实际使用的UB空间不超过该容量。
124>124>
125-> 更多编译选项请参考:[常用的编译选项](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)。125+> 更多编译选项请参考:[常用的编译选项](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)。
126 126 
127**不同数据通路的带宽**127**不同数据通路的带宽**
128 128 
Rdocs/zh/guide/编程指南/高级编程/硬件实现/基本架构.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md+3-3
@@ -14,7 +14,7 @@ AI Core负责执行矩阵、矢量计算密集的任务,其包括以下组成
14 14 
15![](../../../figures/sep_arch.png)15![](../../../figures/sep_arch.png)
16 16 
17-本章节首先介绍硬件架构相关的关键概念和术语,以及AI Core的工作模式,为理解后续内容奠定基础。随后以Atlas A2 训练系列产品/Atlas A2 推理系列产品为例,提供AI Core基本架构的介绍:首先介绍计算单元、存储单元和搬运单元的基本功能与结构,然后通过典型的数据流和控制流示例,帮助开发者深入理解硬件架构的工作原理。针对不同产品型号对应的具体架构规格和细节说明需要参考后续[架构规格](./架构规格/架构规格.md)章节。17+本章节首先介绍硬件架构相关的关键概念和术语,以及AI Core的工作模式,为理解后续内容奠定基础。随后以Atlas A2 训练系列产品/Atlas A2 推理系列产品为例,提供AI Core基本架构的介绍:首先介绍计算单元、存储单元和搬运单元的基本功能与结构,然后通过典型的数据流和控制流示例,帮助开发者深入理解硬件架构的工作原理。针对不同产品型号对应的具体架构规格和细节说明需要参考后续[架构规格](./architecture_spec/architecture_spec.md)章节。
18 18 
19## 关键概念和术语<a name="section16011278116"></a>19## 关键概念和术语<a name="section16011278116"></a>
20 20 
@@ -230,7 +230,7 @@ AI处理器中的计算资源要想发挥强劲算力,必要条件是保证输
230**图7** 指令分类处理机制<a name="fig1993349810"></a> 230**图7** 指令分类处理机制<a name="fig1993349810"></a>
231![](../../../figures/instr_class.png "指令分类处理机制")231![](../../../figures/instr_class.png "指令分类处理机制")
232 232 
233-各指令序列存在队列深度限制。队列深度表示同一指令序列中可缓存的待执行指令数量。当待执行指令数量达到队列深度时,Scalar单元继续向该指令序列发射指令会被阻塞,可能影响整体流水并行效率,[NPU架构版本2201](../../语言扩展层/SIMD-BuiltIn关键字.md)各指令序列队列深度参数参考[指令序列深度](./架构规格/NPU架构版本2201.md#指令序列深度),[NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)各指令序列队列深度参数参考[指令序列深度](./架构规格/NPU架构版本3510.md#指令序列深度)。233+各指令序列存在队列深度限制。队列深度表示同一指令序列中可缓存的待执行指令数量。当待执行指令数量达到队列深度时,Scalar单元继续向该指令序列发射指令会被阻塞,可能影响整体流水并行效率,[NPU架构版本2201](../../language_extension/simd_builtin_keywords.md)各指令序列队列深度参数参考[指令序列深度](./architecture_spec/npu_arch_2201.md#指令序列深度),[NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)各指令序列队列深度参数参考[指令序列深度](./architecture_spec/npu_arch_3510.md#指令序列深度)。
234 234 
235同一个指令序列中的指令是按照进入指令序列的顺序执行的,不同指令序列之间可以并行执行,通过多个指令序列的并行执行可以提升整体执行效率。对于并行执行过程中可能出现的数据依赖,通过事件同步模块插入同步指令来控制流水线的同步,提供PipeBarrier、SetFlag/WaitFlag两种API,保证序列内部以及序列之间按照逻辑关系执行。235同一个指令序列中的指令是按照进入指令序列的顺序执行的,不同指令序列之间可以并行执行,通过多个指令序列的并行执行可以提升整体执行效率。对于并行执行过程中可能出现的数据依赖,通过事件同步模块插入同步指令来控制流水线的同步,提供PipeBarrier、SetFlag/WaitFlag两种API,保证序列内部以及序列之间按照逻辑关系执行。
236 236 
@@ -239,7 +239,7 @@ AI处理器中的计算资源要想发挥强劲算力,必要条件是保证输
239 - SetFlag:当前序指令的所有读写操作都完成之后,当前指令开始执行,并将硬件中的对应标志位设置为1。239 - SetFlag:当前序指令的所有读写操作都完成之后,当前指令开始执行,并将硬件中的对应标志位设置为1。
240 - WaitFlag:当执行到该指令时,如果发现对应标志位为0,该序列的后续指令将一直被阻塞;如果发现对应标志位为1,则将对应标志位设置为0,同时后续指令开始执行。240 - WaitFlag:当执行到该指令时,如果发现对应标志位为0,该序列的后续指令将一直被阻塞;如果发现对应标志位为1,则将对应标志位设置为0,同时后续指令开始执行。
241 241 
242-Ascend C提供同步控制API,开发者可以使用这类API来自行完成同步控制。需要注意的是,通常情况下,开发者基于[编程模型](../../编程模型/编程模型概述.md)中介绍的编程模型和范式进行编程时不需要关注同步,编程模型帮助开发者完成了同步控制;使用编程模型和范式是我们推荐的编程方式,自行同步控制可能会带来一定的编程复杂度。242+Ascend C提供同步控制API,开发者可以使用这类API来自行完成同步控制。需要注意的是,通常情况下,开发者基于[编程模型](../../programming_model/programming_model_overview.md)中介绍的编程模型和范式进行编程时不需要关注同步,编程模型帮助开发者完成了同步控制;使用编程模型和范式是我们推荐的编程方式,自行同步控制可能会带来一定的编程复杂度。
243 243 
244但是我们仍然希望开发者可以理解同步的基本原理,便于后续更好的理解设计并行计算程序;同时少数情况需要开发者手动插入同步,您可以通过[什么时候需要开发者手动插入同步](../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/intra_core_sync_overview.md)来了解具体内容。244但是我们仍然希望开发者可以理解同步的基本原理,便于后续更好的理解设计并行计算程序;同时少数情况需要开发者手动插入同步,您可以通过[什么时候需要开发者手动插入同步](../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/intra_core_sync_overview.md)来了解具体内容。
245 245 
Rdocs/zh/guide/编程指南/高级编程/硬件实现/硬件约束/NPU架构版本2002.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2002.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/硬件实现/硬件约束/NPU架构版本2201.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/hardware_constraints/npu_arch_2201.md+1-1
@@ -85,7 +85,7 @@
85</td>85</td>
86<td class="cellrowborder" valign="top" width="33.406659334066596%" headers="mcps1.2.4.1.2 "><p id="p139319421513"><a name="p139319421513"></a><a name="p139319421513"></a>ICache硬件规格限制32KB。</p>86<td class="cellrowborder" valign="top" width="33.406659334066596%" headers="mcps1.2.4.1.2 "><p id="p139319421513"><a name="p139319421513"></a><a name="p139319421513"></a>ICache硬件规格限制32KB。</p>
87</td>87</td>
88-<td class="cellrowborder" valign="top" width="52.98470152984702%" headers="mcps1.2.4.1.3 "><p id="p23931842016"><a name="p23931842016"></a><a name="p23931842016"></a>拆分Tiling_key或使用模板函数来减少代码段。详情见<a href="../../../高级编程/Aclnn算子工程化开发/设计与实现/多分支策略.md">多分支策略</a>。</p>88+<td class="cellrowborder" valign="top" width="52.98470152984702%" headers="mcps1.2.4.1.3 "><p id="p23931842016"><a name="p23931842016"></a><a name="p23931842016"></a>拆分Tiling_key或使用模板函数来减少代码段。详情见<a href="../../../advanced_programming/aclnn_operator_development/design_and_implementation/multi_branch_strategy.md">多分支策略</a>。</p>
89</td>89</td>
90</tr>90</tr>
91<tr id="row194173017534"><td class="cellrowborder" valign="top" width="13.608639136086392%" headers="mcps1.2.4.1.1 "><p id="p1839310421316"><a name="p1839310421316"></a><a name="p1839310421316"></a>ICache</p>91<tr id="row194173017534"><td class="cellrowborder" valign="top" width="13.608639136086392%" headers="mcps1.2.4.1.1 "><p id="p1839310421316"><a name="p1839310421316"></a><a name="p1839310421316"></a>ICache</p>
Rdocs/zh/guide/编程指南/高级编程/硬件实现/硬件实现.mddocs/zh/guide/programming_guide/advanced_programming/hardware_implementation/hardware_implementation.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/内存模型/缓存一致性.mddocs/zh/guide/programming_guide/advanced_programming/memory_model/cache_coherence.md+7-7
@@ -8,12 +8,12 @@
8 8 
9Cache用于缓存后续可能重复访问的数据或指令,降低访问GM的开销。一次Cache加载通常不是只加载被访问的单个字节或单个变量,而是把该地址所在的一段连续数据作为一个整体加载到Cache中,这个整体称为Cache Line。9Cache用于缓存后续可能重复访问的数据或指令,降低访问GM的开销。一次Cache加载通常不是只加载被访问的单个字节或单个变量,而是把该地址所在的一段连续数据作为一个整体加载到Cache中,这个整体称为Cache Line。
10 10 
11-Cache Line是Cache加载、失效、写回的最小操作粒度。例如访问GM内存时,会将GM里一个Cache Line长度内相邻的数据加载到L2 Cache缓存,利用空间局部性提高访问效率。Cache Line是硬件真正搬入、标记、替换和写回缓存数据的最小粒度,直接影响性能和一致性。<!-- npu="950" id1 -->[NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)支持L2 Cache、DCache、ICache、SIMT DCache、NDDMA Cache;<!-- end id1 -->[NPU架构版本2201](../../语言扩展层/SIMD-BuiltIn关键字.md)支持L2 Cache、DCache和ICache。本文讨论的通用Cache单元信息如下:11+Cache Line是Cache加载、失效、写回的最小操作粒度。例如访问GM内存时,会将GM里一个Cache Line长度内相邻的数据加载到L2 Cache缓存,利用空间局部性提高访问效率。Cache Line是硬件真正搬入、标记、替换和写回缓存数据的最小粒度,直接影响性能和一致性。<!-- npu="950" id1 -->[NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)支持L2 Cache、DCache、ICache、SIMT DCache、NDDMA Cache;<!-- end id1 -->[NPU架构版本2201](../../language_extension/simd_builtin_keywords.md)支持L2 Cache、DCache和ICache。本文讨论的通用Cache单元信息如下:
12 12 
13<!-- npu="950" id15 -->13<!-- npu="950" id15 -->
14**NPU架构版本3510Cache单元信息**14**NPU架构版本3510Cache单元信息**
15 15 
16-| 存储单元 | 位置 | 数据一致性说明 | [NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)Cache Line大小 | [NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)Cache大小 |16+| 存储单元 | 位置 | 数据一致性说明 | [NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)Cache Line大小 | [NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)Cache大小 |
17| --- | --- | --- | --- | --- |17| --- | --- | --- | --- | --- |
18| L2 Cache | 核外共享缓存 | 多个核共享,不考虑多个核之间的Cache副本不一致问题 | 128B/512B | 128MB |18| L2 Cache | 核外共享缓存 | 多个核共享,不考虑多个核之间的Cache副本不一致问题 | 128B/512B | 128MB |
19| AIC ICache | Scalar取指缓存 | 只读,不考虑多个核之间的数据不一致问题 | 128B | 32KB |19| AIC ICache | Scalar取指缓存 | 只读,不考虑多个核之间的数据不一致问题 | 128B | 32KB |
@@ -26,7 +26,7 @@ Cache Line是Cache加载、失效、写回的最小操作粒度。例如访问GM
26<!-- npu="A3,910b" id20 -->26<!-- npu="A3,910b" id20 -->
27**NPU架构版本2201Cache单元信息**27**NPU架构版本2201Cache单元信息**
28 28 
29-| 存储单元 | 位置 | 数据一致性说明 | [NPU架构版本2201](../../语言扩展层/SIMD-BuiltIn关键字.md)Cache Line大小 | [NPU架构版本2201](../../语言扩展层/SIMD-BuiltIn关键字.md)Cache大小 |29+| 存储单元 | 位置 | 数据一致性说明 | [NPU架构版本2201](../../language_extension/simd_builtin_keywords.md)Cache Line大小 | [NPU架构版本2201](../../language_extension/simd_builtin_keywords.md)Cache大小 |
30| --- | --- | --- | --- | --- |30| --- | --- | --- | --- | --- |
31| L2 Cache | 核外共享缓存 | 多个核共享,不考虑多个核之间的Cache副本不一致问题 | 512B | 192MB |31| L2 Cache | 核外共享缓存 | 多个核共享,不考虑多个核之间的Cache副本不一致问题 | 512B | 192MB |
32| AIC ICache | Scalar取指缓存 | 只读,不考虑多个核之间的数据不一致问题 | 128B | 32KB |32| AIC ICache | Scalar取指缓存 | 只读,不考虑多个核之间的数据不一致问题 | 128B | 32KB |
@@ -220,7 +220,7 @@ T6 Scalar.LOAD A -> 1
220<!-- npu="950" id3 -->220<!-- npu="950" id3 -->
221#### Atomic访问导致的DCache缓存一致性221#### Atomic访问导致的DCache缓存一致性
222 222 
223-[NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)支持Scalar原子操作,Scalar原子操作可以看成对某个GM地址执行的读-改-写事件。例如C API [asc_atomic_add](../../../../api/SIMD-API/c_api/scalar_compute/asc_atomic_add.md),该接口在指定GM地址上执行原子加操作。原子操作保证的是这一次读-改-写不会被其他原子更新打断,但它不会自动清理同一地址在DCache中的旧副本或Dirty副本。223+[NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)支持Scalar原子操作,Scalar原子操作可以看成对某个GM地址执行的读-改-写事件。例如C API [asc_atomic_add](../../../../api/SIMD-API/c_api/scalar_compute/asc_atomic_add.md),该接口在指定GM地址上执行原子加操作。原子操作保证的是这一次读-改-写不会被其他原子更新打断,但它不会自动清理同一地址在DCache中的旧副本或Dirty副本。
224 224 
225因此,如果同一GM地址此前被普通Scalar路径访问过,就需要分析原子事件和DCache事件的一致性问题:225因此,如果同一GM地址此前被普通Scalar路径访问过,就需要分析原子事件和DCache事件的一致性问题:
226 226 
@@ -450,7 +450,7 @@ ICache用于缓存Scalar单元最近使用或频繁使用的指令。Scalar读
450 450 
451#### SIMT DCache访问路径451#### SIMT DCache访问路径
452 452 
453-[NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)新增SIMT相关硬件单元。SIMT访存会涉及SIMT DCache:SIMT DCache复用UB中的一部分空间,用于缓存SIMT线程访问GM时的数据。SIMT DCache空间可配置范围为32KB到128KB,实际大小由UB总大小扣除静态内存、动态内存和预留空间后确定,若剩余空间超过128KB,SIMT DCache大小固定为128KB。SIMT也提供[`asc_ldcg`](../../../../api/SIMT-API/memory_access_functions/asc_ldcg.md)、[`asc_stcg`](../../../../api/SIMT-API/memory_access_functions/asc_stcg.md)等接口表达不占用或绕过SIMT DCache的访问意图,因此本节按带Cache路径和no cache路径分别分析。453+[NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)新增SIMT相关硬件单元。SIMT访存会涉及SIMT DCache:SIMT DCache复用UB中的一部分空间,用于缓存SIMT线程访问GM时的数据。SIMT DCache空间可配置范围为32KB到128KB,实际大小由UB总大小扣除静态内存、动态内存和预留空间后确定,若剩余空间超过128KB,SIMT DCache大小固定为128KB。SIMT也提供[`asc_ldcg`](../../../../api/SIMT-API/memory_access_functions/asc_ldcg.md)、[`asc_stcg`](../../../../api/SIMT-API/memory_access_functions/asc_stcg.md)等接口表达不占用或绕过SIMT DCache的访问意图,因此本节按带Cache路径和no cache路径分别分析。
454 454 
455SIMT读GM的底层实现:先从SIMT DCache读取,未命中再访问L2 Cache或GM,并把数据缓存到L2 Cache和SIMT DCache中。L2 Cache与GM之间的数据一致性由硬件保证,但SIMT DCache与GM之间不保证一致性。因此,如果同一GM地址已经被其他线程、其他核、Scalar路径或MTE路径更新,而当前SIMT DCache中仍有旧副本,后续SIMT读可能继续命中旧值。455SIMT读GM的底层实现:先从SIMT DCache读取,未命中再访问L2 Cache或GM,并把数据缓存到L2 Cache和SIMT DCache中。L2 Cache与GM之间的数据一致性由硬件保证,但SIMT DCache与GM之间不保证一致性。因此,如果同一GM地址已经被其他线程、其他核、Scalar路径或MTE路径更新,而当前SIMT DCache中仍有旧副本,后续SIMT读可能继续命中旧值。
456 456 
@@ -601,7 +601,7 @@ C API中提供了[`asc_ub_dcci_single`](../../../../api/SIMD-API/c_api/cache_ctr
601<!-- npu="950" id8 -->601<!-- npu="950" id8 -->
602### Scalar原子操作与DCache一致性602### Scalar原子操作与DCache一致性
603 603 
604-[NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)支持Scalar原子操作,Scalar原子操作和普通Scalar读写GM混用时,需要按DCache与GM的一致性来分析,详细处理方式参考[Atomic访问导致的DCache缓存一致性](#atomic访问导致的dcache缓存一致性)。604+[NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)支持Scalar原子操作,Scalar原子操作和普通Scalar读写GM混用时,需要按DCache与GM的一致性来分析,详细处理方式参考[Atomic访问导致的DCache缓存一致性](#atomic访问导致的dcache缓存一致性)。
605<!-- end id8 -->605<!-- end id8 -->
606 606 
607### MTE3随路原子操作与DCache一致性607### MTE3随路原子操作与DCache一致性
@@ -628,7 +628,7 @@ FixPipe常用于`L0C Buffer -> GM`或相关矩阵搬出路径。对一致性分
628<!-- npu="950" id9 -->628<!-- npu="950" id9 -->
629### SIMT原子操作与缓存一致性629### SIMT原子操作与缓存一致性
630 630 
631-[NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md)支持SIMT原子操作,SIMT原子操作可能作用于UB,也可能作用于GM;接口例子可参考[asc_atomic_add](../../../../api/SIMT-API/atomic_operations/asc_atomic_add.md)。它保证的是同一地址上这一次读-改-写具有原子性,不保证多个线程之间的执行顺序。631+[NPU架构版本3510](../../language_extension/simd_builtin_keywords.md)支持SIMT原子操作,SIMT原子操作可能作用于UB,也可能作用于GM;接口例子可参考[asc_atomic_add](../../../../api/SIMT-API/atomic_operations/asc_atomic_add.md)。它保证的是同一地址上这一次读-改-写具有原子性,不保证多个线程之间的执行顺序。
632 632 
633分析缓存一致性时,需要先区分目标地址:633分析缓存一致性时,需要先区分目标地址:
634 634 
Rdocs/zh/guide/编程指南/高级编程/内存模型/内存模型.mddocs/zh/guide/programming_guide/advanced_programming/memory_model/memory_model.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/算子入图开发/基本开发流程.mddocs/zh/guide/programming_guide/advanced_programming/operator_graph_development/basic_development_flow.md+1-1
@@ -1,6 +1,6 @@
1# 基本开发流程<a name="ZH-CN_TOPIC_0000001985333472"></a>1# 基本开发流程<a name="ZH-CN_TOPIC_0000001985333472"></a>
2 2 
3-该开发流程以[工程化算子开发](../Aclnn算子工程化开发/概述.md)为基础,除了需要提供工程化算子开发中的算子实现文件外,还需要额外交付算子入图的代码文件。本节仅提供算子入图代码文件的开发指导。3+该开发流程以[工程化算子开发](../aclnn_operator_development/overview.md)为基础,除了需要提供工程化算子开发中的算子实现文件外,还需要额外交付算子入图的代码文件。本节仅提供算子入图代码文件的开发指导。
4 4 
5假设下图是我们需要使用的网络模型,您可能会想直接逐个算子调用,根据输入tensor得到输出tensor就可以完成网络的运行,但在图模式场景下,实际的网络模型生成过程中,会先进行tensor shape以及datatype的推导。这样可以让我们在图执行之前,就知道各tensor的数据类型和形状,提前校验其正确性;同时提前推理出算子的输出张量描述,包括张量的形状、数据类型及数据排布格式等信息,算子构图准备阶段就可以为所有的张量静态分配内存,避免动态内存分配带来的开销。5假设下图是我们需要使用的网络模型,您可能会想直接逐个算子调用,根据输入tensor得到输出tensor就可以完成网络的运行,但在图模式场景下,实际的网络模型生成过程中,会先进行tensor shape以及datatype的推导。这样可以让我们在图执行之前,就知道各tensor的数据类型和形状,提前校验其正确性;同时提前推理出算子的输出张量描述,包括张量的形状、数据类型及数据排布格式等信息,算子构图准备阶段就可以为所有的张量静态分配内存,避免动态内存分配带来的开销。
6 6 
Rdocs/zh/guide/编程指南/高级编程/算子入图开发/开启Tiling下沉.mddocs/zh/guide/programming_guide/advanced_programming/operator_graph_development/enable_tiling_sink.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/算子入图开发/图编译和图执行.mddocs/zh/guide/programming_guide/advanced_programming/operator_graph_development/graph_compilation_and_execution.md+1-1
@@ -8,7 +8,7 @@
8 8 
9 安装CANN软件后,使用CANN运行用户进行编译、运行时,需要以CANN运行用户登录环境,执行`source ${INSTALL_DIR}/set_env.sh`命令设置环境变量。`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。9 安装CANN软件后,使用CANN运行用户进行编译、运行时,需要以CANN运行用户登录环境,执行`source ${INSTALL_DIR}/set_env.sh`命令设置环境变量。`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。
10 10 
11-- 已参考[Aclnn算子工程化开发](../Aclnn算子工程化开发/概述.md)完成算子的开发和部署。11+- 已参考[Aclnn算子工程化开发](../aclnn_operator_development/overview.md)完成算子的开发和部署。
12 12 
13## 准备验证代码工程<a name="zh-cn_topic_0000001541959061_section2021523012501"></a>13## 准备验证代码工程<a name="zh-cn_topic_0000001541959061_section2021523012501"></a>
14 14 
Rdocs/zh/guide/编程指南/高级编程/算子入图开发/概述.mddocs/zh/guide/programming_guide/advanced_programming/operator_graph_development/overview.md+7-7
@@ -2,18 +2,18 @@
2 2 
3图模式是神经网络模型的一种运行模式,在图模式下用户首先将模型的计算过程构造成一张图,然后通过GE将图下发到昇腾硬件执行。相对于单个算子依次下发的方式,图模式下,GE可以通过计算图优化、多流并行、内存复用、模型下沉等技术手段,加速模型执行效率,减少模型内存占用。3图模式是神经网络模型的一种运行模式,在图模式下用户首先将模型的计算过程构造成一张图,然后通过GE将图下发到昇腾硬件执行。相对于单个算子依次下发的方式,图模式下,GE可以通过计算图优化、多流并行、内存复用、模型下沉等技术手段,加速模型执行效率,减少模型内存占用。
4 4 
5-算子入图的开发流程如下图所示:算子工程创建完成后,基于工程代码框架完成算子原型定义、kernel侧算子实现、host侧tiling实现并完成算子入图开发,通过工程编译脚本完成算子的编译部署,之后即可基于图IR执行算子,比如IR构图的方式调用自定义算子。该开发流程以[工程化算子开发](../Aclnn算子工程化开发/概述.md)为基础,除了需要提供工程化算子开发中的算子实现文件外,还需要额外交付算子入图的代码文件。5+算子入图的开发流程如下图所示:算子工程创建完成后,基于工程代码框架完成算子原型定义、kernel侧算子实现、host侧tiling实现并完成算子入图开发,通过工程编译脚本完成算子的编译部署,之后即可基于图IR执行算子,比如IR构图的方式调用自定义算子。该开发流程以[工程化算子开发](../aclnn_operator_development/overview.md)为基础,除了需要提供工程化算子开发中的算子实现文件外,还需要额外交付算子入图的代码文件。
6 6 
7![](../../../figures/op_e2e_34.png)7![](../../../figures/op_e2e_34.png)
8 8 
91. 环境准备。91. 环境准备。
10 1. CANN软件安装请参考[环境准备](../../../getting_started/environment_setup.md)。10 1. CANN软件安装请参考[环境准备](../../../getting_started/environment_setup.md)。
11- 2. [创建算子工程](../Aclnn算子工程化开发/Aclnn算子工程化开发快速入门.md#create-project)。使用msOpGen工具创建算子开发工程。11+ 2. [创建算子工程](../aclnn_operator_development/aclnn_quick_start.md#create-project)。使用msOpGen工具创建算子开发工程。
12 12 
132. 算子实现。132. 算子实现。
14- - [算子原型定义](../Aclnn算子工程化开发/设计与实现/算子原型定义.md)。通过原型定义来描述算子输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联tiling实现等函数。14+ - [算子原型定义](../aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)。通过原型定义来描述算子输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联tiling实现等函数。
15- - Kernel侧算子实现和host侧tiling实现请参考[SIMD算子实现](../../../算子实践参考/SIMD算子实现/概述.md);工程化算子开发,支持开发者调用Tiling API基于CANN提供的编程框架进行tiling开发,kernel侧也提供对应的接口方便开发者获取tiling参数,具体内容请参考[Kernel侧算子实现](../Aclnn算子工程化开发/设计与实现/Kernel侧算子实现.md)和[Host侧Tiling实现](../Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md),由此而带来的额外约束也在上述章节说明。15+ - Kernel侧算子实现和host侧tiling实现请参考[SIMD算子实现](../../../算子实践参考/SIMD算子实现/概述.md);工程化算子开发,支持开发者调用Tiling API基于CANN提供的编程框架进行tiling开发,kernel侧也提供对应的接口方便开发者获取tiling参数,具体内容请参考[Kernel侧算子实现](../aclnn_operator_development/design_and_implementation/kernel_operator_implementation.md)和[Host侧Tiling实现](../aclnn_operator_development/design_and_implementation/host_tiling_implementation.md),由此而带来的额外约束也在上述章节说明。
16 16 
17-3. [算子入图(GE图)开发](基本开发流程.md)。算子入图场景下,需要提供shape推导等算子入图适配函数的实现。17+3. [算子入图(GE图)开发](basic_development_flow.md)。算子入图场景下,需要提供shape推导等算子入图适配函数的实现。
18-4. 编译部署。通过工程编译脚本完成算子的编译部署,分为[算子包编译](../Aclnn算子工程化开发/编译与部署/基本流程.md)和[算子动态库编译](../Aclnn算子工程化开发/编译与部署/算子动态库和静态库编译.md)两种方式。18+4. 编译部署。通过工程编译脚本完成算子的编译部署,分为[算子包编译](../aclnn_operator_development/compilation_and_deployment/basic_process.md)和[算子动态库编译](../aclnn_operator_development/compilation_and_deployment/dynamic_static_lib_compilation.md)两种方式。
19-5. [图编译和图执行](图编译和图执行.md):基于图IR执行算子,比如IR构图的方式调用自定义算子。19+5. [图编译和图执行](graph_compilation_and_execution.md):基于图IR执行算子,比如IR构图的方式调用自定义算子。
Rdocs/zh/guide/编程指南/高级编程/SIMT协作组.mddocs/zh/guide/programming_guide/advanced_programming/simt_cooperative_groups.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/高级编程/SuperKernel/核函数直调算子额外适配说明.mddocs/zh/guide/programming_guide/advanced_programming/super_kernel/kernel_direct_call_adaptation.md+1-1
@@ -1,6 +1,6 @@
1# 核函数直调算子额外适配说明1# 核函数直调算子额外适配说明
2 2 
3-对于使用`<<<>>>`方式开发的Ascend C算子,除了遵循[算子适配说明](算子适配说明.md)中的通用约束外,还需要在算子Kernel入口侧增加SuperKernel入口函数。本文档介绍具体的适配方法。3+对于使用`<<<>>>`方式开发的Ascend C算子,除了遵循[算子适配说明](operator_adaptation.md)中的通用约束外,还需要在算子Kernel入口侧增加SuperKernel入口函数。本文档介绍具体的适配方法。
4 4 
5>[!NOTE]说明5>[!NOTE]说明
6>核函数直调算子目前仅支持在npugraph_ex后端进入SuperKernel,不支持GE图模式。6>核函数直调算子目前仅支持在npugraph_ex后端进入SuperKernel,不支持GE图模式。
Rdocs/zh/guide/编程指南/高级编程/SuperKernel/算子适配说明.mddocs/zh/guide/programming_guide/advanced_programming/super_kernel/operator_adaptation.md+2-2
@@ -132,8 +132,8 @@ Cache刷新机制示意图如下图所示:
132 132 
133- **二进制复用优化**133- **二进制复用优化**
134 134 
135- 在GE入图Tiling下沉场景下,可以通过`--op_relocatable_kernel_binary`编译选项,开启二进制复用优化,提升编译性能,具体可参考[算子工程编译](../Aclnn算子工程化开发/编译与部署/基本流程.md)。135+ 在GE入图Tiling下沉场景下,可以通过`--op_relocatable_kernel_binary`编译选项,开启二进制复用优化,提升编译性能,具体可参考[算子工程编译](../aclnn_operator_development/compilation_and_deployment/basic_process.md)。
136 136 
137## 核函数直调算子的额外适配137## 核函数直调算子的额外适配
138 138 
139-对于使用`<<<>>>`方式开发的Ascend C算子,目前仅支持在npugraph_ex后端融合进SuperKernel。此类算子除需遵循上述通用约束外,还需要在算子kernel入口侧增加SuperKernel入口函数。具体方法请参考[核函数直调算子额外适配说明](核函数直调算子额外适配说明.md)。139+对于使用`<<<>>>`方式开发的Ascend C算子,目前仅支持在npugraph_ex后端融合进SuperKernel。此类算子除需遵循上述通用约束外,还需要在算子kernel入口侧增加SuperKernel入口函数。具体方法请参考[核函数直调算子额外适配说明](kernel_direct_call_adaptation.md)。
Rdocs/zh/guide/编程指南/高级编程/SuperKernel/算子自验证说明.mddocs/zh/guide/programming_guide/advanced_programming/super_kernel/operator_self_verification.md+1-1
@@ -177,7 +177,7 @@ if __name__ == "__main__":
177 177 
178- `torchair.scope.super_kernel(scope, options)`:用`with`语句块标定SuperKernel融合范围。`scope`表示该范围内算子被融合的SuperKernel名称,相同的scope代表相同的范围,由用户控制。若传入None,表示该范围内的算子不进行SuperKernel融合。`options`表示融合SuperKernel的编译选项,格式形如`"<option1>=<value1>:<option2>=<value2>"`,多个选项用英文冒号分割。编译选项说明请参见[图内标定SuperKernel范围](https://www.hiascend.com/document/detail/zh/Pytorch/latest/devguide/TorchAir/docs/zh/ascend_ir/features/advanced/super_kernel_scope.md)。178- `torchair.scope.super_kernel(scope, options)`:用`with`语句块标定SuperKernel融合范围。`scope`表示该范围内算子被融合的SuperKernel名称,相同的scope代表相同的范围,由用户控制。若传入None,表示该范围内的算子不进行SuperKernel融合。`options`表示融合SuperKernel的编译选项,格式形如`"<option1>=<value1>:<option2>=<value2>"`,多个选项用英文冒号分割。编译选项说明请参见[图内标定SuperKernel范围](https://www.hiascend.com/document/detail/zh/Pytorch/latest/devguide/TorchAir/docs/zh/ascend_ir/features/advanced/super_kernel_scope.md)。
179- `torch.compile(model, backend=npu_backend, dynamic=False)`:通过GE图模式下发图,仅支持静态图(`dynamic=False`)。179- `torch.compile(model, backend=npu_backend, dynamic=False)`:通过GE图模式下发图,仅支持静态图(`dynamic=False`)。
180-- **满核场景验证**:SuperKernel启动核数由其内部子算子的最大启动核数决定。在实际整网场景中,融合的算子较多,SuperKernel通常会启动满核(如24 Cube + 48 Vector);但单算子验证时,单个算子的启动核数可能远未达到满核,导致SuperKernel也不会启动满核,从而无法充分验证[算子适配说明](算子适配说明.md)中与核数相关的约束(如全核同步、硬同步等)。为此,可通过`options`中的`debug-aic-num`和`debug-aiv-num`选项强制指定SuperKernel的启动核数,模拟满核场景进行验证。例如,强制SuperKernel以24 Cube + 48 Vector启动:180+- **满核场景验证**:SuperKernel启动核数由其内部子算子的最大启动核数决定。在实际整网场景中,融合的算子较多,SuperKernel通常会启动满核(如24 Cube + 48 Vector);但单算子验证时,单个算子的启动核数可能远未达到满核,导致SuperKernel也不会启动满核,从而无法充分验证[算子适配说明](operator_adaptation.md)中与核数相关的约束(如全核同步、硬同步等)。为此,可通过`options`中的`debug-aic-num`和`debug-aiv-num`选项强制指定SuperKernel的启动核数,模拟满核场景进行验证。例如,强制SuperKernel以24 Cube + 48 Vector启动:
181 181 
182 ```python182 ```python
183 # 强制SuperKernel以满核启动,模拟真实整网场景183 # 强制SuperKernel以满核启动,模拟真实整网场景
Rdocs/zh/guide/编程指南/高级编程/SuperKernel/原理介绍.mddocs/zh/guide/programming_guide/advanced_programming/super_kernel/principles.md+3-3
@@ -41,6 +41,6 @@ SuperKernel是一种算子的二进制融合技术。与源码融合不同,它
41 41 
42CANN包发布的主流模型常用算子已支持SuperKernel融合。用户自定义的Ascend C算子如需支持SuperKernel,需要满足一定适配条件,参考如下算子适配和自验证说明:42CANN包发布的主流模型常用算子已支持SuperKernel融合。用户自定义的Ascend C算子如需支持SuperKernel,需要满足一定适配条件,参考如下算子适配和自验证说明:
43 43 
44-- [算子适配说明](算子适配说明.md):算子要融合进SuperKernel需要满足的通用约束(与具体的开启方式无关)。44+- [算子适配说明](operator_adaptation.md):算子要融合进SuperKernel需要满足的通用约束(与具体的开启方式无关)。
45-- [算子自验证说明](算子自验证说明.md):在两种PyTorch图模式下分别对单个算子进行SuperKernel融合验证的样例。45+- [算子自验证说明](operator_self_verification.md):在两种PyTorch图模式下分别对单个算子进行SuperKernel融合验证的样例。
46-- [核函数直调算子额外适配说明](核函数直调算子额外适配说明.md):对于使用`<<<>>>`方式开发的Ascend C算子,进入SuperKernel前需要进行的额外适配工作。46+- [核函数直调算子额外适配说明](kernel_direct_call_adaptation.md):对于使用`<<<>>>`方式开发的Ascend C算子,进入SuperKernel前需要进行的额外适配工作。
Rdocs/zh/guide/编程指南/附录/常用操作/如何开发动态输入算子.mddocs/zh/guide/programming_guide/appendix/common_operations/develop_dynamic_input_operator.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/附录/常用操作/如何在矢量编程时启用Vector-Core.mddocs/zh/guide/programming_guide/appendix/common_operations/enable_vector_core.md+1-1
@@ -2,7 +2,7 @@
2 2 
3针对Atlas 推理系列产品,其硬件架构除了AI Core外,还额外设置了单独的Vector Core,作为AI Core中Vector计算单元的补充,从而缓解Vector计算瓶颈。Vector Core只包括了两种基础计算资源:向量计算单元(Vector Unit)和标量计算单元(Scalar Unit),分别用于完成向量与标量的数据计算。矢量算子开发时,启用Vector Core,算子执行时会同时启动AI Core和Vector Core,这些核并行执行相同的核函数代码。3针对Atlas 推理系列产品,其硬件架构除了AI Core外,还额外设置了单独的Vector Core,作为AI Core中Vector计算单元的补充,从而缓解Vector计算瓶颈。Vector Core只包括了两种基础计算资源:向量计算单元(Vector Unit)和标量计算单元(Scalar Unit),分别用于完成向量与标量的数据计算。矢量算子开发时,启用Vector Core,算子执行时会同时启动AI Core和Vector Core,这些核并行执行相同的核函数代码。
4 4 
5-本节将重点介绍如何启用Atlas 推理系列产品中的Vector Core。学习本节内容之前,建议您先熟悉[算子实现](../../../算子实践参考/SIMD算子实现/矢量编程/概述.md)、[基于样例工程完成Kernel直调](../基于样例工程完成Kernel直调.md)、[工程化算子开发](../../高级编程/Aclnn算子工程化开发/概述.md)的相关内容,掌握基于AI Core的算子端到端开发流程。在此基础上本章将重点阐述启用Vector Core时的差异点。具体如下:5+本节将重点介绍如何启用Atlas 推理系列产品中的Vector Core。学习本节内容之前,建议您先熟悉[算子实现](../../../算子实践参考/SIMD算子实现/矢量编程/概述.md)、[基于样例工程完成Kernel直调](../kernel_direct_call_from_sample.md)、[工程化算子开发](../../advanced_programming/aclnn_operator_development/overview.md)的相关内容,掌握基于AI Core的算子端到端开发流程。在此基础上本章将重点阐述启用Vector Core时的差异点。具体如下:
6 6 
71. 完成算子kernel侧开发时,需要通过宏[KERNEL\_TASK\_TYPE\_DEFAULT](../../../../api/SIMD-API/basic_api/Kernel-Tiling/set_Kernel_type.md)启用Vector Core,算子执行时会同时启动AI Core和Vector Core,此时AI Core会当成Vector Core使用。如下的代码样例展示了启用Vector Core的方法:71. 完成算子kernel侧开发时,需要通过宏[KERNEL\_TASK\_TYPE\_DEFAULT](../../../../api/SIMD-API/basic_api/Kernel-Tiling/set_Kernel_type.md)启用Vector Core,算子执行时会同时启动AI Core和Vector Core,此时AI Core会当成Vector Core使用。如下的代码样例展示了启用Vector Core的方法:
8 8 
Rdocs/zh/guide/编程指南/附录/常用操作/如何使用workspace.mddocs/zh/guide/programming_guide/appendix/common_operations/how_to_use_workspace.md+1-1
@@ -49,5 +49,5 @@ workspace是设备侧Global Memory上的一块内存。workspace内存分为两
49 49 
50- Kernel直调算子开发场景50- Kernel直调算子开发场景
51 51 
52- 需要使用workspace空间时,建议开启编译选项[HAVE\_WORKSPACE](../基于样例工程完成Kernel直调.md#li1103101565014)。host侧开发者仍需要自行申请workspace的空间,并传入。在使用Matmul Kernel侧接口等需要系统workspace的高阶API时,设置的workspace空间大小为系统workspace和用户workspace之和。系统workspace大小可以通过PlatformAscendCManager的GetLibApiWorkSpaceSize接口获取。开启[HAVE\_WORKSPACE](../基于样例工程完成Kernel直调.md#li1103101565014)后,开发者在kernel侧入参处获取的workspace为偏移了系统workspace后的用户workspace。52+ 需要使用workspace空间时,建议开启编译选项[HAVE\_WORKSPACE](../kernel_direct_call_from_sample.md#li1103101565014)。host侧开发者仍需要自行申请workspace的空间,并传入。在使用Matmul Kernel侧接口等需要系统workspace的高阶API时,设置的workspace空间大小为系统workspace和用户workspace之和。系统workspace大小可以通过PlatformAscendCManager的GetLibApiWorkSpaceSize接口获取。开启[HAVE\_WORKSPACE](../kernel_direct_call_from_sample.md#li1103101565014)后,开发者在kernel侧入参处获取的workspace为偏移了系统workspace后的用户workspace。
53 53 
Rdocs/zh/guide/编程指南/附录/常用操作/如何使用Tensor原地操作提升算子性能.mddocs/zh/guide/programming_guide/appendix/common_operations/tensor_inplace_performance.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/附录/常用操作/如何进行Tiling调测.mddocs/zh/guide/programming_guide/appendix/common_operations/tiling_debug.md+3-3
@@ -1,12 +1,12 @@
1# 如何进行Tiling调测<a name="ZH-CN_TOPIC_0000002305497828"></a>1# 如何进行Tiling调测<a name="ZH-CN_TOPIC_0000002305497828"></a>
2 2 
3-在[工程化算子开发](../../高级编程/Aclnn算子工程化开发/概述.md)过程中,开发者需实现Tiling函数,该函数原型是固定的,接受TilingContext作为输入。框架负责构造TilingContext并调用Tiling函数。若需单独进行Tiling调测,开发者可通过OpTilingRegistry加载编译后的Tiling动态库,获取Tiling函数的指针并进行调用,调用时Tiling函数的TilingContext入参使用ContextBuilder构建。3+在[工程化算子开发](../../advanced_programming/aclnn_operator_development/overview.md)过程中,开发者需实现Tiling函数,该函数原型是固定的,接受TilingContext作为输入。框架负责构造TilingContext并调用Tiling函数。若需单独进行Tiling调测,开发者可通过OpTilingRegistry加载编译后的Tiling动态库,获取Tiling函数的指针并进行调用,调用时Tiling函数的TilingContext入参使用ContextBuilder构建。
4 4 
5以下是具体步骤:5以下是具体步骤:
6 6 
71. 参考工程化算子开发的开发步骤,完成算子实现,并通过**算子包编译****算子动态库编译**获取对应的Tiling动态库文件。71. 参考工程化算子开发的开发步骤,完成算子实现,并通过**算子包编译****算子动态库编译**获取对应的Tiling动态库文件。
8- - 算子包编译:Tiling实现对应的动态库为算子包部署目录下的liboptiling.so。具体路径可参考[算子包部署](../../高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#operator-package-deployment)。8+ - 算子包编译:Tiling实现对应的动态库为算子包部署目录下的liboptiling.so。具体路径可参考[算子包部署](../../advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#operator-package-deployment)。
9- - 动态库编译:Tiling实现集成在算子动态库libcust\_opapi.so中。具体路径可参考[算子动态库和静态库编译](../../高级编程/Aclnn算子工程化开发/编译与部署/算子动态库和静态库编译.md)。9+ - 动态库编译:Tiling实现集成在算子动态库libcust\_opapi.so中。具体路径可参考[算子动态库和静态库编译](../../advanced_programming/aclnn_operator_development/compilation_and_deployment/dynamic_static_lib_compilation.md)。
10 10 
112. 编写测试代码。112. 编写测试代码。
12 12 
Rdocs/zh/guide/编程指南/附录/FAQ/运行验证时AllocTensor-FreeTensor失败.mddocs/zh/guide/programming_guide/appendix/faq/alloc_free_tensor_failure.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/附录/FAQ/调用算子时出现无法打开config-ini的报错.mddocs/zh/guide/programming_guide/appendix/faq/config_ini_open_error.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/附录/FAQ/算子工程编译时出现文件名过长报错.mddocs/zh/guide/programming_guide/appendix/faq/filename_too_long_error.md+2-2
@@ -2,7 +2,7 @@
2 2 
3## 现象描述<a name="section151611254194612"></a>3## 现象描述<a name="section151611254194612"></a>
4 4 
5-工程化算子开发场景,在进行[算子工程编译](../../高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md)时,提示以下报错信息中的一种:5+工程化算子开发场景,在进行[算子工程编译](../../advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md)时,提示以下报错信息中的一种:
6 6 
7- file name is too long \(cannot be split\); not dumped7- file name is too long \(cannot be split\); not dumped
8 8 
@@ -50,5 +50,5 @@
50 50 
51- 文件路径过长报错51- 文件路径过长报错
52 52 
53- [完成工程编译相关配置](../../高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#compile-configuration)时,如果在CMakePresets.json文件中配置vendor\_name,编译时会在vendor目录下生成以vendor\_name为名称的路径。如果因为此类文件路径过长报错,应减少配置的vendor\_name长度。53+ [完成工程编译相关配置](../../advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#compile-configuration)时,如果在CMakePresets.json文件中配置vendor\_name,编译时会在vendor目录下生成以vendor\_name为名称的路径。如果因为此类文件路径过长报错,应减少配置的vendor\_name长度。
54 54 
Rdocs/zh/guide/编程指南/附录/FAQ/Kernel编译时报错-error-out-of-jump-jumpc-imm-range.mddocs/zh/guide/programming_guide/appendix/faq/kernel_compile_jump_range_error.md+1-1
@@ -20,7 +20,7 @@
20 add_ops_compile_options(PowerCustom OPTIONS -mllvm -cce-aicore-jump-expand=true)20 add_ops_compile_options(PowerCustom OPTIONS -mllvm -cce-aicore-jump-expand=true)
21 ```21 ```
22 22 
23- add\_ops\_compile\_options的具体使用方法请参考[支持自定义编译选项](../../高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#custom-compile-options)。23+ add\_ops\_compile\_options的具体使用方法请参考[支持自定义编译选项](../../advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#custom-compile-options)。
24 24 
252. 重新编译该算子。正常编译无报错。252. 重新编译该算子。正常编译无报错。
26 26 
Rdocs/zh/guide/编程指南/附录/FAQ/核函数运行验证时算子存在精度问题.mddocs/zh/guide/programming_guide/appendix/faq/kernel_precision_issue.md+2-2
@@ -14,7 +14,7 @@ Ascend C提供孪生调试的功能,通过CPU域的功能验证、gdb单步调
14 14 
151. 进行CPU域的功能验证,观察是否有日志报错。151. 进行CPU域的功能验证,观察是否有日志报错。
16 16 
17- 参考[基于样例工程完成Kernel直调](../基于样例工程完成Kernel直调.md)章节,编写CPU侧的运行验证代码,并进行运行验证,发现CPU域的精度比对也存在不一致的问题。17+ 参考[基于样例工程完成Kernel直调](../kernel_direct_call_from_sample.md)章节,编写CPU侧的运行验证代码,并进行运行验证,发现CPU域的精度比对也存在不一致的问题。
18 18 
19 观察打屏日志中是否有报错信息,可搜索关键词"failed"。比如,下图的报错示例指示,错误出现在代码中调用LeakyRelu接口的地方。19 观察打屏日志中是否有报错信息,可搜索关键词"failed"。比如,下图的报错示例指示,错误出现在代码中调用LeakyRelu接口的地方。
20 20 
@@ -24,7 +24,7 @@ Ascend C提供孪生调试的功能,通过CPU域的功能验证、gdb单步调
24 24 
25 通过上述报错日志,一般只能定位到报错的代码行,无法明确具体错误,接下来需要通过gdb调试的方式或者printf打印的方式进一步精确定位。25 通过上述报错日志,一般只能定位到报错的代码行,无法明确具体错误,接下来需要通过gdb调试的方式或者printf打印的方式进一步精确定位。
26 26 
27-2. gdb调试。下面的样例展示了拉起leakyrelu算子CPU侧运行程序的样例,该样例程序会直接抛出异常,直接gdb运行,查看调用栈信息分析定位即可。其他场景下您可以使用gdb打断点等基本操作进行调试。使用gdb调试Ascend C程序的详细内容请参考[CPU域孪生调试](../../调试调优/功能调试/CPU域孪生调试.md)。27+2. gdb调试。下面的样例展示了拉起leakyrelu算子CPU侧运行程序的样例,该样例程序会直接抛出异常,直接gdb运行,查看调用栈信息分析定位即可。其他场景下您可以使用gdb打断点等基本操作进行调试。使用gdb调试Ascend C程序的详细内容请参考[CPU域孪生调试](../../debug_and_tuning/functional_debug/cpu_twin_debug.md)。
28 1. 使用gdb拉起待调试程序,进入gdb界面进行debug。28 1. 使用gdb拉起待调试程序,进入gdb界面进行debug。
29 29 
30 ```30 ```
Rdocs/zh/guide/编程指南/附录/FAQ/kernel侧获取Tiling信息不正确.mddocs/zh/guide/programming_guide/appendix/faq/kernel_tiling_info_incorrect.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/附录/FAQ/含有Matmul高阶API的算子精度问题.mddocs/zh/guide/programming_guide/appendix/faq/matmul_advanced_api_precision.md+2-2
@@ -15,7 +15,7 @@
15 15 
161. **CPU域调试,观察报错信息**161. **CPU域调试,观察报错信息**
17 17 
18- 在完成算子代码的开发后,优先通过[Kernel直调中的CPU调测工程](../基于样例工程完成Kernel直调.md#section883611324486),调试算子的功能。在CPU域调试时,若编译或执行报错,日志中一般会有明显的报错信息。根据报错信息的提示内容,通常可以快速定位到问题所对应的代码位置。这种方法尤其对DataCopy参数设置错误导致的地址越界、算子Tiling参数设置不正确、其他内存越界访问等基础参数的使用问题,可以快速定位到具体原因。18+ 在完成算子代码的开发后,优先通过[Kernel直调中的CPU调测工程](../kernel_direct_call_from_sample.md#section883611324486),调试算子的功能。在CPU域调试时,若编译或执行报错,日志中一般会有明显的报错信息。根据报错信息的提示内容,通常可以快速定位到问题所对应的代码位置。这种方法尤其对DataCopy参数设置错误导致的地址越界、算子Tiling参数设置不正确、其他内存越界访问等基础参数的使用问题,可以快速定位到具体原因。
19 19 
20 1. 案例:20 1. 案例:
21 21 
@@ -125,7 +125,7 @@
125 125 
1263. **算子隐藏Vector计算,仅调用Matmul API,算子功能是否正确**1263. **算子隐藏Vector计算,仅调用Matmul API,算子功能是否正确**
127 127 
128- 融合算子的代码既包含Matmul API,也包含Vector计算API。通过在算子代码中删除Vector计算API,只保留Matmul API,快速定界是否为Matmul API的错误使用导致了融合算子的精度问题。具体排查过程为:修改算子代码逻辑,删除Vector计算的代码,同步完成golden脚本相应修改,完成适配修改后,[CPU域或NPU域上执行算子](../基于样例工程完成Kernel直调.md),观察算子结果是否正确。若算子结果正确,说明代码中Matmul API的使用方式正确,需要继续排查Vector计算是否正确;反之,若算子结果不正确,需要继续排查Matmul API的使用是否正确。128+ 融合算子的代码既包含Matmul API,也包含Vector计算API。通过在算子代码中删除Vector计算API,只保留Matmul API,快速定界是否为Matmul API的错误使用导致了融合算子的精度问题。具体排查过程为:修改算子代码逻辑,删除Vector计算的代码,同步完成golden脚本相应修改,完成适配修改后,[CPU域或NPU域上执行算子](../kernel_direct_call_from_sample.md),观察算子结果是否正确。若算子结果正确,说明代码中Matmul API的使用方式正确,需要继续排查Vector计算是否正确;反之,若算子结果不正确,需要继续排查Matmul API的使用是否正确。
129 129 
130 - 案例:130 - 案例:
131 131 
Rdocs/zh/guide/编程指南/附录/FAQ/算子包部署时出现权限不足报错.mddocs/zh/guide/programming_guide/appendix/faq/operator_deploy_permission_error.md+1-1
@@ -20,7 +20,7 @@
20 20 
21## 处理步骤<a name="section12149153520416"></a>21## 处理步骤<a name="section12149153520416"></a>
22 22 
23-- 方法一:使用--install-path参数指定安装目录(参考[指定目录安装](../../高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#custom-install-path))。运行用户需要对指定的安装路径有可读写权限。安装后执行生成的`set_env.bash`脚本,由该脚本配置算子运行时查找路径。23+- 方法一:使用--install-path参数指定安装目录(参考[指定目录安装](../../advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#custom-install-path))。运行用户需要对指定的安装路径有可读写权限。安装后执行生成的`set_env.bash`脚本,由该脚本配置算子运行时查找路径。
24 24 
25 ```25 ```
26 ./custom_opp_<target os>_<target architecture>.run --install-path=<path>26 ./custom_opp_<target os>_<target architecture>.run --install-path=<path>
Rdocs/zh/guide/编程指南/附录/基于样例工程完成Kernel直调.mddocs/zh/guide/programming_guide/appendix/kernel_direct_call_from_sample.md+4-4
@@ -1,7 +1,7 @@
1# 基于样例工程完成Kernel直调<a name="ZH-CN_TOPIC_0000001731910633"></a>1# 基于样例工程完成Kernel直调<a name="ZH-CN_TOPIC_0000001731910633"></a>
2 2 
3>[!NOTE]说明 3>[!NOTE]说明
4->本章节介绍的基于样例工程完成Kernel直调的方式,后续不再演进。推荐开发者直接使用命令行或者编写Cmake文件进行编译,详细内容请参考[AI Core SIMD编译](../编译与运行/算子编译/AI-Core算子编译基本用法.md)。4+>本章节介绍的基于样例工程完成Kernel直调的方式,后续不再演进。推荐开发者直接使用命令行或者编写Cmake文件进行编译,详细内容请参考[AI Core SIMD编译](../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
5 5 
6下文将以Add矢量算子为例对Kernel直调算子开发流程进行详细介绍。6下文将以Add矢量算子为例对Kernel直调算子开发流程进行详细介绍。
7 7 
@@ -164,7 +164,7 @@ AddKernelInvocationNeo
164 ```164 ```
165 165 
166 >[!NOTE]说明 166 >[!NOTE]说明
167- >针对<<<\>\>\>调用方式在[核函数](../编程模型/AI-Core-SIMD编程/核函数.md)章节已有说明,这里仅对ACLRT\_LAUNCH\_KERNEL调用接口的使用方法介绍如下:167+ >针对<<<\>\>\>调用方式在[核函数](../programming_model/ai_core_simd_programming/kernel_function.md)章节已有说明,这里仅对ACLRT\_LAUNCH\_KERNEL调用接口的使用方法介绍如下:
168 >```168 >```
169 >ACLRT_LAUNCH_KERNEL(kernel_name)(numBlocks, stream, argument list);169 >ACLRT_LAUNCH_KERNEL(kernel_name)(numBlocks, stream, argument list);
170 >```170 >```
@@ -313,7 +313,7 @@ out
313│ ├── ...313│ ├── ...
314```314```
315 315 
316-对于lib目录下生成的库文件可通过msobjdump工具进一步解析得到kernel信息,具体操作参见[msobjdump工具](msobjdump工具.md)。316+对于lib目录下生成的库文件可通过msobjdump工具进一步解析得到kernel信息,具体操作参见[msobjdump工具](msobjdump_tool.md)。
317 317 
318## 输入数据和真值数据生成以及验证脚本文件<a name="section1234873541816"></a>318## 输入数据和真值数据生成以及验证脚本文件<a name="section1234873541816"></a>
319 319 
@@ -443,7 +443,7 @@ bash run.sh -r npu -v <soc_version> -i <install_path> -b Debug -p <install-pref
443 443 
444## CPU侧验证核函数<a name="section13472164395818"></a>444## CPU侧验证核函数<a name="section13472164395818"></a>
445 445 
446-在非昇腾设备上,开发者可以利用CPU仿真环境先行进行算子开发和测试,并在准备就绪后,利用昇腾设备进行加速计算。在[编译与运行](../编译与运行/算子编译/AI-Core算子编译基本用法.md)章节,我们已经介绍了算子Kernel程序NPU域的编译运行。类似地,CPU域调试也是通过毕昇编译器编译算子Kernel程序。此时算子Kernel程序链接CPU调测库,执行编译生成的可执行文件,可以完成算子CPU域的运行验证。CPU侧的运行程序,通过GDB通用调试工具进行单步调试,可以精准验证程序执行流程是否符合预期。446+在非昇腾设备上,开发者可以利用CPU仿真环境先行进行算子开发和测试,并在准备就绪后,利用昇腾设备进行加速计算。在[编译与运行](../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)章节,我们已经介绍了算子Kernel程序NPU域的编译运行。类似地,CPU域调试也是通过毕昇编译器编译算子Kernel程序。此时算子Kernel程序链接CPU调测库,执行编译生成的可执行文件,可以完成算子CPU域的运行验证。CPU侧的运行程序,通过GDB通用调试工具进行单步调试,可以精准验证程序执行流程是否符合预期。
447 447 
448**图5** CPU域和NPU域的核函数运行逻辑对比<a name="fig1274642720202"></a> 448**图5** CPU域和NPU域的核函数运行逻辑对比<a name="fig1274642720202"></a>
449![](../../figures/cpu_npu_36.png "CPU域和NPU域的核函数运行逻辑对比-36")449![](../../figures/cpu_npu_36.png "CPU域和NPU域的核函数运行逻辑对比-36")
Rdocs/zh/guide/编程指南/附录/msobjdump工具.mddocs/zh/guide/programming_guide/appendix/msobjdump_tool.md+2-2
@@ -253,7 +253,7 @@
253 253 
254## 使用样例(标准/简易自定义算子工程)<a name="section12835815105114"></a>254## 使用样例(标准/简易自定义算子工程)<a name="section12835815105114"></a>
255 255 
256-以下面的算子工程为例(仅为示例,具体以实际算子工程为准),假设$\{cmake\_install\_dir\}为算子Cmake编译产物根目录,目录结构如下,类似[算子编译](../高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#部署后的目录结构)。256+以下面的算子工程为例(仅为示例,具体以实际算子工程为准),假设$\{cmake\_install\_dir\}为算子Cmake编译产物根目录,目录结构如下,类似[算子编译](../advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#部署后的目录结构)。
257 257 
258```258```
259├── op_api259├── op_api
@@ -678,7 +678,7 @@
678 678 
679## 使用样例(Kernel直调算子工程)<a name="section12189203721319"></a>679## 使用样例(Kernel直调算子工程)<a name="section12189203721319"></a>
680 680 
681-以MatMulInvocationNeo算子为例(NPU模式),假设$\{cmake\_install\_dir\}为算子Cmake编译产物根目录,目录结构如下(仅为示例,具体以实际算子工程为准),类似[CMake编译配置文件编写](基于样例工程完成Kernel直调.md#section185111259496)。681+以MatMulInvocationNeo算子为例(NPU模式),假设$\{cmake\_install\_dir\}为算子Cmake编译产物根目录,目录结构如下(仅为示例,具体以实际算子工程为准),类似[CMake编译配置文件编写](kernel_direct_call_from_sample.md#section185111259496)。
682 682 
683```683```
684out684out
Rdocs/zh/guide/编程指南/附录/optype_collector工具.mddocs/zh/guide/programming_guide/appendix/optype_collector_tool.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/附录/show_kernel_debug_data工具.mddocs/zh/guide/programming_guide/appendix/show_kernel_debug_data_tool.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编译与运行/异步执行.mddocs/zh/guide/programming_guide/compilation_and_execution/async_execution.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编译与运行/编译与运行.mddocs/zh/guide/programming_guide/compilation_and_execution/compilation_and_execution.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.mddocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md+3-3
@@ -100,7 +100,7 @@ AI Core SIMT的基本编译流程如下:Host代码使用Host编译器编译成
100| 选项 | 是否必需 | 说明 |100| 选项 | 是否必需 | 说明 |
101|------|----------|------|101|------|----------|------|
102| -help | 否 | 查看帮助。 |102| -help | 否 | 查看帮助。 |
103-| --npu-arch | 是 | 编译时指定的AI处理器架构,取值为dav-&lt;arch-version&gt;,其中&lt;arch-version&gt;为NPU架构版本号,各产品型号对应的架构版本号请通过[对应关系表](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。 |103+| --npu-arch | 是 | 编译时指定的AI处理器架构,取值为dav-&lt;arch-version&gt;,其中&lt;arch-version&gt;为NPU架构版本号,各产品型号对应的架构版本号请通过[对应关系表](../../language_extension/simd_builtin_keywords.md#npu-arch)进行查询。 |
104| --npu-soc | 否 | 编译时指定的AI处理器型号,npu-soc和npu-arch同时配置时,优先采用npu-arch的配置。AI处理器型号的获取方式请参考[下方说明](#note-reference)。 |104| --npu-soc | 否 | 编译时指定的AI处理器型号,npu-soc和npu-arch同时配置时,优先采用npu-arch的配置。AI处理器型号的获取方式请参考[下方说明](#note-reference)。 |
105| -x | 否 | 指定编译语言,如:-x asc,表示指定为Ascend C编程语言。 |105| -x | 否 | 指定编译语言,如:-x asc,表示指定为Ascend C编程语言。 |
106| -o &lt;file&gt; | 否 | 指定输出文件的名称和位置。 |106| -o &lt;file&gt; | 否 | 指定输出文件的名称和位置。 |
@@ -114,8 +114,8 @@ AI Core SIMT的基本编译流程如下:Host代码使用Host编译器编译成
114| -O | 否 | 用于指定编译器的优化级别,当前支持-O3,-O2,-O0。 |114| -O | 否 | 用于指定编译器的优化级别,当前支持-O3,-O2,-O0。 |
115| --run-mode=sim | 否 | sim模式:链接时用户添加仿真模式对应的实现库,实现代码在仿真模式下运行,可以查看仿真相关日志,方便用户性能调试。 |115| --run-mode=sim | 否 | sim模式:链接时用户添加仿真模式对应的实现库,实现代码在仿真模式下运行,可以查看仿真相关日志,方便用户性能调试。 |
116| --enable-simt | 否 | SIMT编程场景,指定SIMT方式编译。设置编译选项`--enable-simt`时,若包含[SIMD API](../../../../api/SIMD-API/SIMD-API.md)的头文件会导致编译失败。 |116| --enable-simt | 否 | SIMT编程场景,指定SIMT方式编译。设置编译选项`--enable-simt`时,若包含[SIMD API](../../../../api/SIMD-API/SIMD-API.md)的头文件会导致编译失败。 |
117-| --cce-disable-asc-reserved-ubuf | 否 | 禁用Ascend C接口使用预留UB空间。开启后,依赖预留UB空间的Ascend C接口在对应芯片架构下不可用,使用时编译报错。使用预留UB空间的API列表参考:[使用预留UB空间的API](../../编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md#使用预留ub空间的api范围)。由于同一API使用预留UB空间的情况在不同NPU架构下有差异,开启该编译选项后,需要手动调整API调用方式或替换为不依赖预留UB空间的实现,才能完成兼容性迁移。 |117+| --cce-disable-asc-reserved-ubuf | 否 | 禁用Ascend C接口使用预留UB空间。开启后,依赖预留UB空间的Ascend C接口在对应芯片架构下不可用,使用时编译报错。使用预留UB空间的API列表参考:[使用预留UB空间的API](../../programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md#使用预留ub空间的api范围)。由于同一API使用预留UB空间的情况在不同NPU架构下有差异,开启该编译选项后,需要手动调整API调用方式或替换为不依赖预留UB空间的实现,才能完成兼容性迁移。 |
118-| --cce-disable-vf-stack-reserved-ubuf | 否 | 禁用SIMD VF栈预留的UB空间。开启后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用。针对 [NPU架构版本2201](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),此编译选项无实际效果;针对 [NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),此编译选项生效,当用户使用此编译选项后,编译器将无法使用预留的UB空间进行寄存器溢出的缓存,需要用户保证寄存器不溢出。 |118+| --cce-disable-vf-stack-reserved-ubuf | 否 | 禁用SIMD VF栈预留的UB空间。开启后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用。针对 [NPU架构版本2201](../../language_extension/simd_builtin_keywords.md#npu-arch),此编译选项无实际效果;针对 [NPU架构版本3510](../../language_extension/simd_builtin_keywords.md#npu-arch),此编译选项生效,当用户使用此编译选项后,编译器将无法使用预留的UB空间进行寄存器溢出的缓存,需要用户保证寄存器不溢出。 |
119| --cce-auto-sync | 否 | 开启毕昇编译器自动同步。AI Core内部的执行单元是异步并行的,Tensor的读写可能存在数据依赖,开启后可由毕昇编译器自动插入部分同步。详细内容请参考[关键特性说明](../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/key_features.md)。 |119| --cce-auto-sync | 否 | 开启毕昇编译器自动同步。AI Core内部的执行单元是异步并行的,Tensor的读写可能存在数据依赖,开启后可由毕昇编译器自动插入部分同步。详细内容请参考[关键特性说明](../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/key_features.md)。 |
120| --cce-auto-sync-log=&lt;file&gt; | 否 | 输出毕昇编译器自动同步插入信息到&lt;file&gt;文件中。 |120| --cce-auto-sync-log=&lt;file&gt; | 否 | 输出毕昇编译器自动同步插入信息到&lt;file&gt;文件中。 |
121 121 
Rdocs/zh/guide/编程指南/编译与运行/算子编译/AI-CPU算子编译基本用法.mddocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_cpu_operator_compilation.md+3-3
@@ -56,7 +56,7 @@ int32_t main(int argc, char const *argv[])
56 56 
57`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。57`${INSTALL_DIR}`请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。
58 58 
59-各产品型号对应的架构版本号请通过[对应关系表](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。59+各产品型号对应的架构版本号请通过[对应关系表](../../language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
60 60 
61```61```
62bisheng -O2 hello_world.aicpu --cce-aicpu-L${INSTALL_DIR}/lib64/device/lib64 --cce-aicpu-laicpu_api -I${INSTALL_DIR}/asc/include/aicpu_api -c -o hello_world.aicpu.o62bisheng -O2 hello_world.aicpu --cce-aicpu-L${INSTALL_DIR}/lib64/device/lib64 --cce-aicpu-laicpu_api -I${INSTALL_DIR}/asc/include/aicpu_api -c -o hello_world.aicpu.o
@@ -64,7 +64,7 @@ bisheng --npu-arch=dav-2201 main.asc -c -o main.asc.o
64bisheng hello_world.aicpu.o main.asc.o -o demo64bisheng hello_world.aicpu.o main.asc.o -o demo
65```65```
66 66 
67-上文我们通过一个入门示例介绍了使用bisheng命令行编译生成可执行文件的示例。除此之外,使用bisheng命令行也支持编译生成AI CPU算子的动态库与静态库,用户可在asc代码中通过内核调用符<<<...\>\>\>调用AI CPU算子的核函数,并在编译asc代码源文件生成可执行文件的时候,链接AI CPU动态库或者静态库,注意:若单独编译AI CPU算子代码生成动态库、静态库时,需要手动链接[表格中的库文件](AI-Core算子编译基本用法.md#内置链接库)。67+上文我们通过一个入门示例介绍了使用bisheng命令行编译生成可执行文件的示例。除此之外,使用bisheng命令行也支持编译生成AI CPU算子的动态库与静态库,用户可在asc代码中通过内核调用符<<<...\>\>\>调用AI CPU算子的核函数,并在编译asc代码源文件生成可执行文件的时候,链接AI CPU动态库或者静态库,注意:若单独编译AI CPU算子代码生成动态库、静态库时,需要手动链接[表格中的库文件](ai_core_operator_compilation.md#内置链接库)。
68 68 
69- 编译生成算子动态库69- 编译生成算子动态库
70 70 
@@ -215,7 +215,7 @@ target_compile_options(demo PRIVATE
215)215)
216```216```
217 217 
218-各产品型号对应的架构版本号请通过[对应关系表](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。218+各产品型号对应的架构版本号请通过[对应关系表](../../language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
219 219 
220如果需要CMake编译编译生成动态库、静态库,下面提供了更详细具体的编译示例:220如果需要CMake编译编译生成动态库、静态库,下面提供了更详细具体的编译示例:
221 221 
Rdocs/zh/guide/编程指南/编译与运行/算子编译/毕昇编译器.mddocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/bisheng_compiler.md+1-1
@@ -24,5 +24,5 @@
24|.h, .hpp, .hh, .hxx | C/C++头文件| Device代码, Host代码, Host/Device混合代码 | 24|.h, .hpp, .hh, .hxx | C/C++头文件| Device代码, Host代码, Host/Device混合代码 |
25|.asc | Ascend C源码文件| Device代码, Host代码, Host/Device混合代码 | 25|.asc | Ascend C源码文件| Device代码, Host代码, Host/Device混合代码 |
26 26 
27-- 异构编译场景中的编程相关约束请参考[约束说明](约束说明.md)。27+- 异构编译场景中的编程相关约束请参考[约束说明](constraints.md)。
28- 如果需要了解更多的毕昇编译器的基础知识,详细内容请参考[《毕昇编译器用户指南》](https://www.hiascend.com/document/redirect/CannCommunityBiSheng)。28- 如果需要了解更多的毕昇编译器的基础知识,详细内容请参考[《毕昇编译器用户指南》](https://www.hiascend.com/document/redirect/CannCommunityBiSheng)。
Rdocs/zh/guide/编程指南/编译与运行/算子编译/约束说明.mddocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/constraints.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编译与运行/算子编译/RTC运行时编译.mddocs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/rtc_runtime_compilation.md+1-1
@@ -5,7 +5,7 @@ RTC是Ascend C运行时编译库,通过[aclrtc](../../../../api/Utils-API/RTC/
5运行时编译库提供以下核心接口:5运行时编译库提供以下核心接口:
6- aclrtcCreateProg:根据输入参数(字符串形式表达的Ascend C源代码等)创建aclrtcProg程序实例。6- aclrtcCreateProg:根据输入参数(字符串形式表达的Ascend C源代码等)创建aclrtcProg程序实例。
7- aclrtcAddNameExpr(可选):注册需要导出的核函数名表达式,支持模板参数(如"Kernel::add_custom\<float\>"),非模板核函数可跳过。7- aclrtcAddNameExpr(可选):注册需要导出的核函数名表达式,支持模板参数(如"Kernel::add_custom\<float\>"),非模板核函数可跳过。
8-- aclrtcCompileProg:编译给定的程序,支持用户自定义编译选项,比如指定[NPU架构版本号](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch):--npu-arch=dav-2201。支持的编译选项可以参考[《毕昇编译器用户指南》](https://www.hiascend.com/document/redirect/CannCommunityBiSheng)。8+- aclrtcCompileProg:编译给定的程序,支持用户自定义编译选项,比如指定[NPU架构版本号](../../language_extension/simd_builtin_keywords.md#npu-arch):--npu-arch=dav-2201。支持的编译选项可以参考[《毕昇编译器用户指南》](https://www.hiascend.com/document/redirect/CannCommunityBiSheng)。
9- aclrtcGetBinDataSize:获取编译后的Device侧二进制数据的大小。9- aclrtcGetBinDataSize:获取编译后的Device侧二进制数据的大小。
10- aclrtcGetBinData:获取编译后的Device侧二进制数据。10- aclrtcGetBinData:获取编译后的Device侧二进制数据。
11- aclrtcGetLoweredName(可选):获取核函数编译后的mangled name,用于后续通过aclrtBinaryGetFunction查找核函数句柄,非模板核函数可跳过。11- aclrtcGetLoweredName(可选):获取核函数编译后的mangled name,用于后续通过aclrtBinaryGetFunction查找核函数句柄,非模板核函数可跳过。
Rdocs/zh/guide/编程指南/调试调优/调试调优.mddocs/zh/guide/programming_guide/debug_and_tuning/debug_and_tuning.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/调试调优/功能调试/CPU域孪生调试.mddocs/zh/guide/programming_guide/debug_and_tuning/functional_debug/cpu_twin_debug.md+5-5
@@ -8,7 +8,7 @@
8 8 
9## CPU侧验证核函数<a name="section1227643165914"></a>9## CPU侧验证核函数<a name="section1227643165914"></a>
10 10 
11-在非昇腾设备上,开发者可以利用CPU仿真环境先行进行算子开发和测试,并在准备就绪后,利用昇腾设备进行加速计算。在[编译与运行](../../编译与运行/编译与运行.md)章节,我们已经介绍了算子Kernel程序NPU域的编译运行。相比于NPU域的算子运行逻辑,CPU域调试将算子Kernel程序以Host程序的形式进行编译,此时算子Kernel程序链接CPU调测库,执行编译生成的可执行文件,可以完成算子CPU域的运行验证。CPU侧的运行程序,通过GDB通用调试工具进行单步调试,可以精准验证程序执行流程是否符合预期。11+在非昇腾设备上,开发者可以利用CPU仿真环境先行进行算子开发和测试,并在准备就绪后,利用昇腾设备进行加速计算。在[编译与运行](../../compilation_and_execution/compilation_and_execution.md)章节,我们已经介绍了算子Kernel程序NPU域的编译运行。相比于NPU域的算子运行逻辑,CPU域调试将算子Kernel程序以Host程序的形式进行编译,此时算子Kernel程序链接CPU调测库,执行编译生成的可执行文件,可以完成算子CPU域的运行验证。CPU侧的运行程序,通过GDB通用调试工具进行单步调试,可以精准验证程序执行流程是否符合预期。
12 12 
13**图1** CPU域和NPU域的核函数运行逻辑对比<a name="fig39851716019"></a> 13**图1** CPU域和NPU域的核函数运行逻辑对比<a name="fig39851716019"></a>
14![](../../../figures/cpu_npu.png "CPU域和NPU域的核函数运行逻辑对比")14![](../../../figures/cpu_npu.png "CPU域和NPU域的核函数运行逻辑对比")
@@ -21,9 +21,9 @@
21 cmake -B build -DCMAKE_ASC_RUN_MODE=cpu -DCMAKE_ASC_ARCHITECTURES=dav-220121 cmake -B build -DCMAKE_ASC_RUN_MODE=cpu -DCMAKE_ASC_ARCHITECTURES=dav-2201
22 ```22 ```
23 23 
24- cpu表示开启CPU域编译,dav-后为NPU架构版本号,请根据实际情况参考[对应关系表](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行填写。24+ cpu表示开启CPU域编译,dav-后为NPU架构版本号,请根据实际情况参考[对应关系表](../../language_extension/simd_builtin_keywords.md#npu-arch)进行填写。
25 25 
26- 其他CMakeLists.txt项目配置[通过CMake编译](../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002428982142)进行编写。26+ 其他CMakeLists.txt项目配置[通过CMake编译](../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002428982142)进行编写。
27 27 
28>[!NOTE]说明 28>[!NOTE]说明
29>为了实现CPU域与NPU域代码归一,框架在CPU域中仅对部分acl接口进行适配,开发者在使用CPU域调测功能时,仅支持使用如下acl接口,并且不支持用户自行链接**ascendcl库**29>为了实现CPU域与NPU域代码归一,框架在CPU域中仅对部分acl接口进行适配,开发者在使用CPU域调测功能时,仅支持使用如下acl接口,并且不支持用户自行链接**ascendcl库**
@@ -39,7 +39,7 @@
39> aclrtSetDevice、aclrtResetDevice、aclrtCreateStream、aclrtCreateStreamWithConfig、aclrtDestroyStream、aclrtDestroyStreamForce、aclrtSynchronizeStream、aclrtCreateContext、aclrtDestroyContext。39> aclrtSetDevice、aclrtResetDevice、aclrtCreateStream、aclrtCreateStreamWithConfig、aclrtDestroyStream、aclrtDestroyStreamForce、aclrtSynchronizeStream、aclrtCreateContext、aclrtDestroyContext。
40 40 
41> [!CAUTION] 注意41> [!CAUTION] 注意
42-> 在CPU孪生调试模式下,编译器不识别Ascend C提供的[SIMD-BuiltIn关键字](../../语言扩展层/SIMD-BuiltIn关键字.md)及[SIMT-BuiltIn关键字](../../语言扩展层/SIMT-BuiltIn关键字.md),包括42+> 在CPU孪生调试模式下,编译器不识别Ascend C提供的[SIMD-BuiltIn关键字](../../language_extension/simd_builtin_keywords.md)及[SIMT-BuiltIn关键字](../../language_extension/simt_builtin_keywords.md),包括
43> - **函数执行空间限定符**:如`__aicore__`、`__global__`、`__host__`等;43> - **函数执行空间限定符**:如`__aicore__`、`__global__`、`__host__`等;
44> - **函数标记宏**:如`__simd_vf__`、`__simd_callee__`、`__simt_vf__`等;44> - **函数标记宏**:如`__simd_vf__`、`__simd_callee__`、`__simt_vf__`等;
45> - **地址空间限定符**:如`__gm__` 、`__ubuf__`等。45> - **地址空间限定符**:如`__gm__` 、`__ubuf__`等。
@@ -72,7 +72,7 @@
72 72 
73- 调试单独一个子进程73- 调试单独一个子进程
74 74 
75- 启动gdb,示例中的add\_custom\_cpu为CPU域的算子可执行文件,参考[修改并执行一键式编译运行脚本](../../附录/基于样例工程完成Kernel直调.md#section188001652105215),将一键式编译运行脚本中的run-mode设置成cpu,即可编译生成CPU域的算子可执行文件。75+ 启动gdb,示例中的add\_custom\_cpu为CPU域的算子可执行文件,参考[修改并执行一键式编译运行脚本](../../appendix/kernel_direct_call_from_sample.md#section188001652105215),将一键式编译运行脚本中的run-mode设置成cpu,即可编译生成CPU域的算子可执行文件。
76 76 
77 gdb启动后,首先设置跟踪子进程,之后再打断点,就会停留在子进程中,但是这种方式只会停留在遇到断点的第一个子进程中,其余子进程和主进程会继续执行直到退出。涉及到核间同步的算子无法使用这种方法进行调试。77 gdb启动后,首先设置跟踪子进程,之后再打断点,就会停留在子进程中,但是这种方式只会停留在遇到断点的第一个子进程中,其余子进程和主进程会继续执行直到退出。涉及到核间同步的算子无法使用这种方法进行调试。
78 78 
Rdocs/zh/guide/编程指南/调试调优/功能调试/功能调试.mddocs/zh/guide/programming_guide/debug_and_tuning/functional_debug/functional_debug.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/调试调优/功能调试/NPU域上板调试.mddocs/zh/guide/programming_guide/debug_and_tuning/functional_debug/npu_board_debug.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/调试调优/概述.mddocs/zh/guide/programming_guide/debug_and_tuning/overview.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/调试调优/性能调优.mddocs/zh/guide/programming_guide/debug_and_tuning/performance_tuning.md+3-3
@@ -17,9 +17,9 @@
17 17 
18算子程序通过毕昇编译器编译生成可执行程序后,可以通过msopprof在NPU上完成性能采集。以SIMD编程场景为例,使用msOpProf工具采集上板性能数据大致步骤如下:18算子程序通过毕昇编译器编译生成可执行程序后,可以通过msopprof在NPU上完成性能采集。以SIMD编程场景为例,使用msOpProf工具采集上板性能数据大致步骤如下:
19 19 
20-1. 参考[AI Core SIMD编译](../编译与运行/算子编译/AI-Core算子编译基本用法.md),编译add算子样例,生成可执行文件。20+1. 参考[AI Core SIMD编译](../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md),编译add算子样例,生成可执行文件。
21 21 
22- dav-后为NPU架构版本号,请根据实际情况进行替换,各产品型号对应的架构版本号请通过[对应关系表](../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。22+ dav-后为NPU架构版本号,请根据实际情况进行替换,各产品型号对应的架构版本号请通过[对应关系表](../language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
23 23 
24 ```24 ```
25 bisheng add_custom.asc -o add_custom --npu-arch=dav-2201 25 bisheng add_custom.asc -o add_custom --npu-arch=dav-2201
@@ -120,7 +120,7 @@
120</tbody>120</tbody>
121</table>121</table>
122 122 
123-对于SIMT编程场景,只需遵循[AI Core SIMT编译](../编译与运行/算子编译/AI-Core算子编译基本用法.md)指导进行算子编译,生成可执行文件后,按照上述步骤2和步骤3使用msOpProf工具执行程序,以获取算子执行的性能数据。123+对于SIMT编程场景,只需遵循[AI Core SIMT编译](../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)指导进行算子编译,生成可执行文件后,按照上述步骤2和步骤3使用msOpProf工具执行程序,以获取算子执行的性能数据。
124 124 
125## NPU域仿真性能分析<a name="section75259502193"></a>125## NPU域仿真性能分析<a name="section75259502193"></a>
126 126 
Rdocs/zh/guide/编程指南/本文档组织结构.mddocs/zh/guide/programming_guide/document_structure.md+6-6
@@ -3,9 +3,9 @@
3本指南为**AscendC算子开发**综合技术手册,系统涵盖SIMD/SIMT编程模型、语言扩展特性、C++类库API、编译运行机制、调试调优及高级编程等核心技术。文档兼顾入门学习与深度实践,适配不同层级研发人员。入门开发者可依托本指南完成技术体系搭建,资深算子工程师亦可借此深化技术能力,充分挖掘昇腾AI处理器硬件算力,高质量完成自定义算子的开发与性能优化。3本指南为**AscendC算子开发**综合技术手册,系统涵盖SIMD/SIMT编程模型、语言扩展特性、C++类库API、编译运行机制、调试调优及高级编程等核心技术。文档兼顾入门学习与深度实践,适配不同层级研发人员。入门开发者可依托本指南完成技术体系搭建,资深算子工程师亦可借此深化技术能力,充分挖掘昇腾AI处理器硬件算力,高质量完成自定义算子的开发与性能优化。
4 4 
5本文档整体架构及各章节核心内容如下:5本文档整体架构及各章节核心内容如下:
6-- **[编程模型](编程模型/编程模型.md)**:深入解析AscendC原生SIMD/SIMT编程模型的底层原理与应用范式。6+- **[编程模型](programming_model/programming_model.md)**:深入解析AscendC原生SIMD/SIMT编程模型的底层原理与应用范式。
7-- **[编译与运行](编译与运行/编译与运行.md)**:讲解算子Kernel调用机制,完整说明工程编译与程序运行全流程。7+- **[编译与运行](compilation_and_execution/compilation_and_execution.md)**:讲解算子Kernel调用机制,完整说明工程编译与程序运行全流程。
8-- **[语言扩展层](语言扩展层/语言扩展层.md)**:逐一介绍SIMD、SIMT编程体系的扩展语法、内置关键字及底层系统函数。8+- **[语言扩展层](language_extension/language_extension.md)**:逐一介绍SIMD、SIMT编程体系的扩展语法、内置关键字及底层系统函数。
9-- **[C++类库API](类库API/类库API.md)**:梳理AscendC分层接口体系,包含基于Tensor编程的C++基础API、TPipe/TQue框架API、单核通用算法高阶API,以及面向多核算子开发的算子模板库。9+- **[C++类库API](library_api/library_api.md)**:梳理AscendC分层接口体系,包含基于Tensor编程的C++基础API、TPipe/TQue框架API、单核通用算法高阶API,以及面向多核算子开发的算子模板库。
10-- **[调试调优](调试调优/调试调优.md)**:介绍算子功能问题定位、性能分析、专项调优的实现方法、配套工具及工程实践经验。10+- **[调试调优](debug_and_tuning/debug_and_tuning.md)**:介绍算子功能问题定位、性能分析、专项调优的实现方法、配套工具及工程实践经验。
11-- **[高级编程](高级编程/高级编程.md)**:阐述进阶开发技术,涵盖SIMD/SIMT混合编程、AI处理器硬件架构、硬件规格与使用约束,以及aclnn算子工程化、GE图接入等高阶方案。11+- **[高级编程](advanced_programming/advanced_programming.md)**:阐述进阶开发技术,涵盖SIMD/SIMT混合编程、AI处理器硬件架构、硬件规格与使用约束,以及aclnn算子工程化、GE图接入等高阶方案。
Rdocs/zh/guide/编程指南/语言扩展层/语言扩展层.mddocs/zh/guide/programming_guide/language_extension/language_extension.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.mddocs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md+1-1
@@ -463,7 +463,7 @@ __ubuf__ int * __gm__ ptr;
463```463```
464 464 
465其中:465其中:
466-- numBlocks:规定了核函数将会在几个核上执行。每个执行该核函数的核会被分配一个逻辑ID,即block\_idx,可以在核函数的实现中使用内置变量[block_idx](../语言扩展层/SIMD-BuiltIn关键字.md#内置变量)获取;466+- numBlocks:规定了核函数将会在几个核上执行。每个执行该核函数的核会被分配一个逻辑ID,即block\_idx,可以在核函数的实现中使用内置变量[block_idx](../language_extension/simd_builtin_keywords.md#内置变量)获取;
467 467 
468 >[!NOTE]说明 468 >[!NOTE]说明
469 >numBlocks是逻辑核的概念,取值范围为\[1,65535\]。为了充分利用硬件资源,一般设置为物理核的核数或其倍数。469 >numBlocks是逻辑核的概念,取值范围为\[1,65535\]。为了充分利用硬件资源,一般设置为物理核的核数或其倍数。
Rdocs/zh/guide/编程指南/语言扩展层/SIMD语言扩展层C-API.mddocs/zh/guide/programming_guide/language_extension/simd_language_extension_c_api.md+1-1
@@ -12,7 +12,7 @@ C API开放芯片完备编程能力,支持以数组形式分配内存,一般
12 12 
13- 矢量计算,实现调用Vector计算单元执行计算的功能。13- 矢量计算,实现调用Vector计算单元执行计算的功能。
14- 数据搬运,计算API基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算API完成计算,最后从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬运API。14- 数据搬运,计算API基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算API完成计算,最后从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬运API。
15-- 同步控制,完成任务间的通信和同步,比如asc\_sync\_notify/asc\_sync\_wait接口。不同的API指令间有可能存在依赖关系,从[抽象硬件架构](../编程模型/AI-Core-SIMD编程/抽象硬件架构.md)可知,不同的指令异步并行执行,为了保证不同指令队列间的指令按照正确的逻辑关系执行,需要向不同的组件发送同步指令。同步控制API内部即完成这个发送同步指令的过程。15+- 同步控制,完成任务间的通信和同步,比如asc\_sync\_notify/asc\_sync\_wait接口。不同的API指令间有可能存在依赖关系,从[抽象硬件架构](../programming_model/ai_core_simd_programming/abstract_hardware_architecture.md)可知,不同的指令异步并行执行,为了保证不同指令队列间的指令按照正确的逻辑关系执行,需要向不同的组件发送同步指令。同步控制API内部即完成这个发送同步指令的过程。
16- 系统变量,访问、获取系统内置变量,辅助计算API。16- 系统变量,访问、获取系统内置变量,辅助计算API。
17 17 
18对于计算类API可以分为以下几类:18对于计算类API可以分为以下几类:
Rdocs/zh/guide/编程指南/语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.mddocs/zh/guide/programming_guide/language_extension/simd_simt_hybrid_builtin_keywords.md+9-9
@@ -2,7 +2,7 @@
2 2 
3## 函数执行空间限定符<a name="section1074418132518"></a>3## 函数执行空间限定符<a name="section1074418132518"></a>
4 4 
5-SIMD与SIMT混合编程使用的函数执行空间限定符与SIMD编程一致,详细说明请参见[SIMD BuiltIn关键字的函数执行空间限定符](SIMD-BuiltIn关键字.md#section1074418132518)。5+SIMD与SIMT混合编程使用的函数执行空间限定符与SIMD编程一致,详细说明请参见[SIMD BuiltIn关键字的函数执行空间限定符](simd_builtin_keywords.md#section1074418132518)。
6 6 
7## VF函数执行限定符7## VF函数执行限定符
8 8 
@@ -34,7 +34,7 @@ asc_vf_call<function_name>(dim3(blockDim), arg1, arg2, ...);
34 34 
35SIMT VF函数有以下约束:35SIMT VF函数有以下约束:
36 36 
37-- 入参仅支持Ascend C的[内置数据类型](SIMT-BuiltIn关键字.md#section1835494915576)(int32\_t、uint32\_t、float、half等)及其组成的指针、数组、结构体类型,且指针类型必须指向GM或者UB内存。37+- 入参仅支持Ascend C的[内置数据类型](simt_builtin_keywords.md#section1835494915576)(int32\_t、uint32\_t、float、half等)及其组成的指针、数组、结构体类型,且指针类型必须指向GM或者UB内存。
38- 函数返回类型必须是void。38- 函数返回类型必须是void。
39- SIMT VF内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。39- SIMT VF内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。
40 40 
@@ -54,17 +54,17 @@ uint32_t result = simt_helper(arg1, arg2, ...);
54 54 
55该函数有以下约束:55该函数有以下约束:
56 56 
57-- 入参仅支持Ascend C的[内置数据类型](SIMT-BuiltIn关键字.md#section1835494915576)(int32\_t、uint32\_t、float、half等)及对应的指针类型。57+- 入参仅支持Ascend C的[内置数据类型](simt_builtin_keywords.md#section1835494915576)(int32\_t、uint32\_t、float、half等)及对应的指针类型。
58-- 函数返回值只能是Ascend C的[内置数据类型](SIMT-BuiltIn关键字.md#section1835494915576)(int32\_t、uint32\_t、float、half等)及对应的指针类型。58+- 函数返回值只能是Ascend C的[内置数据类型](simt_builtin_keywords.md#section1835494915576)(int32\_t、uint32\_t、float、half等)及对应的指针类型。
59- 函数内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。59- 函数内只能调用\_\_simt\_callee\_\_函数或\_\_callee\_\_函数。
60 60 
61### \_\_simd\_vf\_\_与\_\_simd\_callee\_\_61### \_\_simd\_vf\_\_与\_\_simd\_callee\_\_
62 62 
63-\_\_simd\_vf\_\_用于标记SIMD VF入口函数,\_\_simd\_callee\_\_是供SIMD VF内部调用子函数,详细说明请参见[SIMD BuiltIn关键字的SIMD VF函数标识符](SIMD-BuiltIn关键字.md#section192521344610)。63+\_\_simd\_vf\_\_用于标记SIMD VF入口函数,\_\_simd\_callee\_\_是供SIMD VF内部调用子函数,详细说明请参见[SIMD BuiltIn关键字的SIMD VF函数标识符](simd_builtin_keywords.md#section192521344610)。
64 64 
65## 地址空间限定符<a name="section1624210295308"></a>65## 地址空间限定符<a name="section1624210295308"></a>
66 66 
67-SIMD与SIMT混合编程使用的地址空间限定符与SIMD编程一致,详细说明请参见[SIMD BuiltIn关键字的地址空间限定符](SIMD-BuiltIn关键字.md#section1624210295308)。67+SIMD与SIMT混合编程使用的地址空间限定符与SIMD编程一致,详细说明请参见[SIMD BuiltIn关键字的地址空间限定符](simd_builtin_keywords.md#section1624210295308)。
68 68 
69## 核函数配置69## 核函数配置
70 70 
@@ -209,7 +209,7 @@ SIMT VF与SIMD VF均通过`asc_vf_call`接口在核函数或`__aicore__`函数
209 209 
210 运行时变量,表示一个线程束(Warp)中的线程数量,当前为固定值32。210 运行时变量,表示一个线程束(Warp)中的线程数量,当前为固定值32。
211 211 
212-SIMD核函数层级的内置变量参见[SIMD核函数层内置变量](./SIMD-BuiltIn关键字.md#内置变量)。212+SIMD核函数层级的内置变量参见[SIMD核函数层内置变量](./simd_builtin_keywords.md#内置变量)。
213 213 
214### 不同层级的内置变量使用限制214### 不同层级的内置变量使用限制
215 215 
@@ -231,8 +231,8 @@ Host侧<<<...\>\>\>调用配置的是外层核函数的逻辑核数;SIMT VF内
231 231 
232## 内置数据类型<a name="zh-cn_topic_0000002571575581_section1880403364916"></a><a name="cn_topic_0000002571575581_section1880403364916"></a>232## 内置数据类型<a name="zh-cn_topic_0000002571575581_section1880403364916"></a><a name="cn_topic_0000002571575581_section1880403364916"></a>
233 233 
234-SIMD与SIMT混合编程使用的内置数据类型与SIMT编程一致,详细说明请参见[SIMT BuiltIn关键字的内置数据类型](SIMT-BuiltIn关键字.md#section1835494915576)。234+SIMD与SIMT混合编程使用的内置数据类型与SIMT编程一致,详细说明请参见[SIMT BuiltIn关键字的内置数据类型](simt_builtin_keywords.md#section1835494915576)。
235 235 
236## 运算符<a name="zh-cn_topic_0000002571575581_section186787252339"></a>236## 运算符<a name="zh-cn_topic_0000002571575581_section186787252339"></a>
237 237 
238-SIMD与SIMT混合编程支持的运算符与SIMT编程一致,详细说明请参见[SIMT BuiltIn关键字的运算符](SIMT-BuiltIn关键字.md#section186787252339)。238+SIMD与SIMT混合编程支持的运算符与SIMT编程一致,详细说明请参见[SIMT BuiltIn关键字的运算符](simt_builtin_keywords.md#section186787252339)。
Rdocs/zh/guide/编程指南/语言扩展层/SIMT-BuiltIn关键字.mddocs/zh/guide/programming_guide/language_extension/simt_builtin_keywords.md+1-1
@@ -266,7 +266,7 @@ res[idx] = x[idx] > y[idx] ? x[idx] : y[idx];
266 266 
267- blocks\_per\_grid:dim3类型,用于指定网格(Grid)的维度与规模。blocks\_per\_grid.x \* blocks\_per\_grid.y \* blocks\_per\_grid.z等于启动的线程块总数,不能超过65535。267- blocks\_per\_grid:dim3类型,用于指定网格(Grid)的维度与规模。blocks\_per\_grid.x \* blocks\_per\_grid.y \* blocks\_per\_grid.z等于启动的线程块总数,不能超过65535。
268- threads\_per\_block:dim3类型,用于指定每个线程块(Thread Block)的维度与规模。threads\_per\_block.x \* threads\_per\_block.y \* threads\_per\_block.z等于每个线程块包含的线程数,需要小于等于\_\_launch\_bounds\_\_配置。268- threads\_per\_block:dim3类型,用于指定每个线程块(Thread Block)的维度与规模。threads\_per\_block.x \* threads\_per\_block.y \* threads\_per\_block.z等于每个线程块包含的线程数,需要小于等于\_\_launch\_bounds\_\_配置。
269-- dyn\_ubuf\_size:size\_t类型,用于指定每个线程块动态分配的共享内存大小,单位为字节。这部分内存供数组使用,具体用法请参考[共享内存](../编程模型/AI-Core-SIMT编程/内存层级.md#共享内存)中的“动态申请”方式。269+- dyn\_ubuf\_size:size\_t类型,用于指定每个线程块动态分配的共享内存大小,单位为字节。这部分内存供数组使用,具体用法请参考[共享内存](../programming_model/ai_core_simt_programming/memory_hierarchy.md#共享内存)中的“动态申请”方式。
270- stream:aclrtStream类型,指定关联的流,用于维护异步操作的执行顺序。270- stream:aclrtStream类型,指定关联的流,用于维护异步操作的执行顺序。
271 271 
272以下示例展示了内核函数的声明与调用方式。272以下示例展示了内核函数的声明与调用方式。
Rdocs/zh/guide/编程指南/语言扩展层/SIMT语言扩展层C-API.mddocs/zh/guide/programming_guide/language_extension/simt_language_extension_c_api.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/高阶API/概述.mddocs/zh/guide/programming_guide/library_api/advanced_api/overview.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/高阶API/常用操作速查指导/如何使用Kernel侧临时空间.mddocs/zh/guide/programming_guide/library_api/advanced_api/quick_reference/how_to_use_kernel_temp_space.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/高阶API/常用操作速查指导/如何使用Tiling依赖的头文件.mddocs/zh/guide/programming_guide/library_api/advanced_api/quick_reference/how_to_use_tiling_headers.md+3-3
@@ -1,8 +1,8 @@
1# 如何使用Tiling依赖的头文件<a name="ZH-CN_TOPIC_0000002522860379"></a>1# 如何使用Tiling依赖的头文件<a name="ZH-CN_TOPIC_0000002522860379"></a>
2 2 
3-由于AI处理器的Scalar计算单元执行能力有限,为减少算子Kernel侧的Scalar计算,将部分计算在Host端执行,这需要编写[Host端Tiling代码](../../../高级编程/Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md)。注意,在程序中调用高阶API的Tiling接口或者使用高阶API的Tiling结构体参数时,需要引入依赖的头文件。在不同的Tiling实现方式下,具体为:3+由于AI处理器的Scalar计算单元执行能力有限,为减少算子Kernel侧的Scalar计算,将部分计算在Host端执行,这需要编写[Host端Tiling代码](../../../advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md)。注意,在程序中调用高阶API的Tiling接口或者使用高阶API的Tiling结构体参数时,需要引入依赖的头文件。在不同的Tiling实现方式下,具体为:
4 4 
5-- [使用标准C++语法定义Tiling结构体](../../../高级编程/Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md#define-tilingdata-structure)5+- [使用标准C++语法定义Tiling结构体](../../../advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md#define-tilingdata-structure)
6 6 
7 这种方式需要引入依赖的头文件如下。所有高阶API的Tiling结构体定义在AscendC::tiling命名空间下,因此需要通过AscendC::tiling访问具体API的Tiling结构体。7 这种方式需要引入依赖的头文件如下。所有高阶API的Tiling结构体定义在AscendC::tiling命名空间下,因此需要通过AscendC::tiling访问具体API的Tiling结构体。
8 8 
@@ -13,7 +13,7 @@
13 AscendC::tiling::TCubeTiling cubeTilingData;13 AscendC::tiling::TCubeTiling cubeTilingData;
14 ```14 ```
15 15 
16-- [使用TILING\_DATA\_DEF宏定义Tiling结构体](../../../高级编程/Aclnn算子工程化开发/设计与实现/使用高阶API时配套的Tiling实现.md)16+- [使用TILING\_DATA\_DEF宏定义Tiling结构体](../../../advanced_programming/aclnn_operator_development/design_and_implementation/tiling_with_advanced_api.md)
17 17 
18 这种方式需要引入依赖的头文件如下。所有高阶API的Tiling结构体和Tiling函数定义在optiling命名空间下。18 这种方式需要引入依赖的头文件如下。所有高阶API的Tiling结构体和Tiling函数定义在optiling命名空间下。
19 19 
Rdocs/zh/guide/编程指南/类库API/基础API/接口分类说明/连续计算API.mddocs/zh/guide/programming_guide/library_api/basic_api/interface_classification/continuous_compute_api.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/基础API/接口分类说明/高维切分API.mddocs/zh/guide/programming_guide/library_api/basic_api/interface_classification/high_dim_split_api.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/基础API/概述.mddocs/zh/guide/programming_guide/library_api/basic_api/overview.md+3-3
@@ -9,17 +9,17 @@
9- [矩阵计算API](../../../../api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_ISASI.md),实现调用Cube计算单元执行计算的功能。9- [矩阵计算API](../../../../api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_ISASI.md),实现调用Cube计算单元执行计算的功能。
10- [数据搬运API](../../../../api/SIMD-API/basic_api/memory_vector_compute/data_move/data_move.md),计算API基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算API完成计算,最后从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬运API,比如DataCopy接口。10- [数据搬运API](../../../../api/SIMD-API/basic_api/memory_vector_compute/data_move/data_move.md),计算API基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算API完成计算,最后从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬运API,比如DataCopy接口。
11- [资源管理API](../../../../api/SIMD-API/basic_api/resource_management/resource_management.md),用于分配管理内存,比如AllocTensor、FreeTensor接口;11- [资源管理API](../../../../api/SIMD-API/basic_api/resource_management/resource_management.md),用于分配管理内存,比如AllocTensor、FreeTensor接口;
12-- 同步控制API,完成任务间的通信和同步,比如EnQue、DeQue接口。不同的API指令间有可能存在依赖关系,从[抽象硬件架构](../../编程模型/AI-Core-SIMD编程/抽象硬件架构.md)可知,不同的指令异步并行执行,为了保证不同指令队列间的指令按照正确的逻辑关系执行,需要向不同的组件发送同步指令。同步控制API内部即完成这个发送同步指令的过程,开发者无需关注内部实现逻辑,使用简单的API接口即可完成。12+- 同步控制API,完成任务间的通信和同步,比如EnQue、DeQue接口。不同的API指令间有可能存在依赖关系,从[抽象硬件架构](../../programming_model/ai_core_simd_programming/abstract_hardware_architecture.md)可知,不同的指令异步并行执行,为了保证不同指令队列间的指令按照正确的逻辑关系执行,需要向不同的组件发送同步指令。同步控制API内部即完成这个发送同步指令的过程,开发者无需关注内部实现逻辑,使用简单的API接口即可完成。
13 13 
14**根据对数据操作方法的不同,分为以下几类**14**根据对数据操作方法的不同,分为以下几类**
15 15 
16-- [连续计算API](./接口分类说明/连续计算API.md):支持Tensor前n个数据计算。针对源操作数的连续n个数据进行计算并连续写入目的操作数,解决一维tensor的连续计算问题。16+- [连续计算API](./interface_classification/continuous_compute_api.md):支持Tensor前n个数据计算。针对源操作数的连续n个数据进行计算并连续写入目的操作数,解决一维tensor的连续计算问题。
17 17 
18 ```18 ```
19 Add(dst, src1, src2, n);19 Add(dst, src1, src2, n);
20 ```20 ```
21 21 
22-- [高维切分API](./接口分类说明/高维切分API.md):支持Repeat和Stride。功能灵活的计算API,提供与BuiltIn API完全对等编程能力,充分发挥硬件优势,支持对每个操作数的DataBlock Stride,Repeat Stride,Mask等参数的操作。22+- [高维切分API](./interface_classification/high_dim_split_api.md):支持Repeat和Stride。功能灵活的计算API,提供与BuiltIn API完全对等编程能力,充分发挥硬件优势,支持对每个操作数的DataBlock Stride,Repeat Stride,Mask等参数的操作。
23 23 
24下图以矢量加法为例,展示了**连续计算API和高维切分API**的特点。24下图以矢量加法为例,展示了**连续计算API和高维切分API**的特点。
25 25 
Rdocs/zh/guide/编程指南/类库API/基础API/常用操作速查指导/如何使用掩码操作API.mddocs/zh/guide/programming_guide/library_api/basic_api/quick_reference/how_to_use_mask_api.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/基础API/常用操作速查指导/如何使用归约计算API.mddocs/zh/guide/programming_guide/library_api/basic_api/quick_reference/how_to_use_reduction_api.md+1-1
@@ -10,7 +10,7 @@
10**图1** 归约指令示意图<a name="zh-cn_topic_0000002267504648_fig16735034112710"></a> 10**图1** 归约指令示意图<a name="zh-cn_topic_0000002267504648_fig16735034112710"></a>
11![](../../../../figures/Reduce_summary.png "归约指令示意图")11![](../../../../figures/Reduce_summary.png "归约指令示意图")
12 12 
13-针对归约指令,和其他的基础API一样也提供了**tensor高维切分计算**接口,可充分发挥硬件优势,支持开发者控制指令的**迭代执行**和操作数的**地址间隔**,功能更加灵活。但具体参数的单位和约束与[基础API](../接口分类说明/高维切分API.md)略有不同,下文将对这些差异点进行介绍。13+针对归约指令,和其他的基础API一样也提供了**tensor高维切分计算**接口,可充分发挥硬件优势,支持开发者控制指令的**迭代执行**和操作数的**地址间隔**,功能更加灵活。但具体参数的单位和约束与[基础API](../interface_classification/high_dim_split_api.md)略有不同,下文将对这些差异点进行介绍。
14 14 
15- **mask**:用于控制每次迭代内参与计算的元素,mask参数的使用方法和基础API通用的使用方法一致。15- **mask**:用于控制每次迭代内参与计算的元素,mask参数的使用方法和基础API通用的使用方法一致。
16- **repeatTime**:迭代次数,开发者通过repeatTime来配置迭代次数,从而控制指令的多次迭代执行。16- **repeatTime**:迭代次数,开发者通过repeatTime来配置迭代次数,从而控制指令的多次迭代执行。
Rdocs/zh/guide/编程指南/类库API/类库API.mddocs/zh/guide/programming_guide/library_api/library_api.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/编程接口概述.mddocs/zh/guide/programming_guide/library_api/programming_interface_overview.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/类库API/Utils-API.mddocs/zh/guide/programming_guide/library_api/utils_api.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/抽象硬件架构.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/abstract_hardware_architecture.md+7-7
@@ -1,12 +1,12 @@
1# 抽象硬件架构<a name="ZH-CN_TOPIC_0000001861989988"></a>1# 抽象硬件架构<a name="ZH-CN_TOPIC_0000001861989988"></a>
2 2 
3-AI Core是AI处理器的计算核心,AI处理器内部有多个AI Core。本章节将介绍AI Core的并行计算架构抽象,该抽象架构屏蔽了不同硬件之间的差异。使用Ascend C进行编程时,基于抽象硬件架构,可以简化硬件细节,显著降低开发门槛。如需了解更详细的硬件架构信息或者原理,请参考[硬件实现](../../高级编程/硬件实现/基本架构.md)。3+AI Core是AI处理器的计算核心,AI处理器内部有多个AI Core。本章节将介绍AI Core的并行计算架构抽象,该抽象架构屏蔽了不同硬件之间的差异。使用Ascend C进行编程时,基于抽象硬件架构,可以简化硬件细节,显著降低开发门槛。如需了解更详细的硬件架构信息或者原理,请参考[硬件实现](../../advanced_programming/hardware_implementation/basic_architecture.md)。
4 4 
5## 概览<a name="section_core_components"></a>5## 概览<a name="section_core_components"></a>
6 6 
7AI Core的抽象硬件架构可以分为[**计算单元**](#section_compute_units)、[**存储单元**](#section_memory_units)、[**搬运单元**](#section_memory_units)三类核心组件。下图以NPU架构版本2201为例,展示三类组件在AI Core中的位置关系和协同方式。7AI Core的抽象硬件架构可以分为[**计算单元**](#section_compute_units)、[**存储单元**](#section_memory_units)、[**搬运单元**](#section_memory_units)三类核心组件。下图以NPU架构版本2201为例,展示三类组件在AI Core中的位置关系和协同方式。
8 8 
9-**图1** 抽象硬件架构([NPU架构版本2201](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch))<a name="fig1095152043812"></a>9+**图1** 抽象硬件架构([NPU架构版本2201](../../language_extension/simd_builtin_keywords.md#npu-arch))<a name="fig1095152043812"></a>
10 10 
11<img src="../../../figures/npu_2201_2.png" alt="抽象硬件架构" width="840px">11<img src="../../../figures/npu_2201_2.png" alt="抽象硬件架构" width="840px">
12 12 
@@ -38,7 +38,7 @@ AI Core中的计算单元主要包括Scalar、Vector和Cube三类。
38 38 
39<img src="../../../figures/simd_reg_2.png" alt="SIMD-Reg矢量计算内存层级" width="520px">39<img src="../../../figures/simd_reg_2.png" alt="SIMD-Reg矢量计算内存层级" width="520px">
40 40 
41-**DMA(Direct Memory Access)搬运单元**负责数据搬运,包括Global Memory和Local Memory之间的数据搬入、搬出,以及不同层级Local Memory之间的数据流转。常见搬运单元包括MTE1、MTE2、MTE3和FixPipe,具体介绍请参考[搬运单元](../../高级编程/硬件实现/基本架构.md#table288493152012)。41+**DMA(Direct Memory Access)搬运单元**负责数据搬运,包括Global Memory和Local Memory之间的数据搬入、搬出,以及不同层级Local Memory之间的数据流转。常见搬运单元包括MTE1、MTE2、MTE3和FixPipe,具体介绍请参考[搬运单元](../../advanced_programming/hardware_implementation/basic_architecture.md#table288493152012)。
42 42 
43## 执行流程与同步机制<a name="section_programming_flow"></a>43## 执行流程与同步机制<a name="section_programming_flow"></a>
44 44 
@@ -52,15 +52,15 @@ AI Core中的计算单元主要包括Scalar、Vector和Cube三类。
52 52 
53## 架构版本差异<a name="section_arch_version"></a>53## 架构版本差异<a name="section_arch_version"></a>
54 54 
55-**图3** 抽象硬件架构([NPU架构版本3510](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch))<a name="fig10951520438120"></a>55+**图3** 抽象硬件架构([NPU架构版本3510](../../language_extension/simd_builtin_keywords.md#npu-arch))<a name="fig10951520438120"></a>
56 56 
57<img src="../../../figures/npu_3510_2.png" alt="抽象硬件架构NPU架构版本3510" width="840px">57<img src="../../../figures/npu_3510_2.png" alt="抽象硬件架构NPU架构版本3510" width="840px">
58 58 
59与NPU架构版本2201相比,NPU架构版本3510的主要差异如下:59与NPU架构版本2201相比,NPU架构版本3510的主要差异如下:
60 60 
61-- 新增[Regbase矢量计算方式](基于指针的C语言编程/Reg矢量计算编程.md),支持直接使用寄存器参与计算。Membase和Regbase的差异见下表。61+- 新增[Regbase矢量计算方式](c_pointer_programming/reg_vector_computation.md),支持直接使用寄存器参与计算。Membase和Regbase的差异见下表。
62- 计算单元、存储单元和数据类型支持范围存在差异,具体请参考[存储单元变更](../../../cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md#section_2201_to_3510_storage_unit_changes)和[内置数据类型](../../../../api/SIMD-API/basic_api/data_structures/builtin_data_types.md)。62- 计算单元、存储单元和数据类型支持范围存在差异,具体请参考[存储单元变更](../../../cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md#section_2201_to_3510_storage_unit_changes)和[内置数据类型](../../../../api/SIMD-API/basic_api/data_structures/builtin_data_types.md)。
63-- 编程方式更加丰富,除SIMD编程外,还支持SIMT编程以及SIMD与SIMT混合编程。三种编程方式的选择指导请参见[AI Core编程模型](../编程模型概述.md#section_ai_core_programming_model)。63+- 编程方式更加丰富,除SIMD编程外,还支持SIMT编程以及SIMD与SIMT混合编程。三种编程方式的选择指导请参见[AI Core编程模型](../programming_model_overview.md#section_ai_core_programming_model)。
64 64 
65**表2** Membase和Regbase差异65**表2** Membase和Regbase差异
66 66 
@@ -70,5 +70,5 @@ AI Core中的计算单元主要包括Scalar、Vector和Cube三类。
70| Regbase | 寄存器(VF Reg) | 中间结果可暂存寄存器,减少UB读写 | NPU架构版本3510 |70| Regbase | 寄存器(VF Reg) | 中间结果可暂存寄存器,减少UB读写 | NPU架构版本3510 |
71 71 
72>[!NOTE]说明72>[!NOTE]说明
73->- 不同产品型号和NPU架构版本的对应关系请参考[__NPU_ARCH__](../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)。73+>- 不同产品型号和NPU架构版本的对应关系请参考[__NPU_ARCH__](../../language_extension/simd_builtin_keywords.md#npu-arch)。
74>- 详细架构变更请参考[2201到3510架构变更](../../../cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md)。74>- 详细架构变更请参考[2201到3510架构变更](../../../cross_gen_migration_guide/3510_arch_migration/2201_to_3510_arch_changes.md)。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/AI-Core-SIMD编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/ai_core_simd_programming.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/C语言编程概述.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/c_programming_overview.md+13-13
@@ -4,7 +4,7 @@ C语言编程是Ascend C SIMD编程路径的底层核心接口,可直接映射
4 4 
5## Kernel函数5## Kernel函数
6 6 
7-[核函数](../核函数.md)在前序章节已作介绍。Ascend C语言编程完全沿用SIMD编程的核函数定义与调用规范,未新增额外语法约束。核函数是运行在Device侧的执行入口,所有内存读写、数据搬运、计算逻辑均在核函数内部实现。下文将首先介绍C语言编程的内存层级,这也是核函数开发的基础。7+[核函数](../kernel_function.md)在前序章节已作介绍。Ascend C语言编程完全沿用SIMD编程的核函数定义与调用规范,未新增额外语法约束。核函数是运行在Device侧的执行入口,所有内存读写、数据搬运、计算逻辑均在核函数内部实现。下文将首先介绍C语言编程的内存层级,这也是核函数开发的基础。
8 8 
9## 内存层级9## 内存层级
10 10 
@@ -12,7 +12,7 @@ AI Core采用分级存储架构,不同计算单元的编程视角有所差异
12 12 
13**Cube矩阵计算**:采用「Global Memory → L1/L0系列Buffer」两级层级,其中L1 Buffer、L0A/L0B Buffer、L0C Buffer均服务于矩阵计算。13**Cube矩阵计算**:采用「Global Memory → L1/L0系列Buffer」两级层级,其中L1 Buffer、L0A/L0B Buffer、L0C Buffer均服务于矩阵计算。
14 14 
15-**Vector矢量计算**:传统架构采用「Global Memory → UB」两级层级;[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器后构建「Global Memory → Unified Buffer → Register」三级层级。Global Memory存放输入输出数据,Unified Buffer作为矢量计算数据中间缓存,Register位于Vector计算单元最内层,直接与矢量计算执行单元交互。15+**Vector矢量计算**:传统架构采用「Global Memory → UB」两级层级;[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入寄存器后构建「Global Memory → Unified Buffer → Register」三级层级。Global Memory存放输入输出数据,Unified Buffer作为矢量计算数据中间缓存,Register位于Vector计算单元最内层,直接与矢量计算执行单元交互。
16 16 
17<img src="../../../../figures/aicore_mem_2.png" alt="AI Core存储层次结构" width="800" />17<img src="../../../../figures/aicore_mem_2.png" alt="AI Core存储层次结构" width="800" />
18 18 
@@ -116,7 +116,7 @@ __global__ __vector__ void add_custom(...) {
116 116 
117#### AIV内部存储之Register File117#### AIV内部存储之Register File
118 118 
119-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器可编程能力,Vector计算单元的所有计算均需经「GM → UB → Register」三级数据流转,在寄存器上完成矢量计算。C语言编程通过直接定义寄存器变量方式进行寄存器编程。可参考[Reg矢量计算编程](./Reg矢量计算编程.md)中,有关寄存器类型等描述。119+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入寄存器可编程能力,Vector计算单元的所有计算均需经「GM → UB → Register」三级数据流转,在寄存器上完成矢量计算。C语言编程通过直接定义寄存器变量方式进行寄存器编程。可参考[Reg矢量计算编程](./reg_vector_computation.md)中,有关寄存器类型等描述。
120 120 
121 121 
122#### AIC内部存储L1 Buffer & L0 Buffer122#### AIC内部存储L1 Buffer & L0 Buffer
@@ -154,7 +154,7 @@ __cc__ half l0c_buffer[m_size * n_size]; // L0C Buffer, 64 bytes aligned
154 154 
155**表 1** 不同产品型号的分形格式对比155**表 1** 不同产品型号的分形格式对比
156 156 
157-| 存储单元 | [NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md) | [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md) |157+| 存储单元 | [NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md) | [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md) |
158|---------|----------------------------|---------------------------|158|---------|----------------------------|---------------------------|
159| L1 Buffer | Nz | Nz |159| L1 Buffer | Nz | Nz |
160| L0A Buffer | Zz | Nz |160| L0A Buffer | Zz | Nz |
@@ -167,7 +167,7 @@ __cc__ half l0c_buffer[m_size * n_size]; // L0C Buffer, 64 bytes aligned
167 167 
168#### Bank冲突168#### Bank冲突
169 169 
170-上文介绍了各类内部存储的定义、排布格式。由于AI Core内部存储采用Bank分组架构,不当的内存访问会引发Bank冲突,进而降低算子性能。下面以Unified Buffer为例,介绍Bank冲突的相关原理,在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品上,Unified Buffer总大小为256KB(256 × 1024字节),包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B,采用低位地址交织。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)的UB容量规格请参考相应硬件架构文档。170+上文介绍了各类内部存储的定义、排布格式。由于AI Core内部存储采用Bank分组架构,不当的内存访问会引发Bank冲突,进而降低算子性能。下面以Unified Buffer为例,介绍Bank冲突的相关原理,在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品上,Unified Buffer总大小为256KB(256 × 1024字节),包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B,采用低位地址交织。[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)的UB容量规格请参考相应硬件架构文档。
171 171 
172<img src="../../../../figures/ub_conflict.png" alt="UB Bank冲突示意图" width="800" />172<img src="../../../../figures/ub_conflict.png" alt="UB Bank冲突示意图" width="800" />
173 173 
@@ -225,8 +225,8 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证
225 225 
226| 同步类型 | 核心作用及场景说明 | 关键接口 | 实现代码示例 |226| 同步类型 | 核心作用及场景说明 | 关键接口 | 实现代码示例 |
227|---------|-------------------|---------|-------------|227|---------|-------------------|---------|-------------|
228-| 多流水同步(机制一) | 通过"锁定-释放"指定流水的方式,解决核内异步流水间的同步依赖问题;该机制功能类似于传统CPU的锁机制,是[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新引入的同步方式,相较于notify/wait更易使用。 | `asc_lock` & `asc_unlock` | `uint8_t mutex_id = 1;`<br>`asc_lock(PIPE_MTE2, mutex_id);`<br>`asc_copy_gm2ub((__ubuf__ void*)src0, ...);`<br>`asc_unlock(PIPE_MTE2, mutex_id);`<br>`asc_lock(PIPE_V, mutex_id);`<br>`asc_add(shared_buffer, x_local, y_local);`<br>`asc_unlock(PIPE_V, mutex_id);` |228+| 多流水同步(机制一) | 通过"锁定-释放"指定流水的方式,解决核内异步流水间的同步依赖问题;该机制功能类似于传统CPU的锁机制,是[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新引入的同步方式,相较于notify/wait更易使用。 | `asc_lock` & `asc_unlock` | `uint8_t mutex_id = 1;`<br>`asc_lock(PIPE_MTE2, mutex_id);`<br>`asc_copy_gm2ub((__ubuf__ void*)src0, ...);`<br>`asc_unlock(PIPE_MTE2, mutex_id);`<br>`asc_lock(PIPE_V, mutex_id);`<br>`asc_add(shared_buffer, x_local, y_local);`<br>`asc_unlock(PIPE_V, mutex_id);` |
229-| 多流水同步(机制二) | 通过notify与wait机制实现两条流水间的同步等待,用于核内异步流水的同步协调。[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入mutex机制后,仍保持对该接口的兼容支持,但优先推荐使用mutex机制进行多流水同步。 | `asc_sync_notify` & `asc_sync_wait` | `asc_copy_gm2ub((__ubuf__ void*)src0, ...);`<br>`asc_sync_notify(PIPE_MTE2, PIPE_V, EVENT_ID0);`<br>`asc_sync_wait(PIPE_MTE2, PIPE_V, EVENT_ID0);`<br>`asc_add(dst, src1, src0, total_length);` |229+| 多流水同步(机制二) | 通过notify与wait机制实现两条流水间的同步等待,用于核内异步流水的同步协调。[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入mutex机制后,仍保持对该接口的兼容支持,但优先推荐使用mutex机制进行多流水同步。 | `asc_sync_notify` & `asc_sync_wait` | `asc_copy_gm2ub((__ubuf__ void*)src0, ...);`<br>`asc_sync_notify(PIPE_MTE2, PIPE_V, EVENT_ID0);`<br>`asc_sync_wait(PIPE_MTE2, PIPE_V, EVENT_ID0);`<br>`asc_add(dst, src1, src0, total_length);` |
230| 单流水同步 | 等待同一流水内前序指令完成,用于同一流水内存在前后数据依赖。 | `asc_sync_pipe` & `asc_sync_mte2等` | `asc_add(dst, src1, src0, total_length);`<br>`asc_sync_pipe(PIPE_V);`<br>`asc_sub(dst, dst, src0, total_length);` |230| 单流水同步 | 等待同一流水内前序指令完成,用于同一流水内存在前后数据依赖。 | `asc_sync_pipe` & `asc_sync_mte2等` | `asc_add(dst, src1, src0, total_length);`<br>`asc_sync_pipe(PIPE_V);`<br>`asc_sub(dst, dst, src0, total_length);` |
231| 内存访问顺序控制 | 等待所有前序内存访问完成,用于存在数据依赖或内存依赖的场景。 | `asc_sync_data_barrier` | `asc_sync_data_barrier(mem_dsb_t::DSB_ALL);` |231| 内存访问顺序控制 | 等待所有前序内存访问完成,用于存在数据依赖或内存依赖的场景。 | `asc_sync_data_barrier` | `asc_sync_data_barrier(mem_dsb_t::DSB_ALL);` |
232 232 
@@ -286,7 +286,7 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证
286 <code>if ASCEND_IS_AIC {</code><br>286 <code>if ASCEND_IS_AIC {</code><br>
287 <code> // Atlas A3 training/inference products: AIC sends one arrive, two AIVs wait simultaneously</code><br>287 <code> // Atlas A3 training/inference products: AIC sends one arrive, two AIVs wait simultaneously</code><br>
288 <code> asc_sync_intra_arrive(PIPE_FIX, 0);</code><br>288 <code> asc_sync_intra_arrive(PIPE_FIX, 0);</code><br>
289- <code> // [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md) products: AIC sends two arrives, two AIVs wait separately</code><br>289+ <code> // [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md) products: AIC sends two arrives, two AIVs wait separately</code><br>
290 <code> asc_sync_intra_arrive(PIPE_FIX, 0);</code><br>290 <code> asc_sync_intra_arrive(PIPE_FIX, 0);</code><br>
291 <code> asc_sync_intra_arrive(PIPE_FIX, 16);</code><br>291 <code> asc_sync_intra_arrive(PIPE_FIX, 16);</code><br>
292 <code>}</code><br>292 <code>}</code><br>
@@ -318,9 +318,9 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证
318 318 
319Vector矢量计算主要包含基础算术、归约计算、数据类型转换等矢量计算。319Vector矢量计算主要包含基础算术、归约计算、数据类型转换等矢量计算。
320 320 
321-在[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)上,Vector矢量计算的数据来自于Unified Buffer(要求32B对齐),C语言编程在Vector计算单元上提供了通过UB指针直接操作计算的接口能力。此类直接操作UB的编程方式称为Memory矢量计算编程。321+在[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)上,Vector矢量计算的数据来自于Unified Buffer(要求32B对齐),C语言编程在Vector计算单元上提供了通过UB指针直接操作计算的接口能力。此类直接操作UB的编程方式称为Memory矢量计算编程。
322 322 
323-以Add计算为例,当开发者需要计算4096长度的向量加法,可以通过`asc_add(dst, src0, src1, count)`的接口直接进行计算。更多内容可参考[Memory矢量计算编程](./Memory矢量计算编程.md)中有关Memory矢量计算编程的描述。323+以Add计算为例,当开发者需要计算4096长度的向量加法,可以通过`asc_add(dst, src0, src1, count)`的接口直接进行计算。更多内容可参考[Memory矢量计算编程](./memory_vector_computation.md)中有关Memory矢量计算编程的描述。
324 324 
325```c325```c
326// Define Vector operator, marked with __vector__ to execute on Device Vector core, suitable for operators with only Vector computation326// Define Vector operator, marked with __vector__ to execute on Device Vector core, suitable for operators with only Vector computation
@@ -338,11 +338,11 @@ __global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ f
338 338 
339```339```
340 340 
341-以上为传统架构的矢量计算编程方式;[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新增寄存器能力,编程模式有所变化:在传统UB缓存体系的基础上,开放寄存器(Register)可编程能力,构建出「Global Memory → UB → Register」的三级内存层级。新一代架构下的矢量计算都需要从Unified Buffer加载到Register寄存器后,再利用Register寄存器进行计算操作。可参考[Reg矢量计算编程](./Reg矢量计算编程.md)中有关Reg矢量计算编程的描述。341+以上为传统架构的矢量计算编程方式;[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新增寄存器能力,编程模式有所变化:在传统UB缓存体系的基础上,开放寄存器(Register)可编程能力,构建出「Global Memory → UB → Register」的三级内存层级。新一代架构下的矢量计算都需要从Unified Buffer加载到Register寄存器后,再利用Register寄存器进行计算操作。可参考[Reg矢量计算编程](./reg_vector_computation.md)中有关Reg矢量计算编程的描述。
342 342 
343### Cube矩阵计算343### Cube矩阵计算
344 344 
345-除矢量计算外,Cube单元专门实现矩阵运算,对应矩阵类算子的开发,Cube矩阵计算主要涵盖矩阵乘计算与卷积计算,其数据主要来源于L1 Buffer与L0A/B Buffer。L1 Buffer用于矩阵计算数据缓存,L0A Buffer用于存储左矩阵,L0B Buffer用于存储右矩阵,L0C Buffer用于存储初始累加值及矩阵计算结果。此类基于Cube计算单元直接操作L1/L0A/L0B/L0C Buffer的编程范式称为[Cube矩阵计算编程](./Cube矩阵计算编程.md)。345+除矢量计算外,Cube单元专门实现矩阵运算,对应矩阵类算子的开发,Cube矩阵计算主要涵盖矩阵乘计算与卷积计算,其数据主要来源于L1 Buffer与L0A/B Buffer。L1 Buffer用于矩阵计算数据缓存,L0A Buffer用于存储左矩阵,L0B Buffer用于存储右矩阵,L0C Buffer用于存储初始累加值及矩阵计算结果。此类基于Cube计算单元直接操作L1/L0A/L0B/L0C Buffer的编程范式称为[Cube矩阵计算编程](./cube_matrix_computation.md)。
346 346 
347以Matmul矩阵乘计算为例,开发者通过操作Cube矩阵计算能力可以完成如下图所示的`c = a * b + bias`的能力。347以Matmul矩阵乘计算为例,开发者通过操作Cube矩阵计算能力可以完成如下图所示的`c = a * b + bias`的能力。
348- A、B为源操作数,A为左矩阵,形状为[M, K];B为右矩阵,形状为[K, N]。348- A、B为源操作数,A为左矩阵,形状为[M, K];B为右矩阵,形状为[K, N]。
@@ -399,4 +399,4 @@ __global__ __mix__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ floa
399 399 
400## 总结400## 总结
401 401 
402-本章从技术定位出发,依次讲解了C语言编程的核函数规范、内存层级、内外核同步机制以及三类算子开发范式。作为底层硬件编程接口,该路径可充分挖掘NPU算力。如需深入实践,可参考以下专项文档:[Memory矢量计算编程](./Memory矢量计算编程.md)、[Cube矩阵计算编程](./Cube矩阵计算编程.md)和[Reg矢量计算编程](./Reg矢量计算编程.md)。402+本章从技术定位出发,依次讲解了C语言编程的核函数规范、内存层级、内外核同步机制以及三类算子开发范式。作为底层硬件编程接口,该路径可充分挖掘NPU算力。如需深入实践,可参考以下专项文档:[Memory矢量计算编程](./memory_vector_computation.md)、[Cube矩阵计算编程](./cube_matrix_computation.md)和[Reg矢量计算编程](./reg_vector_computation.md)。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Cube矩阵计算编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/cube_matrix_computation.md+21-21
@@ -40,7 +40,7 @@ Cube矩阵计算整体分为数据搬入、数据加载、矩阵计算、数据
40 40 
41Cube单元采用分块计算逻辑,硬件最小计算粒度为分形块,可并行处理多个分形。分形块大小取决于数据类型:对于half类型,分形形状为16×16(32B/sizeof(half)=16);对于int8类型,分形形状为16×32或32×16(32B/sizeof(int8)=32)。传统行主序、列主序等线性存储模式下,读取分形块时会产生大量非连续内存访问,大幅降低访存效率。41Cube单元采用分块计算逻辑,硬件最小计算粒度为分形块,可并行处理多个分形。分形块大小取决于数据类型:对于half类型,分形形状为16×16(32B/sizeof(half)=16);对于int8类型,分形形状为16×32或32×16(32B/sizeof(int8)=32)。传统行主序、列主序等线性存储模式下,读取分形块时会产生大量非连续内存访问,大幅降低访存效率。
42为解决该问题,昇腾引入矩阵分形存储格式。软件层会对数据重新排布,让每个分形块在物理内存中连续存储,硬件单次读取即可加载整块数据,消除零散寻址带来的开销,有效提升数据吞吐能力。42为解决该问题,昇腾引入矩阵分形存储格式。软件层会对数据重新排布,让每个分形块在物理内存中连续存储,硬件单次读取即可加载整块数据,消除零散寻址带来的开销,有效提升数据吞吐能力。
43-分形粒度是Cube单元的基础计算规范,[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)、[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)全系列产品均遵循该规范,但具体分形形状因数据类型而异。昇腾Cube单元为极致发挥算力,采用不同于通用CPU的存储规则,输入、输出数据都需要匹配指定分形格式。使用Ascend C的Mmad接口开发算子时,掌握各类分形格式,是保证数据搬运、分块逻辑正确以及性能优化的关键。43+分形粒度是Cube单元的基础计算规范,[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)、[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)全系列产品均遵循该规范,但具体分形形状因数据类型而异。昇腾Cube单元为极致发挥算力,采用不同于通用CPU的存储规则,输入、输出数据都需要匹配指定分形格式。使用Ascend C的Mmad接口开发算子时,掌握各类分形格式,是保证数据搬运、分块逻辑正确以及性能优化的关键。
44 44 
45为便于理解与记忆,文档采用“大Y小x”的直观命名法:45为便于理解与记忆,文档采用“大Y小x”的直观命名法:
46- 大Y(Z/N):表示分形矩阵之间的排列顺序(Z为行主序,N为列主序)。46- 大Y(Z/N):表示分形矩阵之间的排列顺序(Z为行主序,N为列主序)。
@@ -50,11 +50,11 @@ Cube单元采用分块计算逻辑,硬件最小计算粒度为分形块,可
50 50 
51矩阵分形格式用于定义多维张量在内存中的排布规则。受硬件读取逻辑影响,不同产品型号对矩阵乘法 C = A × B 的格式要求存在差异:51矩阵分形格式用于定义多维张量在内存中的排布规则。受硬件读取逻辑影响,不同产品型号对矩阵乘法 C = A × B 的格式要求存在差异:
52 52 
53-- 针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Zz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式。如图1所示:53+- 针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),矩阵乘法C = A × B要求:左矩阵A使用Zz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式。如图1所示:
54 54 
55<img src="../../../../figures/matmul_data_2.png" alt="矩阵乘法场景设计的数据格式" width="800" />55<img src="../../../../figures/matmul_data_2.png" alt="矩阵乘法场景设计的数据格式" width="800" />
56 56 
57-- 针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Nz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如图2所示:57+- 针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),矩阵乘法C = A × B要求:左矩阵A使用Nz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如图2所示:
58 58 
59<img src="../../../../figures/matmul_data_1.png" alt="矩阵乘法场景涉及的数据格式" width="800" />59<img src="../../../../figures/matmul_data_1.png" alt="矩阵乘法场景涉及的数据格式" width="800" />
60 60 
@@ -63,7 +63,7 @@ Cube单元采用分块计算逻辑,硬件最小计算粒度为分形块,可
63ND格式是通用的N维张量格式,数据在内存中连续线性存放,通常存在于`Global Memory (GM)`中。在进行矩阵运算前,通常需要将其转换为Nz格式以适配Cube计算单元。63ND格式是通用的N维张量格式,数据在内存中连续线性存放,通常存在于`Global Memory (GM)`中。在进行矩阵运算前,通常需要将其转换为Nz格式以适配Cube计算单元。
64 64 
65#### Nz 格式65#### Nz 格式
66-Nz格式主要用于L1 Buffer和L0C Buffer中存放数据。针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer也采用Nz分形格式。该格式采用大N(外部列主序)+ 小z(内部行主序)的方式排布。66+Nz格式主要用于L1 Buffer和L0C Buffer中存放数据。针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),L0A Buffer也采用Nz分形格式。该格式采用大N(外部列主序)+ 小z(内部行主序)的方式排布。
67 67 
68<img src="../../../../figures/nz_format.png" alt="Nz数据排布格式" width="400" />68<img src="../../../../figures/nz_format.png" alt="Nz数据排布格式" width="400" />
69 69 
@@ -73,11 +73,11 @@ Nz是Ascend架构的中间格式,介于线性数据(ND)和计算专用数据(Z
73> 📌 Nz格式在不同Buffer中的应用场景:73> 📌 Nz格式在不同Buffer中的应用场景:
74> - **L0C Buffer**: 存储矩阵乘法结果。分形形状取决于数据类型:half为16×16(256元素),int8为16×32或32×16。适合Cube计算单元高效运算。74> - **L0C Buffer**: 存储矩阵乘法结果。分形形状取决于数据类型:half为16×16(256元素),int8为16×32或32×16。适合Cube计算单元高效运算。
75> - **L1 Buffer**: 存储中间数据。分形形状为16×(32B/sizeof(DataType)),便于转换为Zz和Zn格式。对于half类型,大小为16×16=256元素(512字节);对于int8类型,大小为16×32或32×16=512元素(512字节)。75> - **L1 Buffer**: 存储中间数据。分形形状为16×(32B/sizeof(DataType)),便于转换为Zz和Zn格式。对于half类型,大小为16×16=256元素(512字节);对于int8类型,大小为16×32或32×16=512元素(512字节)。
76-> - **L0A Buffer(仅[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md))**: 存储左矩阵。76+> - **L0A Buffer(仅[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md))**: 存储左矩阵。
77 77 
78#### Zz 格式78#### Zz 格式
79 79 
80-针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer使用此格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)使用Nz格式)。该格式采用大Z(外部行主序)+ 小z(内部行主序)。80+针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),L0A Buffer使用此格式([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)使用Nz格式)。该格式采用大Z(外部行主序)+ 小z(内部行主序)。
81 81 
82<img src="../../../../figures/zz_half.png" alt="Zz 格式(以half类型为例)" width="400" />82<img src="../../../../figures/zz_half.png" alt="Zz 格式(以half类型为例)" width="400" />
83 83 
@@ -113,7 +113,7 @@ Global Memory中的原始数据为ND通用线性格式,而L1 Buffer要求使
113 Z字流动:每个16×16的小方块内部,以及方块之间,均按照特定的Z字形顺序存储(如图中折线箭头所示),完成了从“线性”到“分形”的物理映射,做好了进入Cube计算的准备。113 Z字流动:每个16×16的小方块内部,以及方块之间,均按照特定的Z字形顺序存储(如图中折线箭头所示),完成了从“线性”到“分形”的物理映射,做好了进入Cube计算的准备。
114 114 
115Ascend C编程中直接提供了`Global Memory``L1 Buffer`中的C语言编程接口,通过该接口可以直接将`Global Memory`数据搬入`L1 Buffer`并完成ND2NZ格式转换。115Ascend C编程中直接提供了`Global Memory``L1 Buffer`中的C语言编程接口,通过该接口可以直接将`Global Memory`数据搬入`L1 Buffer`并完成ND2NZ格式转换。
116-C语言编程提供了`asc_set_gm2l1_nz_para`和`asc_copy_gm2l1_nd2nz`接口来完成GM2L1的搬运,并随路完成ND2NZ的格式转换处理。另外在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)上,新增了`asc_copy_gm2l1_dn2nz`的能力,支持从DN到Nz的格式转换搬运。116+C语言编程提供了`asc_set_gm2l1_nz_para`和`asc_copy_gm2l1_nd2nz`接口来完成GM2L1的搬运,并随路完成ND2NZ的格式转换处理。另外在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)上,新增了`asc_copy_gm2l1_dn2nz`的能力,支持从DN到Nz的格式转换搬运。
117 117 
118## 矩阵搬运能力说明118## 矩阵搬运能力说明
119 119 
@@ -127,10 +127,10 @@ C语言编程提供了`asc_set_gm2l1_nz_para`和`asc_copy_gm2l1_nd2nz`接口来
127| 数据通路 | 功能 | C语言编程接口 | 分行支持情况 |127| 数据通路 | 功能 | C语言编程接口 | 分行支持情况 |
128|---------|---------|---------------|-------------|128|---------|---------|---------------|-------------|
129| Global Memory → L1 Buffer | 随路转换ND2NZ搬运 | `asc_copy_gm2l1_nd2nz` | ![ND->Nz](../../../../figures/ND_Nz.png) |129| Global Memory → L1 Buffer | 随路转换ND2NZ搬运 | `asc_copy_gm2l1_nd2nz` | ![ND->Nz](../../../../figures/ND_Nz.png) |
130-| L1 Buffer → L0A Buffer | 将L1 Buffer数据搬运到L0A Buffer中 | `asc_copy_l12l0a` | ![Nz->Zz](../../../../figures/Nz_Zz.png)<br>[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)上L0A分形为Nz,搬运时为Nz-Nz |130+| L1 Buffer → L0A Buffer | 将L1 Buffer数据搬运到L0A Buffer中 | `asc_copy_l12l0a` | ![Nz->Zz](../../../../figures/Nz_Zz.png)<br>[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)上L0A分形为Nz,搬运时为Nz-Nz |
131| L1 Buffer → L0A Buffer | 将L1 Buffer数据搬运到L0B Buffer中 | `asc_copy_l12l0b` | ![Nz->Zn](../../../../figures/Nz_Zn.png)|131| L1 Buffer → L0A Buffer | 将L1 Buffer数据搬运到L0B Buffer中 | `asc_copy_l12l0b` | ![Nz->Zn](../../../../figures/Nz_Zn.png)|
132 132 
133-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)133+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)
134 134 
135#### GM2L1 随路转换ND2NZ搬运135#### GM2L1 随路转换ND2NZ搬运
136 136 
@@ -138,7 +138,7 @@ C语言编程提供了`asc_set_gm2l1_nz_para`和`asc_copy_gm2l1_nd2nz`接口来
138 138 
139<img src="../../../../figures/gm_l1_nd2nz.png" alt="GM到L1的ND2NZ搬运示例" width="700" />139<img src="../../../../figures/gm_l1_nd2nz.png" alt="GM到L1的ND2NZ搬运示例" width="700" />
140 140 
141-以上图为例,实现A矩阵(Shape(16, 23),数据类型为half)从GM搬运到L1的能力,针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),调用接口如下:141+以上图为例,实现A矩阵(Shape(16, 23),数据类型为half)从GM搬运到L1的能力,针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),调用接口如下:
142 142 
143```c143```c
144// Allocate L1 Buffer space, m direction is 16, k direction 23 aligned up to 32144// Allocate L1 Buffer space, m direction is 16, k direction 23 aligned up to 32
@@ -173,7 +173,7 @@ asc_copy_gm2l1_nd2nz(dst, src, src_d_value, l2_cache_ctrl, n_value, d_value, src
173 173 
174#### L12L0 数据搬运174#### L12L0 数据搬运
175 175 
176-该能力主要实现将矩阵从L1 Buffer搬运至L0A/L0B Buffer并支持从Nz分型转换到Zz或Zn格式,C语言编程提供了`asc_copy_l12l0a`和`asc_copy_l12l0b`接口。其中针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)的`asc_copy_l12l0a`接口可将L1 Buffer中512B大小的矩阵搬运到L0A Buffer,支持2D搬运、转置搬运、3D搬运等模式。176+该能力主要实现将矩阵从L1 Buffer搬运至L0A/L0B Buffer并支持从Nz分型转换到Zz或Zn格式,C语言编程提供了`asc_copy_l12l0a`和`asc_copy_l12l0b`接口。其中针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)的`asc_copy_l12l0a`接口可将L1 Buffer中512B大小的矩阵搬运到L0A Buffer,支持2D搬运、转置搬运、3D搬运等模式。
177 177 
178<img src="../../../../figures/l1_l0a_copy.png" alt="L12L0A非转置搬运" width="700" />178<img src="../../../../figures/l1_l0a_copy.png" alt="L12L0A非转置搬运" width="700" />
179 179 
@@ -197,7 +197,7 @@ asc_copy_l12l0a(l0a_buffer, l1_buffer, m_start_position, k_start_position, m_ste
197 197 
198搬运到`L0B Buffer`采用`asc_copy_l12l0b`实现,接口参数及实现功能同L12L0A,可参考[cube_data_move](../../../../../api/SIMD-API/c_api/cube_data_move/cube_data_move.md)查看更多内容。198搬运到`L0B Buffer`采用`asc_copy_l12l0b`实现,接口参数及实现功能同L12L0A,可参考[cube_data_move](../../../../../api/SIMD-API/c_api/cube_data_move/cube_data_move.md)查看更多内容。
199 199 
200-当输入A矩阵(Global Memory)是转置排布(K × M)时,搬入到`L1 Buffer`为(K × N)排布的Nz分形。要使`L0A Buffer`存放(M × K)的Zz或Nz格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)),需要在L12L0A时进行转置,调用`asc_copy_l12l0a_transpose`接口。200+当输入A矩阵(Global Memory)是转置排布(K × M)时,搬入到`L1 Buffer`为(K × N)排布的Nz分形。要使`L0A Buffer`存放(M × K)的Zz或Nz格式([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)),需要在L12L0A时进行转置,调用`asc_copy_l12l0a_transpose`接口。
201 201 
202<img src="../../../../figures/need_transpose.png" alt="需要转置的处理场景" width="800" />202<img src="../../../../figures/need_transpose.png" alt="需要转置的处理场景" width="800" />
203 203 
@@ -208,23 +208,23 @@ asc_copy_l12l0a_transpose(l0a_buffer, l1_buffer, m_start_position, k_start_posit
208 208 
209### 矩阵数据搬出209### 矩阵数据搬出
210 210 
211-矩阵搬出接口实现L0C到Global Memory或L1 Buffer的数据传输,支持随路量化、ReLU、格式转换(NZ2ND)、通道拆分合并等操作,开发者通过配置参数控制搬运路径、位置、长度等以充分利用硬件能力,通常在Mmad接口后使用。而针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)还支持L0C到UB Buffer的传输、NZ2DN格式转换以及UB双目标模式,矩阵搬出能力如下图所示:211+矩阵搬出接口实现L0C到Global Memory或L1 Buffer的数据传输,支持随路量化、ReLU、格式转换(NZ2ND)、通道拆分合并等操作,开发者通过配置参数控制搬运路径、位置、长度等以充分利用硬件能力,通常在Mmad接口后使用。而针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)还支持L0C到UB Buffer的传输、NZ2DN格式转换以及UB双目标模式,矩阵搬出能力如下图所示:
212 212 
213-针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md):213+针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md):
214 214 
215<img src="../../../../figures/mat_copy_out_a2a3.png" alt="矩阵搬出流程" width="800" />215<img src="../../../../figures/mat_copy_out_a2a3.png" alt="矩阵搬出流程" width="800" />
216 216 
217-针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md):217+针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md):
218 218 
219<img src="../../../../figures/mat_copy_out_950.png" alt="矩阵搬出流程" width="800" />219<img src="../../../../figures/mat_copy_out_950.png" alt="矩阵搬出流程" width="800" />
220 220 
221-矩阵搬出接口支持多种随路能力的灵活组合,以L0C到Global Memory的搬运场景为例:矩阵计算结果暂存于L0C Buffer后需搬运至GM,在此过程中可协同执行随路量化、ReLU激活、格式转换及通道拆分合并等操作。下图展示了这些随路能力的有效组合、中间数据类型及完整数据路径。例如,L0C中的F32数据可通过QF322B8_PRE随路量化得到B8数据,可选使能ReLU后经NZ2NZ/NZ2ND格式转换输出至GM。图中F32→F16和F32→BF16为数据类型转换,其余路径为随路scalar/vector量化模式;针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),还额外支持NZ2DN格式转换。221+矩阵搬出接口支持多种随路能力的灵活组合,以L0C到Global Memory的搬运场景为例:矩阵计算结果暂存于L0C Buffer后需搬运至GM,在此过程中可协同执行随路量化、ReLU激活、格式转换及通道拆分合并等操作。下图展示了这些随路能力的有效组合、中间数据类型及完整数据路径。例如,L0C中的F32数据可通过QF322B8_PRE随路量化得到B8数据,可选使能ReLU后经NZ2NZ/NZ2ND格式转换输出至GM。图中F32→F16和F32→BF16为数据类型转换,其余路径为随路scalar/vector量化模式;针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),还额外支持NZ2DN格式转换。
222 222 
223-针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md):223+针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md):
224 224 
225<img src="../../../../figures/l0c_gm_a2a3.png" alt="L0C2GM搬运" width="800" />225<img src="../../../../figures/l0c_gm_a2a3.png" alt="L0C2GM搬运" width="800" />
226 226 
227-针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md):227+针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md):
228 228 
229<img src="../../../../figures/l0c_gm_950.png" alt="L0C2GM搬运" width="800" />229<img src="../../../../figures/l0c_gm_950.png" alt="L0C2GM搬运" width="800" />
230 230 
@@ -258,9 +258,9 @@ __aicore__ inline void asc_set_l0c2gm_lrelu_alpha(half& config);
258 258 
259`asc_mmad`是Ascend C封装NPU硬件能力的核心矩阵乘加接口,广泛应用于全连接、卷积等算子,实现C = A × B + C运算。计算输入取自L0A Buffer、L0B Buffer,结果写入L0C Buffer。不同产品对应的缓存分形格式前文已说明。259`asc_mmad`是Ascend C封装NPU硬件能力的核心矩阵乘加接口,广泛应用于全连接、卷积等算子,实现C = A × B + C运算。计算输入取自L0A Buffer、L0B Buffer,结果写入L0C Buffer。不同产品对应的缓存分形格式前文已说明。
260 260 
261-![[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md) `asc_mmad`计算](../../../../figures/mmad_950.png)261+![[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md) `asc_mmad`计算](../../../../figures/mmad_950.png)
262 262 
263-表 矩阵计算矩阵A、B、C解释说明([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md))263+表 矩阵计算矩阵A、B、C解释说明([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md))
264| 矩阵计算逻辑 | 矩阵计算物理位置 | 维度 | 输入/输出数据格式 | 数据类型 |264| 矩阵计算逻辑 | 矩阵计算物理位置 | 维度 | 输入/输出数据格式 | 数据类型 |
265|-------------|-----------------|------|------------------|---------|265|-------------|-----------------|------|------------------|---------|
266| A | L0A Buffer | M × K | Nz | 数据类型 |266| A | L0A Buffer | M × K | Nz | 数据类型 |
@@ -303,7 +303,7 @@ asc_mmad(c_matrix, a_matrix, b_matrix, m, n, k, unit_flag, disable_gemv, enable_
303## 矩阵计算的同步303## 矩阵计算的同步
304 304 
305AI Core内部的搬运、计算单元均为异步并行工作,多个单元访问同一片存储资源时会产生数据依赖。因此Cube计算必须借助流水同步接口管控执行时序。305AI Core内部的搬运、计算单元均为异步并行工作,多个单元访问同一片存储资源时会产生数据依赖。因此Cube计算必须借助流水同步接口管控执行时序。
306-矩阵计算的四个阶段分别对应PIPE_MTE2、PIPE_MTE1、PIPE_M、PIPE_MTE3四条流水线,需要使用核内同步接口保证流程串行执行。在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品中,可使用`asc_lock`与`asc_unlock`接口实现全流程同步控制。306+矩阵计算的四个阶段分别对应PIPE_MTE2、PIPE_MTE1、PIPE_M、PIPE_MTE3四条流水线,需要使用核内同步接口保证流程串行执行。在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品中,可使用`asc_lock`与`asc_unlock`接口实现全流程同步控制。
307 307 
308```c308```c
309__global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ float* z)309__global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ float* z)
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Memory矢量计算编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/memory_vector_computation.md+5-5
@@ -1,6 +1,6 @@
1# Memory矢量计算编程<a name="ZH-CN_TOPIC_0000002600000002"></a>1# Memory矢量计算编程<a name="ZH-CN_TOPIC_0000002600000002"></a>
2 2 
3-本文介绍基于统一缓存(Unified Buffer,下文简称UB)的Ascend C矢量计算开发方法,该计算能力简称Memory矢量计算编程,是Ascend C中最基础、应用最广泛的矢量编程方式。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)原生支持完整的UB直接编程能力;[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器计算能力,推荐使用Reg矢量计算编程以获得更高性能。3+本文介绍基于统一缓存(Unified Buffer,下文简称UB)的Ascend C矢量计算开发方法,该计算能力简称Memory矢量计算编程,是Ascend C中最基础、应用最广泛的矢量编程方式。[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)原生支持完整的UB直接编程能力;[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入寄存器计算能力,推荐使用Reg矢量计算编程以获得更高性能。
4 4 
5## Memory矢量编程的基本步骤5## Memory矢量编程的基本步骤
6 6 
@@ -120,7 +120,7 @@ uint16_t dst_stride = 2;
120asc_copy_gm2ub(dst_ub, src_gm, burst_count, burst_len, src_stride, dst_stride);120asc_copy_gm2ub(dst_ub, src_gm, burst_count, burst_len, src_stride, dst_stride);
121```121```
122 122 
123-> 📌 stride(前一块数据头到后一块数据头的间隔)为该接口从[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入,[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)使用gap(前一个数据块结束地址与后一个数据块起始地址的差值)。123+> 📌 stride(前一块数据头到后一块数据头的间隔)为该接口从[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入,[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)使用gap(前一个数据块结束地址与后一个数据块起始地址的差值)。
124 124 
125**非对齐搬运**: 基础高维切分接口要求GM的数据长度与地址间隔均按32字节对齐,无法适配非对齐场景。例如将数据改为形状(16, 200)、类型为half的src_gm后,asc_copy_gm2ub无法实现隔行搬运。针对该场景,Ascend C提供`asc_copy_gm2ub_align`非对齐搬运接口,支持以字节为单位配置数据块长度与地址步长,突破32字节对齐限制。125**非对齐搬运**: 基础高维切分接口要求GM的数据长度与地址间隔均按32字节对齐,无法适配非对齐场景。例如将数据改为形状(16, 200)、类型为half的src_gm后,asc_copy_gm2ub无法实现隔行搬运。针对该场景,Ascend C提供`asc_copy_gm2ub_align`非对齐搬运接口,支持以字节为单位配置数据块长度与地址步长,突破32字节对齐限制。
126 126 
@@ -144,7 +144,7 @@ uint8_t right_padding_num = 3;
144 144 
145asc_copy_gm2ub_align(dst, src, burst_count, burst_len, left_padding_num, right_padding_num, false, asc_load_l2_cache_mode::NORMAL_FIRST_VICTIM, src_stride, dst_stride);145asc_copy_gm2ub_align(dst, src, burst_count, burst_len, left_padding_num, right_padding_num, false, asc_load_l2_cache_mode::NORMAL_FIRST_VICTIM, src_stride, dst_stride);
146```146```
147-> 📌 stride(前一块数据头到后一块数据头的间隔)为该接口从[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入,[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)使用gap(前一个数据块结束地址与后一个数据块起始地址的差值)。147+> 📌 stride(前一块数据头到后一块数据头的间隔)为该接口从[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入,[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)使用gap(前一个数据块结束地址与后一个数据块起始地址的差值)。
148 148 
149以上为GM向UB的数据搬入逻辑,UB向GM的数据搬出可使用同系列接口实现。更多搬运接口说明可参考[API手册](../../../../../api/SIMD-API/c_api/vector_data_move/vector_data_move.md)。149以上为GM向UB的数据搬入逻辑,UB向GM的数据搬出可使用同系列接口实现。更多搬运接口说明可参考[API手册](../../../../../api/SIMD-API/c_api/vector_data_move/vector_data_move.md)。
150 150 
@@ -167,7 +167,7 @@ Memory矢量计算包含连续计算和高维切分计算两种模式,同时
167 167 
168若设置repeat_time(迭代次数)为2,单元将执行两轮迭代,总处理数据量为2 × 8 × 32字节 = 512字节;若数据类型为half(2字节 / 元素),则对应处理256个元素。168若设置repeat_time(迭代次数)为2,单元将执行两轮迭代,总处理数据量为2 × 8 × 32字节 = 512字节;若数据类型为half(2字节 / 元素),则对应处理256个元素。
169 169 
170-> 📌 硬件约束:repeat_time取值范围为1~255,该约束对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)、[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)全系列产品生效。170+> 📌 硬件约束:repeat_time取值范围为1~255,该约束对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)、[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)全系列产品生效。
171 171 
172<img src="../../../../figures/iter2_exp_c.png" alt="2次迭代Exp计算" width="800" />172<img src="../../../../figures/iter2_exp_c.png" alt="2次迭代Exp计算" width="800" />
173 173 
@@ -300,7 +300,7 @@ asc_add(z, x, y, 4096); // 4096: number of consecutive elements involved in addi
300 300 
301## Memory矢量计算同步控制301## Memory矢量计算同步控制
302 302 
303-AI Core内部的MTE2搬运单元、矢量计算单元等均为异步并行运行,多个单元读写同一块存储资源时会产生数据依赖。因此Memory矢量计算必须借助流水同步接口,保障流程正常执行。Memory矢量计算流程比矩阵计算更简洁,分为数据搬入、计算、数据搬出三个阶段,分别对应流水线PIPE_MTE2、PIPE_V、PIPE_MTE3,需通过核内同步接口约束执行顺序,保证流程串行执行。在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品中,可使用`asc_lock`与`asc_unlock`接口实现三阶段的同步控制。以下为矢量加法的完整示例:303+AI Core内部的MTE2搬运单元、矢量计算单元等均为异步并行运行,多个单元读写同一块存储资源时会产生数据依赖。因此Memory矢量计算必须借助流水同步接口,保障流程正常执行。Memory矢量计算流程比矩阵计算更简洁,分为数据搬入、计算、数据搬出三个阶段,分别对应流水线PIPE_MTE2、PIPE_V、PIPE_MTE3,需通过核内同步接口约束执行顺序,保证流程串行执行。在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品中,可使用`asc_lock`与`asc_unlock`接口实现三阶段的同步控制。以下为矢量加法的完整示例:
304 304 
305```c305```c
306__global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ float* z)306__global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ float* z)
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程/Reg矢量计算编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming/reg_vector_computation.md+9-9
@@ -1,8 +1,8 @@
1# Reg矢量计算编程<a name="ZH-CN_TOPIC_0000002600000001"></a>1# Reg矢量计算编程<a name="ZH-CN_TOPIC_0000002600000001"></a>
2 2 
3-> 📌 **提示**:Reg矢量编程仅在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)进行SIMD矢量计算编程时支持。3+> 📌 **提示**:Reg矢量编程仅在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)进行SIMD矢量计算编程时支持。
4 4 
5-本文介绍如何在Ascend C中使用语言扩展C API进行寄存器级**矢量计算编程**,该能力面向已经熟悉[Ascend C编程模型](../../编程模型概述.md)的开发者。这种基于硬件寄存器的编程方式称为Reg矢量计算编程。5+本文介绍如何在Ascend C中使用语言扩展C API进行寄存器级**矢量计算编程**,该能力面向已经熟悉[Ascend C编程模型](../../programming_model_overview.md)的开发者。这种基于硬件寄存器的编程方式称为Reg矢量计算编程。
6 6 
7## 为什么需要Reg矢量编程<a name="section_part1"></a>7## 为什么需要Reg矢量编程<a name="section_part1"></a>
8 8 
@@ -20,7 +20,7 @@
20 20 
21### Reg矢量计算的定位21### Reg矢量计算的定位
22 22 
23-为了突破上述Memory矢量编程瓶颈限制,[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)在硬件中新增了一级缓存**SIMD Register File**(以下简称寄存器)这一级存储;Reg矢量编程正是面向这一级寄存器的编程方式。其核心思想是:将一段连续的矢量计算保留在寄存器中完成,仅在进入和退出这段计算时与UB交互一次,中间结果可不再回写UB。23+为了突破上述Memory矢量编程瓶颈限制,[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)在硬件中新增了一级缓存**SIMD Register File**(以下简称寄存器)这一级存储;Reg矢量编程正是面向这一级寄存器的编程方式。其核心思想是:将一段连续的矢量计算保留在寄存器中完成,仅在进入和退出这段计算时与UB交互一次,中间结果可不再回写UB。
24 24 
25Reg矢量计算与Memory矢量计算的对比如下:25Reg矢量计算与Memory矢量计算的对比如下:
26 26 
@@ -101,7 +101,7 @@ Reg矢量计算编程模型中`Load` -> `Compute` ->`Store`的执行过程,
101| `__simd_vf__` | VF函数 | `__aicore__`函数通过`asc_vf_call`调用 | `__simd_callee__`修饰的Reg矢量API或者VF内部子函数 |101| `__simd_vf__` | VF函数 | `__aicore__`函数通过`asc_vf_call`调用 | `__simd_callee__`修饰的Reg矢量API或者VF内部子函数 |
102| `__simd_callee__` | VF内部子函数 | `__simd_vf__`或其他`__simd_callee__` | `__simd_callee__` |102| `__simd_callee__` | VF内部子函数 | `__simd_vf__`或其他`__simd_callee__` | `__simd_callee__` |
103 103 
104-> 📌 **提示**:在[硬件原理](#section_part2)章节中提到Vector计算单元中存在Aux Scalar单元,在前述[《抽象硬件架构》](../抽象硬件架构.md)文档中看到在AI Core内也存在Scalar计算单元(以下称为Main Scalar),这两个Scalar单元是相互独立的,且能力存在差异。在编程界面上为了区分两者执行域,采用VF函数进行隔离。VF函数内的标量计算执行在Aux Scalar单元;VF函数外的标量计算执行在Main Scalar单元。同理,在VF函数内调用的子函数内的标量计算必须满足Aux Scalar的能力;在VF函数外调用的子函数的标量计算必须符合Main Scalar能力。104+> 📌 **提示**:在[硬件原理](#section_part2)章节中提到Vector计算单元中存在Aux Scalar单元,在前述[《抽象硬件架构》](../abstract_hardware_architecture.md)文档中看到在AI Core内也存在Scalar计算单元(以下称为Main Scalar),这两个Scalar单元是相互独立的,且能力存在差异。在编程界面上为了区分两者执行域,采用VF函数进行隔离。VF函数内的标量计算执行在Aux Scalar单元;VF函数外的标量计算执行在Main Scalar单元。同理,在VF函数内调用的子函数内的标量计算必须满足Aux Scalar的能力;在VF函数外调用的子函数的标量计算必须符合Main Scalar能力。
105>105>
106> 为了区分上述三类函数的不同功能执行域,VF函数使用`__simd_vf__`进行标识,VF函数内子函数采用`__simd_callee__`标识,VF函数外子函数采用`__aicore__`标识。在编译期可以根据不同的函数标识完成执行域校验。106> 为了区分上述三类函数的不同功能执行域,VF函数使用`__simd_vf__`进行标识,VF函数内子函数采用`__simd_callee__`标识,VF函数外子函数采用`__aicore__`标识。在编译期可以根据不同的函数标识完成执行域校验。
107>107>
@@ -156,7 +156,7 @@ for (i = 0; i < repeat_times; ++i) {
156 156 
157寄存器根据功能类型主要分以下五类,在实际编程代码中,寄存器作为变量直接使用,由编译器自动分配到硬件寄存器。157寄存器根据功能类型主要分以下五类,在实际编程代码中,寄存器作为变量直接使用,由编译器自动分配到硬件寄存器。
158 158 
159-| 寄存器类型 | 变量类型定义 | [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md) |159+| 寄存器类型 | 变量类型定义 | [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md) |
160| --- | --- | --- |160| --- | --- | --- |
161| 矢量数据寄存器 | `vector_*`,例如vector_float | VL = 256B |161| 矢量数据寄存器 | `vector_*`,例如vector_float | VL = 256B |
162| 掩码寄存器 | `vector_bool` | VL/8 = 32B |162| 掩码寄存器 | `vector_bool` | VL/8 = 32B |
@@ -166,7 +166,7 @@ for (i = 0; i < repeat_times; ++i) {
166 166 
167#### 矢量数据寄存器167#### 矢量数据寄存器
168 168 
169-在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)中,矢量数据寄存器宽度为VL = 256B,按数据类型解释其中元素数量。169+在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)中,矢量数据寄存器宽度为VL = 256B,按数据类型解释其中元素数量。
170 170 
171 171 
172| 位宽 | 矢量数据类型| 元素数 |172| 位宽 | 矢量数据类型| 元素数 |
@@ -421,7 +421,7 @@ for (uint16_t i = 0; i < repeat_times; ++i) {
421非对齐搬运是指UB地址非对齐,但仍需要在UB和矢量数据寄存器之间连续读写数据的场景。在直接与非对齐UB地址进行数据搬运时,硬件性能会急剧下降,为了提升此场景性能,通过`vector_load_unalign` / `vector_store_unalign`作为临时缓存,保存跨对齐边界的数据,通过多轮循环拼接成对齐地址的读写,减少直接访问非对齐UB地址的次数,从而减少非对齐访问的额外开销。421非对齐搬运是指UB地址非对齐,但仍需要在UB和矢量数据寄存器之间连续读写数据的场景。在直接与非对齐UB地址进行数据搬运时,硬件性能会急剧下降,为了提升此场景性能,通过`vector_load_unalign` / `vector_store_unalign`作为临时缓存,保存跨对齐边界的数据,通过多轮循环拼接成对齐地址的读写,减少直接访问非对齐UB地址的次数,从而减少非对齐访问的额外开销。
422 422 
423**非对齐搬入**由[`asc_loadunalign_pre`](../../../../../api/SIMD-API/c_api/reg/reg_load/asc_loadunalign_pre.md)和[`asc_loadunalign`](../../../../../api/SIMD-API/c_api/reg/reg_load/asc_loadunalign.md)组合完成:423**非对齐搬入**由[`asc_loadunalign_pre`](../../../../../api/SIMD-API/c_api/reg/reg_load/asc_loadunalign_pre.md)和[`asc_loadunalign`](../../../../../api/SIMD-API/c_api/reg/reg_load/asc_loadunalign.md)组合完成:
424-例如在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),当想要搬入如下UB地址为48开始的256Bytes数据时:424+例如在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),当想要搬入如下UB地址为48开始的256Bytes数据时:
425 425 
426**图6** 非对齐搬入预期426**图6** 非对齐搬入预期
427 427 
@@ -440,7 +440,7 @@ for (uint16_t i = 0; i < repeat_times; ++i) {
440 ![](../../../../figures/reg_read_4.png "Reg非对齐读4")440 ![](../../../../figures/reg_read_4.png "Reg非对齐读4")
441 441 
442**非对齐搬出**由[`asc_storeunalign`](../../../../../api/SIMD-API/c_api/reg/reg_store/asc_storeunalign.md)和[`asc_storeunalign_post`](../../../../../api/SIMD-API/c_api/reg/reg_store/asc_storeunalign_post.md)组合完成:循环内使用`asc_storeunalign`搬运,循环结束后由`asc_storeunalign_post``vector_store_unalign`中的尾部数据搬出到UB。442**非对齐搬出**由[`asc_storeunalign`](../../../../../api/SIMD-API/c_api/reg/reg_store/asc_storeunalign.md)和[`asc_storeunalign_post`](../../../../../api/SIMD-API/c_api/reg/reg_store/asc_storeunalign_post.md)组合完成:循环内使用`asc_storeunalign`搬运,循环结束后由`asc_storeunalign_post``vector_store_unalign`中的尾部数据搬出到UB。
443-例如在[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),当想要搬出如下UB地址为48开始的512Bytes数据时:443+例如在[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),当想要搬出如下UB地址为48开始的512Bytes数据时:
444 444 
445**图9** 非对齐搬出预期445**图9** 非对齐搬出预期
446 446 
@@ -680,6 +680,6 @@ VF融合可以分成两个层级:
680 680 
681## 小结<a name="section_part7"></a>681## 小结<a name="section_part7"></a>
682 682 
683-Reg矢量计算编程基于[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新增的SIMD Register File开放的寄存器级编程能力,使开发者直接组织寄存器搬运、计算、掩码控制和同步操作。它以`__aicore__`和`__simd_vf__`两层执行域为基本结构,其中`__aicore__`侧负责整体任务组织、数据切分和VF调用,`__simd_vf__`侧通过五类寄存器及其配套API完成细粒度矢量计算。683+Reg矢量计算编程基于[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新增的SIMD Register File开放的寄存器级编程能力,使开发者直接组织寄存器搬运、计算、掩码控制和同步操作。它以`__aicore__`和`__simd_vf__`两层执行域为基本结构,其中`__aicore__`侧负责整体任务组织、数据切分和VF调用,`__simd_vf__`侧通过五类寄存器及其配套API完成细粒度矢量计算。
684 684 
685实际开发时,Reg矢量计算不仅要关注接口本身,还需要结合硬件执行特征开发代码。优先使用对齐搬运,保持循环满足Hardware Loop识别规范,并在寄存器资源允许的范围内进行VF融合,通常可以减少搬运、同步和循环启动开销,从而获得更稳定的性能表现。685实际开发时,Reg矢量计算不仅要关注接口本身,还需要结合硬件执行特征开发代码。优先使用对齐搬运,保持循环满足Hardware Loop识别规范,并在寄存器资源允许的范围内进行VF融合,通常可以减少搬运、同步和循环启动开销,从而获得更稳定的性能表现。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/CPPTensor编程概述.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cpp_tensor_programming_overview.md+20-20
@@ -4,11 +4,11 @@ C++ Tensor编程是Ascend C SIMD编程路径的基础编程接口,基于Tensor
4 4 
5## Kernel函数5## Kernel函数
6 6 
7-[核函数](../核函数.md)在前序章节已作介绍,C++ Tensor编程在核函数定义与调用上沿用SIMD编程通用规范,无额外语法约束。7+[核函数](../kernel_function.md)在前序章节已作介绍,C++ Tensor编程在核函数定义与调用上沿用SIMD编程通用规范,无额外语法约束。
8 8 
9## 内存层级9## 内存层级
10 10 
11-AI Core采用分级存储架构,Cube矩阵计算采用「Global Memory(以下简称为GM) → L1/L0系列Buffer」两级层级服务于矩阵计算,Vector矢量计算传统架构为「Global Memory → Unified Buffer(以下简称为UB)」两级层级,而[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器后构建「GM → UB → Register」三级层级,其中GM存放输入输出数据、UB作为矢量计算中间缓存、Register位于Vector计算单元最内层直接与执行单元交互。11+AI Core采用分级存储架构,Cube矩阵计算采用「Global Memory(以下简称为GM) → L1/L0系列Buffer」两级层级服务于矩阵计算,Vector矢量计算传统架构为「Global Memory → Unified Buffer(以下简称为UB)」两级层级,而[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入寄存器后构建「GM → UB → Register」三级层级,其中GM存放输入输出数据、UB作为矢量计算中间缓存、Register位于Vector计算单元最内层直接与执行单元交互。
12 12 
13![AI Core存储层次结构](../../../../figures/aicore_mem_2.png)13![AI Core存储层次结构](../../../../figures/aicore_mem_2.png)
14 14 
@@ -16,7 +16,7 @@ AI Core采用分级存储架构,Cube矩阵计算采用「Global Memory(以
16 16 
17Tensor本质是基于数组的编程抽象,而非简单的内存地址封装,通过数组方式管理内存并执行计算,更匹配SIMD硬件执行模型。其核心思想是将原始内存地址抽象为Tensor对象,实现从“地址操作”到“对象管理”的编程层次提升。17Tensor本质是基于数组的编程抽象,而非简单的内存地址封装,通过数组方式管理内存并执行计算,更匹配SIMD硬件执行模型。其核心思想是将原始内存地址抽象为Tensor对象,实现从“地址操作”到“对象管理”的编程层次提升。
18 18 
19-根据芯片分级存储架构,Tensor分为三类:**GlobalTensor**对应GM,存放算子输入/输出数据;**LocalTensor**对应片上内存(UB、L1 Buffer、L0A Buffer/L0B Buffer/L0C Buffer等缓冲区),承载计算过程数据;**RegTensor**对应寄存器,用于寄存器级矢量计算([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入)。Tensor体系持续演进:基础Tensor仅携带数据指针和大小信息,需手动传递操作参数;扩展Tensor(Tensor API)引入Layout概念,携带Shape和Stride信息,接口可自动推导搬运长度、计算元素数等参数,大幅降低编程复杂度。该能力引入的接口统一通过`AscendC::Te`命名空间调用(如`AscendC::Te::Mmad`)。19+根据芯片分级存储架构,Tensor分为三类:**GlobalTensor**对应GM,存放算子输入/输出数据;**LocalTensor**对应片上内存(UB、L1 Buffer、L0A Buffer/L0B Buffer/L0C Buffer等缓冲区),承载计算过程数据;**RegTensor**对应寄存器,用于寄存器级矢量计算([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入)。Tensor体系持续演进:基础Tensor仅携带数据指针和大小信息,需手动传递操作参数;扩展Tensor(Tensor API)引入Layout概念,携带Shape和Stride信息,接口可自动推导搬运长度、计算元素数等参数,大幅降低编程复杂度。该能力引入的接口统一通过`AscendC::Te`命名空间调用(如`AscendC::Te::Mmad`)。
20 20 
21#### 基础Tensor与扩展Tensor抽象定义21#### 基础Tensor与扩展Tensor抽象定义
22 22 
@@ -154,7 +154,7 @@ __global__ __vector__ void add_custom(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm
154```154```
155> 📌 其中AscendC::TPosition::VECCALC为对物理位置的逻辑抽象定义,与物理位置的映射参考文件[逻辑位置和物理存储的映射](../../../../../api/SIMD-API/通用说明和约束.md)。155> 📌 其中AscendC::TPosition::VECCALC为对物理位置的逻辑抽象定义,与物理位置的映射参考文件[逻辑位置和物理存储的映射](../../../../../api/SIMD-API/通用说明和约束.md)。
156 156 
157-相比基础Tensor,[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入Layout描述并将其作为Tensor的核心属性,开发者可在Tensor创建时直接关联Shape与Stride信息,简化多维数据的布局管理。通过`MakeTensor`,开发者可灵活指定内存地址和Layout布局,更便捷地描述ND、NZ等典型数据排布。157+相比基础Tensor,[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入Layout描述并将其作为Tensor的核心属性,开发者可在Tensor创建时直接关联Shape与Stride信息,简化多维数据的布局管理。通过`MakeTensor`,开发者可灵活指定内存地址和Layout布局,更便捷地描述ND、NZ等典型数据排布。
158 158 
159```cpp159```cpp
160// UB buffer declaration160// UB buffer declaration
@@ -167,9 +167,9 @@ auto ubTensor = AscendC::Te::MakeTensor(ubPointer, AscendC::Te::MakeLayout(Ascen
167 167 
168#### AIV内部存储之Register File168#### AIV内部存储之Register File
169 169 
170-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入寄存器可编程能力,Vector计算单元的所有计算均需经「GM → UB → Register」三级数据流转,在寄存器上完成矢量计算。C++ Tensor编程通过定义RegTensor方式进行寄存器编程。详见[Reg矢量计算编程](./Reg矢量计算编程.md)。170+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入寄存器可编程能力,Vector计算单元的所有计算均需经「GM → UB → Register」三级数据流转,在寄存器上完成矢量计算。C++ Tensor编程通过定义RegTensor方式进行寄存器编程。详见[Reg矢量计算编程](./reg_vector_computation.md)。
171 171 
172-> 📌 寄存器可编程能力从[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入。172+> 📌 寄存器可编程能力从[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入。
173 173 
174#### AIC内部存储之L1 Buffer & L0 Buffer174#### AIC内部存储之L1 Buffer & L0 Buffer
175 175 
@@ -188,7 +188,7 @@ Cube计算单元专用的缓存为:L0A Buffer存储左矩阵,L0B Buffer存
188 188 
189同UB的申请方式,开发者可通过LocalMemAllocator或直接构造LocalTensor来申请L1/L0 Buffer内存。为提升Cube计算效率,L1 Buffer和L0 Buffer采用分形格式。不同产品型号的分形格式存在差异:189同UB的申请方式,开发者可通过LocalMemAllocator或直接构造LocalTensor来申请L1/L0 Buffer内存。为提升Cube计算效率,L1 Buffer和L0 Buffer采用分形格式。不同产品型号的分形格式存在差异:
190 190 
191-| 存储单元 | [NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md) | [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md) |191+| 存储单元 | [NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md) | [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md) |
192|---------|----------------------------|---------------------------|192|---------|----------------------------|---------------------------|
193| L1 Buffer | Nz | Nz |193| L1 Buffer | Nz | Nz |
194| L0A Buffer | Zz | Nz |194| L0A Buffer | Zz | Nz |
@@ -201,7 +201,7 @@ Cube计算单元专用的缓存为:L0A Buffer存储左矩阵,L0B Buffer存
201 201 
202#### Bank冲突202#### Bank冲突
203 203 
204-为了提高数据访问的效率和吞吐量,内部存储采用了bank(大小相等的内存模块)结构设计。以UB为例,[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品上,UB总大小为256KB(256 × 1024字节),包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B,采用低位地址交织。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)的UB容量规格请参考[UB bank结构](../../../../算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md)。204+为了提高数据访问的效率和吞吐量,内部存储采用了bank(大小相等的内存模块)结构设计。以UB为例,[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品上,UB总大小为256KB(256 × 1024字节),包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B,采用低位地址交织。[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)的UB容量规格请参考[UB bank结构](../../../../算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/avoid_bank_conflict_npu_arch_2201.md)。
205 205 
206![UB Bank冲突示意图](../../../../figures/ub_conflict.png)206![UB Bank冲突示意图](../../../../figures/ub_conflict.png)
207 207 
@@ -260,7 +260,7 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证
260 260 
261| 同步类型 | 核心作用及场景说明 | 关键接口 | 实现代码示例 |261| 同步类型 | 核心作用及场景说明 | 关键接口 | 实现代码示例 |
262|---------|-------------------|----------|-------------|262|---------|-------------------|----------|-------------|
263-| **多流水同步(机制一)** | Mutex互斥锁用于核内异步流水间的同步,功能类似传统CPU锁机制。[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新引入,比SetFlag/WaitFlag更简便。 | `Mutex::Lock` & `Mutex::Unlock` | `AscendC::Mutex::Lock<PIPE_MTE2>(mutexId);`<br>`AscendC::DataCopy(srcLocal, srcGlobal, dataSize);`<br>`AscendC::Mutex::Unlock<PIPE_MTE2>(mutexId);`<br>`AscendC::Mutex::Lock<PIPE_V>(mutexId);`<br>`AscendC::Add(dstLocal, src0Local, src1Local, dataSize);`<br>`AscendC::Mutex::Unlock<PIPE_V>(mutexId);` |263+| **多流水同步(机制一)** | Mutex互斥锁用于核内异步流水间的同步,功能类似传统CPU锁机制。[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新引入,比SetFlag/WaitFlag更简便。 | `Mutex::Lock` & `Mutex::Unlock` | `AscendC::Mutex::Lock<PIPE_MTE2>(mutexId);`<br>`AscendC::DataCopy(srcLocal, srcGlobal, dataSize);`<br>`AscendC::Mutex::Unlock<PIPE_MTE2>(mutexId);`<br>`AscendC::Mutex::Lock<PIPE_V>(mutexId);`<br>`AscendC::Add(dstLocal, src0Local, src1Local, dataSize);`<br>`AscendC::Mutex::Unlock<PIPE_V>(mutexId);` |
264| **多流水同步(机制二)** | SetFlag与WaitFlag实现两条流水间同步等待。引入Mutex后仍保持兼容,但优先推荐Mutex机制。 | `SetFlag` & `WaitFlag` | `AscendC::DataCopy(srcLocal, srcGlobal, dataSize);`<br>`AscendC::SetFlag<HardEvent::MTE2_V>(eventId);`<br>`AscendC::WaitFlag<HardEvent::MTE2_V>(eventId);`<br>`AscendC::Add(dstLocal, src0Local, src1Local, count);` |264| **多流水同步(机制二)** | SetFlag与WaitFlag实现两条流水间同步等待。引入Mutex后仍保持兼容,但优先推荐Mutex机制。 | `SetFlag` & `WaitFlag` | `AscendC::DataCopy(srcLocal, srcGlobal, dataSize);`<br>`AscendC::SetFlag<HardEvent::MTE2_V>(eventId);`<br>`AscendC::WaitFlag<HardEvent::MTE2_V>(eventId);`<br>`AscendC::Add(dstLocal, src0Local, src1Local, count);` |
265| **单流水同步** | PipeBarrier等待同一流水内前序指令完成,用于同一流水内的前后数据依赖。 | `PipeBarrier` | `AscendC::Add(dstLocal, src0Local, src1Local, count);`<br>`AscendC::PipeBarrier<PIPE_V>();`<br>`AscendC::Sub(dstLocal, dstLocal, src0Local, count);` |265| **单流水同步** | PipeBarrier等待同一流水内前序指令完成,用于同一流水内的前后数据依赖。 | `PipeBarrier` | `AscendC::Add(dstLocal, src0Local, src1Local, count);`<br>`AscendC::PipeBarrier<PIPE_V>();`<br>`AscendC::Sub(dstLocal, dstLocal, src0Local, count);` |
266| **内存访问顺序控制** | 等待所有前序内存访问完成,用于存在数据依赖或内存依赖的场景。 | `DataSyncBarrier` | `AscendC::DataSyncBarrier<AscendC::MemDsbT::DDR>();` |266| **内存访问顺序控制** | 等待所有前序内存访问完成,用于存在数据依赖或内存依赖的场景。 | `DataSyncBarrier` | `AscendC::DataSyncBarrier<AscendC::MemDsbT::DDR>();` |
@@ -285,11 +285,11 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证
285| **所有AIV核同步** | 同步所有AIV核,通常用于对Vector算子计算结果进行多核累加操作。 | `if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreSetFlag<0x0, PIPE_MTE3>(flagID);`<br>` AscendC::CrossCoreWaitFlag(flagID);`<br>`}` |285| **所有AIV核同步** | 同步所有AIV核,通常用于对Vector算子计算结果进行多核累加操作。 | `if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreSetFlag<0x0, PIPE_MTE3>(flagID);`<br>` AscendC::CrossCoreWaitFlag(flagID);`<br>`}` |
286| **单个AI Core内两个AIV子核之间同步** | 同步单个AI Core内两个AIV子核,通常用于Vector算子内需要分组进行同步的场景。 | `if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreSetFlag<0x1, PIPE_MTE3>(flagID);`<br>` AscendC::CrossCoreWaitFlag(flagID);`<br>`}` |286| **单个AI Core内两个AIV子核之间同步** | 同步单个AI Core内两个AIV子核,通常用于Vector算子内需要分组进行同步的场景。 | `if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreSetFlag<0x1, PIPE_MTE3>(flagID);`<br>` AscendC::CrossCoreWaitFlag(flagID);`<br>`}` |
287| **单个AI Core内AIC与AIV同步** | 同步单个AI Core内AIC与AIV核,通常用于CV融合算子中Cube与Vector间的交互操作。AIC触发两个AIV同时等待。 | `if ASCEND_IS_AIC {`<br>` AscendC::CrossCoreSetFlag<0x2, PIPE_FIX>(0);`<br>`}`<br>`if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreWaitFlag(0);`<br>`}` |287| **单个AI Core内AIC与AIV同步** | 同步单个AI Core内AIC与AIV核,通常用于CV融合算子中Cube与Vector间的交互操作。AIC触发两个AIV同时等待。 | `if ASCEND_IS_AIC {`<br>` AscendC::CrossCoreSetFlag<0x2, PIPE_FIX>(0);`<br>`}`<br>`if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreWaitFlag(0);`<br>`}` |
288-| **单个AI Core内AIC与AIV同步([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新引入)** | 同步单个AI Core内AIC与AIV核,通常用于CV融合算子中Cube与Vector间的交互操作。AIV0与AIV1可单独触发AIC等待。 | `if ASCEND_IS_AIC {`<br>` AscendC::CrossCoreSetFlag<0x4, PIPE_FIX>(0);`<br>` AscendC::CrossCoreSetFlag<0x4, PIPE_FIX>(16);`<br>`}`<br>`if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreWaitFlag(0);`<br>`}` |288+| **单个AI Core内AIC与AIV同步([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新引入)** | 同步单个AI Core内AIC与AIV核,通常用于CV融合算子中Cube与Vector间的交互操作。AIV0与AIV1可单独触发AIC等待。 | `if ASCEND_IS_AIC {`<br>` AscendC::CrossCoreSetFlag<0x4, PIPE_FIX>(0);`<br>` AscendC::CrossCoreSetFlag<0x4, PIPE_FIX>(16);`<br>`}`<br>`if ASCEND_IS_AIV {`<br>` AscendC::CrossCoreWaitFlag(0);`<br>`}` |
289 289 
290> 📌 基于分离模式(AIC和AIV分离)开发融合算子时,算子逻辑中通常同时包含AIV和AIC的处理逻辑,此时需要使用Ascend C提供的宏ASCEND_IS_AIV/ASCEND_IS_AIC来对AIV和AIC的代码进行隔离。290> 📌 基于分离模式(AIC和AIV分离)开发融合算子时,算子逻辑中通常同时包含AIV和AIC的处理逻辑,此时需要使用Ascend C提供的宏ASCEND_IS_AIV/ASCEND_IS_AIC来对AIV和AIC的代码进行隔离。
291>291>
292-> 上表中`CrossCoreSetFlag`的第一个模板参数为同步目标标识,不同取值对应不同的同步范围:`0x0`表示所有核同步,`0x1`表示单个AI Core内AIV子核间同步,`0x2`表示单个AI Core内AIC与AIV同步(两个AIV同时触发),`0x4`表示单个AI Core内AIC与AIV同步(AIV0与AIV1可单独触发,[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新引入)。292+> 上表中`CrossCoreSetFlag`的第一个模板参数为同步目标标识,不同取值对应不同的同步范围:`0x0`表示所有核同步,`0x1`表示单个AI Core内AIV子核间同步,`0x2`表示单个AI Core内AIC与AIV同步(两个AIV同时触发),`0x4`表示单个AI Core内AIC与AIV同步(AIV0与AIV1可单独触发,[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新引入)。
293 293 
294## 算子类型294## 算子类型
295 295 
@@ -299,9 +299,9 @@ AI Core上的执行单元分别属于不同的执行流水,同步即是保证
299 299 
300Vector矢量计算主要包含基础算术、归约计算、数据类型转换等矢量计算。300Vector矢量计算主要包含基础算术、归约计算、数据类型转换等矢量计算。
301 301 
302-在[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)上,Vector矢量计算的数据来自于UB(要求32B对齐),C++ Tensor编程在Vector计算单元上提供了通过LocalTensor直接操作计算的接口能力。此类直接操作UB的编程方式称为Memory矢量计算编程。302+在[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)上,Vector矢量计算的数据来自于UB(要求32B对齐),C++ Tensor编程在Vector计算单元上提供了通过LocalTensor直接操作计算的接口能力。此类直接操作UB的编程方式称为Memory矢量计算编程。
303 303 
304-以Add计算为例,当开发者需要计算4096长度的向量加法,可通过`Add(dstTensor, src0Tensor, src1Tensor, count)`接口直接进行计算。更多内容请参考[Memory矢量计算编程](./Memory矢量计算编程.md)。304+以Add计算为例,当开发者需要计算4096长度的向量加法,可通过`Add(dstTensor, src0Tensor, src1Tensor, count)`接口直接进行计算。更多内容请参考[Memory矢量计算编程](./memory_vector_computation.md)。
305 305 
306```cpp306```cpp
307// Define Vector operator, marked with __vector__ to execute on Device, suitable for operators with only Vector computation307// Define Vector operator, marked with __vector__ to execute on Device, suitable for operators with only Vector computation
@@ -319,13 +319,13 @@ __global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ f
319}319}
320```320```
321 321 
322-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)新一代架构,引入寄存器可编程能力,在传统UB缓存体系的基础上,开放寄存器(Register)可编程能力,构建出「GM → UB → Register」的三级内存层级。新一代架构下的矢量计算都需要从UB加载到Register寄存器后,再利用Register寄存器进行计算操作。可参考[Reg矢量计算编程](./Reg矢量计算编程.md)中有关Reg矢量计算编程的描述。322+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)新一代架构,引入寄存器可编程能力,在传统UB缓存体系的基础上,开放寄存器(Register)可编程能力,构建出「GM → UB → Register」的三级内存层级。新一代架构下的矢量计算都需要从UB加载到Register寄存器后,再利用Register寄存器进行计算操作。可参考[Reg矢量计算编程](./reg_vector_computation.md)中有关Reg矢量计算编程的描述。
323 323 
324-> 📌 寄存器可编程能力从[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)引入。324+> 📌 寄存器可编程能力从[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)引入。
325 325 
326### Cube矩阵计算326### Cube矩阵计算
327 327 
328-Cube矩阵计算主要涵盖矩阵乘计算与卷积计算,其数据主要来源于L1 Buffer与L0A/B Buffer。L1 Buffer用于矩阵计算数据缓存,L0A Buffer用于存储左矩阵,L0B Buffer用于存储右矩阵,L0C Buffer用于存储初始累加值及矩阵计算结果。此类基于Cube计算单元直接操作L1/L0A/L0B/L0C Buffer的编程范式称为[Cube矩阵计算编程](./Cube矩阵计算编程.md)。328+Cube矩阵计算主要涵盖矩阵乘计算与卷积计算,其数据主要来源于L1 Buffer与L0A/B Buffer。L1 Buffer用于矩阵计算数据缓存,L0A Buffer用于存储左矩阵,L0B Buffer用于存储右矩阵,L0C Buffer用于存储初始累加值及矩阵计算结果。此类基于Cube计算单元直接操作L1/L0A/L0B/L0C Buffer的编程范式称为[Cube矩阵计算编程](./cube_matrix_computation.md)。
329 329 
330以Matmul矩阵乘计算为例,开发者通过操作Cube矩阵计算能力可以完成如下图所示的c = a * b + bias的计算。330以Matmul矩阵乘计算为例,开发者通过操作Cube矩阵计算能力可以完成如下图所示的c = a * b + bias的计算。
331- A、B为源操作数,A为左矩阵,形状为[M, K];B为右矩阵,形状为[K, N]。331- A、B为源操作数,A为左矩阵,形状为[M, K];B为右矩阵,形状为[K, N]。
@@ -390,7 +390,7 @@ __global__ __mix__ void mix_kernel(__gm__ float* x, __gm__ float* y, __gm__ floa
390- 同步事件由开发者使用`SetFlag/WaitFlag(ISASI)``PipeBarrier(ISASI)`手动插入,事件的类型和事件ID由开发者自行管理,但需要注意事件ID不能使用6和7(可能与内部使用的事件ID出现冲突,进而出现未定义行为)。390- 同步事件由开发者使用`SetFlag/WaitFlag(ISASI)``PipeBarrier(ISASI)`手动插入,事件的类型和事件ID由开发者自行管理,但需要注意事件ID不能使用6和7(可能与内部使用的事件ID出现冲突,进而出现未定义行为)。
391- Kernel入口处需要开发者手动调用[InitSocState](../../../../../api/SIMD-API/basic_api/tool_interface/system_init/InitSocState.md)接口用来初始化全局状态寄存器。因为全局状态寄存器处于不确定状态,如果不调用该接口,可能导致算子执行过程中出现未定义行为。在TPipe框架编程中,初始化过程由TPipe完成,无需开发者关注。391- Kernel入口处需要开发者手动调用[InitSocState](../../../../../api/SIMD-API/basic_api/tool_interface/system_init/InitSocState.md)接口用来初始化全局状态寄存器。因为全局状态寄存器处于不确定状态,如果不调用该接口,可能导致算子执行过程中出现未定义行为。在TPipe框架编程中,初始化过程由TPipe完成,无需开发者关注。
392- Kernel结束前需要开发者手动调用[PipeBarrier<PIPE_ALL>()](../../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)。392- Kernel结束前需要开发者手动调用[PipeBarrier<PIPE_ALL>()](../../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)。
393-- 部分API内部通过软仿真实现,需占用Ascend C预留的UB空间,开发者使用时需关注目标API是否依赖该预留空间(针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),Select等API内部使用了8KB的预留UB空间,用于存储中间数据;针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),Exp等API内部使用了2KB的预留UB空间,用于指令兼容或存储中间数据)。若开启--cce-disable-asc-reserved-ubuf编译选项,在对应产品版本下调用相关API会触发编译期报错。具体API范围见[使用预留UB空间的API列表](#section_reserved_ubuf_api)。393+- 部分API内部通过软仿真实现,需占用Ascend C预留的UB空间,开发者使用时需关注目标API是否依赖该预留空间(针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),Select等API内部使用了8KB的预留UB空间,用于存储中间数据;针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),Exp等API内部使用了2KB的预留UB空间,用于指令兼容或存储中间数据)。若开启--cce-disable-asc-reserved-ubuf编译选项,在对应产品版本下调用相关API会触发编译期报错。具体API范围见[使用预留UB空间的API列表](#section_reserved_ubuf_api)。
394- 同时另外一些软仿实现接口内部会占用系统分配的事件ID,如果开发者手动调用`SetFlag/WaitFlag(ISASI)`插入自定义事件ID时会跟接口内部的事件ID产生冲突,所以用户自定义事件ID时,只能支持部分API。具体支持的API列表见[支持的API范围](#section2633193623711)。394- 同时另外一些软仿实现接口内部会占用系统分配的事件ID,如果开发者手动调用`SetFlag/WaitFlag(ISASI)`插入自定义事件ID时会跟接口内部的事件ID产生冲突,所以用户自定义事件ID时,只能支持部分API。具体支持的API列表见[支持的API范围](#section2633193623711)。
395 395 
396## 支持的API范围<a name="section2633193623711"></a>396## 支持的API范围<a name="section2633193623711"></a>
@@ -1143,13 +1143,13 @@ __global__ __mix__ void mix_kernel(__gm__ float* x, __gm__ float* y, __gm__ floa
1143 1143 
1144## 使用预留UB空间的API范围<a name="section_reserved_ubuf_api"></a>1144## 使用预留UB空间的API范围<a name="section_reserved_ubuf_api"></a>
1145 1145 
1146-以下API内部会使用Ascend C预留的UB空间。当开启[--cce-disable-asc-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#常用的编译选项)编译选项后,在对应产品版本下调用相关API会触发编译期报错。由于同一API使用预留UB空间的情况在不同NPU架构下有差异,开启该编译选项后,需要手动调整API调用方式或替换为不依赖预留UB空间的实现,才能完成兼容性迁移。1146+以下API内部会使用Ascend C预留的UB空间。当开启[--cce-disable-asc-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#常用的编译选项)编译选项后,在对应产品版本下调用相关API会触发编译期报错。由于同一API使用预留UB空间的情况在不同NPU架构下有差异,开启该编译选项后,需要手动调整API调用方式或替换为不依赖预留UB空间的实现,才能完成兼容性迁移。
1147 1147 
1148>[!CAUTION]注意1148>[!CAUTION]注意
1149> 同一接口若提供多个重载原型,可能只有部分原型会使用UB预留空间。1149> 同一接口若提供多个重载原型,可能只有部分原型会使用UB预留空间。
1150 1150 
1151<!-- npu="A3,910b" id5 -->1151<!-- npu="A3,910b" id5 -->
1152-**表5** 针对 [NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),使用预留UB空间的API范围1152+**表5** 针对 [NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md#npu-arch),使用预留UB空间的API范围
1153 1153 
1154| API类别 | API名 |1154| API类别 | API名 |
1155| --- | --- |1155| --- | --- |
@@ -1158,7 +1158,7 @@ __global__ __mix__ void mix_kernel(__gm__ float* x, __gm__ float* y, __gm__ floa
1158<!-- end id5 -->1158<!-- end id5 -->
1159 1159 
1160<!-- npu="950" id6 -->1160<!-- npu="950" id6 -->
1161-**表6** 针对 [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),使用预留UB空间的API范围1161+**表6** 针对 [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md#npu-arch),使用预留UB空间的API范围
1162 1162 
1163| API类别 | API名 |1163| API类别 | API名 |
1164| --- | --- |1164| --- | --- |
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Cube矩阵计算编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/cube_matrix_computation.md+21-21
@@ -46,7 +46,7 @@ __global__ __cube__ void matmul_custom(...)
46### 矩阵计算内存布局46### 矩阵计算内存布局
47 47 
48矩阵计算单元采用分块计算逻辑,其中16×16是矩阵计算单元分形的基本粒度(对于half数据类型;int8类型为16×32或32×16;fp32类型分形为16×8),硬件可以并行处理多个矩阵计算单元。在传统的线性存储布局(如行主序或列主序)中,数据按行或列连续存放。当需要读取一个16×16的矩形数据块时,若直接从内存中获取,则需访问不连续的多个内存地址以逐行“收集”数据,这种非连续访问会导致内存效率显著下降。48矩阵计算单元采用分块计算逻辑,其中16×16是矩阵计算单元分形的基本粒度(对于half数据类型;int8类型为16×32或32×16;fp32类型分形为16×8),硬件可以并行处理多个矩阵计算单元。在传统的线性存储布局(如行主序或列主序)中,数据按行或列连续存放。当需要读取一个16×16的矩形数据块时,若直接从内存中获取,则需访问不连续的多个内存地址以逐行“收集”数据,这种非连续访问会导致内存效率显著下降。
49-为解决上述问题,引入了矩阵分形存储格式。该格式通过软件层对数据进行重排,使每个16×16计算块在物理内存中连续存放。硬件仅需发起一次连续读取,即可将整个数据块加载至片上寄存器,避免了多地址寻址开销,从而大幅提升矩阵计算单元的数据吞吐率。对于half数据类型,16×16是矩阵计算单元的基本分形粒度,当前支持Cube计算的产品型号包括[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)和[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)。49+为解决上述问题,引入了矩阵分形存储格式。该格式通过软件层对数据进行重排,使每个16×16计算块在物理内存中连续存放。硬件仅需发起一次连续读取,即可将整个数据块加载至片上寄存器,避免了多地址寻址开销,从而大幅提升矩阵计算单元的数据吞吐率。对于half数据类型,16×16是矩阵计算单元的基本分形粒度,当前支持Cube计算的产品型号包括[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)和[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)。
50昇腾AI处理器的矩阵计算单元为追求极高的数据吞吐率与计算密度,采用了专有的硬件架构设计。与通用CPU常用的连续线性存储不同,该单元要求输入输出数据必须符合特定的分形存储格式。在使用Ascend C的Mmad类接口进行算子开发时,深入理解这些数据格式对于实现正确的数据搬运、分块及性能优化至关重要。50昇腾AI处理器的矩阵计算单元为追求极高的数据吞吐率与计算密度,采用了专有的硬件架构设计。与通用CPU常用的连续线性存储不同,该单元要求输入输出数据必须符合特定的分形存储格式。在使用Ascend C的Mmad类接口进行算子开发时,深入理解这些数据格式对于实现正确的数据搬运、分块及性能优化至关重要。
51为便于理解与记忆,文档采用“大Y小x”的直观命名法:51为便于理解与记忆,文档采用“大Y小x”的直观命名法:
52 - 大Y(Z/N):表示分形矩阵之间的排列顺序(Z为行主序,N为列主序)。52 - 大Y(Z/N):表示分形矩阵之间的排列顺序(Z为行主序,N为列主序)。
@@ -56,11 +56,11 @@ __global__ __cube__ void matmul_custom(...)
56 56 
57矩阵分形存储格式是对多维Tensor在内存中数据排布格式的描述。57矩阵分形存储格式是对多维Tensor在内存中数据排布格式的描述。
58为了适配矩阵计算单元的物理读取路径,不同的产品形态有不同的格式要求:58为了适配矩阵计算单元的物理读取路径,不同的产品形态有不同的格式要求:
59-针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Zz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如下图所示:59+针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),矩阵乘法C = A × B要求:左矩阵A使用Zz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如下图所示:
60 60 
61![矩阵乘法场景涉及的数据格式](../../../../figures/matmul_data_2.png)61![矩阵乘法场景涉及的数据格式](../../../../figures/matmul_data_2.png)
62 62 
63-针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),矩阵乘法C = A × B要求:左矩阵A使用Nz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如下图所示:63+针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),矩阵乘法C = A × B要求:左矩阵A使用Nz格式,右矩阵B使用Zn格式,结果矩阵C使用Nz格式,如下图所示:
64 64 
65![矩阵乘法场景涉及的数据格式](../../../../figures/matmul_data_1.png)65![矩阵乘法场景涉及的数据格式](../../../../figures/matmul_data_1.png)
66 66 
@@ -70,7 +70,7 @@ ND格式是通用的N维张量格式,数据在内存中连续线性存放,
70 70 
71#### Nz格式71#### Nz格式
72 72 
73-Nz格式主要用于L1 Buffer和L0C Buffer中存放数据。针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer也采用Nz分形格式。该格式采用大N(外部列主序)+ 小z(内部行主序)的方式排布。73+Nz格式主要用于L1 Buffer和L0C Buffer中存放数据。针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),L0A Buffer也采用Nz分形格式。该格式采用大N(外部列主序)+ 小z(内部行主序)的方式排布。
74 74 
75![Nz数据排布格式](../../../../figures/nz_format.png)75![Nz数据排布格式](../../../../figures/nz_format.png)
76 76 
@@ -79,11 +79,11 @@ Nz是Ascend架构的中间格式,介于线性数据(ND)和计算专用数据(Z
79> 📌 Nz格式在不同Buffer中的应用场景:79> 📌 Nz格式在不同Buffer中的应用场景:
80> - **L0C Buffer**: 存储矩阵乘法结果。分形形状为16×16(对于half数据类型,256元素),适合Cube计算单元高效运算。80> - **L0C Buffer**: 存储矩阵乘法结果。分形形状为16×16(对于half数据类型,256元素),适合Cube计算单元高效运算。
81> - **L1 Buffer**: 存储中间数据。分形形状为16×(32B/sizeof(DataType)),大小512字节,便于转换为Zz和Zn格式。81> - **L1 Buffer**: 存储中间数据。分形形状为16×(32B/sizeof(DataType)),大小512字节,便于转换为Zz和Zn格式。
82-> - **L0A Buffer(仅[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md))**: 存储左矩阵。82+> - **L0A Buffer(仅[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md))**: 存储左矩阵。
83 83 
84#### Zz格式84#### Zz格式
85 85 
86-针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer使用此格式([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)使用Nz格式)。该格式采用大Z(外部行主序)+ 小z(内部行主序)。86+针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),L0A Buffer使用此格式([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)使用Nz格式)。该格式采用大Z(外部行主序)+ 小z(内部行主序)。
87 87 
88![Zz格式(以half类型为例)](../../../../figures/zz_half.png)88![Zz格式(以half类型为例)](../../../../figures/zz_half.png)
89 89 
@@ -123,7 +123,7 @@ Zn格式主要用于L0B Buffer中存放数据,如果离线处理好的右矩
123| 数据通路 | 功能 | C++ Tensor编程接口 | 分形支持情况 |123| 数据通路 | 功能 | C++ Tensor编程接口 | 分形支持情况 |
124|---------|---------|---------------|-------------|124|---------|---------|---------------|-------------|
125| Global Memory → L1 Buffer | 随路转换ND2NZ搬运 | `DataCopy(dst, src, nd2nzParams)` | ![ND->Nz](../../../../figures/ND_Nz.png) |125| Global Memory → L1 Buffer | 随路转换ND2NZ搬运 | `DataCopy(dst, src, nd2nzParams)` | ![ND->Nz](../../../../figures/ND_Nz.png) |
126-| L1 Buffer → L0A Buffer | 将L1 Buffer数据搬运到L0A Buffer中 | `LoadData(dst, src, l12l0Params)` | ![Nz->Zz](../../../../figures/Nz_Zz.png)<br>[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)上L0A分形为Nz,搬运时为Nz-Nz |126+| L1 Buffer → L0A Buffer | 将L1 Buffer数据搬运到L0A Buffer中 | `LoadData(dst, src, l12l0Params)` | ![Nz->Zz](../../../../figures/Nz_Zz.png)<br>[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)上L0A分形为Nz,搬运时为Nz-Nz |
127| L1 Buffer → L0B Buffer | 将L1 Buffer数据搬运到L0B Buffer中 | `LoadData(dst, src, l12l0Params)` | ![Nz->Zn](../../../../figures/Nz_Zn.png) |127| L1 Buffer → L0B Buffer | 将L1 Buffer数据搬运到L0B Buffer中 | `LoadData(dst, src, l12l0Params)` | ![Nz->Zn](../../../../figures/Nz_Zn.png) |
128 128 
129#### GM2L1 随路转换ND2NZ搬运129#### GM2L1 随路转换ND2NZ搬运
@@ -134,7 +134,7 @@ Zn格式主要用于L0B Buffer中存放数据,如果离线处理好的右矩
134 134 
135![GM到L1的ND2NZ搬运示例](../../../../figures/gm_l1_nd2nz.png)135![GM到L1的ND2NZ搬运示例](../../../../figures/gm_l1_nd2nz.png)
136 136 
137-以上图为例,实现A矩阵(Shape(16, 23),数据类型为half)从GM搬运到L1的能力,针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),调用接口如下:137+以上图为例,实现A矩阵(Shape(16, 23),数据类型为half)从GM搬运到L1的能力,针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),调用接口如下:
138 138 
139```cpp139```cpp
140// Allocate L1 Buffer space140// Allocate L1 Buffer space
@@ -155,7 +155,7 @@ AscendC::DataCopy(dst, srcGlobal, intriParams);
155 155 
156#### L12L0 数据搬运156#### L12L0 数据搬运
157 157 
158-该能力主要实现将矩阵从L1 Buffer搬运至L0A/L0B Buffer,并支持从Nz分形转换到Zz或Zn格式。针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),C++ Tensor编程提供了`LoadData`接口配合`LoadData2DParamsV2`参数,以512B数据分形为基本单位完成L1 Buffer到L0A/L0B Buffer的2D搬运,并可通过`ifTranspose`配置分形转置。对于3D搬运场景,需要使用`LoadData`接口配合`LoadData3DParamsV1`或`LoadData3DParamsV2`参数;其中NPU架构版本3510不支持`LoadData3DParamsV1`,需使用`LoadData3DParamsV2`。158+该能力主要实现将矩阵从L1 Buffer搬运至L0A/L0B Buffer,并支持从Nz分形转换到Zz或Zn格式。针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),C++ Tensor编程提供了`LoadData`接口配合`LoadData2DParamsV2`参数,以512B数据分形为基本单位完成L1 Buffer到L0A/L0B Buffer的2D搬运,并可通过`ifTranspose`配置分形转置。对于3D搬运场景,需要使用`LoadData`接口配合`LoadData3DParamsV1`或`LoadData3DParamsV2`参数;其中NPU架构版本3510不支持`LoadData3DParamsV1`,需使用`LoadData3DParamsV2`。
159 159 
160![L12L0A非转置搬运](../../../../figures/l1_l0a_copy.png)160![L12L0A非转置搬运](../../../../figures/l1_l0a_copy.png)
161 161 
@@ -187,7 +187,7 @@ AscendC::LoadData(l0a_buffer, l1_buffer, l12l0Params);
187 187 
188搬运到L0B Buffer采用同样的`LoadData`接口实现,接口参数及实现功能同L12L0A,可参考[矩阵计算的搬入](../../../../../api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/cube_compute_load.md)查看更多内容。188搬运到L0B Buffer采用同样的`LoadData`接口实现,接口参数及实现功能同L12L0A,可参考[矩阵计算的搬入](../../../../../api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/cube_compute_load.md)查看更多内容。
189 189 
190-当输入A矩阵(GM)是转置排布(K×M)时,搬入到L1 Buffer后为(K×M)排布的Nz分形。要使L0A Buffer存放(M×K)的矩阵,需要在L1 Buffer到L0A Buffer的搬运过程中进行转置。针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),可使用`LoadDataWithTranspose`接口,调用示例如下。190+当输入A矩阵(GM)是转置排布(K×M)时,搬入到L1 Buffer后为(K×M)排布的Nz分形。要使L0A Buffer存放(M×K)的矩阵,需要在L1 Buffer到L0A Buffer的搬运过程中进行转置。针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),可使用`LoadDataWithTranspose`接口,调用示例如下。
191 191 
192![需要转置的处理场景](../../../../figures/need_transpose.png)192![需要转置的处理场景](../../../../figures/need_transpose.png)
193 193 
@@ -206,7 +206,7 @@ for (int i = 0; i < CeilDivision(m, fractalShape[1]); ++i) {
206}206}
207```207```
208 208 
209-针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),`LoadDataWithTranspose`仅支持L1 Buffer到L0B Buffer通路,推荐使用`LoadData2dTransposeParamsV2`作为搬运参数,不支持本节所述的L1 Buffer到L0A Buffer转置场景。该场景需要改用`LoadData`接口配合`LoadData2DParamsV2`参数,并将`ifTranspose`设置为`true`。209+针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),`LoadDataWithTranspose`仅支持L1 Buffer到L0B Buffer通路,推荐使用`LoadData2dTransposeParamsV2`作为搬运参数,不支持本节所述的L1 Buffer到L0A Buffer转置场景。该场景需要改用`LoadData`接口配合`LoadData2DParamsV2`参数,并将`ifTranspose`设置为`true`。
210 210 
211`half`数据类型为例,A矩阵在L1 Buffer上为(K×M)的Nz分形,在L0A Buffer上需要转换为(M×K)的Nz分形,可按如下方式配置:211`half`数据类型为例,A矩阵在L1 Buffer上为(K×M)的Nz分形,在L0A Buffer上需要转换为(M×K)的Nz分形,可按如下方式配置:
212 212 
@@ -230,23 +230,23 @@ AscendC::LoadData(l0aTensor, l1aTensor, loadDataParams);
230 230 
231### 矩阵数据搬出231### 矩阵数据搬出
232 232 
233-矩阵搬出接口实现L0C Buffer到Global Memory或L1 Buffer的数据传输,支持随路量化、ReLU、NZ2ND格式转换、通道拆分合并等操作。开发者通过配置参数控制搬运路径、位置和长度等,通常在`Mmad`接口后使用。针对[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md),还支持L0C Buffer到UB的搬运以及UB双目标模式。L0C Buffer到Global Memory通路的NZ2ND格式转换同时支持NPU架构版本2201和3510。矩阵搬出能力如下图所示:233+矩阵搬出接口实现L0C Buffer到Global Memory或L1 Buffer的数据传输,支持随路量化、ReLU、NZ2ND格式转换、通道拆分合并等操作。开发者通过配置参数控制搬运路径、位置和长度等,通常在`Mmad`接口后使用。针对[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md),还支持L0C Buffer到UB的搬运以及UB双目标模式。L0C Buffer到Global Memory通路的NZ2ND格式转换同时支持NPU架构版本2201和3510。矩阵搬出能力如下图所示:
234 234 
235-[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)下的矩阵搬出流程为:235+[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)下的矩阵搬出流程为:
236 236 
237![矩阵搬出流程](../../../../figures/mat_copy_out_a2a3.png)237![矩阵搬出流程](../../../../figures/mat_copy_out_a2a3.png)
238 238 
239-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)下的矩阵搬出流程为:239+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)下的矩阵搬出流程为:
240 240 
241![矩阵搬出流程](../../../../figures/mat_copy_out_950.png)241![矩阵搬出流程](../../../../figures/mat_copy_out_950.png)
242 242 
243矩阵搬出接口支持多种随路能力的灵活组合,以L0C Buffer到Global Memory的搬运场景为例:矩阵计算结果暂存于L0C Buffer后需搬运至GM,在此过程中可协同执行随路量化、ReLU激活、格式转换及通道拆分合并等操作。下图分别展示了不同NPU架构版本下这些随路能力的有效组合、中间数据类型及完整数据路径。例如,L0C Buffer中的F32数据可通过QF322B8_PRE随路量化得到B8数据,可选使能ReLU后经NZ2NZ/NZ2ND格式转换输出至GM。图中F32->F16和F32->BF16为数据类型转换,其余路径为随路Scalar/Vector量化模式。243矩阵搬出接口支持多种随路能力的灵活组合,以L0C Buffer到Global Memory的搬运场景为例:矩阵计算结果暂存于L0C Buffer后需搬运至GM,在此过程中可协同执行随路量化、ReLU激活、格式转换及通道拆分合并等操作。下图分别展示了不同NPU架构版本下这些随路能力的有效组合、中间数据类型及完整数据路径。例如,L0C Buffer中的F32数据可通过QF322B8_PRE随路量化得到B8数据,可选使能ReLU后经NZ2NZ/NZ2ND格式转换输出至GM。图中F32->F16和F32->BF16为数据类型转换,其余路径为随路Scalar/Vector量化模式。
244 244 
245-[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)下的矩阵搬出能力为:245+[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)下的矩阵搬出能力为:
246 246 
247![L0C2GM搬运](../../../../figures/l0c_gm_a2a3.png)247![L0C2GM搬运](../../../../figures/l0c_gm_a2a3.png)
248 248 
249-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)下的矩阵搬出能力为:249+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)下的矩阵搬出能力为:
250 250 
251![L0C2GM搬运](../../../../figures/l0c_gm_950.png)251![L0C2GM搬运](../../../../figures/l0c_gm_950.png)
252 252 
@@ -300,11 +300,11 @@ AscendC::SetFixpipePreQuantFlag(deqScalar);
300 300 
301### 矩阵计算301### 矩阵计算
302 302 
303-[Mmad](../../../../../api/SIMD-API/basic_api/cube_compute_ISASI/mmad_compute/Mmad.md)是Ascend C封装NPU硬件计算能力的矩阵乘加核心接口,用于全连接层、卷积层等算子开发,实现C = A × B + C的矩阵乘加计算(输入为L0A Buffer和L0B Buffer,输出为L0C Buffer),其中针对[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md),L0A Buffer分形为Zz、L0B Buffer分形为Zn、L0C Buffer分形为Nz,而[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品L0A Buffer分形为Nz。303+[Mmad](../../../../../api/SIMD-API/basic_api/cube_compute_ISASI/mmad_compute/Mmad.md)是Ascend C封装NPU硬件计算能力的矩阵乘加核心接口,用于全连接层、卷积层等算子开发,实现C = A × B + C的矩阵乘加计算(输入为L0A Buffer和L0B Buffer,输出为L0C Buffer),其中针对[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md),L0A Buffer分形为Zz、L0B Buffer分形为Zn、L0C Buffer分形为Nz,而[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品L0A Buffer分形为Nz。
304 304 
305![NPU架构版本3510 `Mmad`计算](../../../../figures/mmad_950.png)305![NPU架构版本3510 `Mmad`计算](../../../../figures/mmad_950.png)
306 306 
307-**表 矩阵乘计算A、B、C矩阵说明([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md))**307+**表 矩阵乘计算A、B、C矩阵说明([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md))**
308 308 
309| 矩阵 | 存储位置 | 维度 | 数据格式 | 数据类型 |309| 矩阵 | 存储位置 | 维度 | 数据格式 | 数据类型 |
310|---|---|---|---|---|310|---|---|---|---|---|
@@ -354,7 +354,7 @@ AscendC::Mmad(c_matrix, a_matrix, b_matrix, mmadParams);
354 354 
355AI Core内部执行单元(如MTE2搬运单元、Vector计算单元等)以异步并行方式运行,读写同一存储资源时可能存在数据依赖关系。因此,Cube计算需通过流水同步接口确保正确执行。Cube矩阵计算主要包含四步:数据搬入(Global Memory → L1 Buffer)、数据加载(L1 Buffer → L0A/B Buffer)、矩阵计算(L0A/B Buffer → L0C Buffer)、数据搬出(L0C Buffer → Global Memory)。四个步骤分别对应PIPE_MTE2、PIPE_MTE1、PIPE_M、PIPE_FIX流水线,需通过核内同步接口协调执行顺序,确保各步骤按序完成。355AI Core内部执行单元(如MTE2搬运单元、Vector计算单元等)以异步并行方式运行,读写同一存储资源时可能存在数据依赖关系。因此,Cube计算需通过流水同步接口确保正确执行。Cube矩阵计算主要包含四步:数据搬入(Global Memory → L1 Buffer)、数据加载(L1 Buffer → L0A/B Buffer)、矩阵计算(L0A/B Buffer → L0C Buffer)、数据搬出(L0C Buffer → Global Memory)。四个步骤分别对应PIPE_MTE2、PIPE_MTE1、PIPE_M、PIPE_FIX流水线,需通过核内同步接口协调执行顺序,确保各步骤按序完成。
356 356 
357-当开发者进行一个矩阵乘法计算时([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品),可通过`Mutex::Lock`&`Mutex::Unlock`的方式完成对这四个步骤的同步。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品可使用`SetFlag`&`WaitFlag`实现相同同步效果,详见[同步机制](../基于Tensor的CPP编程/CPPTensor编程概述.md#同步机制)。357+当开发者进行一个矩阵乘法计算时([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品),可通过`Mutex::Lock`&`Mutex::Unlock`的方式完成对这四个步骤的同步。[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)产品可使用`SetFlag`&`WaitFlag`实现相同同步效果,详见[同步机制](../cpp_tensor_programming/cpp_tensor_programming_overview.md#同步机制)。
358 358 
359以下示例中,Kernel入参`x``y``z`的指针类型与对应`GlobalTensor`的模板类型一致,因此调用`SetGlobalBuffer`时可省略显式类型转换。若实参指针类型与`GlobalTensor`的模板类型不一致,需要先将其显式转换为对应的`__gm__ PrimType*`类型。359以下示例中,Kernel入参`x``y``z`的指针类型与对应`GlobalTensor`的模板类型一致,因此调用`SetGlobalBuffer`时可省略显式类型转换。若实参指针类型与`GlobalTensor`的模板类型不一致,需要先将其显式转换为对应的`__gm__ PrimType*`类型。
360 360 
@@ -423,9 +423,9 @@ __global__ __cube__ void matmul_kernel(__gm__ half* x, __gm__ half* y, __gm__ fl
423 423 
424## 扩展Tensor编程范式424## 扩展Tensor编程范式
425 425 
426-[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)在Tensor基础上引入Layout布局概念,将Shape和Stride移到编译期确定,实现类型安全和分形布局自动生成。开发者只需定义Tensor的Layout,搬运和计算接口自动推断底层参数,大幅降低矩阵算子开发难度。426+[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)在Tensor基础上引入Layout布局概念,将Shape和Stride移到编译期确定,实现类型安全和分形布局自动生成。开发者只需定义Tensor的Layout,搬运和计算接口自动推断底层参数,大幅降低矩阵算子开发难度。
427 427 
428-> 📌 扩展Tensor(带有Layout)能力从[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)开始支持。428+> 📌 扩展Tensor(带有Layout)能力从[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)开始支持。
429 429 
430> [!NOTE]说明430> [!NOTE]说明
431> 本节扩展Tensor示例以CANN9.1.0接口为准。对于本节使用的Nz布局,`MakeFrameLayout`的类型模板参数可按需省略;示例显式传入`half`,用于确保Layout的类型和C0推导与Tensor数据类型一致,并非接口新增了强制参数。若代码将原始指针直接传入`MakeTensor`,或使用`Copy(dst, src)`形式调用搬运接口,需要分别使用`MakeMemPtr`封装内存指针,并通过`MakeCopy`构造与搬运通路匹配的`CopyAtom`,再调用`Copy(atomCopy, dst, src)`。431> 本节扩展Tensor示例以CANN9.1.0接口为准。对于本节使用的Nz布局,`MakeFrameLayout`的类型模板参数可按需省略;示例显式传入`half`,用于确保Layout的类型和C0推导与Tensor数据类型一致,并非接口新增了强制参数。若代码将原始指针直接传入`MakeTensor`,或使用`Copy(dst, src)`形式调用搬运接口,需要分别使用`MakeMemPtr`封装内存指针,并通过`MakeCopy`构造与搬运通路匹配的`CopyAtom`,再调用`Copy(atomCopy, dst, src)`。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Memory矢量计算编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/memory_vector_computation.md+2-2
@@ -1,6 +1,6 @@
1# Memory矢量计算编程<a name="ZH-CN_TOPIC_0000002600000004"></a>1# Memory矢量计算编程<a name="ZH-CN_TOPIC_0000002600000004"></a>
2 2 
3-本文介绍如何在Ascend C中使用C++ Tensor编程API编写基于Unified Buffer(以下简称UB)的矢量计算代码,该能力是Ascend C最基础、最通用的矢量编程方式。这种基于UB内存的编程方式被称为Memory矢量计算编程。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品支持完整的Memory矢量计算UB直接编程能力;而[NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)虽也支持UB操作,但推荐使用Reg矢量计算编程以获得更高性能。3+本文介绍如何在Ascend C中使用C++ Tensor编程API编写基于Unified Buffer(以下简称UB)的矢量计算代码,该能力是Ascend C最基础、最通用的矢量编程方式。这种基于UB内存的编程方式被称为Memory矢量计算编程。[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)产品支持完整的Memory矢量计算UB直接编程能力;而[NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)虽也支持UB操作,但推荐使用Reg矢量计算编程以获得更高性能。
4 4 
5## Memory矢量编程的基本步骤5## Memory矢量编程的基本步骤
6 6 
@@ -267,7 +267,7 @@ AscendC::Add(dstLocal, src0Local, src1Local, 4096);
267 267 
268AI Core内部执行单元(如MTE2搬运单元、Vector计算单元等)采用异步并行方式运行,当不同单元读写同一存储资源时,易产生数据依赖问题。因此,Memory矢量计算需通过流水同步接口协调执行顺序,确保计算流程正确。Memory矢量计算流程较Cube矩阵计算更为简洁,主要包含三步:数据搬入(Global Memory → UB)、计算(UB)、数据搬出(UB → Global Memory)。三个步骤分别对应PIPE_MTE2、PIPE_V、PIPE_MTE3流水线,需通过核内同步接口协调执行顺序,确保各步骤按序完成。268AI Core内部执行单元(如MTE2搬运单元、Vector计算单元等)采用异步并行方式运行,当不同单元读写同一存储资源时,易产生数据依赖问题。因此,Memory矢量计算需通过流水同步接口协调执行顺序,确保计算流程正确。Memory矢量计算流程较Cube矩阵计算更为简洁,主要包含三步:数据搬入(Global Memory → UB)、计算(UB)、数据搬出(UB → Global Memory)。三个步骤分别对应PIPE_MTE2、PIPE_V、PIPE_MTE3流水线,需通过核内同步接口协调执行顺序,确保各步骤按序完成。
269 269 
270-当开发者进行一个矢量加法计算时([NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品),可通过`Mutex::Lock`&`Mutex::Unlock`的方式完成对这三个步骤的同步。[NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md)产品可使用`SetFlag`&`WaitFlag`实现相同同步效果,详见[同步机制](../基于Tensor的CPP编程/CPPTensor编程概述.md#同步机制)。270+当开发者进行一个矢量加法计算时([NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md)产品),可通过`Mutex::Lock`&`Mutex::Unlock`的方式完成对这三个步骤的同步。[NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md)产品可使用`SetFlag`&`WaitFlag`实现相同同步效果,详见[同步机制](../cpp_tensor_programming/cpp_tensor_programming_overview.md#同步机制)。
271 271 
272```cpp272```cpp
273__global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ float* z)273__global__ __vector__ void add_kernel(__gm__ float* x, __gm__ float* y, __gm__ float* z)
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md+4-4
@@ -1,8 +1,8 @@
1# Reg矢量计算编程<a name="ZH-CN_TOPIC_0000002509863892"></a>1# Reg矢量计算编程<a name="ZH-CN_TOPIC_0000002509863892"></a>
2 2 
3-本文介绍如何使用基础API(C++模板接口)编写Reg矢量计算代码。基础API与[Reg矢量计算编程(语言扩展C API)](../基于指针的C语言编程/Reg矢量计算编程.md)描述的是同一套Reg矢量硬件能力,功能语义一致,主要区别在于API命名、类型表达和可配置参数的表达方式。3+本文介绍如何使用基础API(C++模板接口)编写Reg矢量计算代码。基础API与[Reg矢量计算编程(语言扩展C API)](../c_pointer_programming/reg_vector_computation.md)描述的是同一套Reg矢量硬件能力,功能语义一致,主要区别在于API命名、类型表达和可配置参数的表达方式。
4 4 
5-Reg矢量编程的硬件原理、内存层级、VF函数执行域、流水线同步、Hardware Loop、VF融合等与API接口命名无关的内容,请参见[Reg矢量计算编程(语言扩展C API)](../基于指针的C语言编程/Reg矢量计算编程.md)。本文只说明基础API的接口定位、模板参数、数据类型体系、API分类和典型调用方式。5+Reg矢量编程的硬件原理、内存层级、VF函数执行域、流水线同步、Hardware Loop、VF融合等与API接口命名无关的内容,请参见[Reg矢量计算编程(语言扩展C API)](../c_pointer_programming/reg_vector_computation.md)。本文只说明基础API的接口定位、模板参数、数据类型体系、API分类和典型调用方式。
6 6 
7## 基础API定位<a name="section_part1"></a>7## 基础API定位<a name="section_part1"></a>
8 8 
@@ -120,7 +120,7 @@ AscendC::Reg::Add<T, AscendC::Reg::MaskMergeMode::MERGING>(dstReg, src0Reg, src1
120| 搬入非对齐寄存器 | `UnalignRegForLoad` | 连续非对齐搬入的临时缓存 |120| 搬入非对齐寄存器 | `UnalignRegForLoad` | 连续非对齐搬入的临时缓存 |
121| 搬出非对齐寄存器 | `UnalignRegForStore` | 连续非对齐搬出的临时缓存 |121| 搬出非对齐寄存器 | `UnalignRegForStore` | 连续非对齐搬出的临时缓存 |
122 122 
123-`RegTensor`和`MaskReg`等寄存器对象只能作为整体使用,不能按C++数组方式访问其中某个元素。相关硬件含义、宽度、mask bit对应关系请参考[Reg矢量计算编程(语言扩展C API)](../基于指针的C语言编程/Reg矢量计算编程.md)中“寄存器类型与申请”章节。123+`RegTensor`和`MaskReg`等寄存器对象只能作为整体使用,不能按C++数组方式访问其中某个元素。相关硬件含义、宽度、mask bit对应关系请参考[Reg矢量计算编程(语言扩展C API)](../c_pointer_programming/reg_vector_computation.md)中“寄存器类型与申请”章节。
124 124 
125### 与LocalTensor衔接125### 与LocalTensor衔接
126 126 
@@ -256,7 +256,7 @@ AscendC::Reg::LocalMemBar<AscendC::Reg::MemType::VEC_STORE,
256AscendC::Reg::Load(srcReg, dstAddr);256AscendC::Reg::Load(srcReg, dstAddr);
257```257```
258 258 
259-何时需要同步与API命名无关,判断规则请参考[Reg矢量计算编程(语言扩展C API)](../基于指针的C语言编程/Reg矢量计算编程.md)中的“流水线同步”章节。259+何时需要同步与API命名无关,判断规则请参考[Reg矢量计算编程(语言扩展C API)](../c_pointer_programming/reg_vector_computation.md)中的“流水线同步”章节。
260 260 
261## 编程示例<a name="section_part6"></a>261## 编程示例<a name="section_part6"></a>
262 262 
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md+5-5
@@ -60,7 +60,7 @@
60 60 
61 在上一次的数据计算和本次数据搬入之间,插入V\_MTE2(MTE2搬运流水等待矢量计算流水)同步事件,确保上一次的数据计算完成后,本次的数据再进行搬入。防止本次的数据会覆盖掉上一次未计算完成的数据;在上一次的数据搬出和本次数据计算之间,插入MTE3\_V(矢量计算流水等待MTE3搬运流水)同步事件,确保上一次的数据搬出后,再进行本次数据的计算。防止本次的数据会覆盖掉上一次未搬出的数据。61 在上一次的数据计算和本次数据搬入之间,插入V\_MTE2(MTE2搬运流水等待矢量计算流水)同步事件,确保上一次的数据计算完成后,本次的数据再进行搬入。防止本次的数据会覆盖掉上一次未计算完成的数据;在上一次的数据搬出和本次数据计算之间,插入MTE3\_V(矢量计算流水等待MTE3搬运流水)同步事件,确保上一次的数据搬出后,再进行本次数据的计算。防止本次的数据会覆盖掉上一次未搬出的数据。
62 62 
63-上述的同步逻辑在使用Pipe编程框架时,框架会使用EnQue/DeQue/AllocTensor/FreeTensor进行封装。您可以通过[TPipe-TQue框架编程原理](../基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.md)来了解应该如何在使用静态Tensor编程方式时手动进行同步控制。63+上述的同步逻辑在使用Pipe编程框架时,框架会使用EnQue/DeQue/AllocTensor/FreeTensor进行封装。您可以通过[TPipe-TQue框架编程原理](../tpipe_tque_programming/tpipe_tque_principles.md)来了解应该如何在使用静态Tensor编程方式时手动进行同步控制。
64 64 
65```65```
66 AscendC::LocalTensor<half> xLocal(AscendC::TPosition::VECCALC, xAddr, MAX_DATA_COPY_LEN);66 AscendC::LocalTensor<half> xLocal(AscendC::TPosition::VECCALC, xAddr, MAX_DATA_COPY_LEN);
@@ -176,7 +176,7 @@
176 176 
177- 开发者不能使用TPipe/TQue/TQueBind/TBufPool等框架接口,和上述框架接口混用可能会出现未定义行为。177- 开发者不能使用TPipe/TQue/TQueBind/TBufPool等框架接口,和上述框架接口混用可能会出现未定义行为。
178- 只能使用部分API。具体支持的API列表见[支持的API范围](#section2633193623711)。因为不在列表范围内的API内部依赖TPipe分配事件ID,可能会和开发者定义的事件ID产生冲突。178- 只能使用部分API。具体支持的API列表见[支持的API范围](#section2633193623711)。因为不在列表范围内的API内部依赖TPipe分配事件ID,可能会和开发者定义的事件ID产生冲突。
179-- 对于支持的API,仍需关注其内部是否依赖Ascend C预留的UB空间(针对 [NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),Select等API内部使用了8KB的预留UB空间,用于存储中间数据;针对 [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),Exp等API内部使用了2KB的预留UB空间,用于指令兼容或存储中间数据)。若开启[--cce-disable-asc-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#常用的编译选项)编译选项,在对应产品版本下调用相关API会触发编译期报错。具体API范围见[使用预留UB空间的API列表](#section_reserved_ubuf_api)。179+- 对于支持的API,仍需关注其内部是否依赖Ascend C预留的UB空间(针对 [NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md#npu-arch),Select等API内部使用了8KB的预留UB空间,用于存储中间数据;针对 [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md#npu-arch),Exp等API内部使用了2KB的预留UB空间,用于指令兼容或存储中间数据)。若开启[--cce-disable-asc-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#常用的编译选项)编译选项,在对应产品版本下调用相关API会触发编译期报错。具体API范围见[使用预留UB空间的API列表](#section_reserved_ubuf_api)。
180- 同步事件需要由开发者使用[SetFlag/WaitFlag\(ISASI\)](../../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/SetFlag_WaitFlag_ISASI.md)和[PipeBarrier\(ISASI\)](../../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)手动插入,事件的类型和事件ID由开发者自行管理,但需要注意事件ID不能使用6和7(可能与内部使用的事件ID出现冲突,进而出现未定义行为)。180- 同步事件需要由开发者使用[SetFlag/WaitFlag\(ISASI\)](../../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/SetFlag_WaitFlag_ISASI.md)和[PipeBarrier\(ISASI\)](../../../../../api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)手动插入,事件的类型和事件ID由开发者自行管理,但需要注意事件ID不能使用6和7(可能与内部使用的事件ID出现冲突,进而出现未定义行为)。
181- 由于需要使用SetFlag/WaitFlag/PipeBarrier底层同步接口(属于ISASI硬件体系结构相关的接口),无法保证算子跨硬件版本兼容。181- 由于需要使用SetFlag/WaitFlag/PipeBarrier底层同步接口(属于ISASI硬件体系结构相关的接口),无法保证算子跨硬件版本兼容。
182- Kernel入口处需要开发者手动调用[InitSocState](../../../../../api/SIMD-API/basic_api/tool_interface/system_init/InitSocState.md)接口用来初始化全局状态寄存器。因为全局状态寄存器处于不确定状态,如果不调用该接口,可能导致算子执行过程中出现未定义行为。在TPipe框架编程中,初始化过程由TPipe完成,无需开发者关注。182- Kernel入口处需要开发者手动调用[InitSocState](../../../../../api/SIMD-API/basic_api/tool_interface/system_init/InitSocState.md)接口用来初始化全局状态寄存器。因为全局状态寄存器处于不确定状态,如果不调用该接口,可能导致算子执行过程中出现未定义行为。在TPipe框架编程中,初始化过程由TPipe完成,无需开发者关注。
@@ -931,13 +931,13 @@
931 931 
932## 使用预留UB空间的API范围<a name="section_reserved_ubuf_api"></a>932## 使用预留UB空间的API范围<a name="section_reserved_ubuf_api"></a>
933 933 
934-以下API内部会使用Ascend C预留的UB空间。当开启[--cce-disable-asc-reserved-ubuf](../../../编译与运行/算子编译/AI-Core算子编译基本用法.md#常用的编译选项)编译选项后,在对应产品版本下调用相关API会触发编译期报错。由于同一API使用预留UB空间的情况在不同NPU架构下有差异,开启该编译选项后,需要手动调整API调用方式或替换为不依赖预留UB空间的实现,才能完成兼容性迁移。934+以下API内部会使用Ascend C预留的UB空间。当开启[--cce-disable-asc-reserved-ubuf](../../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#常用的编译选项)编译选项后,在对应产品版本下调用相关API会触发编译期报错。由于同一API使用预留UB空间的情况在不同NPU架构下有差异,开启该编译选项后,需要手动调整API调用方式或替换为不依赖预留UB空间的实现,才能完成兼容性迁移。
935 935 
936>[!CAUTION]注意936>[!CAUTION]注意
937> 同一接口若提供多个重载原型,可能只有部分原型会使用UB预留空间。937> 同一接口若提供多个重载原型,可能只有部分原型会使用UB预留空间。
938 938 
939<!-- npu="A3,910b" id5 -->939<!-- npu="A3,910b" id5 -->
940-**表5** 针对 [NPU架构版本2201](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),使用预留UB空间的API范围940+**表5** 针对 [NPU架构版本2201](../../../language_extension/simd_builtin_keywords.md#npu-arch),使用预留UB空间的API范围
941 941 
942| API类别 | API名 |942| API类别 | API名 |
943| --- | --- |943| --- | --- |
@@ -946,7 +946,7 @@
946<!-- end id5 -->946<!-- end id5 -->
947 947 
948<!-- npu="950" id6 -->948<!-- npu="950" id6 -->
949-**表6** 针对 [NPU架构版本3510](../../../语言扩展层/SIMD-BuiltIn关键字.md#npu-arch),使用预留UB空间的API范围949+**表6** 针对 [NPU架构版本3510](../../../language_extension/simd_builtin_keywords.md#npu-arch),使用预留UB空间的API范围
950 950 
951| API类别 | API名 |951| API类别 | API名 |
952| --- | --- |952| --- | --- |
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md+5-5
@@ -11,8 +11,8 @@
11 11 
12 除了需要按照C/C++函数声明的方式定义核函数之外,还要为核函数加上额外的函数类型限定符。12 除了需要按照C/C++函数声明的方式定义核函数之外,还要为核函数加上额外的函数类型限定符。
13 13 
14- 必须使用\_\_global\_\_函数类型限定符来标识它是一个核函数,可以被<<<...\>\>\>调用。同时,需要根据算子实际执行的硬件单元,选择以下一种函数执行空间限定符,详情参考[函数执行空间限定符](../../语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518):14+ 必须使用\_\_global\_\_函数类型限定符来标识它是一个核函数,可以被<<<...\>\>\>调用。同时,需要根据算子实际执行的硬件单元,选择以下一种函数执行空间限定符,详情参考[函数执行空间限定符](../../language_extension/simd_builtin_keywords.md#section1074418132518):
15- - \_\_aicore\_\_:标识该核函数在设备端AI核上执行,不区分具体核类型(通常用于[耦合模式](../../高级编程/硬件实现/基本架构.md#section1574769433))。15+ - \_\_aicore\_\_:标识该核函数在设备端AI核上执行,不区分具体核类型(通常用于[耦合模式](../../advanced_programming/hardware_implementation/basic_architecture.md#section1574769433))。
16 - \_\_vector\_\_:标识该核函数在设备端Vector核上执行,适用于仅包含Vector计算的算子。16 - \_\_vector\_\_:标识该核函数在设备端Vector核上执行,适用于仅包含Vector计算的算子。
17 - \_\_cube\_\_:标识该核函数在设备端Cube核上执行,适用于仅包含Cube计算的算子。17 - \_\_cube\_\_:标识该核函数在设备端Cube核上执行,适用于仅包含Cube计算的算子。
18 - \_\_mix\_\_:标识该核函数同时在Cube核和Vector核上执行,适用于包含Vector和Cube融合计算的算子。18 - \_\_mix\_\_:标识该核函数同时在Cube核和Vector核上执行,适用于包含Vector和Cube融合计算的算子。
@@ -59,9 +59,9 @@ Host侧通过内核调用符<<<...>>>的语法形式调用核函数,如下所
59kernel_name<<<numBlocks, dynUBufSize, stream>>>(argument list);59kernel_name<<<numBlocks, dynUBufSize, stream>>>(argument list);
60```60```
61 61 
62-`<<<...>>>`内的参数为核函数的执行配置,由3个参数决定,详细用法请参考[核函数配置](../../语言扩展层/SIMD-BuiltIn关键字.md#核函数配置):62+`<<<...>>>`内的参数为核函数的执行配置,由3个参数决定,详细用法请参考[核函数配置](../../language_extension/simd_builtin_keywords.md#核函数配置):
63 63 
64-- numBlocks:规定了核函数将会在几个核上执行,对于不同的硬件架构和算子类型,numBlocks的设置规则有一些区别,详见[核函数配置](../../语言扩展层/SIMD-BuiltIn关键字.md#核函数配置)。每个执行该核函数的核会被分配一个逻辑ID,即block\_idx,可以在核函数的实现中使用内置变量[block_idx](../../语言扩展层/SIMD-BuiltIn关键字.md#内置变量)获取。需要注意的是,在使用`__mix__`函数执行空间限定符的场景下,处在同一核上的Vector Core的block_idx取值相同,详细说明和示例请参考[内置变量](../../语言扩展层/SIMD-BuiltIn关键字.md#内置变量);64+- numBlocks:规定了核函数将会在几个核上执行,对于不同的硬件架构和算子类型,numBlocks的设置规则有一些区别,详见[核函数配置](../../language_extension/simd_builtin_keywords.md#核函数配置)。每个执行该核函数的核会被分配一个逻辑ID,即block\_idx,可以在核函数的实现中使用内置变量[block_idx](../../language_extension/simd_builtin_keywords.md#内置变量)获取。需要注意的是,在使用`__mix__`函数执行空间限定符的场景下,处在同一核上的Vector Core的block_idx取值相同,详细说明和示例请参考[内置变量](../../language_extension/simd_builtin_keywords.md#内置变量);
65- dynUBufSize:Dynamic Unified Buffer Size,是配置UB动态内存分配的空间的大小(仅限UB,不包括L1 Buffer等),单位为bytes,默认设置为0;65- dynUBufSize:Dynamic Unified Buffer Size,是配置UB动态内存分配的空间的大小(仅限UB,不包括L1 Buffer等),单位为bytes,默认设置为0;
66- stream:类型为aclrtStream,stream用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在device上执行,默认设置为nullptr。stream创建等管理接口请参考[《Runtime运行时API》](https://hiascend.com/document/redirect/CannCommunityRuntimeApi)。66- stream:类型为aclrtStream,stream用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在device上执行,默认设置为nullptr。stream创建等管理接口请参考[《Runtime运行时API》](https://hiascend.com/document/redirect/CannCommunityRuntimeApi)。
67 67 
@@ -99,7 +99,7 @@ Ascend C提供了内置变量block_idx和block_num,帮助每个核精准定位
99- sub_block_num:获取当前组合内Vector核的数量(即每个组合中AIV的个数)。99- sub_block_num:获取当前组合内Vector核的数量(即每个组合中AIV的个数)。
100- sub_block_idx:获取当前Vector核在组合内的索引,取值范围为[0, sub_block_num - 1]。100- sub_block_idx:获取当前Vector核在组合内的索引,取值范围为[0, sub_block_num - 1]。
101 101 
102-在Mix场景中,AIV核的完整逻辑位置由block_idx和sub_block_idx共同确定:`logic_idx = block_idx * sub_block_num + sub_block_idx`。开发者应使用[GetBlockIdx](../../../../api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetBlockIdx.md)和[GetSubBlockIdx](../../../../api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetSubBlockIdx_ISASI.md) API组合获取逻辑位置,而非直接使用内置变量(更多说明参见[内置变量](../../语言扩展层/SIMD-BuiltIn关键字.md#内置变量)中的注意事项)。102+在Mix场景中,AIV核的完整逻辑位置由block_idx和sub_block_idx共同确定:`logic_idx = block_idx * sub_block_num + sub_block_idx`。开发者应使用[GetBlockIdx](../../../../api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetBlockIdx.md)和[GetSubBlockIdx](../../../../api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetSubBlockIdx_ISASI.md) API组合获取逻辑位置,而非直接使用内置变量(更多说明参见[内置变量](../../language_extension/simd_builtin_keywords.md#内置变量)中的注意事项)。
103 103 
104以下示例展示了如何利用block_idx和block_num,将总长度为TOTAL_LENGTH的一维数据均匀分配给多个核进行处理:104以下示例展示了如何利用block_idx和block_num,将总长度为TOTAL_LENGTH的一维数据均匀分配给多个核进行处理:
105 105 
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/概述.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/overview.md+12-12
@@ -1,40 +1,40 @@
1# AI Core SIMD编程模型概述1# AI Core SIMD编程模型概述
2 2 
3## 引言3## 引言
4-SIMD并行机制是AI Core的核心算力支撑,承担了整机90%以上的计算吞吐量。因此,本章将以**SIMD编程模型**为核心主线,遵循「宏观架构—硬件调度—代码落地」的递进逻辑,完整覆盖SIMD算子开发全链路:阐述多AI Core集群的并行任务分发机制,拆解单AI Core内部异构计算单元的任务调度逻辑,并逐层讲解如何基于差异化的C/C++编程接口,完成[算子Kernel](./核函数.md)计算逻辑的开发。4+SIMD并行机制是AI Core的核心算力支撑,承担了整机90%以上的计算吞吐量。因此,本章将以**SIMD编程模型**为核心主线,遵循「宏观架构—硬件调度—代码落地」的递进逻辑,完整覆盖SIMD算子开发全链路:阐述多AI Core集群的并行任务分发机制,拆解单AI Core内部异构计算单元的任务调度逻辑,并逐层讲解如何基于差异化的C/C++编程接口,完成[算子Kernel](./kernel_function.md)计算逻辑的开发。
5 5 
6## 异构并行计算核心模型:SPMD嵌套SIMD编程范式6## 异构并行计算核心模型:SPMD嵌套SIMD编程范式
7 7 
8昇腾NPU异构并行体系采用**外层多核SPMD(Single Program Multiple Data)并行 \+ 内层单核SIMD细粒度并行**的双层融合架构,是AI Core算子开发的核心理论根基。所有SIMD算子的并行逻辑、数据拆分策略、任务调度机制,均基于该编程范式实现。8昇腾NPU异构并行体系采用**外层多核SPMD(Single Program Multiple Data)并行 \+ 内层单核SIMD细粒度并行**的双层融合架构,是AI Core算子开发的核心理论根基。所有SIMD算子的并行逻辑、数据拆分策略、任务调度机制,均基于该编程范式实现。
9 9 
10-**多核集群层面遵循SPMD编程模型**:将每个AI Core抽象成一个Block,通过内置变量[block_idx](../../语言扩展层/SIMD-BuiltIn关键字.md)作为Block索引。每个Block执行同一份算子Kernel代码,一般基于[block_idx](../../语言扩展层/SIMD-BuiltIn关键字.md)划分每个Block的数据处理范围,实现多核负载均衡与并行调度。10+**多核集群层面遵循SPMD编程模型**:将每个AI Core抽象成一个Block,通过内置变量[block_idx](../../language_extension/simd_builtin_keywords.md)作为Block索引。每个Block执行同一份算子Kernel代码,一般基于[block_idx](../../language_extension/simd_builtin_keywords.md)划分每个Block的数据处理范围,实现多核负载均衡与并行调度。
11 11 
12-**单核计算层面依托SIMD并行机制**:单个AI Core内部基于[SIMD](../编程模型概述.md)机制实现细粒度并行,依靠硬件专用计算单元,单条指令批量完成多组同质数据的并行运算,充分挖掘单AI Core的极致算力潜力。12+**单核计算层面依托SIMD并行机制**:单个AI Core内部基于[SIMD](../programming_model_overview.md)机制实现细粒度并行,依靠硬件专用计算单元,单条指令批量完成多组同质数据的并行运算,充分挖掘单AI Core的极致算力潜力。
13 13 
14## 硬件底层支撑:AI Core计算单元架构与算子分类14## 硬件底层支撑:AI Core计算单元架构与算子分类
15AI Core是昇腾NPU的基础核心计算单元,采用「控制单元\+异构计算单元\+分级本地存储」的经典架构,各组件分工明确、协同联动。硬件的能力边界直接决定算子的计算形态与开发方式,下文将详细介绍AI Core核心硬件组件,以及基于硬件能力划分的标准化算子类型。15AI Core是昇腾NPU的基础核心计算单元,采用「控制单元\+异构计算单元\+分级本地存储」的经典架构,各组件分工明确、协同联动。硬件的能力边界直接决定算子的计算形态与开发方式,下文将详细介绍AI Core核心硬件组件,以及基于硬件能力划分的标准化算子类型。
16 16 
17### AI Core核心硬件组件17### AI Core核心硬件组件
18- **标量处理单元**:作为AI Core的控制中枢,主要负责地址偏移计算、指令调度与发射,统筹管控其他运算单元的指令执行流程,支撑分支、循环等各类控制流逻辑的正常运行。18- **标量处理单元**:作为AI Core的控制中枢,主要负责地址偏移计算、指令调度与发射,统筹管控其他运算单元的指令执行流程,支撑分支、循环等各类控制流逻辑的正常运行。
19-- **向量处理单元[Vector](../../高级编程/硬件实现/基本架构.md)**:遵循标准SIMD并行计算逻辑,专职执行各类向量指令,支持单指令多数据并行运算,适配元素级计算、逻辑运算、数据重组等灵活性要求高的计算场景。19+- **向量处理单元[Vector](../../advanced_programming/hardware_implementation/basic_architecture.md)**:遵循标准SIMD并行计算逻辑,专职执行各类向量指令,支持单指令多数据并行运算,适配元素级计算、逻辑运算、数据重组等灵活性要求高的计算场景。
20-- **矩阵运算单元[Cube](../../高级编程/硬件实现/基本架构.md)**:高密度张量专用算力单元,面向矩阵乘加、高维张量卷积等算力密集型场景深度优化。硬件原生支持批量矩阵运算,典型能力为单次完成一组float16类型16×16矩阵乘法,是AI模型训练与推理场景的核心算力支撑。20+- **矩阵运算单元[Cube](../../advanced_programming/hardware_implementation/basic_architecture.md)**:高密度张量专用算力单元,面向矩阵乘加、高维张量卷积等算力密集型场景深度优化。硬件原生支持批量矩阵运算,典型能力为单次完成一组float16类型16×16矩阵乘法,是AI模型训练与推理场景的核心算力支撑。
21 21 
22-- **本地存储**:AI Core片内高速存储体系,用于缓存计算中间数据,规避频繁访问低速全局内存的性能损耗,降低访存延迟。其中Cube计算单元配套[L1 Buffer](../../高级编程/硬件实现/基本架构.md)、[L0C Buffer](../../高级编程/硬件实现/基本架构.md)等;Vector计算单元配套统一缓存[UB(Unified Buffer)](../../高级编程/硬件实现/基本架构.md)。<!-- npu="950" id1 -->Ascend 950PR/Ascend 950DT的AI Core向量单元新增可编程向量寄存器(Register),单寄存器大小为256B。<!-- end id1 -->22+- **本地存储**:AI Core片内高速存储体系,用于缓存计算中间数据,规避频繁访问低速全局内存的性能损耗,降低访存延迟。其中Cube计算单元配套[L1 Buffer](../../advanced_programming/hardware_implementation/basic_architecture.md)、[L0C Buffer](../../advanced_programming/hardware_implementation/basic_architecture.md)等;Vector计算单元配套统一缓存[UB(Unified Buffer)](../../advanced_programming/hardware_implementation/basic_architecture.md)。<!-- npu="950" id1 -->Ascend 950PR/Ascend 950DT的AI Core向量单元新增可编程向量寄存器(Register),单寄存器大小为256B。<!-- end id1 -->
23 23 
24 24 
25### 基于硬件单元的三类标准算子25### 基于硬件单元的三类标准算子
26根据算子核心计算逻辑对硬件单元的依赖差异,AI Core算子可划分为三大标准类型,通过专属修饰符标准化硬件资源调度规则,统一全域算子开发规范:26根据算子核心计算逻辑对硬件单元的依赖差异,AI Core算子可划分为三大标准类型,通过专属修饰符标准化硬件资源调度规则,统一全域算子开发规范:
27-- **矢量类算子**:核心计算逻辑完全由Vector计算单元承载,无矩阵密集运算,以元素级、逻辑类、数据重组类计算为主,适配访存密集、灵活度要求高的场景。核函数通过[\_\_vector\_\_](../../语言扩展层/SIMD-BuiltIn关键字.md)修饰。27+- **矢量类算子**:核心计算逻辑完全由Vector计算单元承载,无矩阵密集运算,以元素级、逻辑类、数据重组类计算为主,适配访存密集、灵活度要求高的场景。核函数通过[\_\_vector\_\_](../../language_extension/simd_builtin_keywords.md)修饰。
28-- **矩阵类算子**:核心计算逻辑完全由Cube计算单元承载,以大维度矩阵乘、张量卷积等规整算力密集计算为主,追求极致硬件吞吐,核函数通过 [\_\_cube\_\_](../../语言扩展层/SIMD-BuiltIn关键字.md)修饰。28+- **矩阵类算子**:核心计算逻辑完全由Cube计算单元承载,以大维度矩阵乘、张量卷积等规整算力密集计算为主,追求极致硬件吞吐,核函数通过 [\_\_cube\_\_](../../language_extension/simd_builtin_keywords.md)修饰。
29-- **融合类算子**:工业界主流复杂算子形态,可联动调度Cube计算单元与Vector计算单元协同计算,兼顾矩阵高密度算力运算与向量灵活逻辑处理,核函数通过[\_\_mix\_\_(cube, vec)](../../语言扩展层/SIMD-BuiltIn关键字.md)修饰,其中\_\_mix\_\_(cube, vec)表示启动的Cube核与Vector核的配比,支持的配比包括(1, 0)、(0, 1)、(1, 1)、(1, 2)。29+- **融合类算子**:工业界主流复杂算子形态,可联动调度Cube计算单元与Vector计算单元协同计算,兼顾矩阵高密度算力运算与向量灵活逻辑处理,核函数通过[\_\_mix\_\_(cube, vec)](../../language_extension/simd_builtin_keywords.md)修饰,其中\_\_mix\_\_(cube, vec)表示启动的Cube核与Vector核的配比,支持的配比包括(1, 0)、(0, 1)、(1, 1)、(1, 2)。
30 30 
31-> 📌 **提示**:NPU硬件架构可分为[分离模式](../../高级编程/硬件实现/基本架构.md)和 [耦合模式](../../高级编程/硬件实现/基本架构.md)。分离模式下,两类计算单元各自配备独立标量控制单元;耦合模式下,Cube与Vector单元共享同一个标量控制单元。其中\_\_mix\_\_修饰符仅在分离模式下生效,耦合模式硬件不支持该特性。更详尽的硬件架构信息请参见 [硬件实现](../../高级编程/硬件实现/基本架构.md)章节。31+> 📌 **提示**:NPU硬件架构可分为[分离模式](../../advanced_programming/hardware_implementation/basic_architecture.md)和 [耦合模式](../../advanced_programming/hardware_implementation/basic_architecture.md)。分离模式下,两类计算单元各自配备独立标量控制单元;耦合模式下,Cube与Vector单元共享同一个标量控制单元。其中\_\_mix\_\_修饰符仅在分离模式下生效,耦合模式硬件不支持该特性。更详尽的硬件架构信息请参见 [硬件实现](../../advanced_programming/hardware_implementation/basic_architecture.md)章节。
32 32 
33## 基于AI Core的SIMD算子开发通用步骤33## 基于AI Core的SIMD算子开发通用步骤
34 34 
35-基于SPMD\+SIMD双层编程模型,所有AI Core核运行同一份Kernel核函数,通过 **[block_idx](../../语言扩展层/SIMD-BuiltIn关键字.md)** 区分数据分片,实现多核并行计算。因此,算子开发的首要步骤为 **Tiling(分块)设计**:对全局超大张量数据做均匀切分,为每个AI Core分配独立数据块,保障多核负载均衡。35+基于SPMD\+SIMD双层编程模型,所有AI Core核运行同一份Kernel核函数,通过 **[block_idx](../../language_extension/simd_builtin_keywords.md)** 区分数据分片,实现多核并行计算。因此,算子开发的首要步骤为 **Tiling(分块)设计**:对全局超大张量数据做均匀切分,为每个AI Core分配独立数据块,保障多核负载均衡。
36 36 
37-此外,与传统CPU串行编程、[SIMT](../编程模型概述.md)线程编程不同,AI Core SIMD编程的显著特征是**显式分层访存**:开发者需手动管控数据流转,将数据从Global Memory(全局内存,又称Device Memory,简称GM)搬运至AI Core片内Local Memory(本地内存,典型包含L1 Buffer、UB)完成计算,最终将运算结果写回全局内存。37+此外,与传统CPU串行编程、[SIMT](../programming_model_overview.md)线程编程不同,AI Core SIMD编程的显著特征是**显式分层访存**:开发者需手动管控数据流转,将数据从Global Memory(全局内存,又称Device Memory,简称GM)搬运至AI Core片内Local Memory(本地内存,典型包含L1 Buffer、UB)完成计算,最终将运算结果写回全局内存。
38 38 
39### 算子Kernel通用开发四步法39### 算子Kernel通用开发四步法
40基于SIMD的AI Core算子开发包含四个主要步骤,适配绝大多数算子开发场景:40基于SIMD的AI Core算子开发包含四个主要步骤,适配绝大多数算子开发场景:
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md+3-3
@@ -19,9 +19,9 @@
19 19 
20基于这套机制,Ascend C固化了矢量、矩阵、融合三类算子的标准化流水线编程范式。下文将结合硬件特性与工程实例逐一展开。20基于这套机制,Ascend C固化了矢量、矩阵、融合三类算子的标准化流水线编程范式。下文将结合硬件特性与工程实例逐一展开。
21 21 
22-- **[矢量编程范式](./TPipe-TQue框架编程范式.md#section116515238815)**22+- **[矢量编程范式](./tpipe_tque_paradigm.md#section116515238815)**
23-- **[矩阵编程范式](./TPipe-TQue框架编程范式.md#section8213173433312)**23+- **[矩阵编程范式](./tpipe_tque_paradigm.md#section8213173433312)**
24-- **[融合算子编程范式](./TPipe-TQue框架编程范式.md#section57815481855)**24+- **[融合算子编程范式](./tpipe_tque_paradigm.md#section57815481855)**
25 25 
26## 矢量编程范式<a name="section116515238815"></a>26## 矢量编程范式<a name="section116515238815"></a>
27 27 
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程原理.mddocs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_principles.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/抽象硬件架构.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/abstract_hardware_architecture.md+1-1
@@ -14,4 +14,4 @@ AI Core上的SIMT(Single Instruction Multiple Thread,单指令多线程)
14- L2 Cache是所有Vector Core共享的高速缓存,位于Global Memory与各Vector Core的Data Cache之间,用于缓存全局内存数据以减少访问延迟。L2 Cache由硬件自动管理,用户无需显式配置。14- L2 Cache是所有Vector Core共享的高速缓存,位于Global Memory与各Vector Core的Data Cache之间,用于缓存全局内存数据以减少访问延迟。L2 Cache由硬件自动管理,用户无需显式配置。
15- SIMT模式中,读取Global Memory上的数据时,通过Data Cache单元完成数据中转,数据流经由Global Memory到Data Cache,再从Data Cache到寄存器。Data Cache是Unified Buffer中预留的一部分空间,实际大小由用户自主分配。15- SIMT模式中,读取Global Memory上的数据时,通过Data Cache单元完成数据中转,数据流经由Global Memory到Data Cache,再从Data Cache到寄存器。Data Cache是Unified Buffer中预留的一部分空间,实际大小由用户自主分配。
16 16 
17-若您对上述内容中的线程、线程块等概念不熟悉,建议查阅[线程架构](线程架构.md)了解更多SIMT线程架构知识;同时,您也可以通过阅读[内存层级](内存层级.md),了解如何在Unified Buffer中配置共享内存与Data Cache的空间大小。17+若您对上述内容中的线程、线程块等概念不熟悉,建议查阅[线程架构](thread_architecture.md)了解更多SIMT线程架构知识;同时,您也可以通过阅读[内存层级](memory_hierarchy.md),了解如何在Unified Buffer中配置共享内存与Data Cache的空间大小。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/AI-Core-SIMT编程.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/ai_core_simt_programming.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/原子操作.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/atomic_operations.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/核函数.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/kernel_function.md+6-6
@@ -1,6 +1,6 @@
1# 核函数<a name="ZH-CN_TOPIC_0000002554438935"></a>1# 核函数<a name="ZH-CN_TOPIC_0000002554438935"></a>
2 2 
3-正如在[概述](./概述.md)中所介绍的,能够在AI处理器(NPU)上并行执行、并由主机端(Host)发起调用的函数被称为核函数(Kernel)。核函数被设计为由大量线程(Threads)同时并行运行。每个线程都拥有独立的寄存器和栈,它们协同工作以完成海量的数据计算任务。3+正如在[概述](./overview.md)中所介绍的,能够在AI处理器(NPU)上并行执行、并由主机端(Host)发起调用的函数被称为核函数(Kernel)。核函数被设计为由大量线程(Threads)同时并行运行。每个线程都拥有独立的寄存器和栈,它们协同工作以完成海量的数据计算任务。
4 4 
5## 核函数的定义<a name="section962384613331"></a>5## 核函数的定义<a name="section962384613331"></a>
6 6 
@@ -39,16 +39,16 @@ Host侧通过核函数调用符<<<...>>>的语法形式调用核函数,如下
39kernel_name<<<blocks_per_grid, threads_per_block, dyn_ubuf_size, stream>>>(argument list)39kernel_name<<<blocks_per_grid, threads_per_block, dyn_ubuf_size, stream>>>(argument list)
40```40```
41 41 
42-`<<<...>>>`内的参数为核函数的执行配置,由4个参数决定,详细用法请参考[核函数配置](../../语言扩展层/SIMT-BuiltIn关键字.md#section97005415463):42+`<<<...>>>`内的参数为核函数的执行配置,由4个参数决定,详细用法请参考[核函数配置](../../language_extension/simt_builtin_keywords.md#section97005415463):
43 43 
44-- blocks\_per\_grid:[dim3](../../语言扩展层/SIMT-BuiltIn关键字.md#内置结构体)类型,用于指定网格(grid)的维度与规模,blocks\_per\_grid.x \* blocks\_per\_grid.y \* blocks\_per\_grid.z等于启动的线程块总数,不得大于65535。44+- blocks\_per\_grid:[dim3](../../language_extension/simt_builtin_keywords.md#内置结构体)类型,用于指定网格(grid)的维度与规模,blocks\_per\_grid.x \* blocks\_per\_grid.y \* blocks\_per\_grid.z等于启动的线程块总数,不得大于65535。
45-- threads\_per\_block:[dim3](../../语言扩展层/SIMT-BuiltIn关键字.md#内置结构体)类型,用于指定每个线程块(block)的维度与规模,threads\_per\_block.x \* threads\_per\_block.y \* threads\_per\_block.z等于每个线程块包含的线程数,需要小于等于\_\_launch\_bounds\_\_配置。45+- threads\_per\_block:[dim3](../../language_extension/simt_builtin_keywords.md#内置结构体)类型,用于指定每个线程块(block)的维度与规模,threads\_per\_block.x \* threads\_per\_block.y \* threads\_per\_block.z等于每个线程块包含的线程数,需要小于等于\_\_launch\_bounds\_\_配置。
46-- <a name="li12421238101815"></a>dyn\_ubuf\_size:size_t类型,该参数指定除静态分配的内存外,本次调用为每个线程块动态分配的共享内存字节数,单位为bytes,默认设置为0。具体用法请参考[共享内存](./内存层级.md#section66329146410)中的“动态申请”方式;46+- <a name="li12421238101815"></a>dyn\_ubuf\_size:size_t类型,该参数指定除静态分配的内存外,本次调用为每个线程块动态分配的共享内存字节数,单位为bytes,默认设置为0。具体用法请参考[共享内存](./memory_hierarchy.md#section66329146410)中的“动态申请”方式;
47- stream:aclrtStream类型指针,指定关联的流,用于维护异步操作的执行顺序。47- stream:aclrtStream类型指针,指定关联的流,用于维护异步操作的执行顺序。
48 48 
49## Grid与Thread索引内置变量49## Grid与Thread索引内置变量
50 50 
51-在核函数内,Ascend C提供了[内置变量](../../语言扩展层/SIMT-BuiltIn关键字.md#内置变量)来获取执行配置的参数以及线程或线程块的索引。51+在核函数内,Ascend C提供了[内置变量](../../language_extension/simt_builtin_keywords.md#内置变量)来获取执行配置的参数以及线程或线程块的索引。
52 52 
53常用的内置索引变量说明如下:53常用的内置索引变量说明如下:
54- threadIdx:获取当前线程在其所属线程块内的索引。threadIdx.x,threadIdx.y,threadIdx.z分别表示当前线程在3个维度的索引,threadIdx.x的范围为[0, blockDim.x),threadIdx.y的范围为[0, blockDim.y),threadIdx.z的范围为[0, blockDim.z)。54- threadIdx:获取当前线程在其所属线程块内的索引。threadIdx.x,threadIdx.y,threadIdx.z分别表示当前线程在3个维度的索引,threadIdx.x的范围为[0, blockDim.x),threadIdx.y的范围为[0, blockDim.y),threadIdx.z的范围为[0, blockDim.z)。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/内存层级.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/memory_hierarchy.md+3-3
@@ -55,7 +55,7 @@ __global__ void add_custom(float* x, float* y, float* z, uint64_t total_length)
55 55 
56 默认情况下,申请到的静态内存首地址按照数据类型对齐,也支持用户使用`__align__(N)`手动指定对齐。56 默认情况下,申请到的静态内存首地址按照数据类型对齐,也支持用户使用`__align__(N)`手动指定对齐。
57 57 
58-2. 动态申请:用户需要通过<<<\>\>\>中参数[dyn_ubuf_size](核函数.md#li12421238101815)指定动态内存的空间大小,其大小在运行期确定,SIMT编程中可通过以下方式申请使用动态内存。58+2. 动态申请:用户需要通过<<<\>\>\>中参数[dyn_ubuf_size](kernel_function.md#li12421238101815)指定动态内存的空间大小,其大小在运行期确定,SIMT编程中可通过以下方式申请使用动态内存。
59 59 
60 ```cpp60 ```cpp
61 // Device侧:声明动态共享内存61 // Device侧:声明动态共享内存
@@ -99,7 +99,7 @@ __global__ void add_custom(float* x, float* y, float* z, uint64_t total_length)
99 99 
100> [!NOTE]说明100> [!NOTE]说明
101>101>
102-> 用户可选择禁用预留空间,禁用方法为:编译时增加[--cce-disable-vf-stack-reserved-ubuf](../../编译与运行/算子编译/AI-Core算子编译基本用法.md#ZH-CN_TOPIC_0000002462746461)选项。开启该选项后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用,Data Cache空间可按如下公式估算:102+> 用户可选择禁用预留空间,禁用方法为:编译时增加[--cce-disable-vf-stack-reserved-ubuf](../../compilation_and_execution/operator_compilation/ai_core_operator_compilation.md#ZH-CN_TOPIC_0000002462746461)选项。开启该选项后,编译器不再预留该部分UB空间,该空间可作为普通UB空间使用,Data Cache空间可按如下公式估算:
103> ```103> ```
104> Data Cache空间大小 = min(UB总大小(256KB) - 静态内存 - 动态内存, 128KB)104> Data Cache空间大小 = min(UB总大小(256KB) - 静态内存 - 动态内存, 128KB)
105> ```105> ```
@@ -157,7 +157,7 @@ GM上的SIMT栈空间用于保存线程私有运行时状态,按用途分为SI
157 157 
158由上表可知,最大线程数配置越大,每个线程可用的寄存器数量越少。若最大线程数配置过大且单线程计算逻辑复杂,编译器可能因寄存器资源不足,将部分局部变量或中间结果转存至GM上的SIMT通用栈空间,即寄存器溢出(register spill),从而引入额外的Global Memory访问并影响算子性能。开发者可通过`--cce-res-usage`编译选项查看核函数的寄存器资源使用情况,据此调整最大线程数或寄存器配置。158由上表可知,最大线程数配置越大,每个线程可用的寄存器数量越少。若最大线程数配置过大且单线程计算逻辑复杂,编译器可能因寄存器资源不足,将部分局部变量或中间结果转存至GM上的SIMT通用栈空间,即寄存器溢出(register spill),从而引入额外的Global Memory访问并影响算子性能。开发者可通过`--cce-res-usage`编译选项查看核函数的寄存器资源使用情况,据此调整最大线程数或寄存器配置。
159 159 
160-开发者可使用[\_\_launch\_bounds\_\_](../../语言扩展层/SIMT-BuiltIn关键字.md#li23861114618)配置最大线程数,间接控制每个线程的通用寄存器数量;也可使用[\_\_maxnreg\_\_](../../语言扩展层/SIMT-BuiltIn关键字.md#section_maxnreg)直接配置每个线程的通用寄存器数量。160+开发者可使用[\_\_launch\_bounds\_\_](../../language_extension/simt_builtin_keywords.md#li23861114618)配置最大线程数,间接控制每个线程的通用寄存器数量;也可使用[\_\_maxnreg\_\_](../../language_extension/simt_builtin_keywords.md#section_maxnreg)直接配置每个线程的通用寄存器数量。
161 161 
162### 传参寄存器162### 传参寄存器
163 163 
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/概述.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/overview.md+5-5
@@ -9,9 +9,9 @@ SIMT(Single Instruction Multiple Thread,单指令多线程)编程是AI Cor
9SIMT编程支持业界通用的线程架构:**Grid-Block-Thread**,以线程作为最小执行单元,通过大规模线程并发实现数据并行计算。所有SIMT算子的并行逻辑、数据拆分策略、线程调度机制,均基于该编程范式实现。9SIMT编程支持业界通用的线程架构:**Grid-Block-Thread**,以线程作为最小执行单元,通过大规模线程并发实现数据并行计算。所有SIMT算子的并行逻辑、数据拆分策略、线程调度机制,均基于该编程范式实现。
10 10 
11**三级线程层级**11**三级线程层级**
12-- **网格(Grid)**:由多个线程块(Thread Block)组成,使用内置变量[gridDim](../../语言扩展层/SIMT-BuiltIn关键字.md#li20760123812911)表示启用的线程块个数,Grid维度通过dim3三维结构表示。12+- **网格(Grid)**:由多个线程块(Thread Block)组成,使用内置变量[gridDim](../../language_extension/simt_builtin_keywords.md#li20760123812911)表示启用的线程块个数,Grid维度通过dim3三维结构表示。
13-- **线程块(Thread Block)**:由若干线程组成,使用内置变量[blockDim](../../语言扩展层/SIMT-BuiltIn关键字.md#li076017381191)表示一个线程块启用的线程个数(一个线程块最多可启用2048个线程)。各线程块通过线程块索引[blockIdx](../../语言扩展层/SIMT-BuiltIn关键字.md#li1676053814914)进行标识。13+- **线程块(Thread Block)**:由若干线程组成,使用内置变量[blockDim](../../language_extension/simt_builtin_keywords.md#li076017381191)表示一个线程块启用的线程个数(一个线程块最多可启用2048个线程)。各线程块通过线程块索引[blockIdx](../../language_extension/simt_builtin_keywords.md#li1676053814914)进行标识。
14-- **线程(Thread)**:最小执行单位,每个线程拥有独立的寄存器,可通过线程索引[threadIdx](../../语言扩展层/SIMT-BuiltIn关键字.md#li7760123814919)标识,负责完成特定的数据计算任务。14+- **线程(Thread)**:最小执行单位,每个线程拥有独立的寄存器,可通过线程索引[threadIdx](../../language_extension/simt_builtin_keywords.md#li7760123814919)标识,负责完成特定的数据计算任务。
15 15 
16**Warp调度机制**16**Warp调度机制**
17 17 
@@ -21,7 +21,7 @@ SIMT编程支持业界通用的线程架构:**Grid-Block-Thread**,以线程
21 21 
22## 硬件底层支撑:SIMT单元架构与内存层级22## 硬件底层支撑:SIMT单元架构与内存层级
23 23 
24-向量处理单元[AIV核](../../高级编程/硬件实现/基本架构.md)是SIMT编程的核心硬件载体,采用「Warp调度器 + 计算单元 + 分级存储体系」的架构,下文将详细介绍SIMT核心硬件组件及SIMT编程的内存层级体系。24+向量处理单元[AIV核](../../advanced_programming/hardware_implementation/basic_architecture.md)是SIMT编程的核心硬件载体,采用「Warp调度器 + 计算单元 + 分级存储体系」的架构,下文将详细介绍SIMT核心硬件组件及SIMT编程的内存层级体系。
25 25 
26### 核心硬件组件26### 核心硬件组件
27 27 
@@ -61,4 +61,4 @@ SIMT编程接口核心特点:
61 61 
62本章系统阐述了SIMT算子从线程架构、硬件调度到代码落地的全链路技术体系:计算任务基于Grid-Block-Thread三级线程层级分发至AIV核并行执行,通过线程索引自动映射数据范围,实现大规模线程并发计算。开发者基于SIMT语言编程接口,通过指针操作全局内存与共享内存,配合同步机制确保线程间数据访问正确性。62本章系统阐述了SIMT算子从线程架构、硬件调度到代码落地的全链路技术体系:计算任务基于Grid-Block-Thread三级线程层级分发至AIV核并行执行,通过线程索引自动映射数据范围,实现大规模线程并发计算。开发者基于SIMT语言编程接口,通过指针操作全局内存与共享内存,配合同步机制确保线程间数据访问正确性。
63 63 
64-后续章节将深入详解[抽象硬件架构](./抽象硬件架构.md)、[线程架构](./线程架构.md)、[核函数](./核函数.md)定义与调用、[内存层级](./内存层级.md)管理机制、[同步机制](./同步机制.md)原理、[原子操作](./原子操作.md)使用方式、[编程示例](./编程示例.md)实战流程,帮助开发者快速理解核心技术,熟练掌握高性能、高可用的SIMT算子开发技术。64+后续章节将深入详解[抽象硬件架构](./abstract_hardware_architecture.md)、[线程架构](./thread_architecture.md)、[核函数](./kernel_function.md)定义与调用、[内存层级](./memory_hierarchy.md)管理机制、[同步机制](./synchronization.md)原理、[原子操作](./atomic_operations.md)使用方式、[编程示例](./programming_examples.md)实战流程,帮助开发者快速理解核心技术,熟练掌握高性能、高可用的SIMT算子开发技术。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/编程示例.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/programming_examples.md+2-2
@@ -1,6 +1,6 @@
1# 编程示例<a name="ZH-CN_TOPIC_0000002523571814"></a>1# 编程示例<a name="ZH-CN_TOPIC_0000002523571814"></a>
2 2 
3-基于SIMT进行算子开发需要使用的内置关键字和API请参见[SIMT BuiltIn关键字](../../语言扩展层/SIMT-BuiltIn关键字.md)、[SIMT语言扩展层C API](../../语言扩展层/SIMT语言扩展层C-API.md)。当前SIMT编程暂不支持部分语法结构,相关限制请参考[语法限制](../../../technical_appendix/cpp_standard_support/syntax_restrictions/syntax_restrictions.md)。3+基于SIMT进行算子开发需要使用的内置关键字和API请参见[SIMT BuiltIn关键字](../../language_extension/simt_builtin_keywords.md)、[SIMT语言扩展层C API](../../language_extension/simt_language_extension_c_api.md)。当前SIMT编程暂不支持部分语法结构,相关限制请参考[语法限制](../../../technical_appendix/cpp_standard_support/syntax_restrictions/syntax_restrictions.md)。
4 4 
5考虑如下计算场景:从形状为100000 \* 128的二维向量中获取指定索引所对应的12288行数据。算子输出output第i行数据的计算公式为:5考虑如下计算场景:从形状为100000 \* 128的二维向量中获取指定索引所对应的12288行数据。算子输出output第i行数据的计算公式为:
6 6 
@@ -16,7 +16,7 @@ output[i] = input[index[i]]
16 int32_t out_row = blockIdx.x * blockDim.x + threadIdx.x;16 int32_t out_row = blockIdx.x * blockDim.x + threadIdx.x;
17 ```17 ```
18 18 
19- 一个线程完成一次核函数的计算操作,核函数内通过计算blockIdx.x \* blockDim.x + threadIdx.x得到索引偏移,其中blockIdx是当前线程块的索引,blockDim是每个线程块启用的线程数,threadIdx是当前线程在线程块内的索引,更多详细介绍请参考[SIMT BuiltIn关键字](../../语言扩展层/SIMT-BuiltIn关键字.md)。19+ 一个线程完成一次核函数的计算操作,核函数内通过计算blockIdx.x \* blockDim.x + threadIdx.x得到索引偏移,其中blockIdx是当前线程块的索引,blockDim是每个线程块启用的线程数,threadIdx是当前线程在线程块内的索引,更多详细介绍请参考[SIMT BuiltIn关键字](../../language_extension/simt_builtin_keywords.md)。
20 20 
21- 通过下标偏移将偏移位置的输入数据拷贝到输出中,从而完成获取指定数据的功能。21- 通过下标偏移将偏移位置的输入数据拷贝到输出中,从而完成获取指定数据的功能。
22 22 
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/同步机制.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/synchronization.md+1-1
@@ -20,4 +20,4 @@ SIMT是一种单指令多线程的编程模型,该编程模型旨在通过多
20- 只需要保证当前Thread的内存写入顺序和可见性时,使用内存栅栏。20- 只需要保证当前Thread的内存写入顺序和可见性时,使用内存栅栏。
21- 不要将内存栅栏当作同步屏障使用。内存栅栏不会等待其他Thread,也不保证其他Thread已经执行到同一位置。21- 不要将内存栅栏当作同步屏障使用。内存栅栏不会等待其他Thread,也不保证其他Thread已经执行到同一位置。
22- 不要将同步屏障当作跨Thread Block同步接口使用。不同Thread Block之间如需共享状态,应结合Global Memory、原子操作和内存栅栏设计同步协议。22- 不要将同步屏障当作跨Thread Block同步接口使用。不同Thread Block之间如需共享状态,应结合Global Memory、原子操作和内存栅栏设计同步协议。
23-- 多个Thread并发写同一地址时,同步屏障和内存栅栏都不能替代原子操作;需要避免写冲突,可使用[原子操作](原子操作.md)保证读改写过程的原子性。23+- 多个Thread并发写同一地址时,同步屏障和内存栅栏都不能替代原子操作;需要避免写冲突,可使用[原子操作](atomic_operations.md)保证读改写过程的原子性。
Rdocs/zh/guide/编程指南/编程模型/AI-Core-SIMT编程/线程架构.mddocs/zh/guide/programming_guide/programming_model/ai_core_simt_programming/thread_architecture.md+3-3
@@ -11,7 +11,7 @@ SIMT编程模型采用分层的抽象线程组织结构,从顶层到底层依
11 11 
12**Thread Block(线程块)**12**Thread Block(线程块)**
13 13 
14-Thread Block由若干线程组成(最大2048个线程),使用内置变量[blockDim](../../语言扩展层/SIMT-BuiltIn关键字.md#li076017381191)表示一个线程块在各维度上的线程数量。Thread Block有以下特征:14+Thread Block由若干线程组成(最大2048个线程),使用内置变量[blockDim](../../language_extension/simt_builtin_keywords.md#li076017381191)表示一个线程块在各维度上的线程数量。Thread Block有以下特征:
15 15 
16- 同一Thread Block内的线程可以访问共享内存实现数据交互;16- 同一Thread Block内的线程可以访问共享内存实现数据交互;
17- Thread Block内的线程可通过同步机制实现协作;17- Thread Block内的线程可通过同步机制实现协作;
@@ -19,7 +19,7 @@ Thread Block由若干线程组成(最大2048个线程),使用内置变量[
19 19 
20**Grid(线程块网格)**20**Grid(线程块网格)**
21 21 
22-Grid是SIMT线程层次结构的最顶层,由多个Thread Block组成。使用内置变量[gridDim](../../语言扩展层/SIMT-BuiltIn关键字.md#li20760123812911)来表示Grid在各维度上的线程块数量,并有以下特征:22+Grid是SIMT线程层次结构的最顶层,由多个Thread Block组成。使用内置变量[gridDim](../../language_extension/simt_builtin_keywords.md#li20760123812911)来表示Grid在各维度上的线程块数量,并有以下特征:
23- Grid的维度由用户的执行配置决定,核函数执行期间不可更改;23- Grid的维度由用户的执行配置决定,核函数执行期间不可更改;
24- Grid中的所有线程块具有相同的尺寸和维度配置;24- Grid中的所有线程块具有相同的尺寸和维度配置;
25- 同一Grid中的线程块相互独立,按任意顺序执行;25- 同一Grid中的线程块相互独立,按任意顺序执行;
@@ -65,7 +65,7 @@ Warp内的线程虽然执行同一段代码,但在分支处可能进入不同
65 65 
66## 配置最大线程数66## 配置最大线程数
67 67 
68-上文提到,每个线程块内的线程拥有独立的寄存器和栈空间,而每个AIV核总的寄存器是有限的。若算子计算任务越复杂,需要使用到的寄存器越多,支持启动的线程数越少。当前支持用户在核函数定义时使用[\_\_launch\_bounds\_\_\(N\)](../../语言扩展层/SIMT-BuiltIn关键字.md#li23861114618)配置最大线程数`N`,限制算子能启动的线程数个数上限。编译时底层编译器会根据该值对寄存器资源进行分配,用户配置的`N`越大,每个线程可用寄存器越少,具体关系如下表所示:68+上文提到,每个线程块内的线程拥有独立的寄存器和栈空间,而每个AIV核总的寄存器是有限的。若算子计算任务越复杂,需要使用到的寄存器越多,支持启动的线程数越少。当前支持用户在核函数定义时使用[\_\_launch\_bounds\_\_\(N\)](../../language_extension/simt_builtin_keywords.md#li23861114618)配置最大线程数`N`,限制算子能启动的线程数个数上限。编译时底层编译器会根据该值对寄存器资源进行分配,用户配置的`N`越大,每个线程可用寄存器越少,具体关系如下表所示:
69 69 
70| 配置的最大线程数 | 每个Thread可用寄存器个数 |70| 配置的最大线程数 | 每个Thread可用寄存器个数 |
71| --- | --- |71| --- | --- |
Rdocs/zh/guide/编程指南/编程模型/AI-CPU编程.mddocs/zh/guide/programming_guide/programming_model/ai_cpu_programming.md+1-1
@@ -58,7 +58,7 @@ hello_world<<<numBlocks, nullptr, stream>>>(&args, sizeof(KernelArgs));
58>- Host侧调用\_\_global\_\_ \_\_aicpu\_\_函数时必须使用<<<\>\>\>异构调用语法,输入的函数入参在入参指针的基础上需要输入从指针中读取的数据大小。58>- Host侧调用\_\_global\_\_ \_\_aicpu\_\_函数时必须使用<<<\>\>\>异构调用语法,输入的函数入参在入参指针的基础上需要输入从指针中读取的数据大小。
59>- 在Host侧使用内核调用符<<<...\>\>\>调用AI Core与AI CPU算子时不能使用同一条stream。59>- 在Host侧使用内核调用符<<<...\>\>\>调用AI Core与AI CPU算子时不能使用同一条stream。
60 60 
61-加载和运行算子时,需要使用Runtime API,完成运行时管理和配置,详细内容请参考[算子运行](../编译与运行/异步执行.md)。AI CPU算子的编译请参考[AI CPU算子编译](../编译与运行/算子编译/AI-CPU算子编译基本用法.md)。61+加载和运行算子时,需要使用Runtime API,完成运行时管理和配置,详细内容请参考[算子运行](../compilation_and_execution/async_execution.md)。AI CPU算子的编译请参考[AI CPU算子编译](../compilation_and_execution/operator_compilation/ai_cpu_operator_compilation.md)。
62 62 
63## AI CPU模板核函数<a name="section135075471718"></a>63## AI CPU模板核函数<a name="section135075471718"></a>
64 64 
Rdocs/zh/guide/编程指南/编程模型/异构系统.mddocs/zh/guide/programming_guide/programming_model/heterogeneous_system.md+1-1
@@ -2,7 +2,7 @@
2 2 
3一个基于昇腾处理器的异构系统通常包含CPU与昇腾NPU。其中,CPU及其内存称为Host与Host Memory;NPU及其内存称为Device与Device Memory。3一个基于昇腾处理器的异构系统通常包含CPU与昇腾NPU。其中,CPU及其内存称为Host与Host Memory;NPU及其内存称为Device与Device Memory。
4 4 
5-基于昇腾的应用程序通常包含两部分:一部分运行在Host CPU上,使用标准C/C++编程;另一部分运行在NPU上,使用Ascend C编程语言编写。运行在NPU上的代码称为[核函数Kernel](./AI-Core-SIMD编程/核函数.md),需由Host代码调用执行。此外,Host端需要通过CANN Runtime API完成以下操作:在Host Memory与Device Memory之间拷贝数据、启动NPU上的核函数、等待核函数执行完成等。Host代码与核函数可编写在同一个 .asc后缀文件中,由毕昇编译器完成异构编译。5+基于昇腾的应用程序通常包含两部分:一部分运行在Host CPU上,使用标准C/C++编程;另一部分运行在NPU上,使用Ascend C编程语言编写。运行在NPU上的代码称为[核函数Kernel](./ai_core_simd_programming/kernel_function.md),需由Host代码调用执行。此外,Host端需要通过CANN Runtime API完成以下操作:在Host Memory与Device Memory之间拷贝数据、启动NPU上的核函数、等待核函数执行完成等。Host代码与核函数可编写在同一个 .asc后缀文件中,由毕昇编译器完成异构编译。
6 6 
7为提升计算效率,NPU上通常有多个计算核并发执行,每个核一般处理不同的数据。每个NPU的计算核称为AI Core(AI处理器的计算核心)。传统上,AI Core遵循SIMD(Single Instruction Multiple Data,单指令多数据流)模型,通过一条指令同时操作多个数据实现并行计算。从Ascend 950PR/Ascend 950DT架构开始,作为SIMD的补充(主要用于辅助离散类矢量算子开发),AI Core也支持SIMT(Single Instruction Multiple Thread,单指令多线程)模型,通过一条指令驱动多个线程并行执行。7为提升计算效率,NPU上通常有多个计算核并发执行,每个核一般处理不同的数据。每个NPU的计算核称为AI Core(AI处理器的计算核心)。传统上,AI Core遵循SIMD(Single Instruction Multiple Data,单指令多数据流)模型,通过一条指令同时操作多个数据实现并行计算。从Ascend 950PR/Ascend 950DT架构开始,作为SIMD的补充(主要用于辅助离散类矢量算子开发),AI Core也支持SIMT(Single Instruction Multiple Thread,单指令多线程)模型,通过一条指令驱动多个线程并行执行。
8 8 
Rdocs/zh/guide/编程指南/编程模型/编程模型.mddocs/zh/guide/programming_guide/programming_model/programming_model.md+0-0
文件重命名但无更改。
Rdocs/zh/guide/编程指南/编程模型/编程模型概述.mddocs/zh/guide/programming_guide/programming_model/programming_model_overview.md+8-8
@@ -1,6 +1,6 @@
1# 编程模型概述<a name="ZH-CN_TOPIC_0000002554090609"></a>1# 编程模型概述<a name="ZH-CN_TOPIC_0000002554090609"></a>
2 2 
3-如[异构系统](./异构系统.md)章节所述,基于昇腾处理器的应用程序通常分为两部分:**Host代码**与**Device代码**。其中,Host代码运行在CPU上,负责设备资源管理、Host Memory与Device Memory数据搬运及任务调度等;Device代码运行在NPU(神经网络处理器)上,专门执行实际的计算任务。本编程指南重点讲解如何基于**Ascend C编程语言**编写Device代码,以及如何通过Host代码完成Device代码的调度与执行。3+如[异构系统](./heterogeneous_system.md)章节所述,基于昇腾处理器的应用程序通常分为两部分:**Host代码**与**Device代码**。其中,Host代码运行在CPU上,负责设备资源管理、Host Memory与Device Memory数据搬运及任务调度等;Device代码运行在NPU(神经网络处理器)上,专门执行实际的计算任务。本编程指南重点讲解如何基于**Ascend C编程语言**编写Device代码,以及如何通过Host代码完成Device代码的调度与执行。
4 4 
5## 并行执行模型:SIMD与SIMT5## 并行执行模型:SIMD与SIMT
6 6 
@@ -21,7 +21,7 @@
21- 矩阵乘法、卷积等深度学习核心运算;21- 矩阵乘法、卷积等深度学习核心运算;
22- 逐元素数学函数(如向量加减、乘除、指数/对数运算)。22- 逐元素数学函数(如向量加减、乘除、指数/对数运算)。
23 23 
24-**SIMD[核函数Kernel](./AI-Core-SIMD编程/核函数.md)编程四步法**:SIMD编程遵循SPMD模型(Single Program Multiple Data,单程序多数据),即每个AI Core运行同一份核函数,但负责处理不同的数据块,具体步骤如下:24+**SIMD[核函数Kernel](./ai_core_simd_programming/kernel_function.md)编程四步法**:SIMD编程遵循SPMD模型(Single Program Multiple Data,单程序多数据),即每个AI Core运行同一份核函数,但负责处理不同的数据块,具体步骤如下:
251. **Tiling(分块)设计**:对全局超大数据进行均匀切分,为各AI Core分配大小均衡的独立数据分片,精准适配SPMD多核并行架构,规避单核算力瓶颈,实现全域负载均衡。251. **Tiling(分块)设计**:对全局超大数据进行均匀切分,为各AI Core分配大小均衡的独立数据分片,精准适配SPMD多核并行架构,规避单核算力瓶颈,实现全域负载均衡。
262. **数据搬入**:调用SIMD专用API,将计算所需的数据从Device Memory(通常为HBM)搬运到AI Core的本地缓存,减少全局内存访问延迟。262. **数据搬入**:调用SIMD专用API,将计算所需的数据从Device Memory(通常为HBM)搬运到AI Core的本地缓存,减少全局内存访问延迟。
273. **数据计算**:调用向量指令,一次处理多个同构数据;需注意,数据搬运与计算过程通常是异步执行的,需插入同步指令,确保计算时数据已就绪,保证结果准确。273. **数据计算**:调用向量指令,一次处理多个同构数据;需注意,数据搬运与计算过程通常是异步执行的,需插入同步指令,确保计算时数据已就绪,保证结果准确。
@@ -41,7 +41,7 @@
41- 带有复杂if-else分支的逐元素运算;41- 带有复杂if-else分支的逐元素运算;
42- 具有动态数据依赖的算法(如并行前缀和、排序网络)。42- 具有动态数据依赖的算法(如并行前缀和、排序网络)。
43 43 
44-**SIMT[核函数Kernel](./AI-Core-SIMT编程/核函数.md)编程四步法**:SIMT编程同样遵循SPMD模型,即同一份程序运行在每个线程上,每个线程处理不同的数据元素,具体步骤如下:44+**SIMT[核函数Kernel](./ai_core_simt_programming/kernel_function.md)编程四步法**:SIMT编程同样遵循SPMD模型,即同一份程序运行在每个线程上,每个线程处理不同的数据元素,具体步骤如下:
451. **Tiling(分块)设计**:将整体任务拆分为多个独立线程,使线程索引与数据索引一一对应,确保每个线程处理唯一的数据元素,避免数据重复或遗漏。451. **Tiling(分块)设计**:将整体任务拆分为多个独立线程,使线程索引与数据索引一一对应,确保每个线程处理唯一的数据元素,避免数据重复或遗漏。
462. **数据搬入**:通过指针直接访问Device Memory,无需调用SIMD那样的专用API;硬件会自动将所需数据从Device Memory加载到线程的寄存器中,简化开发流程。462. **数据搬入**:通过指针直接访问Device Memory,无需调用SIMD那样的专用API;硬件会自动将所需数据从Device Memory加载到线程的寄存器中,简化开发流程。
473. **数据计算**:编程方式类似CPU标量代码,支持分支、循环等复杂控制逻辑;数据搬运与计算过程通常无需显式同步,若涉及多线程协作(如使用共享内存),需插入同步指令。473. **数据计算**:编程方式类似CPU标量代码,支持分支、循环等复杂控制逻辑;数据搬运与计算过程通常无需显式同步,若涉及多线程协作(如使用共享内存),需插入同步指令。
@@ -76,26 +76,26 @@
76- **能力范围**:支持向量计算、矩阵计算,以及向量与矩阵的融合计算,覆盖深度学习大部分核心场景;76- **能力范围**:支持向量计算、矩阵计算,以及向量与矩阵的融合计算,覆盖深度学习大部分核心场景;
77- **适用场景**:规整的、高密度的数据并行任务,如卷积、矩阵乘、逐元素变换等,是昇腾NPU开发的主流选择;77- **适用场景**:规整的、高密度的数据并行任务,如卷积、矩阵乘、逐元素变换等,是昇腾NPU开发的主流选择;
78- **优势**:能效比高,指令执行开销低,可充分发挥硬件性能,接近AI Core的峰值计算能力;78- **优势**:能效比高,指令执行开销低,可充分发挥硬件性能,接近AI Core的峰值计算能力;
79-- **学习路径**:详见[AI Core SIMD编程](./AI-Core-SIMD编程/概述.md);算子开发流程参见[SIMD算子实现](../../算子实践参考/SIMD算子实现/SIMD算子实现.md)。79+- **学习路径**:详见[AI Core SIMD编程](./ai_core_simd_programming/overview.md);算子开发流程参见[SIMD算子实现](../../算子实践参考/SIMD算子实现/SIMD算子实现.md)。
80 80 
81<!-- npu="950" id2 -->81<!-- npu="950" id2 -->
82### SIMT编程(辅助补充,仅限Ascend 950PR/Ascend 950DT)82### SIMT编程(辅助补充,仅限Ascend 950PR/Ascend 950DT)
83- **能力范围**:仅支持向量计算,不支持矩阵运算或向量与矩阵的融合计算,功能范围相对有限;83- **能力范围**:仅支持向量计算,不支持矩阵运算或向量与矩阵的融合计算,功能范围相对有限;
84- **适用场景**:离散数据访问、复杂分支控制的向量算子,同时适合熟悉SIMT模型的开发者快速上手Ascend C;84- **适用场景**:离散数据访问、复杂分支控制的向量算子,同时适合熟悉SIMT模型的开发者快速上手Ascend C;
85- **限制**:当前仅支持Ascend 950PR/Ascend 950DT芯片架构;85- **限制**:当前仅支持Ascend 950PR/Ascend 950DT芯片架构;
86-- **学习路径**:详见[AI Core SIMT编程](./AI-Core-SIMT编程/概述.md);算子开发参见[SIMT算子实现](../../算子实践参考/SIMT算子实现/SIMT算子实现.md)。86+- **学习路径**:详见[AI Core SIMT编程](./ai_core_simt_programming/overview.md);算子开发参见[SIMT算子实现](../../算子实践参考/SIMT算子实现/SIMT算子实现.md)。
87<!-- end id2 -->87<!-- end id2 -->
88 88 
89### SIMD与SIMT混合编程89### SIMD与SIMT混合编程
90 90 
91-SIMD与SIMT混合编程的Kernel,底层仍以SIMD编程模型为基础。开发者可在Kernel函数内部灵活组合两类编程逻辑:通过SIMT逻辑处理稀疏索引、复杂分支等不规则计算场景,输出规整化数据块;再通过SIMD高吞吐向量/矩阵运算处理规整数据,兼顾代码灵活性与硬件高性能,适配复杂混合计算场景。详细实现方法请参考[AI Core SIMD与SIMT混合编程](../高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md)。91+SIMD与SIMT混合编程的Kernel,底层仍以SIMD编程模型为基础。开发者可在Kernel函数内部灵活组合两类编程逻辑:通过SIMT逻辑处理稀疏索引、复杂分支等不规则计算场景,输出规整化数据块;再通过SIMD高吞吐向量/矩阵运算处理规整数据,兼顾代码灵活性与硬件高性能,适配复杂混合计算场景。详细实现方法请参考[AI Core SIMD与SIMT混合编程](../advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md)。
92 92 
93## AI Core编程小结93## AI Core编程小结
94 94 
95Ascend C采用**SIMD+SIMT双模并行**的核心设计,既保留了SIMD高能效、高吞吐量的核心优势,又通过SIMT模型补齐了离散数据、复杂分支等不规则场景的计算能力,实现全场景计算任务的高效适配。开发者在实际开发中,可根据算法的**访存模式**(连续规整/离散随机)、**分支密度**(低分支/高分支)及**并行粒度**,灵活选用单一编程模型或混合编程方案。此外,Host侧通过CANN Runtime API提供内存管理、任务调度等能力,与Device侧代码协同工作,共同实现异构计算的高效运行。95Ascend C采用**SIMD+SIMT双模并行**的核心设计,既保留了SIMD高能效、高吞吐量的核心优势,又通过SIMT模型补齐了离散数据、复杂分支等不规则场景的计算能力,实现全场景计算任务的高效适配。开发者在实际开发中,可根据算法的**访存模式**(连续规整/离散随机)、**分支密度**(低分支/高分支)及**并行粒度**,灵活选用单一编程模型或混合编程方案。此外,Host侧通过CANN Runtime API提供内存管理、任务调度等能力,与Device侧代码协同工作,共同实现异构计算的高效运行。
96 96 
97-> 📌 **下一步**:如果您主要开发规整的高性能算子,建议直接阅读[AI Core SIMD编程](AI-Core-SIMD编程/概述.md);如果您需要处理稀疏数据或复杂分支逻辑,可从[AI Core SIMT编程](AI-Core-SIMT编程/概述.md)开始学习。97+> 📌 **下一步**:如果您主要开发规整的高性能算子,建议直接阅读[AI Core SIMD编程](ai_core_simd_programming/overview.md);如果您需要处理稀疏数据或复杂分支逻辑,可从[AI Core SIMT编程](ai_core_simt_programming/overview.md)开始学习。
98 98 
99## AI CPU编程模型99## AI CPU编程模型
100 100 
101-AI CPU是Device上的辅助处理器(基于ARM架构),主要用于执行一些无法由AI Core高效处理的任务,例如:控制流复杂、数据依赖强的逻辑等。其编程模型遵循通用CPU编程规范,采用标准C/C++语法即可开发。详细开发指南请阅读[AI CPU编程](./AI-CPU编程.md)。101+AI CPU是Device上的辅助处理器(基于ARM架构),主要用于执行一些无法由AI Core高效处理的任务,例如:控制流复杂、数据依赖强的逻辑等。其编程模型遵循通用CPU编程规范,采用标准C/C++语法即可开发。详细开发指南请阅读[AI CPU编程](./ai_cpu_programming.md)。
Mdocs/zh/guide/technical_appendix/concepts_and_terms/memory_access/scalar_read_write.md+1-1
@@ -1,6 +1,6 @@
1# Scalar读写数据<a name="ZH-CN_TOPIC_0000002375401226"></a>1# Scalar读写数据<a name="ZH-CN_TOPIC_0000002375401226"></a>
2 2 
3-AI Core中Scalar计算单元负责各类型的标量数据运算和程序的流程控制。根据[硬件架构](../../../编程指南/高级编程/硬件实现/基本架构.md)设计,Scalar仅支持对Global Memory和Unified Buffer的读写操作,而不支持对L1 Buffer、L0A Buffer、L0B Buffer和L0C Buffer等其他类型存储的访问。下文分别介绍了Scalar读写Global Memory和Unified Buffer的方式和Scalar读写数据时的同步机制。3+AI Core中Scalar计算单元负责各类型的标量数据运算和程序的流程控制。根据[硬件架构](../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)设计,Scalar仅支持对Global Memory和Unified Buffer的读写操作,而不支持对L1 Buffer、L0A Buffer、L0B Buffer和L0C Buffer等其他类型存储的访问。下文分别介绍了Scalar读写Global Memory和Unified Buffer的方式和Scalar读写数据时的同步机制。
4 4 
5## Scalar读写Global Memory<a name="section7480536235"></a>5## Scalar读写Global Memory<a name="section7480536235"></a>
6 6 
Mdocs/zh/guide/算子实践参考/SIMD与SIMT混合算子实现/基础知识.md+3-3
@@ -2,8 +2,8 @@
2 2 
3本节内容为使用[Reg矢量计算API](../../../api/SIMD-API/basic_api/reg_vector_compute/reg_vector_compute.md)和[SIMT API](../../../api/SIMT-API/SIMT-API.md)进行SIMD与SIMT混合编程的指导。3本节内容为使用[Reg矢量计算API](../../../api/SIMD-API/basic_api/reg_vector_compute/reg_vector_compute.md)和[SIMT API](../../../api/SIMT-API/SIMT-API.md)进行SIMD与SIMT混合编程的指导。
4 4 
5-在[Vector Core](../../编程指南/高级编程/硬件实现/基本架构.md)中,SIMT单元和SIMD单元共享片上存储,因此可以利用片上存储Unified Buffer完成SIMD与SIMT混合编程,具体硬件架构的介绍请参考[NPU架构版本3510](../../编程指南/高级编程/硬件实现/架构规格/NPU架构版本3510.md)。在进行后续内容的学习前,请先了解SIMD与SIMT混合编程的编程模型:[SIMD与SIMT混合编程](../../编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/概述.md)。5+在[Vector Core](../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)中,SIMT单元和SIMD单元共享片上存储,因此可以利用片上存储Unified Buffer完成SIMD与SIMT混合编程,具体硬件架构的介绍请参考[NPU架构版本3510](../../programming_guide/advanced_programming/hardware_implementation/architecture_spec/npu_arch_3510.md)。在进行后续内容的学习前,请先了解SIMD与SIMT混合编程的编程模型:[SIMD与SIMT混合编程](../../programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/overview.md)。
6 6 
7-[SIMD编程](../../编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.md)提供了基于寄存器(Regbase)开发的Reg矢量计算API,Reg矢量计算API可以直接操作Vector Core中的SIMD寄存器,API单次处理的数据量上限等于寄存器的大小,通过[GetVecLen](../../../api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetVecLen.md)接口获取该值。在算子实现中,需要多次调用Reg矢量计算API完成对单核数据的处理。7+[SIMD编程](../../programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md)提供了基于寄存器(Regbase)开发的Reg矢量计算API,Reg矢量计算API可以直接操作Vector Core中的SIMD寄存器,API单次处理的数据量上限等于寄存器的大小,通过[GetVecLen](../../../api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetVecLen.md)接口获取该值。在算子实现中,需要多次调用Reg矢量计算API完成对单核数据的处理。
8 8 
9-与SIMD编程不同的是,在SIMT编程中Global Memory上的数据可以被直接读取和使用。SIMT编程常通过组织线程的层次结构来实现数据的切分,使用threadIdx等[SIMT BuiltIn关键字](../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md)计算线程应处理的数据索引,完成索引对应数据的计算,从而将函数实现简化为标量计算。9+与SIMD编程不同的是,在SIMT编程中Global Memory上的数据可以被直接读取和使用。SIMT编程常通过组织线程的层次结构来实现数据的切分,使用threadIdx等[SIMT BuiltIn关键字](../../programming_guide/language_extension/simt_builtin_keywords.md)计算线程应处理的数据索引,完成索引对应数据的计算,从而将函数实现简化为标量计算。
Mdocs/zh/guide/算子实践参考/SIMD与SIMT混合算子实现/算子实现.md+5-5
@@ -41,7 +41,7 @@ __global__ __vector__ void gather_and_adds_kernel(
41 uint32_t index_total_length)41 uint32_t index_total_length)
42```42```
43 43 
44-当前SIMD与SIMT混合编程仅使用Vector Core(AIV核),核函数可使用[\_\_vector\_\_](../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#section1074418132518)标识只启动AIV核。44+当前SIMD与SIMT混合编程仅使用Vector Core(AIV核),核函数可使用[\_\_vector\_\_](../../programming_guide/language_extension/simd_builtin_keywords.md#section1074418132518)标识只启动AIV核。
45 45 
46其中,input\_total\_length和index\_total\_length分别表示input和index的长度。gather阶段需要根据index访问input,input\_total\_length用于校验index中保存的input访问位置是否越界,index\_total\_length用于校验线程访问index的位置是否越界。46其中,input\_total\_length和index\_total\_length分别表示input和index的长度。gather阶段需要根据index访问input,input\_total\_length用于校验index中保存的input访问位置是否越界,index\_total\_length用于校验线程访问index的位置是否越界。
47 47 
@@ -87,7 +87,7 @@ __global__ __vector__ void gather_and_adds_kernel(
87 87 
88## 核函数定义与实现88## 核函数定义与实现
89 89 
90-根据[核函数](../../编程指南/高级编程/高级AI-Core编程模型/SIMD与SIMT混合编程/核函数与VF函数.md#zh-cn_topic_0000002571578013_section156822920311)中介绍的规则进行核函数的定义。本样例中,定义gather\_and\_adds\_kernel核函数,代码如下:90+根据[核函数](../../programming_guide/advanced_programming/advanced_ai_core_programming_model/simd_simt_hybrid_programming/kernel_and_vf_functions.md#zh-cn_topic_0000002571578013_section156822920311)中介绍的规则进行核函数的定义。本样例中,定义gather\_and\_adds\_kernel核函数,代码如下:
91 91 
92```cpp92```cpp
93__global__ __vector__ void gather_and_adds_kernel(93__global__ __vector__ void gather_and_adds_kernel(
@@ -143,9 +143,9 @@ __simt_vf__ __launch_bounds__(THREAD_COUNT) inline void simt_gather(
143```143```
144 144 
145>[!NOTE]说明 145>[!NOTE]说明
146->在SIMT编程中,\_\_launch\_bounds\_\_\(thread\_num\)是可选配置,用于在编译期指定核函数启动的最大线程数(如果不配置,thread\_num默认为1024),使用时请注意:thread\_num \>= x \* y \* z (即:asc\_vf\_call的第一个参数:dim3\{x, y, z\}), 线程数thread\_num的取值范围为1到2048。最大线程数决定了每个线程可分配的寄存器数量,具体对应关系请见[表5](../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#table1715318510594),寄存器用于存储线程中的局部变量,若局部变量的个数超出寄存器个数,容易出现栈溢出等问题。146+>在SIMT编程中,\_\_launch\_bounds\_\_\(thread\_num\)是可选配置,用于在编译期指定核函数启动的最大线程数(如果不配置,thread\_num默认为1024),使用时请注意:thread\_num \>= x \* y \* z (即:asc\_vf\_call的第一个参数:dim3\{x, y, z\}), 线程数thread\_num的取值范围为1到2048。最大线程数决定了每个线程可分配的寄存器数量,具体对应关系请见[表5](../../programming_guide/language_extension/simt_builtin_keywords.md#table1715318510594),寄存器用于存储线程中的局部变量,若局部变量的个数超出寄存器个数,容易出现栈溢出等问题。
147 147 
148-使用[\_\_simt\_vf\_\_](../../编程指南/语言扩展层/SIMD与SIMT混合编程BuiltIn关键字.md#__simt_vf__)函数类型限定符标识SIMT VF函数入口,使其可以被[asc\_vf\_call](../../../api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/kernel_function_config.md#asc_vf_call调用)调用。148+使用[\_\_simt\_vf\_\_](../../programming_guide/language_extension/simd_simt_hybrid_builtin_keywords.md#__simt_vf__)函数类型限定符标识SIMT VF函数入口,使其可以被[asc\_vf\_call](../../../api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/extended_syntax/kernel_function_config.md#asc_vf_call调用)调用。
149 149 
150simt\_gather函数实现从输入input中获取指定索引的数据。函数中首先计算线程应处理数据的索引,然后通过赋值操作将数据存储到Unified Buffer上。150simt\_gather函数实现从输入input中获取指定索引的数据。函数中首先计算线程应处理数据的索引,然后通过赋值操作将数据存储到Unified Buffer上。
151 151 
@@ -155,7 +155,7 @@ simt\_gather函数实现从输入input中获取指定索引的数据。函数中
155uint32_t idx = blockIdx.x * blockDim.x + threadIdx.x;155uint32_t idx = blockIdx.x * blockDim.x + threadIdx.x;
156```156```
157 157 
158-其中,[blockIdx](../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#li1676053814914)用于获取当前核id。[blockDim](../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#li076017381191)用于获取线程三维层次结构\{x, y, z\},本例中为\{1024, 1, 1\},其中第2,3维度均为1,使用一维层次结构,因此线程数可写作blockDim.x。[threadIdx](../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#li7760123814919)用于获取三维线程索引\{x, y, z\},本例中仅使用第1维x,可通过threadIdx.x获取当前线程的id。158+其中,[blockIdx](../../programming_guide/language_extension/simt_builtin_keywords.md#li1676053814914)用于获取当前核id。[blockDim](../../programming_guide/language_extension/simt_builtin_keywords.md#li076017381191)用于获取线程三维层次结构\{x, y, z\},本例中为\{1024, 1, 1\},其中第2,3维度均为1,使用一维层次结构,因此线程数可写作blockDim.x。[threadIdx](../../programming_guide/language_extension/simt_builtin_keywords.md#li7760123814919)用于获取三维线程索引\{x, y, z\},本例中仅使用第1维x,可通过threadIdx.x获取当前线程的id。
159 159 
160## SIMD VF实现160## SIMD VF实现
161 161 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/概述.md+1-1
@@ -10,4 +10,4 @@ Ascend C的算子实现主要包含两个部分:
10 10 
11 Kernel实现即算子核函数实现,在Kernel函数内部通过解析Host侧传入的Tiling结构体获取Tiling信息,根据Tiling信息控制数据搬入搬出Local Memory的流程;通过调用计算、数据搬运、内存管理、任务同步API,实现算子逻辑。其核心逻辑基本上都为计算密集型任务,需要在NPU上执行。11 Kernel实现即算子核函数实现,在Kernel函数内部通过解析Host侧传入的Tiling结构体获取Tiling信息,根据Tiling信息控制数据搬入搬出Local Memory的流程;通过调用计算、数据搬运、内存管理、任务同步API,实现算子逻辑。其核心逻辑基本上都为计算密集型任务,需要在NPU上执行。
12 12 
13-本章介绍矢量编程、矩阵编程、融合算子编程三种典型场景下的算子Tiling、Kernel实现,是对上文中典型[编程范式](../../编程指南/编程模型/AI-Core-SIMD编程/概述.md)的具体应用,同时也介绍了编程的更多细节、API的使用方法等。13+本章介绍矢量编程、矩阵编程、融合算子编程三种典型场景下的算子Tiling、Kernel实现,是对上文中典型[编程范式](../../programming_guide/programming_model/ai_core_simd_programming/overview.md)的具体应用,同时也介绍了编程的更多细节、API的使用方法等。
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矢量编程/基础矢量算子.md+5-5
@@ -7,7 +7,7 @@
7 7 
8- 算子分析:分析算子的数学表达式、输入、输出以及计算逻辑的实现,明确需要调用的Ascend C接口。8- 算子分析:分析算子的数学表达式、输入、输出以及计算逻辑的实现,明确需要调用的Ascend C接口。
9- 核函数定义:定义Ascend C算子入口函数。9- 核函数定义:定义Ascend C算子入口函数。
10-- 根据[矢量编程范式](../../../编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md#section116515238815)实现算子类:完成核函数的内部实现,包括3个基本任务:CopyIn,Compute,CopyOut。10+- 根据[矢量编程范式](../../../programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md#section116515238815)实现算子类:完成核函数的内部实现,包括3个基本任务:CopyIn,Compute,CopyOut。
11 11 
12下文以输入为half数据类型且shape的最后一维为32Bytes对齐、在单核上运行的、一次完成计算的Add算子为例,对上述步骤进行详细介绍。12下文以输入为half数据类型且shape的最后一维为32Bytes对齐、在单核上运行的、一次完成计算的Add算子为例,对上述步骤进行详细介绍。
13 13 
@@ -101,11 +101,11 @@
101 101 
102## 核函数定义<a name="zh-cn_topic_0000002201157438_section58723515714"></a>102## 核函数定义<a name="zh-cn_topic_0000002201157438_section58723515714"></a>
103 103 
104-根据[核函数](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md)中介绍的规则进行核函数的定义。104+根据[核函数](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)中介绍的规则进行核函数的定义。
105 105 
1061. 函数原型定义1061. 函数原型定义
107 107 
108- 本样例中,函数名为vector\_add\_custom(核函数名称可自定义),根据[算子分析](#zh-cn_topic_0000002201157438_section4870456573)中对算子输入输出的分析,确定有3个参数x,y,z,其中x,y为输入内存,z为输出内存。根据[核函数](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md#zh-cn_topic_0000001447989210_section1915102519220)的规则介绍,函数原型定义如下所示:使用\_\_global\_\_函数类型限定符标识它是一个核函数,可以被<<<\>\>\>调用;使用\_\_vector\_\_函数类型限定符标识该核函数在设备端aicore的Vector Core上执行。108+ 本样例中,函数名为vector\_add\_custom(核函数名称可自定义),根据[算子分析](#zh-cn_topic_0000002201157438_section4870456573)中对算子输入输出的分析,确定有3个参数x,y,z,其中x,y为输入内存,z为输出内存。根据[核函数](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md#zh-cn_topic_0000001447989210_section1915102519220)的规则介绍,函数原型定义如下所示:使用\_\_global\_\_函数类型限定符标识它是一个核函数,可以被<<<\>\>\>调用;使用\_\_vector\_\_函数类型限定符标识该核函数在设备端aicore的Vector Core上执行。
109 109 
110 ```110 ```
111 __global__ __vector__ void vector_add_custom(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z)111 __global__ __vector__ void vector_add_custom(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z)
@@ -127,7 +127,7 @@
127 }127 }
128 ```128 ```
129 129 
130-3. 根据[核函数定义和调用](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md#zh-cn_topic_0000001447989210_section1915102519220)章节,调用核函数时,除了需要传入参数x,y,z,还需要传入numBlocks(核函数执行的核数)、动态UB大小(无动态UB需求时设置为0)、stream(应用程序中维护异步操作执行顺序的stream)来规定核函数的执行配置。130+3. 根据[核函数定义和调用](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md#zh-cn_topic_0000001447989210_section1915102519220)章节,调用核函数时,除了需要传入参数x,y,z,还需要传入numBlocks(核函数执行的核数)、动态UB大小(无动态UB需求时设置为0)、stream(应用程序中维护异步操作执行顺序的stream)来规定核函数的执行配置。
131 131 
132 ```132 ```
133 vector_add_custom<<<numBlocks, 0, stream>>>(xDevice, yDevice, zDevice);133 vector_add_custom<<<numBlocks, 0, stream>>>(xDevice, yDevice, zDevice);
@@ -137,7 +137,7 @@
137 137 
138根据上一节介绍,核函数中会调用算子类的Init和Process函数,本节具体讲解如何基于编程范式实现算子类。138根据上一节介绍,核函数中会调用算子类的Init和Process函数,本节具体讲解如何基于编程范式实现算子类。
139 139 
140-根据矢量编程范式对Add算子的实现流程进行设计的思路如下,矢量编程范式请参考[矢量编程范式](../../../编程指南/编程模型/AI-Core-SIMD编程/基于TPipe-TQue框架编程/TPipe-TQue框架编程范式.md#section116515238815),设计完成后得到的Add算子实现流程图参见[图3 Add算子实现流程](#zh-cn_topic_0000002201157438_fig4134406304):140+根据矢量编程范式对Add算子的实现流程进行设计的思路如下,矢量编程范式请参考[矢量编程范式](../../../programming_guide/programming_model/ai_core_simd_programming/tpipe_tque_programming/tpipe_tque_paradigm.md#section116515238815),设计完成后得到的Add算子实现流程图参见[图3 Add算子实现流程](#zh-cn_topic_0000002201157438_fig4134406304):
141 141 
142- Add算子的实现流程分为3个基本任务:CopyIn,Compute,CopyOut。CopyIn任务负责将Global Memory上的输入Tensor xGm和yGm搬运至Local Memory,分别存储在xLocal,yLocal,Compute任务负责对xLocal,yLocal执行加法操作,计算结果存储在zLocal中,CopyOut任务负责将输出数据从zLocal搬运至Global Memory上的输出Tensor zGm中。142- Add算子的实现流程分为3个基本任务:CopyIn,Compute,CopyOut。CopyIn任务负责将Global Memory上的输入Tensor xGm和yGm搬运至Local Memory,分别存储在xLocal,yLocal,Compute任务负责对xLocal,yLocal执行加法操作,计算结果存储在zLocal中,CopyOut任务负责将输出数据从zLocal搬运至Global Memory上的输出Tensor zGm中。
143- CopyIn,Compute任务间通过UB(VECIN)队列inQueueX,inQueueY进行同步,Compute,CopyOut任务间通过UB(VECOUT)队列outQueueZ进行同步。143- CopyIn,Compute任务间通过UB(VECIN)队列inQueueX,inQueueY进行同步,Compute,CopyOut任务间通过UB(VECOUT)队列outQueueZ进行同步。
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矢量编程/多核Tiling切分/主块均分.md+1-1
@@ -60,7 +60,7 @@ struct MainTileOnlyTiling {
60 60 
61## 算子类实现61## 算子类实现
62 62 
63-Kernel侧算子采用[静态Tensor编程](../../../../编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)方式实现,通过`LocalTensor`构造函数直接指定Local Memory地址。静态Tensor编程中的内存管理和同步管理请参考对应章节,本节重点说明各核GM地址的计算以及主块数据的循环处理流程。63+Kernel侧算子采用[静态Tensor编程](../../../../programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)方式实现,通过`LocalTensor`构造函数直接指定Local Memory地址。静态Tensor编程中的内存管理和同步管理请参考对应章节,本节重点说明各核GM地址的计算以及主块数据的循环处理流程。
64 64 
65- Kernel入口接收Host侧传入的Tiling结构体,并依次调用算子类的`Init``Process`函数完成初始化与计算。主块均分场景中,传入的结构体类型为`MainTileOnlyTiling`65- Kernel入口接收Host侧传入的Tiling结构体,并依次调用算子类的`Init``Process`函数完成初始化与计算。主块均分场景中,传入的结构体类型为`MainTileOnlyTiling`
66 66 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矢量编程/多核Tiling切分/尾块均分.md+1-1
@@ -55,7 +55,7 @@ MainTileWithTailBlockTiling tiling{
55 55 
56## 算子类实现56## 算子类实现
57 57 
58-Kernel侧算子仍采用[静态Tensor编程](../../../../编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)方式实现。与[主块均分](主块均分.md)相比,本场景中每个核处理的数据长度仍相同,因此Global Memory偏移仍由`tiling.blockLength`和`GetBlockIdx()`计算;差异在于`Init`函数需要额外保存`tiling.lastTileLength`,供`Process`函数判断最后一次循环是否处理尾块。58+Kernel侧算子仍采用[静态Tensor编程](../../../../programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)方式实现。与[主块均分](主块均分.md)相比,本场景中每个核处理的数据长度仍相同,因此Global Memory偏移仍由`tiling.blockLength`和`GetBlockIdx()`计算;差异在于`Init`函数需要额外保存`tiling.lastTileLength`,供`Process`函数判断最后一次循环是否处理尾块。
59 59 
60```cpp60```cpp
61__aicore__ inline void Init(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z,61__aicore__ inline void Init(__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z,
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矢量编程/多核Tiling切分/尾核切分.md+1-1
@@ -80,7 +80,7 @@ MainTileWithTailCoreTiling tiling{
80 80 
81## 算子类实现81## 算子类实现
82 82 
83-Kernel侧算子仍采用[静态Tensor编程](../../../../编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)方式实现。与[尾块均分](尾块均分.md)相比,本场景中整核和尾核处理的数据长度不同,因此`Init`函数需要根据`GetBlockIdx()`判断当前核是整核还是尾核,并分别设置Global Memory偏移和循环参数。`blockIdx`表示当前逻辑核的索引。83+Kernel侧算子仍采用[静态Tensor编程](../../../../programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)方式实现。与[尾块均分](尾块均分.md)相比,本场景中整核和尾核处理的数据长度不同,因此`Init`函数需要根据`GetBlockIdx()`判断当前核是整核还是尾核,并分别设置Global Memory偏移和循环参数。`blockIdx`表示当前逻辑核的索引。
84 84 
85整核使用`formerLength``formerTileNum``formerLastTileLength`,计算如下:85整核使用`formerLength``formerTileNum``formerLastTileLength`,计算如下:
86 86 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矢量编程/多核Tiling切分/尾核尾块切分.md+1-1
@@ -65,7 +65,7 @@ TailBlockAndTailCoreTiling tiling{
65 65 
66## 算子类实现66## 算子类实现
67 67 
68-Kernel侧算子仍采用[静态Tensor编程](../../../../编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md)方式实现。与[尾核切分](尾核切分.md)相比,本场景中整核和尾核都包含尾块,因此`Init`函数需要根据`GetBlockIdx()`判断当前核是整核还是尾核,并分别设置Global Memory偏移、`tileNum`和`lastTileLength`。68+Kernel侧算子仍采用[静态Tensor编程](../../../../programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md)方式实现。与[尾核切分](尾核切分.md)相比,本场景中整核和尾核都包含尾块,因此`Init`函数需要根据`GetBlockIdx()`判断当前核是整核还是尾核,并分别设置Global Memory偏移、`tileNum`和`lastTileLength`。
69整核使用`formerLength``formerTileNum``formerLastTileLength`,计算如下:69整核使用`formerLength``formerTileNum``formerLastTileLength`,计算如下:
70 70 
71```cpp71```cpp
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矩阵编程(基础API)/分离模式.md+2-2
@@ -3,7 +3,7 @@
3>[!NOTE]说明 3>[!NOTE]说明
4>本节内容为针对分离模式,使用基础API进行矩阵乘法的编程指导。4>本节内容为针对分离模式,使用基础API进行矩阵乘法的编程指导。
5 5 
6-针对[分离模式](../../../编程指南/高级编程/硬件实现/基本架构.md#section1574769433),由于硬件架构差异,在使用基础API进行矩阵乘法算子的实现上存在差异:6+针对[分离模式](../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#section1574769433),由于硬件架构差异,在使用基础API进行矩阵乘法算子的实现上存在差异:
7- 分离模式中,Cube计算单元与Vector计算单元分离部署,每个核有自己的Scalar单元,能独立加载自己的代码段。在核函数编写时,可通过函数类型限定符\_\_cube\_\_标识该核函数在设备端aicore上的Cube计算单元执行。7- 分离模式中,Cube计算单元与Vector计算单元分离部署,每个核有自己的Scalar单元,能独立加载自己的代码段。在核函数编写时,可通过函数类型限定符\_\_cube\_\_标识该核函数在设备端aicore上的Cube计算单元执行。
8- 分离模式中支持Fixpipe硬件加速,支持从L0C Buffer直接搬出数据到L1 Buffer/Global Memory/Unified Buffer的同时,完成量化、反量化、数据排布格式转换等功能。8- 分离模式中支持Fixpipe硬件加速,支持从L0C Buffer直接搬出数据到L1 Buffer/Global Memory/Unified Buffer的同时,完成量化、反量化、数据排布格式转换等功能。
9 9 
@@ -26,7 +26,7 @@ Matmul算子完成形状为\[m, k\]的矩阵a和形状为\[k, n\]的矩阵b的
26 26 
27## 核函数定义<a name="zh-cn_topic_0000002135641293_section434251315304"></a>27## 核函数定义<a name="zh-cn_topic_0000002135641293_section434251315304"></a>
28 28 
29-根据[核函数](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md)中介绍的规则进行核函数的定义。核函数名为matmul\_custom,有3个参数a,b,c,其中a,b都为输入内存,c为输出内存。使用函数类型限定符\_\_global\_\_来标识它是一个核函数,可以被<<<\>\>\>调用;使用函数类型限定符\_\_cube\_\_来标识该核函数在设备端aicore上的Cube核执行。29+根据[核函数](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)中介绍的规则进行核函数的定义。核函数名为matmul\_custom,有3个参数a,b,c,其中a,b都为输入内存,c为输出内存。使用函数类型限定符\_\_global\_\_来标识它是一个核函数,可以被<<<\>\>\>调用;使用函数类型限定符\_\_cube\_\_来标识该核函数在设备端aicore上的Cube核执行。
30 30 
31核函数中,算子类的Init函数,完成内存初始化相关工作,Process函数完成算子实现的核心逻辑。核函数在开始时调用`AscendC::InitSocState()`初始化硬件状态,结束时调用`AscendC::PipeBarrier<PIPE_ALL>()`等待所有指令完成。31核函数中,算子类的Init函数,完成内存初始化相关工作,Process函数完成算子实现的核心逻辑。核函数在开始时调用`AscendC::InitSocState()`初始化硬件状态,结束时调用`AscendC::PipeBarrier<PIPE_ALL>()`等待所有指令完成。
32 32 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矩阵编程(基础API)/耦合模式.md+4-4
@@ -1,7 +1,7 @@
1# 耦合模式<a name="ZH-CN_TOPIC_0000002500468248"></a>1# 耦合模式<a name="ZH-CN_TOPIC_0000002500468248"></a>
2 2 
3>[!NOTE]说明 3>[!NOTE]说明
4->本节内容为针对[耦合模式](../../../编程指南/高级编程/硬件实现/基本架构.md#section1574769433),使用基础API进行矩阵乘法的编程指导。4+>本节内容为针对[耦合模式](../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#section1574769433),使用基础API进行矩阵乘法的编程指导。
5 5 
6## 编程范式<a name="zh-cn_topic_0000002135641293_section12567050132819"></a>6## 编程范式<a name="zh-cn_topic_0000002135641293_section12567050132819"></a>
7 7 
@@ -242,11 +242,11 @@ extern "C" __global__ __aicore__ void matmul_custom(__gm__ uint8_t* a, __gm__ ui
242 242 
243## 核函数定义<a name="zh-cn_topic_0000002135641293_section434251315304"></a>243## 核函数定义<a name="zh-cn_topic_0000002135641293_section434251315304"></a>
244 244 
245-根据[核函数](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md)中介绍的规则进行核函数的定义。245+根据[核函数](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)中介绍的规则进行核函数的定义。
246 246 
2471. 函数原型定义。2471. 函数原型定义。
248 248 
249- 本样例中,函数名为matmul\_custom(核函数名称可自定义);根据[算子分析](#zh-cn_topic_0000002135641293_section11569817102912)中对算子输入输出的分析,确定有3个参数a,b,c,其中a,b都为输入内存,c为输出内存。根据[核函数](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md)中核函数的规则介绍,函数原型定义如下所示:使用\_\_global\_\_函数类型限定符来标识它是一个核函数,可以被<<<\>\>\>调用;使用\_\_aicore\_\_函数类型限定符来标识该核函数在设备端aicore上执行。249+ 本样例中,函数名为matmul\_custom(核函数名称可自定义);根据[算子分析](#zh-cn_topic_0000002135641293_section11569817102912)中对算子输入输出的分析,确定有3个参数a,b,c,其中a,b都为输入内存,c为输出内存。根据[核函数](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)中核函数的规则介绍,函数原型定义如下所示:使用\_\_global\_\_函数类型限定符来标识它是一个核函数,可以被<<<\>\>\>调用;使用\_\_aicore\_\_函数类型限定符来标识该核函数在设备端aicore上执行。
250 250 
251 ```251 ```
252 extern "C" __global__ __aicore__ void matmul_custom(__gm__ uint8_t* a, __gm__ uint8_t* b, __gm__ uint8_t* c)252 extern "C" __global__ __aicore__ void matmul_custom(__gm__ uint8_t* a, __gm__ uint8_t* b, __gm__ uint8_t* c)
@@ -267,7 +267,7 @@ extern "C" __global__ __aicore__ void matmul_custom(__gm__ uint8_t* a, __gm__ ui
267 }267 }
268 ```268 ```
269 269 
270-3. 对核函数进行封装,得到matmul\_custom\_do函数,便于主程序调用。\#ifndef ASCENDC\_CPU\_DEBUG表示该封装函数仅在编译运行NPU侧的算子时会用到,编译运行CPU侧的算子时,可以直接调用matmul\_custom函数。根据[核函数定义和调用](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md#zh-cn_topic_0000001447989210_section1915102519220)章节,调用核函数时,除了需要传入参数a,b,c,还需要传入numBlocks(核函数执行的核数)、动态UB大小(无动态UB需求时设置为0)、stream(应用程序中维护异步操作执行顺序的stream)来规定核函数的执行配置。270+3. 对核函数进行封装,得到matmul\_custom\_do函数,便于主程序调用。\#ifndef ASCENDC\_CPU\_DEBUG表示该封装函数仅在编译运行NPU侧的算子时会用到,编译运行CPU侧的算子时,可以直接调用matmul\_custom函数。根据[核函数定义和调用](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md#zh-cn_topic_0000001447989210_section1915102519220)章节,调用核函数时,除了需要传入参数a,b,c,还需要传入numBlocks(核函数执行的核数)、动态UB大小(无动态UB需求时设置为0)、stream(应用程序中维护异步操作执行顺序的stream)来规定核函数的执行配置。
271 271 
272 ```272 ```
273 #ifndef ASCENDC_CPU_DEBUG273 #ifndef ASCENDC_CPU_DEBUG
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/AIC和AIV独立运行机制.md+1-1
@@ -2,7 +2,7 @@
2 2 
3## 功能介绍<a name="zh-cn_topic_0000002299608693_section310824820358"></a>3## 功能介绍<a name="zh-cn_topic_0000002299608693_section310824820358"></a>
4 4 
5-AIC和AIV独立运行机制,又称双主模式。在[分离模式](../../../../编程指南/高级编程/硬件实现/基本架构.md#li188191010204418)下,区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,开启双主模式能够提高Matmul计算性能。默认情况下,双主模式不开启,需要通过MatmulConfig中的enableMixDualMaster参数开启。5+AIC和AIV独立运行机制,又称双主模式。在[分离模式](../../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#li188191010204418)下,区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,开启双主模式能够提高Matmul计算性能。默认情况下,双主模式不开启,需要通过MatmulConfig中的enableMixDualMaster参数开启。
6 6 
7## 使用场景<a name="zh-cn_topic_0000002299608693_section118051016163613"></a>7## 使用场景<a name="zh-cn_topic_0000002299608693_section118051016163613"></a>
8 8 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/TSCM输入的矩阵乘.md+2-2
@@ -2,11 +2,11 @@
2 2 
3## 功能介绍<a name="zh-cn_topic_0000002298654821_section310824820358"></a>3## 功能介绍<a name="zh-cn_topic_0000002298654821_section310824820358"></a>
4 4 
5-TSCM表示L1 Buffer空间对应的逻辑内存,L1 Buffer相关内容见[存储单元](../../../../编程指南/高级编程/硬件实现/基本架构.md#section123639375417),开发者可以自行管理TSCM以高效利用硬件资源。比如,开发者可缓存一份TSCM数据,在不同使用场景中灵活配置为Matmul操作的A矩阵、B矩阵或Bias偏置矩阵,实现内存复用与计算效率优化。在TSCM输入场景,用户管理整块TSCM内存空间,Matmul直接使用传入的TSCM内存地址,不进行Global Memory到TSCM的数据搬入。5+TSCM表示L1 Buffer空间对应的逻辑内存,L1 Buffer相关内容见[存储单元](../../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#section123639375417),开发者可以自行管理TSCM以高效利用硬件资源。比如,开发者可缓存一份TSCM数据,在不同使用场景中灵活配置为Matmul操作的A矩阵、B矩阵或Bias偏置矩阵,实现内存复用与计算效率优化。在TSCM输入场景,用户管理整块TSCM内存空间,Matmul直接使用传入的TSCM内存地址,不进行Global Memory到TSCM的数据搬入。
6 6 
7## 使用场景<a name="zh-cn_topic_0000002298654821_section118051016163613"></a>7## 使用场景<a name="zh-cn_topic_0000002298654821_section118051016163613"></a>
8 8 
9-用户需要自定义数据搬入到TSCM及自定义管理的场景,即需要自定义实现数据搬入功能,如非连续搬入或对搬入数据进行预处理等。用户通过自定义管理TSCM可灵活配置MTE2流水,实现跨Matmul对象的全局[DoubleBuffer](../../../../technical_appendix/concepts_and_terms/performance_optimization/double_buffer.md),MTE2相关内容见[搬运单元](../../../../编程指南/高级编程/硬件实现/基本架构.md#section123639375417)。9+用户需要自定义数据搬入到TSCM及自定义管理的场景,即需要自定义实现数据搬入功能,如非连续搬入或对搬入数据进行预处理等。用户通过自定义管理TSCM可灵活配置MTE2流水,实现跨Matmul对象的全局[DoubleBuffer](../../../../technical_appendix/concepts_and_terms/performance_optimization/double_buffer.md),MTE2相关内容见[搬运单元](../../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#section123639375417)。
10 10 
11## 约束说明<a name="zh-cn_topic_0000002298654821_section14160134220363"></a>11## 约束说明<a name="zh-cn_topic_0000002298654821_section14160134220363"></a>
12 12 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/矩阵编程(高阶API)/特性场景/多核对齐切分.md+1-1
@@ -24,7 +24,7 @@
24 24 
25![](../../../../figures/nd2nz_new_2.png)25![](../../../../figures/nd2nz_new_2.png)
26 26 
27-上述的切分策略会在Tiling参数中体现,比如SingleCoreM、SingleCoreN、SingleCoreK,开发者在host侧通过调用API自动获取Tiling参数,与单核场景的不同的是,多核Tiling需要使用[MultiCoreMatmulTiling](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/Matmul_Tiling_constructor.md)构造多核Tiling对象,并通过[SetDim](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/SetDim.md)接口设置Matmul计算所用的核数。注意:这里设置的核数为Matmul计算可用的核数,仅在多核场景下设置,用于计算tiling参数;SetSimdNumBlocks为整个算子计算所用核数,是实际会加载的核数,是必须设置的。SetSimdNumBlocks的设置规则请参考[numBlocks的说明](../../../../编程指南/高级编程/Aclnn算子工程化开发/设计与实现/Host侧Tiling实现.md#numblocks)。SetDim的设置规则如下:27+上述的切分策略会在Tiling参数中体现,比如SingleCoreM、SingleCoreN、SingleCoreK,开发者在host侧通过调用API自动获取Tiling参数,与单核场景的不同的是,多核Tiling需要使用[MultiCoreMatmulTiling](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/Matmul_Tiling_constructor.md)构造多核Tiling对象,并通过[SetDim](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/SetDim.md)接口设置Matmul计算所用的核数。注意:这里设置的核数为Matmul计算可用的核数,仅在多核场景下设置,用于计算tiling参数;SetSimdNumBlocks为整个算子计算所用核数,是实际会加载的核数,是必须设置的。SetSimdNumBlocks的设置规则请参考[numBlocks的说明](../../../../programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/host_tiling_implementation.md#numblocks)。SetDim的设置规则如下:
28 28 
29- 纯Cube模式(只有矩阵计算)场景,本节内容以纯Cube模式举例。29- 纯Cube模式(只有矩阵计算)场景,本节内容以纯Cube模式举例。
30 30 
Mdocs/zh/guide/算子实践参考/SIMD算子实现/融合算子编程/CV融合/算子实现.md+3-3
@@ -269,8 +269,8 @@ host侧实现GenerateTiling函数,在该函数中自动获取Tiling参数,
269 269 
270>[!NOTE]说明 <a name="zh-cn_topic_0000001644252364_li4790115115920"></a>270>[!NOTE]说明 <a name="zh-cn_topic_0000001644252364_li4790115115920"></a>
271>- 特别的对于多核场景,需要通过[SetDim](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/SetDim.md)接口设置Matmul计算所用的核数,MIX模式(包含矩阵计算和矢量计算)的设置规则如下:271>- 特别的对于多核场景,需要通过[SetDim](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Tiling/SetDim.md)接口设置Matmul计算所用的核数,MIX模式(包含矩阵计算和矢量计算)的设置规则如下:
272-> - [分离模式](../../../../编程指南/高级编程/硬件实现/基本架构.md#li188191010204418):Matmul API都是从AIV侧发起的,调用Iterate计算时在AIV侧只会起到通知的作用,通知AIC去做矩阵计算,计算完成后AIC告知AIV计算完成。这个架构下,SetSimdNumBlocks设置为实际计算会用到的AI Core(AIC、AIV组合)的数量,SetDim设置为实际计算会用到的AIV的数量。例如,SetSimdNumBlocks时可以设置为20,启动20个AI Core(AIC AIV的组合),SetDim设置为40,表示按照40个AIV进行切分。272+> - [分离模式](../../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#li188191010204418):Matmul API都是从AIV侧发起的,调用Iterate计算时在AIV侧只会起到通知的作用,通知AIC去做矩阵计算,计算完成后AIC告知AIV计算完成。这个架构下,SetSimdNumBlocks设置为实际计算会用到的AI Core(AIC、AIV组合)的数量,SetDim设置为实际计算会用到的AIV的数量。例如,SetSimdNumBlocks时可以设置为20,启动20个AI Core(AIC AIV的组合),SetDim设置为40,表示按照40个AIV进行切分。
273-> - [耦合模式](../../../../编程指南/高级编程/硬件实现/基本架构.md#li1414517184416):SetSimdNumBlocks加载的核数就是Matmul API实际计算会用到的核数,SetDim和SetSimdNumBlocks设置的值是一样的。273+> - [耦合模式](../../../../programming_guide/advanced_programming/hardware_implementation/basic_architecture.md#li1414517184416):SetSimdNumBlocks加载的核数就是Matmul API实际计算会用到的核数,SetDim和SetSimdNumBlocks设置的值是一样的。
274>- Matmul高阶API内部实现时需要使用系统workspace,开发者需要:274>- Matmul高阶API内部实现时需要使用系统workspace,开发者需要:
275> - 在host侧Tiling实现时,设置总的workspace的数值大小(包含用户workspace和系统workspace),workspace空间由框架来申请并管理。系统workspace的空间大小通过[GetLibApiWorkSpaceSize](../../../../../api/Utils-API/platform_info/PlatformAscendC/GetLibApiWorkSpaceSize.md)获取。275> - 在host侧Tiling实现时,设置总的workspace的数值大小(包含用户workspace和系统workspace),workspace空间由框架来申请并管理。系统workspace的空间大小通过[GetLibApiWorkSpaceSize](../../../../../api/Utils-API/platform_info/PlatformAscendC/GetLibApiWorkSpaceSize.md)获取。
276> ```276> ```
@@ -279,7 +279,7 @@ host侧实现GenerateTiling函数,在该函数中自动获取Tiling参数,
279> size_t workspaceSize = userWorkspaceSize + systemWorkspaceSize;279> size_t workspaceSize = userWorkspaceSize + systemWorkspaceSize;
280> ```280> ```
281>- 上文介绍的实现方法,AIC侧和AIV侧的代码隔离和核间同步由框架来完成,开发者无需关心。除该方法外,开发者也可以选择底层编码的方式在分离模式下实现融合算子,这种方式将更加灵活。采用底层编码方式时,需要注意以下几点:281>- 上文介绍的实现方法,AIC侧和AIV侧的代码隔离和核间同步由框架来完成,开发者无需关心。除该方法外,开发者也可以选择底层编码的方式在分离模式下实现融合算子,这种方式将更加灵活。采用底层编码方式时,需要注意以下几点:
282-> - 通过[ASCEND\_IS\_AIV和ASCEND\_IS\_AIC](../../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#li19530175294118)实现AIV和AIC代码之间的隔离。282+> - 通过[ASCEND\_IS\_AIV和ASCEND\_IS\_AIC](../../../../programming_guide/language_extension/simd_builtin_keywords.md#li19530175294118)实现AIV和AIC代码之间的隔离。
283> - 自行实现AIC和AIV核之间的同步:比如Matmul + LeakyRelu算子样例中,需要确保在AIC完成矩阵计算后,AIV再进行LeakyRelu的计算。283> - 自行实现AIC和AIV核之间的同步:比如Matmul + LeakyRelu算子样例中,需要确保在AIC完成矩阵计算后,AIV再进行LeakyRelu的计算。
284> - 使用高阶API Matmul时需要设置ASCENDC\_CUBE\_ONLY,表示仅在AIC侧调用Matmul API。284> - 使用高阶API Matmul时需要设置ASCENDC\_CUBE\_ONLY,表示仅在AIC侧调用Matmul API。
285> - 使用[设置Kernel类型接口](../../../../../api/SIMD-API/basic_api/Kernel-Tiling/set_Kernel_type.md)设置Kernel类型为KERNEL\_TYPE\_MIX\_xxx,同时启用AIV核和AIC核。285> - 使用[设置Kernel类型接口](../../../../../api/SIMD-API/basic_api/Kernel-Tiling/set_Kernel_type.md)设置Kernel类型为KERNEL\_TYPE\_MIX\_xxx,同时启用AIV核和AIC核。
Mdocs/zh/guide/算子实践参考/SIMD算子实现/融合算子编程/通算融合/特性场景.md+1-1
@@ -26,7 +26,7 @@ Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持通算融合算
26- 通算融合算子的输出内存地址和输入内存地址不相同。26- 通算融合算子的输出内存地址和输入内存地址不相同。
27- 通算融合算子仅存在Server间通信(Server为计算节点,通常是8卡或16卡的昇腾NPU设备组成的服务器形态的统称)。27- 通算融合算子仅存在Server间通信(Server为计算节点,通常是8卡或16卡的昇腾NPU设备组成的服务器形态的统称)。
28 28 
29-- 算子编译时,配置编译宏AICORE\_EXCEPTION\_RESTART,如下所示。具体的编译宏配置阶段和方式请参考[支持自定义编译选项](../../../../编程指南/高级编程/Aclnn算子工程化开发/编译与部署/基本流程.md#custom-compile-options)。29+- 算子编译时,配置编译宏AICORE\_EXCEPTION\_RESTART,如下所示。具体的编译宏配置阶段和方式请参考[支持自定义编译选项](../../../../programming_guide/advanced_programming/aclnn_operator_development/compilation_and_deployment/basic_process.md#custom-compile-options)。
30 30 
31 31 
32 ```32 ```
Mdocs/zh/guide/算子实践参考/SIMD算子实现/融合算子编程/通算融合/算子实现.md+4-4
@@ -1,6 +1,6 @@
1# 算子实现<a name="ZH-CN_TOPIC_0000002500468252"></a>1# 算子实现<a name="ZH-CN_TOPIC_0000002500468252"></a>
2 2 
3-在通算融合类算子的实现中,通信操作使用[Hccl高阶API](../../../../../api/SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_usage.md),矩阵乘计算操作使用[Matmul高阶API](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_Kernel.md)。关于更多集合通信的内容和相关概念请参考[《HCCL集合通信库》](https://gitcode.com/cann/hccl/blob/master/docs/zh/user_guide/README.md)。通算融合算子的开发过程与一般算子相同,但请注意,当前通算融合算子暂不支持[Kernel直调](../../../../编程指南/附录/基于样例工程完成Kernel直调.md)和[入图(GE图)开发](../../../../编程指南/高级编程/算子入图开发/概述.md),仅支持[单算子API调用](../../../../编程指南/高级编程/Aclnn算子工程化开发/调用/单算子API调用.md)。3+在通算融合类算子的实现中,通信操作使用[Hccl高阶API](../../../../../api/SIMD-API/adv_api/HCCL_communication/HCCL_Kernel/HCCL_usage.md),矩阵乘计算操作使用[Matmul高阶API](../../../../../api/SIMD-API/adv_api/cube_compute/Matmul_Kernel/Matmul_Kernel.md)。关于更多集合通信的内容和相关概念请参考[《HCCL集合通信库》](https://gitcode.com/cann/hccl/blob/master/docs/zh/user_guide/README.md)。通算融合算子的开发过程与一般算子相同,但请注意,当前通算融合算子暂不支持[Kernel直调](../../../../programming_guide/appendix/kernel_direct_call_from_sample.md)和[入图(GE图)开发](../../../../programming_guide/advanced_programming/operator_graph_development/overview.md),仅支持[单算子API调用](../../../../programming_guide/advanced_programming/aclnn_operator_development/invocation/single_operator_api_call.md)。
4 4 
5下文将以AllGatherMatmulCustom算子(简称AllGatherMatmul)的实现为例,从算子分析、数据流分析、创建算子工程、原型定义、Tiling实现、Kernel实现、编译与运行等方面介绍通算融合算子的设计和实现流程。本样例中算子的完整代码请参见[AllGatherMatmul样例](https://gitcode.com/cann/ops-transformer/tree/master/mc2/all_gather_matmul_v2)。该样例仅支持在**Atlas A2 训练系列产品/Atlas A2 推理系列产品**上运行。5下文将以AllGatherMatmulCustom算子(简称AllGatherMatmul)的实现为例,从算子分析、数据流分析、创建算子工程、原型定义、Tiling实现、Kernel实现、编译与运行等方面介绍通算融合算子的设计和实现流程。本样例中算子的完整代码请参见[AllGatherMatmul样例](https://gitcode.com/cann/ops-transformer/tree/master/mc2/all_gather_matmul_v2)。该样例仅支持在**Atlas A2 训练系列产品/Atlas A2 推理系列产品**上运行。
6 6 
@@ -138,7 +138,7 @@ AllGatherMatmul算子逻辑分析:
138 138 
139## 创建算子工程<a name="zh-cn_topic_0000002400208581_section121335271825"></a>139## 创建算子工程<a name="zh-cn_topic_0000002400208581_section121335271825"></a>
140 140 
141-创建通算融合算子的算子工程与一般算子相同,具体请参考[创建算子工程](../../../../编程指南/高级编程/Aclnn算子工程化开发/Aclnn算子工程化开发快速入门.md#create-project)章节。本样例基于如下原型定义json文件,使用自定义算子工程生成工具msOpGen,为AllGatherMatmul算子创建算子工程。141+创建通算融合算子的算子工程与一般算子相同,具体请参考[创建算子工程](../../../../programming_guide/advanced_programming/aclnn_operator_development/aclnn_quick_start.md#create-project)章节。本样例基于如下原型定义json文件,使用自定义算子工程生成工具msOpGen,为AllGatherMatmul算子创建算子工程。
142 142 
143```143```
144[144[
@@ -202,7 +202,7 @@ AllGatherMatmul算子逻辑分析:
202 202 
203## 算子原型定义<a name="zh-cn_topic_0000002400208581_section7112164101213"></a>203## 算子原型定义<a name="zh-cn_topic_0000002400208581_section7112164101213"></a>
204 204 
205-相比于一般算子,通算融合算子在实现[算子原型定义](../../../../编程指南/高级编程/Aclnn算子工程化开发/设计与实现/算子原型定义.md)时,有如下约束:205+相比于一般算子,通算融合算子在实现[算子原型定义](../../../../programming_guide/advanced_programming/aclnn_operator_development/design_and_implementation/operator_prototype_definition.md)时,有如下约束:
206 206 
207- 必须定义一个表示算子通信域名称的属性。通信域是集合通信执行的上下文,管理对应的通信实体(例如一个NPU就是一个通信实体)和通信所需的资源。207- 必须定义一个表示算子通信域名称的属性。通信域是集合通信执行的上下文,管理对应的通信实体(例如一个NPU就是一个通信实体)和通信所需的资源。
208- 必须通过原型注册中的MC2接口注册该算子为通算融合算子,并通过HcclGroup接口配置该算子的通信域名称。208- 必须通过原型注册中的MC2接口注册该算子为通算融合算子,并通过HcclGroup接口配置该算子的通信域名称。
@@ -731,7 +731,7 @@ extern "C" __global__ __aicore__ void all_gather_matmul_custom(__gm__ uint8_t* a
731 const aclrtStream stream);731 const aclrtStream stream);
732 ```732 ```
733 733 
734- 其中aclnnAllGatherMatmulCustomGetWorkspaceSize为第一段接口,主要用于计算本次API调用计算过程中需要的workspace内存大小。按照该workspaceSize大小申请Device侧内存,然后调用第二段接口aclnnAllGatherMatmulCustom执行计算。详细内容请参考[单算子API调用](../../../../编程指南/高级编程/Aclnn算子工程化开发/调用/单算子API调用.md)章节。734+ 其中aclnnAllGatherMatmulCustomGetWorkspaceSize为第一段接口,主要用于计算本次API调用计算过程中需要的workspace内存大小。按照该workspaceSize大小申请Device侧内存,然后调用第二段接口aclnnAllGatherMatmulCustom执行计算。详细内容请参考[单算子API调用](../../../../programming_guide/advanced_programming/aclnn_operator_development/invocation/single_operator_api_call.md)章节。
735 735 
736 在通算融合场景,单算子API调用的程序中需要调用[通信域创建与管理接口](https://gitcode.com/cann/hcomm/blob/master/docs/zh/api_ref/comm_mgr_c/README.md)创建通信域,并在多线程上执行AllGatherMatmul算子。以下给出main函数和线程调用函数中关键步骤的代码示例,仅供参考。736 在通算融合场景,单算子API调用的程序中需要调用[通信域创建与管理接口](https://gitcode.com/cann/hcomm/blob/master/docs/zh/api_ref/comm_mgr_c/README.md)创建通信域,并在多线程上执行AllGatherMatmul算子。以下给出main函数和线程调用函数中关键步骤的代码示例,仅供参考。
737 737 
Mdocs/zh/guide/算子实践参考/SIMD算子性能优化/内存访问/避免UB的bank冲突/概述.md+2-2
@@ -6,7 +6,7 @@
6 6 
7为了提高数据访问的效率和吞吐量,Unified Buffer采用了大小相等的内存模块(bank)结构设计。当多条读写指令同时访问Unified Buffer时,由于硬件资源的限制,这些指令不能同时执行,从而引发bank冲突。在这种情况下,指令需要排队等待资源,无法在一个指令周期内完成。7为了提高数据访问的效率和吞吐量,Unified Buffer采用了大小相等的内存模块(bank)结构设计。当多条读写指令同时访问Unified Buffer时,由于硬件资源的限制,这些指令不能同时执行,从而引发bank冲突。在这种情况下,指令需要排队等待资源,无法在一个指令周期内完成。
8 8 
9-- 针对[NPU架构版本2201](../../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)9+- 针对[NPU架构版本2201](../../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)
10 10 
11 ![](../../../../figures/mat_pos_65.png)11 ![](../../../../figures/mat_pos_65.png)
12 12 
@@ -16,7 +16,7 @@
16 - **写写冲突**:多个写操作同时尝试访问同一个bank group。16 - **写写冲突**:多个写操作同时尝试访问同一个bank group。
17 - **读读冲突**:多个读操作同时尝试访问同一个bank group。17 - **读读冲突**:多个读操作同时尝试访问同一个bank group。
18 18 
19-- 针对[NPU架构版本3510](../../../../编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)19+- 针对[NPU架构版本3510](../../../../programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)
20 20 
21 ![](../../../../figures/mat_pos_66.png)21 ![](../../../../figures/mat_pos_66.png)
22 22 
Mdocs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/Vector算子灵活运用Counter模式.md+1-1
@@ -6,7 +6,7 @@
6 6 
7Counter模式下,用户不需要计算迭代次数以及判断是否存在尾块,将mask模式设置为Counter模式后,只需要设置mask为\{0,总元素个数\},然后调用相应的API,处理逻辑更简便,减少了指令数量和Scalar计算量,同时更加高效地利用了指令单次执行的并发能力,进而提升性能。7Counter模式下,用户不需要计算迭代次数以及判断是否存在尾块,将mask模式设置为Counter模式后,只需要设置mask为\{0,总元素个数\},然后调用相应的API,处理逻辑更简便,减少了指令数量和Scalar计算量,同时更加高效地利用了指令单次执行的并发能力,进而提升性能。
8 8 
9-提示:Normal模式和Counter模式、掩码的介绍可参考[如何使用掩码操作API](../../../编程指南/类库API/基础API/常用操作速查指导/如何使用掩码操作API.md)。9+提示:Normal模式和Counter模式、掩码的介绍可参考[如何使用掩码操作API](../../../programming_guide/library_api/basic_api/quick_reference/how_to_use_mask_api.md)。
10 10 
11以下反例和正例中的代码均以[AddCustom](../../../../../../examples/01_simd_cpp_api/02_features/99_acl_based/00_acl_compilation/custom_op)算子为例,修改其中Add接口的调用代码,以说明Counter模式的优势。11以下反例和正例中的代码均以[AddCustom](../../../../../../examples/01_simd_cpp_api/02_features/99_acl_based/00_acl_compilation/custom_op)算子为例,修改其中Add接口的调用代码,以说明Counter模式的优势。
12 12 
Mdocs/zh/guide/算子实践参考/SIMT算子实现/基础知识.md+1-1
@@ -2,7 +2,7 @@
2 2 
3本节内容为使用SIMT API进行SIMT编程的指导。3本节内容为使用SIMT API进行SIMT编程的指导。
4 4 
5-与SIMD编程不同,在SIMT编程中Global Memory上的数据可以被直接读取和使用。SIMT编程常通过组织线程的层次结构来实现数据切分,使用threadIdx等[SIMT BuiltIn关键字](../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md)计算线程应处理的数据索引,完成对应数据的计算,从而将函数的实现简化为标量计算。5+与SIMD编程不同,在SIMT编程中Global Memory上的数据可以被直接读取和使用。SIMT编程常通过组织线程的层次结构来实现数据切分,使用threadIdx等[SIMT BuiltIn关键字](../../programming_guide/language_extension/simt_builtin_keywords.md)计算线程应处理的数据索引,完成对应数据的计算,从而将函数的实现简化为标量计算。
6 6 
7SIMT是单指令多线程的编程抽象,允许一条指令驱动多个线程,每个线程可对各自的数据独立寻址,更加灵活,如下图所示,对于离散访问的算子,适合使用SIMT编程实现,例如Scatter类与Gather类算子。此外,线程可以独立执行,每个线程具有较高的灵活性,能够执行不同的逻辑分支以完成复杂的逻辑实现。7SIMT是单指令多线程的编程抽象,允许一条指令驱动多个线程,每个线程可对各自的数据独立寻址,更加灵活,如下图所示,对于离散访问的算子,适合使用SIMT编程实现,例如Scatter类与Gather类算子。此外,线程可以独立执行,每个线程具有较高的灵活性,能够执行不同的逻辑分支以完成复杂的逻辑实现。
8 8 
Mdocs/zh/guide/算子实践参考/SIMT算子性能优化/内存访问/短向量类型提升效率.md+1-1
@@ -78,7 +78,7 @@
78 78 
79 **适用场景扩展**79 **适用场景扩展**
80 80 
81- 短向量类型不局限于half2,关于更多支持类型,请参见完整[短向量类型列表](../../../../api/SIMT-API/SIMT_programming_intro/extended_syntax/builtin_data_types.md#短向量类型)。对于短向量类型支持的运算符,请参考[SIMT BuiltIn关键字章节](../../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#运算符)。81+ 短向量类型不局限于half2,关于更多支持类型,请参见完整[短向量类型列表](../../../../api/SIMT-API/SIMT_programming_intro/extended_syntax/builtin_data_types.md#短向量类型)。对于短向量类型支持的运算符,请参考[SIMT BuiltIn关键字章节](../../../programming_guide/language_extension/simt_builtin_keywords.md#运算符)。
82 82
83 83 
84【总结】在SIMT算子中,通过利用[短向量数据类型](../../../../api/SIMT-API/SIMT_programming_intro/extended_syntax/builtin_data_types.md#短向量类型),单个Warp的带宽利用率可以达到100%,同时精简发射指令数量,显著提升整体访存效率。84【总结】在SIMT算子中,通过利用[短向量数据类型](../../../../api/SIMT-API/SIMT_programming_intro/extended_syntax/builtin_data_types.md#短向量类型),单个Warp的带宽利用率可以达到100%,同时精简发射指令数量,显著提升整体访存效率。
Mdocs/zh/guide/算子实践参考/SIMT算子性能优化/执行配置/合理配置线程数避免寄存器溢出.md+1-1
@@ -13,7 +13,7 @@
13 13 
14`__launch_bounds__(N)`是核函数上的可选限定符,在核函数定义时配置,用于在编译期向编译器声明执行该核函数的**最大线程数**为N,编译器据此确定每个线程可分配的寄存器数量。当核函数未配置`__launch_bounds__`时,最大线程数默认为1024,此时每个线程可使用32个寄存器。对于计算密集型算子,单个线程占用的寄存器通常较多,在默认配置下容易超出寄存器上限,超出部分的中间数据会溢出到栈空间(位于Global Memory),引入额外的Global Memory访问,导致性能下降。14`__launch_bounds__(N)`是核函数上的可选限定符,在核函数定义时配置,用于在编译期向编译器声明执行该核函数的**最大线程数**为N,编译器据此确定每个线程可分配的寄存器数量。当核函数未配置`__launch_bounds__`时,最大线程数默认为1024,此时每个线程可使用32个寄存器。对于计算密集型算子,单个线程占用的寄存器通常较多,在默认配置下容易超出寄存器上限,超出部分的中间数据会溢出到栈空间(位于Global Memory),引入额外的Global Memory访问,导致性能下降。
15 15 
16-避免寄存器溢出的思路是:先通过`--cce-res-usage`编译选项查看核函数的寄存器使用情况(`Stack size`大于0即表明存在溢出),再根据上表中寄存器与最大线程数的对应关系,选择一档能满足算子单线程寄存器需求的最大线程数,并通过`__launch_bounds__(N)`将其配置给编译器。编译器据此放宽每线程的寄存器配额,从而避免寄存器溢出,将中间数据保留在寄存器中,减少Global Memory访问,提升性能。一般建议计算密集型算子:若需多于32个寄存器(如sincos),建议配置512线程;若不超过32个,可配置1024线程。关于`__launch_bounds__`的详细说明,请参考[SIMT BuiltIn关键字](../../../编程指南/语言扩展层/SIMT-BuiltIn关键字.md#核函数配置)。16+避免寄存器溢出的思路是:先通过`--cce-res-usage`编译选项查看核函数的寄存器使用情况(`Stack size`大于0即表明存在溢出),再根据上表中寄存器与最大线程数的对应关系,选择一档能满足算子单线程寄存器需求的最大线程数,并通过`__launch_bounds__(N)`将其配置给编译器。编译器据此放宽每线程的寄存器配额,从而避免寄存器溢出,将中间数据保留在寄存器中,减少Global Memory访问,提升性能。一般建议计算密集型算子:若需多于32个寄存器(如sincos),建议配置512线程;若不超过32个,可配置1024线程。关于`__launch_bounds__`的详细说明,请参考[SIMT BuiltIn关键字](../../../programming_guide/language_extension/simt_builtin_keywords.md#核函数配置)。
17 17 
18【样例介绍】以[SinCosCompute算子](../../../../../../examples/03_simt_api/03_best_practices/01_execution_conf_optimizations/max_thread_config/sincos_compute)为例,使用`sincosf`接口同时计算sin和cos结果,计算公式为 $output\_sin[i] = sin(input[i])$、$output\_cos[i] = cos(input[i])$。输入数据为float类型,数据规模为393216个元素,配置48个线程块、每个线程块512个线程,每个线程循环计算16个输入值。基线版本与优化版本的核函数计算逻辑完全相同,仅在是否配置`__launch_bounds__`上存在差异。18【样例介绍】以[SinCosCompute算子](../../../../../../examples/03_simt_api/03_best_practices/01_execution_conf_optimizations/max_thread_config/sincos_compute)为例,使用`sincosf`接口同时计算sin和cos结果,计算公式为 $output\_sin[i] = sin(input[i])$、$output\_cos[i] = cos(input[i])$。输入数据为float类型,数据规模为393216个元素,配置48个线程块、每个线程块512个线程,每个线程循环计算16个输入值。基线版本与优化版本的核函数计算逻辑完全相同,仅在是否配置`__launch_bounds__`上存在差异。
19 19 
Mdocs/zh/guide/算子实践参考/优秀实践/Matmul性能调优案例/Matmul高阶API使能纯Cube模式.md+2-2
@@ -98,7 +98,7 @@ Tiling参数如下:
98 cubeTiling.SetDim(numBlocks);98 cubeTiling.SetDim(numBlocks);
99 ```99 ```
100 100 
101-3. 调用核函数,参考[核函数定义和调用](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md#zh-cn_topic_0000001447989210_section1915102519220),设置核函数的numBlocks参数配置。101+3. 调用核函数,参考[核函数定义和调用](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md#zh-cn_topic_0000001447989210_section1915102519220),设置核函数的numBlocks参数配置。
102 102 
103 ```103 ```
104 matmul_custom_do(ascendcPlatform->GetCoreNumAic(), stream, x1, x2, bias, y, workspaceDevice, tilingDevice); // MIX模式下,启动时,按照AIV和AIC组合启动,numBlocks用于设置启动多少个AI Core。104 matmul_custom_do(ascendcPlatform->GetCoreNumAic(), stream, x1, x2, bias, y, workspaceDevice, tilingDevice); // MIX模式下,启动时,按照AIV和AIC组合启动,numBlocks用于设置启动多少个AI Core。
@@ -133,7 +133,7 @@ Matmul API开启纯Cube模式的完整样例请参考[纯Cube模式的Matmul样
133 cubeTiling.SetDim(numBlocks);133 cubeTiling.SetDim(numBlocks);
134 ```134 ```
135 135 
136-3. 调用核函数,参考[核函数定义和调用](../../../编程指南/编程模型/AI-Core-SIMD编程/核函数.md#zh-cn_topic_0000001447989210_section1915102519220),设置核函数的numBlocks参数配置。136+3. 调用核函数,参考[核函数定义和调用](../../../programming_guide/programming_model/ai_core_simd_programming/kernel_function.md#zh-cn_topic_0000001447989210_section1915102519220),设置核函数的numBlocks参数配置。
137 137 
138 ```138 ```
139 matmul_custom_do(ascendcPlatform->GetCoreNumAic(), stream, x1, x2, bias, y, workspaceDevice, tilingDevice); // 仅包含Cube计算的算子,numBlocks用于设置启动多少个AIC。139 matmul_custom_do(ascendcPlatform->GetCoreNumAic(), stream, x1, x2, bias, y, workspaceDevice, tilingDevice); // 仅包含Cube计算的算子,numBlocks用于设置启动多少个AIC。
Mdocs/zh/guide/算子实践参考/功能调试/算子调试.md+1-1
@@ -4,5 +4,5 @@
4 4 
5Tiling实现运行在Host侧CPU上,一般使用传统的调测手段(比如gdb工具)即可完成调试。5Tiling实现运行在Host侧CPU上,一般使用传统的调测手段(比如gdb工具)即可完成调试。
6 6 
7-Kernel实现运行在Device侧NPU上,Ascend C提供了多种调试方式,包括孪生调试、上板调试等,具体的调试方法请参考[算子调试](../../编程指南/调试调优/概述.md)。7+Kernel实现运行在Device侧NPU上,Ascend C提供了多种调试方式,包括孪生调试、上板调试等,具体的调试方法请参考[算子调试](../../programming_guide/debug_and_tuning/overview.md)。
8 8 
Mdocs/zh/guide/算子实践参考/功能调试/运行正常.md+1-1
@@ -1,4 +1,4 @@
1# 运行正常<a name="ZH-CN_TOPIC_0000001893038913"></a>1# 运行正常<a name="ZH-CN_TOPIC_0000001893038913"></a>
2 2 
3-运行正常是算子开发后进行调测的前提,是后续进行性能优化的基础。Ascend C提供了多种调测方法和调测工具,供开发者使用,具体内容请参考[功能调试](../../编程指南/调试调优/功能调试/功能调试.md)。3+运行正常是算子开发后进行调测的前提,是后续进行性能优化的基础。Ascend C提供了多种调测方法和调测工具,供开发者使用,具体内容请参考[功能调试](../../programming_guide/debug_and_tuning/functional_debug/functional_debug.md)。
4 4 
Ddocs/zh/guide/编程指南/高级编程/Aclnn算子工程化开发/附录/附录.md+0-7
@@ -1,7 +0,0 @@
1-# 附录
2- 
3-- **[命名转换规则对照表](命名转换规则对照表.md)**
4- 
5-- **[cmake函数参考](cmake函数参考.md)**
6- 
7-- **[外部样例链接汇总](外部样例链接汇总.md)**
Mdocs/zh/vitepress/docs/index.md+1-1
@@ -21,7 +21,7 @@ features:
21 - icon: 📖21 - icon: 📖
22 title: 编程指南22 title: 编程指南
23 details: SIMD/SIMT 编程模型、编译运行、语言扩展、调试调优完整指南。23 details: SIMD/SIMT 编程模型、编译运行、语言扩展、调试调优完整指南。
24- link: /guide/编程指南/本文档组织结构24+ link: /guide/programming_guide/document_structure
25 - icon: 🔧25 - icon: 🔧
26 title: 算子实践参考26 title: 算子实践参考
27 details: 功能调试、性能分析、优秀实践案例,覆盖 SIMD/SIMT 算子实现与优化。27 details: 功能调试、性能分析、优秀实践案例,覆盖 SIMD/SIMT 算子实现与优化。
Mexamples/01_simd_cpp_api/00_introduction/02_matrix/matmul_basic_api/README.md+5-5
@@ -28,7 +28,7 @@
28## 样例描述28## 样例描述
29 29 
30- 样例功能: 30- 样例功能:
31- 本样例使用Ascend C基础API实现一个最基础的矩阵乘法(Matmul)[核函数](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.md)。矩阵乘法的计算公式如下:31+ 本样例使用Ascend C基础API实现一个最基础的矩阵乘法(Matmul)[核函数](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)。矩阵乘法的计算公式如下:
32 $$32 $$
33 C = A * B33 C = A * B
34 $$34 $$
@@ -51,12 +51,12 @@
51 51 
52- 样例实现:52- 样例实现:
53 - Kernel侧整体思路53 - Kernel侧整体思路
54- - `mmad_custom`是一个[`__global__`](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md) [`__cube__`](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md)核函数,表示该函数运行在[AI Core](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md)的[Cube](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md)计算单元上,主要用于矩阵计算。54+ - `mmad_custom`是一个[`__global__`](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md) [`__cube__`](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md)核函数,表示该函数运行在[AI Core](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md)的[Cube](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md)计算单元上,主要用于矩阵计算。
55- - 样例使用[静态Tensor编程方式](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md),通过[`LocalMemAllocator`](../../../../../docs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_intro.md)创建[`LocalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/LocalTensor/LocalTensor_intro.md)。55+ - 样例使用[静态Tensor编程方式](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md),通过[`LocalMemAllocator`](../../../../../docs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_intro.md)创建[`LocalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/LocalTensor/LocalTensor_intro.md)。
56 - `CUBE_BLOCK = 16`表示half数据类型分形为`16 x 16`,代码中按`16 x 16`的分形为单位进行[`LoadData`](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_2D.md)搬运。56 - `CUBE_BLOCK = 16`表示half数据类型分形为`16 x 16`,代码中按`16 x 16`的分形为单位进行[`LoadData`](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_2D.md)搬运。
57 57 
58 - Kernel侧详细流程58 - Kernel侧详细流程
59- - 创建[`GlobalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/GlobalTensor/GlobalTensor_intro.md)`<half>`对象`aGM`、`bGM`、`cGM`,分别表示[GM(Global Memory,全局内存)](../../../../../docs/zh/guide/编程指南/高级编程/硬件实现/基本架构.md)中的A、B、C矩阵。59+ - 创建[`GlobalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/GlobalTensor/GlobalTensor_intro.md)`<half>`对象`aGM`、`bGM`、`cGM`,分别表示[GM(Global Memory,全局内存)](../../../../../docs/zh/guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md)中的A、B、C矩阵。
60 - 通过[AscendC::GetBlockIdx()](../../../../../docs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetBlockIdx.md)获取当前核号,并计算`mIterIdx`。本样例只沿M轴切分任务,因此每个核只需要处理A矩阵和C矩阵中属于自己的M轴分片。60 - 通过[AscendC::GetBlockIdx()](../../../../../docs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetBlockIdx.md)获取当前核号,并计算`mIterIdx`。本样例只沿M轴切分任务,因此每个核只需要处理A矩阵和C矩阵中属于自己的M轴分片。
61 - 设置GM地址偏移:61 - 设置GM地址偏移:
62 - `aGM`偏移`mIterIdx * singleCoreM * K`,使当前核读取自己负责的A矩阵行块。62 - `aGM`偏移`mIterIdx * singleCoreM * K`,使当前核读取自己负责的A矩阵行块。
@@ -78,7 +78,7 @@
78 - 最后调用[`PipeBarrier`](../../../../../docs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)`<PIPE_ALL>()`,确保当前核内相关流水任务完成。78 - 最后调用[`PipeBarrier`](../../../../../docs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)`<PIPE_ALL>()`,确保当前核内相关流水任务完成。
79 79 
80 - 调用实现 80 - 调用实现
81- 使用[内核调用符](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.md)`<<<>>>`调用[核函数](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.md)。调用时模板参数传入矩阵规格、单核计算量和基础Tile大小,运行时参数传入Device侧A、B、C矩阵地址。81+ 使用[内核调用符](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)`<<<>>>`调用[核函数](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)。调用时模板参数传入矩阵规格、单核计算量和基础Tile大小,运行时参数传入Device侧A、B、C矩阵地址。
82 82 
83- 接口参数说明:83- 接口参数说明:
84 84 
Mexamples/01_simd_cpp_api/00_introduction/02_matrix/matmul_basic_api/README_en.md+5-5
@@ -28,7 +28,7 @@ This sample implements multi-core matrix multiplication computation based on the
28## Sample Description28## Sample Description
29 29 
30- Sample Functionality: 30- Sample Functionality:
31- This sample uses Ascend C basic API to implement a basic matrix multiplication (Matmul) [kernel function](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.md). The matrix multiplication formula is as follows:31+ This sample uses Ascend C basic API to implement a basic matrix multiplication (Matmul) [kernel function](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md). The matrix multiplication formula is as follows:
32 $$32 $$
33 C = A * B33 C = A * B
34 $$34 $$
@@ -51,12 +51,12 @@ This sample implements multi-core matrix multiplication computation based on the
51 51 
52- Sample Implementation:52- Sample Implementation:
53 - Kernel-side Overall Approach53 - Kernel-side Overall Approach
54- - `mmad_custom` is a [`__global__`](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md) [`__cube__`](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md) kernel function, which indicates that this function runs on the [Cube](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md) computation unit of [AI Core](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md), primarily used for matrix computation.54+ - `mmad_custom` is a [`__global__`](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md) [`__cube__`](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md) kernel function, which indicates that this function runs on the [Cube](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md) computation unit of [AI Core](../../../../../docs/zh/guide/technical_appendix/concepts_and_terms/glossary.md), primarily used for matrix computation.
55- - The sample uses the [static Tensor programming method](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/静态Tensor编程.md) and creates [`LocalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/LocalTensor/LocalTensor_intro.md) through [`LocalMemAllocator`](../../../../../docs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_intro.md).55+ - The sample uses the [static Tensor programming method](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/static_tensor_programming.md) and creates [`LocalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/LocalTensor/LocalTensor_intro.md) through [`LocalMemAllocator`](../../../../../docs/zh/api/SIMD-API/basic_api/resource_management/LocalMemAllocator/LocalMemAllocator_intro.md).
56 - `CUBE_BLOCK = 16` indicates that the half data type fractal is `16 x 16`, and the code performs [`LoadData`](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_2D.md) transfers in units of `16 x 16` fractals.56 - `CUBE_BLOCK = 16` indicates that the half data type fractal is `16 x 16`, and the code performs [`LoadData`](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_load/LoadData_2D.md) transfers in units of `16 x 16` fractals.
57 57 
58 - Kernel-side Detailed Process58 - Kernel-side Detailed Process
59- - Create [`GlobalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/GlobalTensor/GlobalTensor_intro.md)`<half>` objects `aGM`, `bGM`, `cGM`, representing matrices A, B, C in [GM (Global Memory)](../../../../../docs/zh/guide/编程指南/高级编程/硬件实现/基本架构.md).59+ - Create [`GlobalTensor`](../../../../../docs/zh/api/SIMD-API/basic_api/data_structures/GlobalTensor/GlobalTensor_intro.md)`<half>` objects `aGM`, `bGM`, `cGM`, representing matrices A, B, C in [GM (Global Memory)](../../../../../docs/zh/guide/programming_guide/advanced_programming/hardware_implementation/basic_architecture.md).
60 - Obtain the current core ID through [AscendC::GetBlockIdx()](../../../../../docs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetBlockIdx.md) and calculate `mIterIdx`. This sample only splits tasks along the M axis, so each core only needs to process its own M-axis slice of matrix A and matrix C.60 - Obtain the current core ID through [AscendC::GetBlockIdx()](../../../../../docs/zh/api/SIMD-API/basic_api/tool_interface/system_resources_and_variables/GetBlockIdx.md) and calculate `mIterIdx`. This sample only splits tasks along the M axis, so each core only needs to process its own M-axis slice of matrix A and matrix C.
61 - Set GM address offsets:61 - Set GM address offsets:
62 - `aGM` offset by `mIterIdx * singleCoreM * K`, enabling the current core to read its assigned row block of matrix A.62 - `aGM` offset by `mIterIdx * singleCoreM * K`, enabling the current core to read its assigned row block of matrix A.
@@ -78,7 +78,7 @@ This sample implements multi-core matrix multiplication computation based on the
78 - Finally, call [`PipeBarrier`](../../../../../docs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)`<PIPE_ALL>()` to ensure that related pipeline tasks within the current core complete.78 - Finally, call [`PipeBarrier`](../../../../../docs/zh/api/SIMD-API/basic_api/sync_control/intra_core_sync/PipeBarrier_ISASI.md)`<PIPE_ALL>()` to ensure that related pipeline tasks within the current core complete.
79 79 
80 - Invocation Implementation 80 - Invocation Implementation
81- Use the [kernel invocation operator](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.md)`<<<>>>` to invoke the [kernel function](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/核函数.md). When invoking, pass matrix specifications, single-core computation amount, and basic tile size as template parameters, and pass Device-side A, B, C matrix addresses as runtime parameters.81+ Use the [kernel invocation operator](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md)`<<<>>>` to invoke the [kernel function](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/kernel_function.md). When invoking, pass matrix specifications, single-core computation amount, and basic tile size as template parameters, and pass Device-side A, B, C matrix addresses as runtime parameters.
82 82 
83- API Parameter Description:83- API Parameter Description:
84 84 
Mexamples/01_simd_cpp_api/02_features/04_compile/00_basic_compile/README.md+2-2
@@ -51,9 +51,9 @@ bisheng add_kernel.o main.o -o demo
51bisheng main.cpp add_kernel.asc -o demo --npu-arch=dav-2201 -I${ASCEND_HOME_PATH}/include51bisheng main.cpp add_kernel.asc -o demo --npu-arch=dav-2201 -I${ASCEND_HOME_PATH}/include
52```52```
53 53 
54-其中,`--npu-arch`为编译时指定的AI处理器架构,本样例支持`dav-2201`和`dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。54+其中,`--npu-arch`为编译时指定的AI处理器架构,本样例支持`dav-2201`和`dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
55 55 
56-更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md)。56+更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
57 57 
58### CMake方式编译58### CMake方式编译
59 59 
Mexamples/01_simd_cpp_api/02_features/04_compile/00_basic_compile/README_en.md+2-2
@@ -52,9 +52,9 @@ bisheng add_kernel.o main.o -o demo
52bisheng main.cpp add_kernel.asc -o demo --npu-arch=dav-2201 -I${ASCEND_HOME_PATH}/include52bisheng main.cpp add_kernel.asc -o demo --npu-arch=dav-2201 -I${ASCEND_HOME_PATH}/include
53```53```
54 54 
55-Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch).55+Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch).
56 56 
57-For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md).57+For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md).
58 58 
59### CMake Compilation59### CMake Compilation
60 60 
Mexamples/01_simd_cpp_api/02_features/04_compile/01_separate_compile/README.md+2-2
@@ -55,9 +55,9 @@ bisheng -c main.cpp -o main.o -I${ASCEND_HOME_PATH}/include
55bisheng add_compute.o add_kernel.o main.o -o demo55bisheng add_compute.o add_kernel.o main.o -o demo
56```56```
57 57 
58-其中,`--npu-arch` 为编译时指定的AI处理器架构,本样例支持 `dav-2201` 和 `dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。58+其中,`--npu-arch` 为编译时指定的AI处理器架构,本样例支持 `dav-2201` 和 `dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
59 59 
60-更多bisheng编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md)。60+更多bisheng编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
61 61 
62### CMake方式编译62### CMake方式编译
63 63 
Mexamples/01_simd_cpp_api/02_features/04_compile/01_separate_compile/README_en.md+2-2
@@ -55,9 +55,9 @@ bisheng -c main.cpp -o main.o -I${ASCEND_HOME_PATH}/include
55bisheng add_compute.o add_kernel.o main.o -o demo55bisheng add_compute.o add_kernel.o main.o -o demo
56```56```
57 57 
58-Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch).58+Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch).
59 59 
60-For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md).60+For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md).
61 61 
62### CMake Compilation62### CMake Compilation
63 63 
Mexamples/01_simd_cpp_api/02_features/04_compile/02_dynamic_library_compile/README.md+2-2
@@ -45,9 +45,9 @@ Add算子实现了两个向量按元素求和的功能,输入向量长度为16
45bisheng -shared add_kernel.asc -o libadd_kernel.so -fPIC --npu-arch=dav-220145bisheng -shared add_kernel.asc -o libadd_kernel.so -fPIC --npu-arch=dav-2201
46```46```
47 47 
48-其中,`--npu-arch` 为编译时指定的AI处理器架构,本样例支持 `dav-2201` 和 `dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。48+其中,`--npu-arch` 为编译时指定的AI处理器架构,本样例支持 `dav-2201` 和 `dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
49 49 
50-更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md)。50+更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
51 51 
52### CMake方式编译52### CMake方式编译
53 53 
Mexamples/01_simd_cpp_api/02_features/04_compile/02_dynamic_library_compile/README_en.md+2-2
@@ -46,9 +46,9 @@ Use the `-shared` option to compile the `.asc` mixed file into a dynamic shared
46bisheng -shared add_kernel.asc -o libadd_kernel.so -fPIC --npu-arch=dav-220146bisheng -shared add_kernel.asc -o libadd_kernel.so -fPIC --npu-arch=dav-2201
47```47```
48 48 
49-Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch).49+Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch).
50 50 
51-For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md).51+For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md).
52 52 
53### CMake Compilation53### CMake Compilation
54 54 
Mexamples/01_simd_cpp_api/02_features/04_compile/03_static_library_compile/README.md+2-2
@@ -45,9 +45,9 @@ Add算子实现了两个向量按元素求和的功能,输入向量长度为16
45bisheng -lib add_kernel.asc -o libadd_kernel.a --npu-arch=dav-220145bisheng -lib add_kernel.asc -o libadd_kernel.a --npu-arch=dav-2201
46```46```
47 47 
48-其中,`--npu-arch` 为编译时指定的 AI 处理器架构,本样例支持 `dav-2201` 和 `dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。48+其中,`--npu-arch` 为编译时指定的 AI 处理器架构,本样例支持 `dav-2201` 和 `dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)进行查询。
49 49 
50-更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md)。50+更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
51 51 
52### CMake方式编译52### CMake方式编译
53 53 
Mexamples/01_simd_cpp_api/02_features/04_compile/03_static_library_compile/README_en.md+2-2
@@ -46,9 +46,9 @@ Use the `-lib` option to compile the `.asc` mixed file into a static library (.a
46bisheng -lib add_kernel.asc -o libadd_kernel.a --npu-arch=dav-220146bisheng -lib add_kernel.asc -o libadd_kernel.a --npu-arch=dav-2201
47```47```
48 48 
49-Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch).49+Where `--npu-arch` specifies the AI processor architecture at compile time. This example supports `dav-2201` and `dav-3510`. For the architecture version number corresponding to each product model, refer to the [mapping table](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch).
50 50 
51-For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md).51+For more bisheng compilation options and usage, refer to [Basic Usage of AI Core Operator Compilation](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md).
52 52 
53### CMake Compilation53### CMake Compilation
54 54 
Mexamples/01_simd_cpp_api/05_best_practices/01_matrix_compute/matmul_basic_api_high_performance/README.md+1-1
@@ -58,7 +58,7 @@
58| aic_mac_ratio | Cube 计算单元的时间占比,反映计算单元利用率 |58| aic_mac_ratio | Cube 计算单元的时间占比,反映计算单元利用率 |
59| aic_mte1_time(μs) | MTE1(L1 到 L0A/L0B 搬运)的执行时间 |59| aic_mte1_time(μs) | MTE1(L1 到 L0A/L0B 搬运)的执行时间 |
60| aic_mte1_ratio | MTE1 的时间占比,反映 L1 到 L0 的数据搬运压力 |60| aic_mte1_ratio | MTE1 的时间占比,反映 L1 到 L0 的数据搬运压力 |
61-| aic_mte2_time(μs) | MTE2([GM](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/抽象硬件架构.md)(Global Memory) 到 L1 搬运)的执行时间 |61+| aic_mte2_time(μs) | MTE2([GM](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/abstract_hardware_architecture.md)(Global Memory) 到 L1 搬运)的执行时间 |
62| aic_mte2_ratio | MTE2 的时间占比,反映 GM 到 L1 的数据加载压力 |62| aic_mte2_ratio | MTE2 的时间占比,反映 GM 到 L1 的数据加载压力 |
63| aic_fixpipe_time(μs) | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)(L0C 到 GM 搬运)的执行时间 |63| aic_fixpipe_time(μs) | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md)(L0C 到 GM 搬运)的执行时间 |
64| aic_fixpipe_ratio | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) 的时间占比,反映结果写回的访存压力 |64| aic_fixpipe_ratio | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) 的时间占比,反映结果写回的访存压力 |
Mexamples/01_simd_cpp_api/05_best_practices/01_matrix_compute/matmul_basic_api_high_performance/README_en.md+1-1
@@ -58,7 +58,7 @@ This example is based on the static Tensor programming paradigm, implementing hi
58| aic_mac_ratio | Cube computation unit time ratio, reflecting computation unit utilization |58| aic_mac_ratio | Cube computation unit time ratio, reflecting computation unit utilization |
59| aic_mte1_time(μs) | MTE1 (L1 to L0A/L0B transfer) execution time |59| aic_mte1_time(μs) | MTE1 (L1 to L0A/L0B transfer) execution time |
60| aic_mte1_ratio | MTE1 time ratio, reflecting L1 to L0 data transfer pressure |60| aic_mte1_ratio | MTE1 time ratio, reflecting L1 to L0 data transfer pressure |
61-| aic_mte2_time(μs) | MTE2 ([GM](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/抽象硬件架构.md) (Global Memory) to L1 transfer) execution time |61+| aic_mte2_time(μs) | MTE2 ([GM](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/abstract_hardware_architecture.md) (Global Memory) to L1 transfer) execution time |
62| aic_mte2_ratio | MTE2 time ratio, reflecting GM to L1 data loading pressure |62| aic_mte2_ratio | MTE2 time ratio, reflecting GM to L1 data loading pressure |
63| aic_fixpipe_time(μs) | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) (L0C to GM transfer) execution time |63| aic_fixpipe_time(μs) | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) (L0C to GM transfer) execution time |
64| aic_fixpipe_ratio | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) time ratio, reflecting result write-back memory access pressure |64| aic_fixpipe_ratio | [Fixpipe](../../../../../docs/zh/api/SIMD-API/basic_api/cube_compute_ISASI/cube_compute_store/Fixpipe_L0CToGM.md) time ratio, reflecting result write-back memory access pressure |
Mexamples/01_simd_cpp_api/05_best_practices/02_reg_compute/softmax_high_performance/README.md+1-1
@@ -12,7 +12,7 @@
12- Case 4 → Case 5:主尾块模式 + 外层循环展开 + ExpSub融合指令12- Case 4 → Case 5:主尾块模式 + 外层循环展开 + ExpSub融合指令
13 13 
14**前置阅读**:开始阅读前,建议对以下背景知识有初步了解,为后续各Case的优化策略提供理论支持:14**前置阅读**:开始阅读前,建议对以下背景知识有初步了解,为后续各Case的优化策略提供理论支持:
15-- **[Reg矢量计算编程](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.md)**:15+- **[Reg矢量计算编程](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md)**:
16- **[指令双发优化](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/指令双发优化.md)**16- **[指令双发优化](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/指令双发优化.md)**
17- **[VF融合优化](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md)**17- **[VF融合优化](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md)**
18- **[VF循环优化](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md)**18- **[VF循环优化](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md)**
Mexamples/01_simd_cpp_api/05_best_practices/02_reg_compute/softmax_high_performance/README_en.md+1-1
@@ -12,7 +12,7 @@ This example uses single-core Softmax as a case study to demonstrate a complete
12- Case 4 → Case 5: Main-tail block mode + Outer loop unrolling + ExpSub fused instruction12- Case 4 → Case 5: Main-tail block mode + Outer loop unrolling + ExpSub fused instruction
13 13 
14**Prerequisites**: Before reading, a basic understanding of the following background topics is recommended to provide theoretical support for the optimization strategies of each Case:14**Prerequisites**: Before reading, a basic understanding of the following background topics is recommended to provide theoretical support for the optimization strategies of each Case:
15-- **[Reg Vector Computation Programming](../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于Tensor的CPP编程/Reg矢量计算编程.md)**15+- **[Reg Vector Computation Programming](../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/cpp_tensor_programming/reg_vector_computation.md)**
16- **[Instruction Dual-Issue Optimization](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/指令双发优化.md)**16- **[Instruction Dual-Issue Optimization](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/指令双发优化.md)**
17- **[VF Fusion Optimization](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md)**17- **[VF Fusion Optimization](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF融合优化.md)**
18- **[VF Loop Optimization](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md)**18- **[VF Loop Optimization](../../../../../docs/zh/guide/算子实践参考/SIMD算子性能优化/矢量计算/VF性能优化/VF循环优化.md)**
Mexamples/02_simd_c_api/02_features/03_c_api/01_data_movement/00_set_l2_cache_mode/README.md+1-1
@@ -2,7 +2,7 @@
2 2 
3## 概述3## 概述
4 4 
5-MTE2将数据从Global Memory(GM)搬运到Unified Buffer(UB)时,可通过`asc_copy_gm2ub_align`接口的`l2_cache_mode`参数(本样例使用[基于指针的C语言编程](../../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程))显式配置数据在L2 Cache中的管理策略。本样例说明**复用数据**和**流式数据**两大类场景下,如何选择合适的L2 Cache模式来优化MTE2搬运性能,以及在启用L2 Cache的前提下如何通过分片策略提升L2 Cache命中率。5+MTE2将数据从Global Memory(GM)搬运到Unified Buffer(UB)时,可通过`asc_copy_gm2ub_align`接口的`l2_cache_mode`参数(本样例使用[基于指针的C语言编程](../../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming))显式配置数据在L2 Cache中的管理策略。本样例说明**复用数据**和**流式数据**两大类场景下,如何选择合适的L2 Cache模式来优化MTE2搬运性能,以及在启用L2 Cache的前提下如何通过分片策略提升L2 Cache命中率。
6 6 
7- **复用数据场景(数据需多次读取)**7- **复用数据场景(数据需多次读取)**
8 Case1: 整块重复搬4次,`l2_cache_mode = asc_load_l2_cache_mode::NORMAL_FIRST_VICTIM` → 整块数据远超L2容量,命中率极低,展示未分片时的性能瓶颈。8 Case1: 整块重复搬4次,`l2_cache_mode = asc_load_l2_cache_mode::NORMAL_FIRST_VICTIM` → 整块数据远超L2容量,命中率极低,展示未分片时的性能瓶颈。
Mexamples/02_simd_c_api/02_features/03_c_api/01_data_movement/00_set_l2_cache_mode/README_en.md+1-1
@@ -2,7 +2,7 @@
2 2 
3## Overview3## Overview
4 4 
5-When MTE2 moves data from Global Memory (GM) to Unified Buffer (UB), the `l2_cache_mode` parameter of the `asc_copy_gm2ub_align` interface (this sample uses [pointer-based C programming](../../../../../../docs/zh/guide/编程指南/编程模型/AI-Core-SIMD编程/基于指针的C语言编程)) can explicitly configure the L2 Cache management strategy. This sample describes how to select the appropriate L2 Cache mode to optimize MTE2 data movement performance for **reuse data** and **streaming data** scenarios, and how to improve the L2 Cache hit rate through tiling strategies when L2 Cache is enabled.5+When MTE2 moves data from Global Memory (GM) to Unified Buffer (UB), the `l2_cache_mode` parameter of the `asc_copy_gm2ub_align` interface (this sample uses [pointer-based C programming](../../../../../../docs/zh/guide/programming_guide/programming_model/ai_core_simd_programming/c_pointer_programming)) can explicitly configure the L2 Cache management strategy. This sample describes how to select the appropriate L2 Cache mode to optimize MTE2 data movement performance for **reuse data** and **streaming data** scenarios, and how to improve the L2 Cache hit rate through tiling strategies when L2 Cache is enabled.
6 6 
7- **Reuse Data Scenario (data needs to be read multiple times)**7- **Reuse Data Scenario (data needs to be read multiple times)**
8 Case1: Repeat the entire block 4 times, `l2_cache_mode = asc_load_l2_cache_mode::NORMAL_FIRST_VICTIM` — the entire block far exceeds the L2 capacity, hit rate is extremely low, demonstrating the performance bottleneck without tiling.8 Case1: Repeat the entire block 4 times, `l2_cache_mode = asc_load_l2_cache_mode::NORMAL_FIRST_VICTIM` — the entire block far exceeds the L2 capacity, hit rate is extremely low, demonstrating the performance bottleneck without tiling.
Mexamples/03_simt_api/02_features/06_compile/00_basic_compile/README.md+2-2
@@ -50,9 +50,9 @@ bisheng kernel.o host.o -o demo
50bisheng host.cpp kernel.asc -o demo --npu-arch=dav-3510 --enable-simt -I${ASCEND_HOME_PATH}/include50bisheng host.cpp kernel.asc -o demo --npu-arch=dav-3510 --enable-simt -I${ASCEND_HOME_PATH}/include
51```51```
52 52 
53-其中,`--npu-arch`为编译时指定的AI处理器架构,本样例仅支持`dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch)进行查询。`--enable-simt`用于指定SIMT方式编译。53+其中,`--npu-arch`为编译时指定的AI处理器架构,本样例仅支持`dav-3510`,各产品型号对应的架构版本号请通过[对应关系表](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch)进行查询。`--enable-simt`用于指定SIMT方式编译。
54 54 
55-更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md)。55+更多 bisheng 编译选项及用法说明,请参考[AI-Core算子编译基本用法](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md)。
56 56 
57### CMake方式编译57### CMake方式编译
58 58 
Mexamples/03_simt_api/02_features/06_compile/00_basic_compile/README_en.md+2-2
@@ -50,9 +50,9 @@ bisheng kernel.o host.o -o demo
50bisheng host.cpp kernel.asc -o demo --npu-arch=dav-3510 --enable-simt -I${ASCEND_HOME_PATH}/include50bisheng host.cpp kernel.asc -o demo --npu-arch=dav-3510 --enable-simt -I${ASCEND_HOME_PATH}/include
51```51```
52 52 
53-Where `--npu-arch` specifies the AI processor architecture at compile time. This example only supports `dav-3510`. For the architecture version corresponding to each product model, refer to the [correspondence table](../../../../../docs/zh/guide/编程指南/语言扩展层/SIMD-BuiltIn关键字.md#npu-arch). `--enable-simt` is used to specify SIMT compilation mode.53+Where `--npu-arch` specifies the AI processor architecture at compile time. This example only supports `dav-3510`. For the architecture version corresponding to each product model, refer to the [correspondence table](../../../../../docs/zh/guide/programming_guide/language_extension/simd_builtin_keywords.md#npu-arch). `--enable-simt` is used to specify SIMT compilation mode.
54 54 
55-For more bisheng compilation options and usage, refer to [AI-Core Operator Compilation Basic Usage](../../../../../docs/zh/guide/编程指南/编译与运行/算子编译/AI-Core算子编译基本用法.md).55+For more bisheng compilation options and usage, refer to [AI-Core Operator Compilation Basic Usage](../../../../../docs/zh/guide/programming_guide/compilation_and_execution/operator_compilation/ai_core_operator_compilation.md).
56 56 
57### CMake Compilation57### CMake Compilation
58 58 
Mexamples/03_simt_api/02_features/06_compile/01_separate_compile/README.md+2-2
Mexamples/03_simt_api/02_features/06_compile/01_separate_compile/README_en.md+2-2
Mexamples/03_simt_api/02_features/06_compile/02_dynamic_library_compile/README.md+2-2
Mexamples/03_simt_api/02_features/06_compile/02_dynamic_library_compile/README_en.md+2-2
Mexamples/03_simt_api/02_features/06_compile/03_static_library_compile/README.md+2-2
Mexamples/03_simt_api/02_features/06_compile/03_static_library_compile/README_en.md+2-2
Mexamples/03_simt_api/03_best_practices/00_memory_optimizations/short_vector_add/README.md+1-1
Mexamples/03_simt_api/03_best_practices/00_memory_optimizations/short_vector_add/README_en.md+1-1
Mexamples/03_simt_api/03_best_practices/02_control_flow/warp_divergence/README.md+1-1
Mexamples/03_simt_api/03_best_practices/02_control_flow/warp_divergence/README_en.md+1-1
Mexamples/03_simt_api/05_troubleshooting/stack_overflow/README.md+1-1
Mexamples/03_simt_api/05_troubleshooting/stack_overflow/README_en.md+1-1