cudaMalloc3DArray失败,值不好 - 限制大小?

时间:2013-02-05 17:54:12

标签: cuda gpu

通话:

cudaExtent extent = make_cudaExtent( 1920 * sizeof(float), 1080, 10);
chanDesc = cudaCreateChannelDesc ( 32, 0, 0, 0, cudaChannelFormatKindFloat);
err = cudaMalloc3DArray  ( &(devYAll[0]), &chanDesc, extent, 0); 

err=cudaErrorInvalidValue失败。当我使用第一个争论扩展到1024或更小时,对3D阵列的调用成功。是否以某种方式限制了可以使用cudaMalloc3DArray分配的内存大小?

1 个答案:

答案 0 :(得分:3)

是的,范围大小有限制 - 2048x2048x2048或4096x4096x4096,具体取决于您拥有的硬件(根据您的问题中的详细信息,我认为您有费米卡)。但问题的真正来源是make_cudaExtent电话。对于cudaMalloc3DArray,范围的第一个参数应该在元素中给出,而不是字节。这就是为什么你得到第一个维度的错误> 1024,1024 * sizeof(float)= 4096,这是Fermi GPU的极限。

所以要分配一个1920x1080x10的3D阵列,请执行以下操作:

cudaExtent extent = make_cudaExtent( 1920, 1080, 10);
chanDesc = cudaCreateChannelDesc ( 32, 0, 0, 0, cudaChannelFormatKindFloat);
err = cudaMalloc3DArray  ( &(devYAll[0]), &chanDesc, extent, 0); 

在此调用中,从通道描述中推断出类型的大小,并根据需要修改范围尺寸以满足硬件的间距/对齐要求。