Cuda 更改数组中的单个值

Yan*_*ael 5 arrays cuda vector

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

d_index[columnsA-rowsA]=columnsA;
Run Code Online (Sandbox Code Playgroud)

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

ala*_*and 6

您可以在<<<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);
Run Code Online (Sandbox Code Playgroud)

,或者使用类似的东西:

int tmp = columnsA;
cudaMemcpy(&d_index[columnsA-rowsA], &tmp, sizeof(int), cudaMemcpyHostToDevice); 
Run Code Online (Sandbox Code Playgroud)

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