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 回答