CCEC编译器说明

昇腾AI软件栈中提供了CCEC编译器进行TBE算子的编译,将CodeGen生成的类C代码文件(CCE)编译生成昇腾AI处理器可执行的文件。图编译时,TBE内部会自动调用CCEC编译器,无需用户手工调用。

CCEC编译器存储在CANN软件安装后文件存储路径下的“compiler/ccec_compiler”目录中,包含的主要二进制工具如下所示:

表1 CCEC编译器说明

工具名称

存储相对路径

功能说明及使用场景

风险分析

保留原因

ccec(clang)

ccec_compiler/bin/clang

CCE算子编译器。

编译TBE生成的算子时会自动使用clang进行编译,不建议用户单独调用。

用户只能使用此工具编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。

属于编译器配套基础二进制工具集。

llvm-objdump

ccec_compiler/bin/llvm-objdump

调试工具,可打印算子函数名和地址偏移,用于辅助定位问题。

使用AI Core Error分析工具解析AI Core错误信息时会自动使用此工具,定位TBE算子出错时的函数位置信息,不建议用户单独调用。

用户定位算子出错位置信息时不会打印汇编信息,仅打印符号表和偏移量,无法获取其他运行态信息,实际风险小。

lld

ccec_compiler/bin/lld

单架构CCE算子链接器。

编译TBE算子过程中会自动使用此工具链接算子组成完整的可执行程序,不建议用户单独调用。

恶意攻击者只能改变自身权限下的库文件链接顺序,当然攻击者也可以通过操作系统的其他的工具实现该攻击。

工具自身实际风险小。

llvm-ar

ccec_compiler/bin/llvm-ar

打包归档二进制文件。

算子静态库打包时使用,不建议用户单独使用。

用户只能使用此工具将目标文件打包成库文件,无法获取其他运行态信息,实际风险小。

llvm-config

ccec_compiler/bin/lld

打印配置的llvm编译选项、库文件信息等,这些信息用于构建llvm。

TVM构建依赖此工具获取库信息,不建议用户单独使用。

用户只能获取编译选项,依赖库等信息,无法获取其他运行态信息,实际风险小。

cce-ld

ccec_compiler/bin/cce-ld

CCE算子异构链接器。

Runtime的HLT(HIGH LEVEL TEST)会使用此工具,不建议用户单独使用。

用户只能使用此工具链接中间文件生成可执行程序,无法获取其他运行态信息,工具实际风险小。

llvm-objcopy

ccec_compiler/bin/llvm-objcopy

复制和改变目标文件的工具。主要作用为将目标文件转换为二进制文件。

用户只能使用此工具转换二进制文件格式,无法获取其他运行态信息,实际风险小。

llvm-conv

ccec_compiler/bin/llvm-conv

此工具用于打印算子输出的覆盖率统计信息。

用户只能使用此工具统计覆盖率信息,无法获取其他运行态信息,实际风险小。

llvm-nm

ccec_compiler/bin/llvm-nm

打印目标文件的符号表。

调试场景下,用于查询符号信息。

用户只能使用此工具查看符号信息,无法获取其他运行态信息,实际风险小。

llvm-size

ccec_compiler/bin/llvm-size

打印目标文件的尺寸信息。

用于分析codesize时使用。

用户只能使用此工具查看二进制文件大小,无法获取其他运行态信息,实际风险小。

llvm-strip

ccec_compiler/bin/llvm-strip

去掉目标文件中的调试信息。

剥离调试信息,去除部分段内容时使用。

用户只能使用此工具去除调试信息,无法获取其他运行态信息,实际风险小。