69 lines
3.2 KiB
Markdown
69 lines
3.2 KiB
Markdown
---
|
||
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 兼容。
|