首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyCuda -未找到使用*.cubin命名的符号

PyCuda -未找到使用*.cubin命名的符号
EN

Stack Overflow用户
提问于 2021-05-07 19:49:46
回答 1查看 65关注 0票数 0

我尝试在PyCuda中使用已编译的*.cubin文件,但得到以下错误:

代码语言:javascript
复制
func = mod.get_function("doublify")
pycuda._driver.LogicError: cuModuleGetFunction failed: named symbol not found

Doublify.cu的内容:

代码语言:javascript
复制
    __global__ void doublify(float *a)
    {
        int idx = threadIdx.x + threadIdx.y * 4;
        a[idx] *= 2;
    }

我用下面的命令编译了它:

代码语言:javascript
复制
nvcc --cubin -arch sm_75 doublify.cu

这是我的python脚本:

代码语言:javascript
复制
    import pycuda.driver as cuda
    import pycuda.autoinit
    from pycuda.compiler import SourceModule
    import numpy

    a = numpy.random.randn(4, 4)
    a = a.astype(numpy.float32)
    a_gpu = cuda.mem_alloc(a.nbytes)

    mod = pycuda.driver.module_from_file("doublify.cubin")

    func = mod.get_function("doublify")
    func(a_gpu, block=(4,4,1))

    cuda.memcpy_dtoh(a_doubled, a_gpu)

    print(a)

我是否需要向nvcc编译器传递额外的标志?如果我将它与来自Pycuda的SourceModule一起使用,则一切都像预期的那样工作。它也不支持编译*.fatbin

EN

回答 1

Stack Overflow用户

发布于 2021-05-07 22:39:09

在对PyCuda本身进行调试之后,我自己解决了这个问题。如果其他人碰巧遇到了同样的问题,以下是解决方案:我在*.cu文件的开头缺少extern "C“语句。

代码语言:javascript
复制
extern "C"
__global__ void doublify(float *a)
{
        int idx = threadIdx.x + threadIdx.y * 4;
        a[idx] *= 2;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67434458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档