2011-07-15 13 views
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コンポーネントが書かれています。 このやや直感的でない動作の理由は何ですか?

答えて

2

surf2Dwriteの呼び出しのいずれかが実際にあなたが思っていることをするとは信じられません。 float2を書くために私はこれを使用します。

surf2Dwrite<float2>(d, outSurf, x, y); 

xとyの引数は、あなたが書いている表面上の座標とテンプレートパラメータは型のサイズがアクセスされているコールを伝えています。

+0

これが問題でした。私はなぜType = vector2をコンパイラの引数から導き出すことができないのだろうと思うが、 –

+1

CUDA Cプログラミングガイド(4.0)のセクション3.2.10.2.2では、サーフェスはx座標に対してバイトアドレッシングを使用するため、sizeof(float2)で 'x 'を乗算する必要があります。 –

関連する問題