2

を介して 2 次元の cudaArray に書き込もうとしていsurface<void, 2>ます。配列にはチャネル形式があります。{32, 32, 0, 0, cudaChannelFormatKindFloat}より簡単に言えば、vector2s を保持します。

vector2整数座標で示される位置の表面にa を書き込もうとしてい(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ベクトルのコンポーネントのみが書き込まれます。このやや非直感的な動作の理由は何ですか?

4

1 に答える 1

2

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

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

x および y 引数は書き込み先のサーフェス上の座標であり、テンプレート パラメーターはアクセスされる型のサイズを呼び出しに伝えます。

于 2011-07-15T11:19:21.237 に答える