Files
Inbox/系统基座文件/1/1.2/1.2.2 Device 端编译器规范 (Device Compiler Spec).md
2025-12-11 07:24:36 +08:00

69 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 兼容。