pycuda共享内存错误“;pycuda.“u driver.LogicError:内核失败:无效值”;

pycuda共享内存错误“;pycuda.“u driver.LogicError:内核失败:无效值”;,cuda,shared-memory,pycuda,Cuda,Shared Memory,Pycuda,我有一个我无法确定的奇怪问题: 我有一个用于一些特殊矩阵向量乘法的工作内核,我想加速它。基本上,大矩阵(10^6乘以10^6)是由几个小矩阵构成的。所以我想把数据放在共享内存中。但是,当我尝试添加共享内存时,我只得到以下错误: pycuda.\u driver.LogicError:内核失败:无效值 因此,我的工作核心是: #define FIELD_SIZE {field} #define BLOCK_SIZE {block} __global__ void MatrixMulKernel(

我有一个我无法确定的奇怪问题:

我有一个用于一些特殊矩阵向量乘法的工作内核,我想加速它。基本上,大矩阵(10^6乘以10^6)是由几个小矩阵构成的。所以我想把数据放在共享内存中。但是,当我尝试添加共享内存时,我只得到以下错误:

pycuda.\u driver.LogicError:内核失败:无效值

因此,我的工作核心是:

#define FIELD_SIZE {field}
#define BLOCK_SIZE {block}

__global__ void MatrixMulKernel(double *gpu_matrix, double *gpu_b, double *gpu_y)
{
    int tx = ... + threadIdx.x;

    if(tx < FIELD_SIZE*FIELD_SIZE*BLOCK_SIZE) 
    { ... multiplication ... }
}
其中matrix_gpu、b_gpu和y_gpu是pycuda.gpuarray实例


希望你能澄清我的一些困惑…

根据你的描述,你分配的共享内存太大了

__shared__ double gpu_matrix[BLOCK_SIZE*BLOCK_SIZE*13];
共享内存是cuda gpu的硬件资源之一。总大小约为48KB,不能增加

CUDA实际上在下面的目录中提供了一个工具来帮助您计算可以使用的硬件资源

$CUDA_ROOT/tools/CUDA_Occupancy_Calculator.xls

另一方面,mat-vec-mul-like内核所需的共享mem的大小应该能够从O(
BLOCK\u-size^2
)减少到O(
BLOCK\u-size
)。您可能需要阅读一些成功的mat-vec-mul内核的代码,例如在实现您自己的内核之前。

无效值。块大小和字段大小的值是多少?也许它们太大了,块大小是64,字段大小是1024。为什么这会是个问题?编辑:但是您是正确的,将块大小减少到16是可行的。我是否可以增加共享内存的大小?
__shared__ double gpu_matrix[BLOCK_SIZE*BLOCK_SIZE*13];
$CUDA_ROOT/tools/CUDA_Occupancy_Calculator.xls