Konstante Speicher Auslastung in CUDA-code

Ich kann es nicht herausfinden mich, was ist der beste Weg um sicherzustellen, dass der Speicher in meinem kernel ist konstant. Es ist eine ähnliche Frage wie bei http://stackoverflow...r-pleasant-way.
Ich arbeite mit GTX 580 und kompilieren, nur für 2.0-Fähigkeit. Mein Kern sieht aus wie

__global__ Foo(const int *src, float *result) {...}

Führe ich folgenden code auf dem host:

cudaMalloc(src, size);
cudaMemcpy(src, hostSrc, size, cudaMemcpyHostToDevice);
Foo<<<...>>>(src, result);

die alternative Möglichkeit ist das hinzufügen von

__constant__ src[size];

zu .cu-Datei, entfernen Sie src Zeiger aus dem kernel und ausführen

cudaMemcpyToSymbol("src", hostSrc, size, 0, cudaMemcpyHostToDevice);
Foo<<<...>>>(result);

Sind diese beiden Arten gleichwertig oder der erste übernimmt keine Garantie für die Verwendung der Konstanten-Speicher anstelle von globalen Speicher? Größe ändert sich dynamisch, so dass die zweite Methode ist nicht praktisch in meinem Fall.

InformationsquelleAutor markhor | 2012-01-30
Schreibe einen Kommentar