Skip to content

概述

Ascend C的核心设计目标之一是实现跨代兼容。然而,每一代芯片在微架构上都存在独特的硬件特性,因此无法保证所有接口仅通过重编译就能达成完全的跨代兼容。基于这一前提,本手册旨在为Ascend C算子开发者提供系统化指导,帮助将算子核函数(Kernel)代码从当前芯片平滑移植到目标代际芯片上运行,实现高效、可控的迁移。

SIMD-BuiltIn关键字中所述,__NPU_ARCH__是Device侧AI Core代码中的一个预处理宏,用于标识AI处理器的架构版本。例如,Ascend 950PR/Ascend 950DT的__NPU_ARCH__为3510,而Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品的__NPU_ARCH__则为2201。因此,后续章节将以__NPU_ARCH__为主线,重点介绍相邻代际芯片间的平滑迁移方法。

为保证兼容性,建议开发者在开发过程中尽量避免使用以下接口或编程方式,否则需自行保证兼容性:

  • 非Ascend C公开接口、结构体,例如impl目录下的接口、结构体等;
  • 对芯片规格进行硬编码,例如:
    C++
    uint32_t MAX_UB_SIZE = 256 * 1024;  
    ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, MAX_UB_SIZE);
    ...
    
  • 编译器内置API(BuiltIn API),例如:
    C++
    copy_gm_to_ubuf(input_1_local_UB, input_1, 0, 1, 8, 0, 0);
    

建议开发者采用以下实践:

  • 使用兼容的API接口。
  • 若涉及特定领域的扩展特性,应在Device侧通过 __NPU_ARCH__编译宏进行隔离,在Host侧通过SocVersion进行隔离。
  • 使用<<<>>>直调或 Tiling模板编程

💡 请参考昇腾到麒麟迁移指南,了解如何将昇腾平台上开发的算子迁移到麒麟平台。

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区