Вы можете вызвать ядро в сетке <<<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);
Если вы делаете это только один раз, я думаю, что нет большой разницы, какую версию использовать. Если вы будете часто вызывать этот код, вам лучше подумать о включении этой модификации массива в другое ядро, чтобы избежать накладных расходов при вызове.