13

CUDAで定数を使用する最良の方法はどれですか?

1 つの方法は、次のように定数メモリで定数を定義することです。

// CUDA global constants
__constant__ int M;

int main(void)
{
    ...
    cudaMemcpyToSymbol("M", &M, sizeof(M));
    ...
}

別の方法は、C プリプロセッサを使用することです。

#define M = ... 

Cプリプロセッサで定数を定義する方がはるかに高速だと思います。では、CUDA デバイスでコンスタント メモリを使用する利点は何ですか?

4

2 に答える 2

19
  1. コンパイル時に既知の定数は、プリプロセッサ マクロ (例: #define) を使用するか、グローバル/ファイル スコープで C/C++const変数を介して定義する必要があります。
  2. __constant__メモリの使用は、カーネルの期間中変更されない特定の値を使用し、特定のアクセス パターンが存在する (たとえば、すべてのスレッドが同時に同じ値にアクセスする) プログラムにとって有益な場合があります。これは、上記の項目 1 の要件を満たす定数よりも優れているわけでも高速でもありません。
  3. プログラムによって行われる選択の数が比較的少なく、これらの選択がカーネルの実行に影響する場合、追加のコンパイル時の最適化の 1 つの可能なアプローチは、テンプレート化されたコード/カーネルを使用することです。
于 2013-11-08T18:41:15.843 に答える