根据cuLaunchKernel function的NVidia文档,使用CUDA 3.2+编译的内核包含有关其参数列表的信息。有没有办法以编程方式从CUfunction句柄中检索此信息?我需要从CU函数句柄知道内核的参数数量和每个参数的大小(以字节为单位)。我已经看到上面引用的NVidia文档说这些信息存在,但我没有在CUDA文档中看到任何指示访问此信息的编程方式。
添加更多解释:我正在使用中间件系统。它的前端库替换了目标系统上的libcuda(驱动程序API库)。然后,后端作为守护程序在另一台主机上运行,该主机使用GPGPU资源并调用该机器上的真实libcuda。还有其他中间件解决方案已经使用cuLaunchKernel执行此操作,因此它绝对可行。此外,CUDA本身使用此信息以了解如何从传递给cuLaunchKernel的指针中解析参数。
编辑:我最初有CUDA版本,其中引入的元数据列表不正确。根据{{3}},它是3.2而不是4.0。
答案 0 :(得分:1)
cuLaunchKernel
旨在启动您知道函数原型的内核。没有用于“逆向工程”功能原型的API。
答案 1 :(得分:1)
我正在处理同样的问题(我不知道你们之间是否解决了它)。 我正在使用一个已知的内核来研究如何使用CU CU指向内存。 这是无参数版本:
#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发布的struct的大小不会随着函数参数的数量而改变,所以我们看的表必须按照指针进行搜索。