2
surface<void, 2>
で2次元のcudaArrayに書き込もうとしています。 アレイのチャネルフォーマットは{32, 32, 0, 0, cudaChannelFormatKindFloat}
です。より簡単に言えば、vector2
を保持します。ベクトルの配列に裏打ちされたCUDAサーフェイスを書く
vector2
を整数座標(x, y)
で示された位置のサーフェスに書き込もうとしています。次はうまく機能:
// write the float2 vector d to outSurf
surf2Dwrite(d.x, outSurf, x * sizeof(float2), y);
surf2Dwrite(d.y, outSurf, x * sizeof(float2) + sizeof(float), y);
私は
surf2Dwrite(d, outSurf, x * sizeof(float2), y);
を行う場合は、ベクターのみのx
コンポーネントが書かれています。 このやや直感的でない動作の理由は何ですか?
これが問題でした。私はなぜType = vector2をコンパイラの引数から導き出すことができないのだろうと思うが、 –
CUDA Cプログラミングガイド(4.0)のセクション3.2.10.2.2では、サーフェスはx座標に対してバイトアドレッシングを使用するため、sizeof(float2)で 'x 'を乗算する必要があります。 –