gpt4 book ai didi

cuda - cuModuleGetFunction 不接受简单的内核名称,仅接受来自 .ptx 文件的 ".entry"-tags

转载 作者:行者123 更新时间:2023-12-04 18:15:41 29 4
gpt4 key购买 nike

我使用 findPackageCUDA.cmake 中的 CUDA_COMPILE_PTX 转换我的 .cu 文件。当我尝试获取指向我的内核的函数指针时,我面临以下问题:

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

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

最佳答案

_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_

如果您使用外部“C”
extern "C" __global__ void addKernel(int *c, const int *a, const int *b)

符号名称现在将是
STT_FUNC         STB_GLOBAL   addKernel

使用 extern "C"会导致函数重载和命名空间丢失

关于cuda - cuModuleGetFunction 不接受简单的内核名称,仅接受来自 .ptx 文件的 ".entry"-tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759972/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com