2016-11-18 9 views
2

実行時にスレッドによってアクセスされるグローバルメモリのアドレスを確認することはできますか?CUDA:グローバルメモリアクセスアドレス

オーバーヘッドが大きくなることはわかっていますが、どの要素がアクセスされているのか確認したいと思います。合体メカニズムがどのように実装されているのか理解するのに役立つと思います。

ありがとうございます。

答えて

1

CUDAスレッドコードは、CおよびC++構文パターンに大きく従います。だから、簡単にカーネルコード内のポインタの数値をプリントアウトすることができます

printf("pval = %p\n", my_pointer); 

あなたはCUDAのカーネルでスレッド間でこれをやってみたかった場合は、行うことができます:

__global__ void my_kernel(int *data){ 
    int idx = threadIdx.x+blockDim.x*blockIdx.x; 
    printf("thread: %d, pointer: %p, value: %d\n", idx, &(data[idx]), data[idx]); 
} 

または類似します。明らかに、多数のスレッドを使用すると、大量の出力が生成され、インカーネルprintfはサイズが制限されたバッファを使用することに注意してください。

+0

ありがとうございました。たぶん単純なポインタ算術を使って、アクセスが「合併されていない」とき(例えば、非単位のストライドやそのようなものなど)を見て、それを印刷してみることができます。 – algoProg