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

3.2 KiB
Raw Blame History

tags, date created, date modified
tags date created date modified
星期三, 十一月 19日 2025, 4:54:50 下午 星期三, 十一月 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。
  • 探测命令与结果

    /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) 链接时优化。
  • 文件系统证据

    /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 编译。
  • 探测命令与结果

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