-1

CUDAカーネルで重複した複数の引数を渡すためのエレガントな方法を探しています。

ご存知のとおり、各カーネル引数は各CUDAスレッドのスタックに配置されているため、カーネルから各スレッド、つまり各スタックに配置されているメモリに渡される引数の間に重複が生じる可能性があります。

渡される重複する引数の数を最小限に抑えるために、私はそうするためのエレガントな方法を探しています。

私の懸念を説明するために:私のコードが次のようになっているとしましょう:

   kernelFunction<<<gridSize,blockSize>>>(UINT imageWidth, UINT imageWidth, UINT imageStride, UINT numberOfElements,x,y,ect...)

UINT imageWidth、UINT imageWidth、UINT imageStride、UINT numberOfElements引数は、各スレッドストックにあります。

送信する引数を減らし、他のソースからのデータにアクセスするためのトリックを探しています。

コンスタントメモリの使用を考えていましたが、コンスタントメモリはグローバルに配置されているので削除します。言うまでもなく、メモリの場所は高速である必要があります。

4

1 に答える 1

5

カーネル引数は定数メモリ(またはsm_1xの共有メモリ)を介して渡されるため、提案されているようにレプリケーションはありません。

プログラミングガイドを参照してください:

__global__関数パラメーターがデバイスに渡されます。

  • 共有メモリを介して、コンピューティング機能1.xのデバイスでは256バイトに制限されています。
  • コンスタントメモリを介して、コンピューティング機能2.x以降のデバイスでは4KBに制限されます。

もちろん、後でコード内の変数の1つを変更すると、(C標準に従って)ローカルコピーが変更されるため、各スレッドは、レジスターまたは必要に応じてスタックに独自のコピーを持ちます。

于 2013-02-13T15:53:52.150 に答える