Yan*_*ael 5 arrays cuda vector
我在 CUDA 设备内存中有一个名为计算的向量d_index,我只想更改一个值,就像这样......
d_index[columnsA-rowsA]=columnsA;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点,而不必将其复制到系统内存,然后再复制回设备内存?
您可以在<<<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)
如果你只这样做一次,我认为使用哪个版本没有太大区别。如果您经常调用此代码,您最好考虑将此数组修改包含到其他内核中,以避免调用开销。