1

同じデバイスで、あるシンボルの内容を別のシンボルにコピーしようとしています。私はこれに対するサポートを見つけていません。

__device__ int someData;
__constant__ int someConst;

;

int temp;
cudaMemcpyFromSymbol(&temp,"someConst",sizeof(int),0,cudaMemcpyFromHostToDevice);
cudaMemcpyToSymbol("someData",&temp,sizeof(int),0,cudaMemcpyDeviceToHost);

また

int *tmp
cudaMalloc((void**)tmp,sizeof(int);
cudaMemcpyFromSymbol(tmp,"someConst",sizeof(int),0,cudMemcpyDeviceToDevice);
cudaMemcpy(toSymbol("someData",tmp,sizeof(int),0,cudaMemcpyDeviceToDevice);
cudaFree(tmp);

シンボルからシンボルにコピーする簡単な方法はありますか?

4

1 に答える 1

3

API 呼び出しをシンボル化するシンボルはありません。これを複数回行う場合は、セットアップ コードで次のようにするのがおそらく最善の方法です。

__device__ int someData;
__constant__ int someConst;

int * _D, * _C;
cudaGetSymbolAddress((void **)&_D, someData);
cudaGetSymbolAddress((void **)&_C, someConst);

GPU メモリ内の両方のシンボルのアドレスを取得し、cudaMemcpy代わりに使用します。

cudaMemcpy(_C, _D, sizeof(int), cudaMemcpyDeviceToDevice);

このようにすると、シンボル検索のオーバーヘッドがなくなり、操作がデバイスからデバイスへのコピー呼び出しに削減されます。

于 2012-08-21T05:12:45.547 に答える