Вы можете либо вызвать ядро на <<<1,1>>>
сетке, которая изменяет только нужный элемент:
__global__ void change_elem(int *arr, int idx, int val) {
arr[idx] = val;
}
// ....
// Somewhere in CPU code
change_elem<<<1,1>>>(d_index, columnsA-rowsA, columnsA);
, или использовать что-то вроде:
int tmp = columnsA;
cudaMemcpy(&d_index[columnsA-rowsA], &tmp, sizeof(int), cudaMemcpyHostToDevice);
Если вы только сделать это один раз, я думаю, не имеет большого значения, какую версию использовать. Если вы часто вызываете этот код, лучше подумать о включении этой модификации массива в другое ядро, чтобы избежать накладных расходов на вызовы.
Запустив ядро только с одним потоком, передав массив и значение и установив это значение в код ядра. Может быть, вы можете уточнить, где именно лежит ваша проблема. –