cuModuleGetFunction不接受简单的内核名称,只接受来自.ptx文件的“.entry”-tags

时间:2012-08-01 13:07:44

标签: cuda cmake

我使用来自findPackageCUDA.cmake的CUDA_COMPILE_PTX转换我的.cu文件。当我尝试获取我的内核的函数指针时,我遇到了以下问题:

我的内核名为Kernel1只能通过cuModuleGetFunction正确加载,如果我从生成的.ptx文件中使用其.entry-label,例如_Z7Kernel1Pj

问题是每次我必须重新编译.cu文件时,此标签可能会更改。如果我在一个常量char *中按名称引用它们,这不是一个解决方案。

1 个答案:

答案 0 :(得分:4)

_Z7Kernel1Pj是一个C ++错位名称。如果你想要一个简单的符号,你可以使用extern“C”

extern "C" void Kernel1(...)

例如,如果您使用默认的CUDA visual studio项目包含内核

__global__ void addKernel(int *c, const int *a, const int *b)

如果您对此运行cuobjdump -symbols,您将看到错位的符号名称

STT_FUNC         STB_GLOBAL   _Z9addKernelPiPKiS1_

如果您使用extern“C”

extern "C" __global__ void addKernel(int *c, const int *a, const int *b)

符号名称现在为

STT_FUNC         STB_GLOBAL   addKernel

使用extern“C”将导致函数重载和名称空间丢失