常用的编译选项
常用的编译选项
常用的编译选项说明如下,全量的编译选项请参考毕昇编译器编译选项。
|
选项 |
是否必需 |
说明 |
|---|---|---|
|
-help |
否 |
查看帮助。 |
|
--npu-arch |
是 |
编译时指定的AI处理器架构,取值为dav-<arch-version>,其中<arch-version>为NPU架构版本号,各产品型号对应的架构版本号请通过对应关系表进行查询。 |
|
--npu-soc |
否 |
编译时指定的AI处理器型号,npu-soc和npu-arch同时配置时,优先使能npu-arch。 AI处理器的型号请通过如下方式获取:
|
|
-x |
否 |
指定编译语言。 指定为asc时表示Ascend C编程语言。 |
|
-o <file> |
否 |
指定输出文件的名称和位置。 |
|
-c |
否 |
编译生成目标文件。 |
|
-shared,--shared |
否 |
编译生成动态链接库。 |
|
-lib,--cce-build-static-lib |
否 |
编译生成静态链接库。编译器会将Device侧的代码进行编译链接,生成Device侧二进制文件,随后将该文件作为Host侧编译的输入进行编译,最后链接生成静态链接库。 |
|
-g |
否 |
编译时增加调试信息。 |
|
--sanitizer |
否 |
编译时增加代码正确性校验信息。使用sanitizer选项时,需要同步添加-g选项,且不能在-O0场景下使用。 注意,启用该选项后GlobalTensor默认使能L2 Cache,无法通过AscendC::SetL2CacheHint接口设置不使能L2 Cache的模式。 |
|
-fPIC |
否 |
告知编译器产生位置无关代码。 |
|
-O |
否 |
用于指定编译器的优化级别,当前支持-O3,-O2,-O0。 |
|
--run-mode=sim |
否 |
sim模式:链接时用户添加仿真模式对应的实现库,实现代码在仿真模式下运行,可以查看仿真相关日志,方便用户性能调试。 |
内置编译宏开关
内置编译宏开关列表如下:
- ASCENDC_DUMP用于控制Dump开关,默认开关打开,开发者调用printf/DumpTensor/assert后会有信息打印(需要注意直调工程的kernel文件内存在host函数,如果在host函数内调用了printf接口,也会触发kernel内的printf相关初始化动作,进而影响kernel的执行性能);设置为0后,表示开关关闭。示例如下:
// 关闭所有算子的printf打印功能 ascendc_compile_definitions(ascendc_kernels_${RUN_MODE} PRIVATE ASCENDC_DUMP=0 ) - ASCENDC_DEBUG用于控制Ascend C API的调测开关,默认开关关闭;增加该编译宏后,表示开关打开,此时接口内部的assert校验生效,校验不通过会有assert日志打屏。开启该功能会对算子实际运行的性能带来一定影响,通常在调测阶段使用。示例如下:
ascendc_compile_definitions(ascendc_kernels_${RUN_MODE} PRIVATE ASCENDC_DEBUG )当前ASCENDC_DEBUG功能支持的产品型号为:
Atlas 推理系列产品 Atlas A2 训练系列产品 /Atlas A2 推理系列产品 - ENABLE_CV_COMM_VIA_SSBUF用于控制是否使用SSBuffer以及UB到L1 Buffer的硬通道,在涉及CV通信(AIC和AIV)或使用数据搬运API时需关注此选项。开启该选项可以提高相关API的性能或拓展使用更多功能。默认开关关闭;设置为true后,表示开关打开。示例如下:
ascendc_compile_definitions(ascendc_kernels_${RUN_MODE} PRIVATE ENABLE_CV_COMM_VIA_SSBUF=true )仅在Atlas 350 加速卡支持该选项。
- 从其它硬件平台移植到此平台的算子,开关默认关闭以保持兼容性。
- 在该平台新开发的算子,以下场景需要打开:使用矩阵计算Matmul高阶API,且使用SetTensorScaleA等接口,这些接口属于Atlas 350 加速卡新增的功能,其内部实现使用了SSBuffer;使用DataCopy接口从UB拷贝数据到L1 Buffer。
- NO_OVERLAP_IN_MULTI_REPEAT
该编译选项用于在没有地址重叠的情况下移除不必要的内存同步指令,以提升性能。针对Atlas 350 加速卡,使用基础API的高维切分计算API时,默认会插入内存同步指令以确保在地址重叠等复杂场景下的数据正确性,但这些同步指令会带来性能开销。在追求极致性能的场景下,如果您可以确定代码在任何情况下都不会发生内存重叠,可以使用此选项。