【发布时间】:2022-01-12 01:44:27
【问题描述】:
CUDA 运行时 API has 函数 cudaGetSymbolAddress() 和 cudaGetSymbolSize() 用于处理来自主机端代码的设备端全局变量,使用它们的名称(源代码标识符)作为句柄。
在驱动程序 API 中,我们有 cuModuleGetGlobal(),它可以让我们做同样的事情......除了它需要一个全局符号所在的 CUmodule。如果您正在使用动态编译的代码,并且加载/添加到一个模块中,然后你就准备好了。但是,如果这些全局变量是您程序的一部分,使用 NVCC 静态编译而不是动态加载呢?
我假设每个编译的程序都有某种“主模块”或“默认模块”,其中包含内置的全局变量和函数。我能得到它的句柄吗?
【问题讨论】:
-
a
.cu文件通过nvcc编译为 ptx 或 cubin(用于标准驱动程序 API 使用)。其中任何一个都由驱动程序 API 使用cuModuleLoadXX函数加载。不知道你在问什么。 -
运行时 API 使用相当脆弱的私有样板来发挥它的魔力,没有任何 API 可以实现您的想象
-
您是在询问来自运行时 API 构建的模块吗?否则我不明白你的问题。从字面上看,您使用与 nvrtc 调用相同的代码,除了模块是从您从文件名或句柄加载外部 cubin 或 ptx 的调用返回的,而不是运行时编译器输出
-
@talonmies:我将尝试在评论中解释,请告诉我是否应该重新表述问题本身。我没有动态加载任何东西。我有一个带有全局设备端变量的 .cu 文件,比如说,一个使用它的内核。我现在想使用
cuModuleGetGlobal()来获取有关该全局的信息。 -
@RobertCrovella:(再次回答以澄清)。我问的不是我自己动态加载的模块,而是我将
.cu文件编译到程序中并运行它时运行时创建的模块。
标签: cuda globals nvrtc cuda-driver