我在CUDA设备内存中计算了一个称为d_index的向量,我只想更改一个值,就像这样...

d_index[columnsA-rowsA]=columnsA;


我如何做到这一点而不必将其复制到系统内存,然后再复制回设备内存?

最佳答案

您可以在<<<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);


如果只执行一次,我认为使用哪个版本没有太大区别。如果经常调用此代码,则最好考虑将此数组修改包含在其他内核中,以避免调用开销。

10-06 09:29