Мне нужно скопировать один массив в глобальной памяти в другой массив в глобальной памяти потоками 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] очень большая, что заставляет этот поток выдавать слишком много команд копирования. Есть ли способ реализовать это эффективно?
Спасибо,
Чжэн