1

ここに投稿したコードを修正した後(共有メモリの割り当てに *sizeof(float) を追加しますが、ここでは MATLAB を介して共有メモリを割り当てるので問題ありません)、コードを実行すると、sizeof( までのサイズの結果が正常に返されました。 float)*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);

私は得る:

Error using parallel.gpu.CUDAKernel/feval カーネルを起動しようとして予期しないエラーが発生しました。CUDA エラー: CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES

tst のエラー (12 行目) foo=feval(kernel,foo,toConv,12);

このような小さな例のリソースが不足していますか? それは、Visual Studio で 10 万倍も大きな問題を解決しました...

私は 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)編集: andを使用してコンパイルすることで問題を解決Platform Active(x64)

4

1 に答える 1

1

Configuration Active(Release)デフォルトの代わりにand を使用してコンパイルすることで問題を解決しましたPlatform Active(x64)(後方互換性のため、x64 に関するものではなく、デバッグ用ではなくリリース用のコンパイルに関するものだと思います)

于 2013-08-07T16:59:10.443 に答える