62 lines
2.6 KiB
Markdown
62 lines
2.6 KiB
Markdown
---
|
||
tags: []
|
||
date created: 星期三, 十一月 19日 2025, 5:29:54 下午
|
||
date modified: 星期三, 十一月 19日 2025, 5:30:07 下午
|
||
---
|
||
|
||
# 1.3.2 运行时环境与兼容层 (Runtime Environment & Shim Layer)
|
||
|
||
**1. 环境变量配置 (Environment Configuration)**
|
||
|
||
- **关键性**:**P1**
|
||
- **信息解析**:
|
||
- [cite\_start]**SDK 根路径**:`COREX_HOME` 被正确设置为 `/usr/local/corex` [cite: 1]。这是许多第三方构建脚本查找头文件和库的依据。
|
||
- [cite\_start]**库搜索路径**:`LD_LIBRARY_PATH` 包含 `/usr/local/corex/lib` [cite: 1],确保了在未设置 RPATH 的情况下也能找到 SDK 库。
|
||
- **探测命令与结果**:
|
||
|
||
```bash
|
||
env | grep "COREX"
|
||
COREX_HOME=/usr/local/corex
|
||
```
|
||
|
||
**2. 驱动层转发机制 (Driver Shim Mechanism)**
|
||
|
||
- **关键性**:**P0**
|
||
- **信息解析**:
|
||
- [cite\_start]**转发确认**:`libcuda.so` (即 NVIDIA Driver API 的替代品) 显式依赖于 `libixthunk.so` [cite: 1]。
|
||
- **架构意义**:这是智铠 SDK 兼容 CUDA 的核心枢纽。它拦截了如 `cuMemAlloc`、`cuLaunchKernel` 等标准驱动调用,并通过 `libixthunk` 将其转换为发往 `iluvatar.ko` 内核模块的指令。
|
||
- **探测命令与结果**:
|
||
|
||
```bash
|
||
ldd /usr/local/corex/lib/libcuda.so
|
||
libixthunk.so => /usr/local/corex/lib/libixthunk.so
|
||
```
|
||
|
||
**3. 运行时版本伪装 (Runtime Version Masquerading)**
|
||
|
||
- **关键性**:**P0**
|
||
- **信息解析**:
|
||
- **金丝雀测试**:一个标准的 CUDA Runtime API 程序成功编译并运行。
|
||
- [cite\_start]**版本欺骗**:系统返回 **Runtime Version: 10020** 和 **Driver Version: 10020** [cite: 1]。
|
||
- **结论**:SDK 成功将自己伪装成了 **CUDA 10.2** 环境。这对于雷达信号处理算法库(如某些开源的 FFT 实现)至关重要,因为它们往往会对 CUDA 版本进行硬编码检查。
|
||
- **探测命令与结果**:
|
||
|
||
```bash
|
||
./test_runtime
|
||
Detected CUDA Runtime Version: 10020
|
||
Detected CUDA Driver Version: 10020
|
||
```
|
||
|
||
**4. 运行时库依赖策略 (Runtime Library Strategy)**
|
||
|
||
- **关键性**:**P2**
|
||
- **信息解析**:
|
||
- [cite\_start]**依赖链**:`libcudart.so` 仅依赖标准系统库 (`libc`, `libstdc++` 等) [cite: 1]。
|
||
- **推论**:不同于 `libcuda.so`,`libcudart` 可能设计得更为轻量,仅负责 API 的参数封装和管理,具体的硬件操作可能全部下沉到了驱动层库或通过动态加载实现。
|
||
- **探测命令与结果**:
|
||
|
||
```bash
|
||
ldd /usr/local/corex/lib/libcudart.so
|
||
(无 libix* 显式依赖)
|
||
```
|