3

CUDA でグローバル デバイス変数のアライメントを宣言したいと思います。具体的には、文字列宣言があります __device__ char str1 = "some pre-defined string"; 。通常の gcc では、次のようにコンパイラにアライメントを要求できます。 __device__ char str1 __attribute__ ((aligned (4))) = "some pre-defined string";

ただし、nvcc でこれを試したところ、コンパイラはこれらの要求を無視しました。これを行う理由は、これらの文字列をカーネルのバッファーにコピーするためです。一度に単語をコピーする方が、一度にバイトをコピーするよりもはるかに高速ですが、src 文字列を揃える必要があります。nvcc コンパイラからアラインメントを要求する方法を教えてください。

4

2 に答える 2

6

ここにある「CUDA Cプログラミングガイド」のセクション5.3.2「サイズとアライメントの要件」を参照してください。

char、short、int、long、longlong、float、float2 や float4 などの double の組み込み型については、アラインメント要件が自動的に満たされます。

構造体の場合、アラインメント指定子__align__(8)または__align__(16).

使用例:

struct __align__(8) { 
    float r; 
    float i;
} complex_num;
于 2012-11-03T05:24:15.620 に答える
1

これが機能するかどうかを確認できますか?

__device__ char __align__(4) str1 = "some pre-defined string";
于 2012-11-03T05:27:26.103 に答える