--- tags: [] date created: 星期三, 十一月 19日 2025, 4:54:50 下午 date modified: 星期三, 十一月 19日 2025, 5:09:06 下午 --- # 1.2.2 Device 端编译器规范 (Device Compiler Spec) **1. Device 编译器身份与警告 (Compiler Identity & Warnings)** - **关键性**:**P0** - **信息解析**: - **编译器内核**:**Clang 18.1.8** (基于 LLVM 18)。这是一个非常激进的新版本,支持最新的 C++ 标准。 - **关键迁移警告**: > `clang++: warning: When compiling *.cu file for ivcore '-x cuda' need replace with '-x ivcore' …` - **含义**:目前的构建方式使用了 `-x cuda` 标志,天数智芯编译器对此发出了**废弃警告**。 - **行动项**:工程文件中应尽快将编译语言标志从 `-x cuda` 迁移为 `-x ivcore`,以防未来 SDK 更新导致构建中断。 - **强制约束**: AI 生成的 CMakeLists.txt 中,所有 .cu 文件的编译命令必须使用 -x ivcore,严禁使用 -x cuda。 - **探测命令与结果**: ```bash /usr/local/corex-4.3.8/bin/clang++ --version clang version 18.1.8 (4.3.8 …) ``` **2. 运行时库映射 (Runtime Library Mapping)** - **关键性**:**P0** - **信息解析**: - **库文件位置**:`/usr/local/corex/lib` (注意不是 `lib64`)。 - **CUDA 兼容层 (Shim Layers)**: - `libcudart.so` -\> `libcudart.so.89`:存在。这是运行时 API 的入口。 - `libcuda.so`:存在。这是驱动层 API 的入口。 - `libcufft.so`, `libcublas.so`, `libcudnn.so`:全套数学库均已存在同名替换文件。 - **智铠原生层 (Native Layers)**: - `libixthunk.so`:推测为内核态 Thunking 层,负责最终的 syscall 下发。 - `libixcore.so` (via `libcv_ixcore`): 核心计算库。 - **链接器支持**:发现了 `LLVMgold.so`,表明该环境支持 LTO (Link Time Optimization) 链接时优化。 - **文件系统证据**: ```text /usr/local/corex/lib/libcudart.so -> libcudart.so.89 /usr/local/corex/lib/libcuda.so /usr/local/corex/lib/libixthunk.so ``` **3. 宏定义环境 (Macro Environment)** - **关键性**:**P1** - **信息解析**: - **平台标识**:`__ILUVATAR__ = 1`。代码中可以用 `#ifdef __ILUVATAR__` 编写专用优化。 - **兼容性标识**:`__CUDA__ = 1`,`__CUDACC__` 已定义。这是为了欺骗现有的 CUDA 代码,使其认为自己正在被 NVCC 编译。 - **探测命令与结果**: ```bash clang++ -dM -E -x cuda /dev/null | grep "__ILUVATAR__" #define __ILUVATAR__ 1 ``` **4. 头文件搜索优先级 (Header Search Priority)** - **关键性**:**P0** - **信息解析**: - **劫持机制**:编译器优先搜索 `/usr/local/corex-4.3.8/lib/clang/18/include/cuda_wrappers`。 - **原理**:CoreX 在此目录下放置了与 CUDA 同名的头文件(如 `cuda_runtime.h`),拦截标准调用并映射到底层 Iluvatar Runtime。 - **GCC 绑定**:后续搜索路径正确回落到 Host 端的 `/usr/lib/gcc/aarch64-linux-gnu/7.3.0/`,保证了与 Host 代码的 ABI 兼容。