7

カーネルで使用されるメモリが一定であることを保証する最良の方法は何ですか。http://stackoverflow...r-pleasant-wayにも同様の質問があります。私は GTX580 を使用しており、2.0 機能のみをコンパイルしています。私のカーネルは次のようになります

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

ホストで次のコードを実行します。

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

別の方法は、追加することです

__constant__ src[size];

.cu ファイルに、カーネルからsrcポインターを削除して実行します

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

これら2つの方法は同等ですか、それとも最初の方法はグローバルメモリの代わりに定数メモリの使用を保証しませんか? サイズは動的に変化するため、私の場合、2 番目の方法は便利ではありません。

4

2 に答える 2

0

First メソッドは、メモリが関数内で一定であることを保証しますFoo。この 2 つは同等ではありません。動的が必要な場合は、最初の方法と同様のものを使用する必要があります。

于 2012-01-30T04:41:05.560 に答える