如何解决PyCuda - 使用 *.cubin - 未找到命名符号
我尝试在 PyCuda 中使用已编译的 *.cubin 文件,但出现此错误:
func = mod.get_function("doublify")
pycuda._driver.LogicError: cuModuleGetFunction Failed: named symbol not found
doublify.cu 的内容:
__global__ void doublify(float *a)
{
int idx = threadIdx.x + threadIdx.y * 4;
a[idx] *= 2;
}
我使用以下命令编译它:
nvcc --cubin -arch sm_75 doublify.cu
这是我的python脚本:
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
解决方法
在调试 PyCuda 本身之后自己弄清楚。如果其他人偶然发现同样的问题,这是解决方案: 我错过了 *.cu 文件开头的 extern "C" 语句。
extern "C"
__global__ void doublify(float *a)
{
int idx = threadIdx.x + threadIdx.y * 4;
a[idx] *= 2;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。