5

CUDA カーネルが「理論」で計算されたスペースのちょうど 2 倍を使用していることに気付きました。例えば

__global__ void foo( )
{
    __shared__ double t;
    t = 1;
}

PTX 情報の表示:
ptxas 情報: _Z3foov の関数プロパティ、0 バイトのスタック フレーム、0 バイトのスピル ストア、0 バイトのスピル
ロード

しかし、double のサイズは 8 しかありません。

より多くの例:

__global__ void foo( )
{
    __shared__ int t[1024];
    t[0] = 1;
}

ptxas info : 3 つのレジスタを使用、8192 バイトの smem、32 バイトの cmem[0]

誰かが理由を説明できますか?

4

1 に答える 1

1

現在の CUDA コンパイラでは問題が解決したようです。

__shared__ int a[1024];

コマンド「nvcc -m64 -Xptxas -v -ccbin /opt/gcc-4.6.3/bin/g++-4.6.3 shmem.cu」でコンパイルすると、

ptxas info    : Used 1 registers, 4112 bytes smem, 4 bytes cmem[1]

この場合、共有メモリのオーバーヘッドが多少発生しますが、使用量は 2 倍にはなりません。

于 2013-04-11T17:31:45.443 に答える