Эй, у меня есть два массива размером 2000. Я хочу написать ядро для копирования одного массива в другой.Массив представляет 1000 частиц.Индекс 0-999 будет содержать значение x, а 1000-1999 значение y для их положения.
Мне нужен цикл for для копирования до N
частиц из одного массива в другой.например,
int halfway = 1000;
for(int i = 0; i < N; i++){
array1[i] = array2[i];
array1[halfway + i] = array[halfway + i];
}
Поскольку число N всегда меньше 2000, могу ли я просто создать 2000 потоков?или мне нужно создать несколько блоков.
Я думал о том, чтобы сделать это внутри ядра:
int tid = threadIdx.x;
if (tid >= N) return;
array1[tid] = array2[tid];
array1[halfway + tid] = array2[halfway + tid];
и вызвать его следующим образом:
kernel<<<1,2000>>>(...);
эта работа?это будет быстро?или мне лучше разбить проблему на блоки.Я не уверен, как это сделать, возможно: (это правильно?)
int tid = blockDim.x*blockIdx.x + threadIdx.x;
if (tid >= N) return;
array1[tid] = array2[tid];
array1[halfway + tid] = array2[halfway + tid];
kernel<<<4,256>>>(...);