私は、Matlab 2011a で CUDA カーネルを起動するために parallel.gpu.CUDAKernel を使用しています。ループ内での後続のカーネル起動によって同じ gpuArray が読み込まれるようにコードを設計しましたが、各起動は gpuArray の一意のセグメントに制限されます。
実行の終わりまでに、配列全体がいっぱいになるはずです。ただし、gather() を使用してメモリをホストに戻すと、最後のカーネル起動によって書き込まれたメモリのみが正しくなります。他のすべては空白です。これは、途中でループから抜け出した場合にも当てはまります。
カーネルの反復を示すフラグを渡すことで、これが実際に当てはまることを確認しました。最初の反復以外の場合、カーネルは何もしません。ただし、後続のカーネルが何もしない場合でも、最初のカーネルによって書き込まれたデータの場所はまだ空です! これは、最初のカーネルを起動した直後にループから抜け出した場合には当てはまりません。
したがって、Matlab がカーネルの起動の間に gpuArray をリセットしているように思えます。そうならないようにする方法はありますか?