2012-11-09 6 views
5

私のCUDAカーネルは 'theory'で計算されたスペースの2倍のスペースしか使用していないことに気付きました。例えばCUDA共有メモリが必要以上に2倍のスペースを占める

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

PTX情報を示しています。
ptxas情報:_Z3foovための機能性を、0バイトが、フレーム、0バイト流出格納、0バイト流出負荷をスタック
ptxas情報:4つのレジスタ、16バイトSMEM、32バイトを使用しCMEM [0]

しかし、二重の大きさのみ8

詳細例である:

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

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

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

+1

@ Fr34K:実行時の設定は、コンパイラやアセンブラで行われた静的な代入*の大きさと関係がありますか? – talonmies

+0

詳細が必要です。いくつのブロックを初期化しましたか? – Fr34K

+0

@talonmies:説明をありがとう。私はその点を逃した。 :) – Fr34K

答えて

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倍にはなりません。

+1

コンパイラは、変数が副作用を持たないので、tを削除する可能性があります。 compute_1xアーキテクチャ用にコンパイルしているため、16バイトの可能性があります。上記の答えはcompute_10のためにコンパイルされています。 SASSにコンパイルする場合は、cuobjdumpを使用して各共有メモリ割り当てを検査して、サイズの計算方法を判断できます。 –

関連する問題