【发布时间】:2021-05-07 11:49:45
【问题描述】:
我尝试在 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
【问题讨论】: