You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需显式声明所有CUDA函数即可代理CUDA驱动API调用?

CUDA驱动API拦截代理库的符号转发问题

背景与当前实现

我尝试创建代理库libcuda_override.so,通过转发调用至真实libcuda.so来拦截cuInit等CUDA驱动API调用,当前实现方案的环境配置如下:

  • libcuda.so.1符号链接指向代理库libcuda_override.so;
  • 代理库动态加载真实库libcuda_real.so.1;
  • 仅手动拦截cuInit,其余调用计划转发至真实库。

问题现象

设置LD_LIBRARY_PATH=./运行Python脚本时,出现cuGetProcAddress_v2等其他CUDA函数的符号查找错误。动态链接器要求代理库定义所有CUDA符号,但我仅需拦截cuInit等特定函数。

期望目标

  • 仅在代理库中解析cuInit等被拦截的函数;
  • 无需手动声明,自动将其余所有符号转发至真实libcuda.so。

约束条件

  • 避免解析cuda.h或手动声明所有CUDA函数;
  • 优先选择无需维护完整符号列表的方案。

当前代码

static void* real_libcuda = nullptr;
static std::once_flag libcuda_loaded;

static void ensure_real_libcuda_loaded() {
    std::call_once(libcuda_loaded, []() {
        const char* msg = "[🔥 LIBCUDA WRAP LOADED]\n";

        size_t msg_len = 0;
        while (msg[msg_len] != '\0') {
            ++msg_len;
        }
        write(STDERR_FILENO, msg, msg_len);

        const char* libcuda_path = "libcuda_real.so.1";
        real_libcuda = dlopen(libcuda_path, RTLD_LAZY | RTLD_GLOBAL);
        if (!real_libcuda) {
            fprintf(stderr, "[‼️] Failed to load real libcuda.so.1 from %s: %s\n", libcuda_path, dlerror());
            _exit(1);
        }
    });
}

__attribute__((constructor))
static void libcuda_wrap_ctor() {
    ensure_real_libcuda_loaded();
}

template<typename T>
T resolve(const char* name) {
    ensure_real_libcuda_loaded();
    void* sym = dlsym(real_libcuda, name);
    if (!sym) {
        fprintf(stderr, "[‼️] dlsym failed for %s: %s\n", name, dlerror());
    }
    return reinterpret_cast<T>(sym);
}


extern "C" __attribute__((visibility("default")))
CUresult cuInit(unsigned int Flags) {
    static auto real = resolve<CUresult(*)(unsigned int)>("cuInit");
    std::cout << "[🟢 cuInit intercepted]\n";
    return real ? real(Flags) : CUDA_ERROR_UNKNOWN;
}

错误信息

./libcuda.so.1: undefined symbol: cuGetProcAddress_v2 (fatal)

技术疑问

是否存在仅显式拦截cuInit(或部分函数),无需手动声明即可隐式转发其余所有符号至真实libcuda.so的实现方式?


内容的提问来源于stack exchange,提问作者D1_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:02:06