【发布时间】:2018-07-03 22:23:32
【问题描述】:
我的 python 代码有一个 gpu 内核函数,它在主机的 for 循环中被多次调用,如下所示:
for i in range:
gpu_kernel_func(blocksize, grid)
由于这个函数调用需要主机和gpu设备之间多次通信,效率不高,我想把它设为
gpu_kernel_function(){
for(){
computation } ;
}
但这需要额外的步骤来确保网格中的所有块都同步。根据动态并行性,调用虚拟子内核应确保每个线程(在整个网格中)都应在代码继续运行之前完成该子内核。所以我定义了另一个内核,就像 gpu_kernel_function 一样,我尝试了这个:
GPUcode = '''
\__global__ gpu_kernel_function() {... }
\__global__ dummy_child_kernel(){ ... }
'''
gpu_kernel_function(){
for() {
computation } ;
dummy_child_kernel(void);
}
但我收到此错误“nvcc fatal : Option '--cubin (-cubin)' is not allowed whencompiled for a virtual compute architecture”
我正在使用 Tesla P100(计算 6.0)、python 3.5、cuda.8.0.44。我正在像这样编译我的源模块:
mod = SourceModule(GPUcode, options=['-rdc=true' ,'-lcudart','-lcudadevrt','--machine=64'],arch='compute_60' )
我也尝试了 compute_35,但出现了同样的错误。
【问题讨论】:
标签: python-3.x cuda pycuda