如何从我编写的 __global__ 函数中获取 cuFunction?

Posted

技术标签:

【中文标题】如何从我编写的 __global__ 函数中获取 cuFunction?【英文标题】:How do I get a cuFunction from a __global__ function I've written? 【发布时间】:2016-06-16 12:35:44 【问题描述】:

假设我想在我编写的某些源代码上使用 CUDA 的低级驱动程序 API。我知道cuLaunchKernel,但我似乎无法在文档中找到关于如何让cuFunction__global__ 函数传递给它的确切解释。

【问题讨论】:

查看使用驱动 API 的 CUDA 示例代码,例如 vectorAddDrv。该项目设置为将内核(vectorAddDrv_kernel.cu 中的__global__ 函数)编译为ptx,并通过vectorAddDrv.cpp 文件中的API 序列加载ptx 形式的内核。编程指南的driver API section 也可以作为参考。 【参考方案1】:

您使用cuModuleGetFunction。如果您不使用 C 链接,则传递的函数名称必须是损坏的 C++ 名称。您可以在设备源的编译版本上使用 cuobjdump 来获得它。

【讨论】:

但是我是否必须从文件中加载模块,或者我是否以某种方式神奇地将一个模块内置到我的可执行文件中/默认情况下加载/等等?跨度> 您可以从构建先验的 cubin 或 fat 二进制文件加载预编译的二进制文件,或者从源代码编写或编译的 PTX 代码。如果您有要链接的设备代码库,您还可以启动运行时设备链接器会话。 我明白了,但我不能以某种方式让我的可执行文件也成为我的胖二进制文件吗?我的意思是,这就是运行时 API 本质上的作用,对吧? 不,你真的不能那样做。运行时 API 使用几个内部函数和大量编译器驱动的样板来发挥它的魔力。您将有效地发明自己的运行时 API,这似乎毫无意义。 这就是我所缺少的。好吧,太糟糕了。

以上是关于如何从我编写的 __global__ 函数中获取 cuFunction?的主要内容,如果未能解决你的问题,请参考以下文章

将主机函数作为函数指针传递给 __global__ 或 __device__ 函数中的 CUDA

Python globals和locals函数_reload函数

如何按'_createTime'对firestore文档进行排序?

cudaError_t 1 : 从 'cublasCreate(&handle_)' 返回“__global__ 函数调用未配置”

Python 函数 -globals()

global.__reanimatedWorkletInit 不是函数。反应原生动画 v2