5

根据cuLaunchKernel 函数的 NVidia 文档,使用 CUDA 3.2+ 编译的内核包含有关其参数列表的信息。有没有办法以编程方式从 CUfunction 句柄中检索这些信息?我需要从其 CUfunction 句柄中知道内核的参数数量和每个参数的大小(以字节为单位)。我已经看到上面引用的 NVidia 文档说此信息存在,但我在 CUDA 文档中没有看到任何地方表明访问此信息的编程方式。

添加更多解释:我正在使用中间件系统。它的前端库取代了目标系统上的 libcuda(驱动 API 库)。然后,后端作为守护进程在另一台使用 GPGPU 资源的主机上运行,​​并调用该机器上真正的 libcuda。还有其他中间件解决方案已经使用 cuLaunchKernel 做到了这一点,所以这绝对是可能的。此外,CUDA 本身使用此信息来了解如何从传递给 cuLaunchKernel 的指针解析参数。

编辑:我最初的 CUDA 版本中引入了此元数据,但列出不正确。根据cuLaunchKernel 文档,它是 3.2,而不是 4.0 。

4

2 回答 2

1

cuLaunchKernel旨在启动您知道函数原型的内核。没有用于“逆向工程”函数原型的 API。

于 2012-12-10T12:45:53.910 回答
1

我正在处理同样的问题(我不知道你是否解决了它)。我正在使用一个已知的内核来研究如何使用 che CUfunction 指向的内存。这是无参数版本:

#include<cstdio>

extern "C" {
    __global__ void HelloWorld(){
        int thid = (blockIdx.x * blockDim.x) + threadIdx.x;
    }
}

这是一个参数版本,依此类推。

#include<cstdio>

extern "C" {
    __global__ void HelloWorld(int a) {
        int thid = (blockIdx.x * blockDim.x) + threadIdx.x;
    }
}

我建议您转储 CUfunction 指向的内存的前 1024 个字节并按照指针进行操作。例如,在 0x30 偏移处有一个指向指针表的指针。我注意到 CUfunction 发布的结构的大小不会随着函数参数的数量而变化,所以我们要查找的表必须按照指针进行搜索。

于 2016-12-07T08:46:46.023 回答