尝试通过MATLAB启动时,CUDA资源不足

时间:2013-08-07 08:08:18

标签: matlab cuda gpgpu

修复代码后我发布了here(将* sizeof(float)添加到共享内存分配 - 但是没关系,因为我在这里通过MATLAB分配共享内存),我运行了代码,成功返回大小的结果大小(浮动)* 18 * 18 * 5000 * 100字节。

我拿了PTX,并用它来运行MATLAB代码 (它找到了正确的切入点 - 我想要运行的功能)

    kernel=parallel.gpu.CUDAKernel('Tst.ptx','float *,const float *,int');
    mask=gpuArray.randn([7,7,1],'single');
    toConv=gpuArray.randn([12,12,5],'single'); %%generate random data for testing
    setConstantMemory(kernel,'masks',mask);  %%transfer data to constant memory.
    kernel.ThreadBlockSize=[(12+2*7)-2 (12+2*7)-2 1];
    kernel.GridSize=[1 5 1]; %%first element is how many convolution masks
    %%second one is how many matrices we want to convolve
    kernel.SharedMemorySize=(24*24*4);
    foo=gpuArray.zeros([18 18 5 1],'single'); %%result size
    foo=reshape(foo,[numel(foo) 1]);
    toConv=reshape(toConv,[numel(toConv) 1]);
    foo=feval(kernel,foo,toConv,12);

我明白了:

  

使用parallel.gpu.CUDAKernel / feval时出错发生意外错误   试图启动内核。 CUDA错误是:   CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES

     

tst中的错误(第12行)foo = feval(kernel,foo,toConv,12);

出于这样一个小例子的资源?它在Visual Studio中解决了一个大十万倍的问题......

我有GTX 480(计算2.0,大约1.5 GB内存,每块1024个最大线程,48K共享内存)

1>  ptxas : info : 0 bytes gmem, 25088 bytes cmem[2]
1>  ptxas : info : Compiling entry function '_Z6myConvPfPKfi' for 'sm_21'
1>  ptxas : info : Function properties for _Z6myConvPfPKfi
1>      0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1>  ptxas : info : Used 10 registers, 44 bytes cmem[0]

编辑:通过使用Configuration Active(Release)Platform Active(x64)

进行编译解决了问题

1 个答案:

答案 0 :(得分:1)

通过使用Configuration Active(Release)Platform Active(x64)而不是默认编译来解决问题(由于向后兼容性,我猜测它不是关于x64,关于编译发布而不是调试)< / p>