0

次のように、CUDA の下で C++ に 2 次元配列があり、共有メモリに格納されているとします。

__shared__ float arr[4][4]; // C++ has a default row-major ordering

デフォルトでは、C++ は要素をarr行優先形式で並べ替えます。

つまり、メモリの連続ブロックを割り当て、(0,0)、(0,1)、(0,2)、(0,3)、(1,0)、(1,1) のような要素を格納します。 )、 ... 等々...

C++/CUDA コンパイラにこれを列優先順に配置するように指示する方法はありますか?

4

2 に答える 2

2

使用しているインデックスを交換してみませんか?

arr[x][y]useを使用する代わりにarr[y][x].

興味深いのは、なぜこれをやりたいのかということです。キャッシュメモリを使用すると役立つかもしれませんが、詳細がないとわかりません。

それが役立つことを願っています。

于 2012-09-27T15:08:13.240 に答える
1

行列を転置します。は、サイズ 4 の 4 つの配列の配列であるarr[4][4]ことを意味します。値を「行優先」の順序で格納する理由は、たとえば、これら 4 つの配列の最初の配列へのポインターと、単一の配列の要素を指定する必要があるためです。一意の識別子にインデックスを追加して個別に参照できるように、連続したメモリ位置に配置する必要があります。arrarr[0]

于 2012-09-27T15:07:43.133 に答える