我尝试在PyCuda中使用已编译的*.cubin文件,但得到以下错误:
func = mod.get_function("doublify")
pycuda._driver.LogicError: cuModuleGetFunction failed: named symbol not foundDoublify.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
发布于 2021-05-07 22:39:09
在对PyCuda本身进行调试之后,我自己解决了这个问题。如果其他人碰巧遇到了同样的问题,以下是解决方案:我在*.cu文件的开头缺少extern "C“语句。
extern "C"
__global__ void doublify(float *a)
{
int idx = threadIdx.x + threadIdx.y * 4;
a[idx] *= 2;
}https://stackoverflow.com/questions/67434458
复制相似问题