# 兼容性说明

总体兼容性策略见表1 Ascend C API兼容策略，兼容性范围不包含编译器BuiltIn API、Ascend C内部实现接口等。若开发者希望在新平台运行其它平台开发的Ascend C程序，需要在新平台重新编译并运行，并可能需要根据迁移指导进行代码调整。

**图1** Ascend C API层次结构

**表1** Ascend C API兼容策略

| API层级 | 兼容策略 |
| --- | --- |
| 高阶API | 高阶API在所有架构上均具备兼容性，但在涉及领域特性的部分存在不兼容情况。 |
| 基础API | 基础API分为可兼容的基础API和ISASI基础API；兼容的API在所有架构上均能兼容；ISASI API为体系架构相关的API，不保证跨架构版本的兼容性，例如CUBE侧的计算接口LoadData、Mmad等。 |
| 框架API | 框架API为软件实现API，跨架构版本兼容。 |
| 语言扩展C API | 不保证兼容。 |
| 编译器BuiltIn API | 不保证兼容。 |

**简要说明**

1.  为了保证兼容性，建议开发者在开发过程中尽量避免使用如下接口或编程方式，否则开发者需自行保证兼容性。
    
    *   非Ascend C公开接口、结构体，例如impl目录下的接口、结构体等；
    *   对芯片规格进行硬编码。例如：
        
        ```
        uint32_t MAX_UB_SIZE = 256 * 1024;
        // 建议获取方式：ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, MAX_UB_SIZE);
        // ...
        ```
        
    *   编译器BuiltIn API。例如：
        
        ```
        copy_gm_to_ubuf(input_1_local_ub, input_1, 0, 1, 8, 0, 0);
        ```
        
    *   TilingKey编程。
2.  建议开发者使用如下接口或编程方式。
    
    *   兼容的API。
    *   若涉及特定领域扩展特性，在Device侧用NPU\_ARCH编译宏进行隔离，在Host侧用SocVersion进行隔离。
    *   使用Tiling模板编程。