Я должен извлечь разделы из массива и установить кусок в другой массив.
Например, у меня есть 2d массив (в формате 1d) как A [32 X 32]; есть еще один массив B [64 X 64], и я хотел бы скопировать фрагмент 8X8 из B, начиная с (0,8) из B, и поместить его в (8,8) из A.
В настоящее время я, вероятно, использовал бы что-то вроде приведенного ниже ядра для получения части данных при передаче смещений. Аналогичный также можно использовать для установки фрагментов в больший массив.
__global__ void get_chunk (double *data, double *sub, int xstart, int ystart, int rows, int cols, int subset)
{
int i,j;
i = blockIdx.x * blockDim.x + threadIdx.x;
for (j = 0; j < subset; j++)
sub[i*subset+j] = data[i*cols + (xstart*cols + ystart)+j];
}
Я думаю, что то же самое можно сделать, используя вариант cudamemCpy * (возможно, cudamemCpyArray (...)), но я не уверен, как это сделать. Мне нужны примеры кода или указания, как это можно сделать.
PS У меня был точно такой же вопрос на форумах nvidia, я не получил ответа, поэтому пробую здесь. http://forums.nvidia.com/index.php?showtopic=223386
Спасибо.