【发布时间】:2011-07-28 09:20:48
【问题描述】:
我需要通过 CUDA 线程(不是来自主机)将全局内存中的一个数组复制到全局内存中的另一个数组。
我的代码如下:
__global__ void copy_kernel(int *g_data1, int *g_data2, int n)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
int start, end;
start = some_func(idx);
end = another_func(idx);
unsigned int i;
for (i = start; i < end; i++) {
g_data2[i] = g_data1[idx];
}
}
这是非常低效的,因为对于某些 idx,[start, end] 区域非常大,这使得该线程发出过多的复制命令。有什么方法可以有效地实现吗?
谢谢,
郑
【问题讨论】: