CUDA 通过数组偏移量从设备内存中复制单个元素是否安全?
CUDA is it safe to copy a single element from device memory by array offset?
int main()
{
int n = 1000;
float *d_a;
cudaMalloc(&d_a, n * sizeof(float));
// do something that gives d_a value;
int index = rand() % n; // copy index
float res;
cudaMemcpy(&res, &d_a[index], sizeof(float), cudaMemcpyDeviceToHost);
cudaMemcpy(&res, d_a + index, sizeof(float), cudaMemcpyDeviceToHost);
// Are the above 2 the same and legal ?
cout << res << "\n";
}
return 0;
所以我遇到了以下问题。我需要从设备数组中精确复制 1 个元素(随机索引)。我不想复制整个数组,因为这会很浪费。
那么,以上方法是否安全,是否符合CUDA编程指南?
是的,你展示的没有问题。这是合法的,应该将您想要的元素从设备复制到主机。
关于你的两种方法,它们是相同的(这是一个C++问题,不特定于CUDA)。
int main()
{
int n = 1000;
float *d_a;
cudaMalloc(&d_a, n * sizeof(float));
// do something that gives d_a value;
int index = rand() % n; // copy index
float res;
cudaMemcpy(&res, &d_a[index], sizeof(float), cudaMemcpyDeviceToHost);
cudaMemcpy(&res, d_a + index, sizeof(float), cudaMemcpyDeviceToHost);
// Are the above 2 the same and legal ?
cout << res << "\n";
}
return 0;
所以我遇到了以下问题。我需要从设备数组中精确复制 1 个元素(随机索引)。我不想复制整个数组,因为这会很浪费。
那么,以上方法是否安全,是否符合CUDA编程指南?
是的,你展示的没有问题。这是合法的,应该将您想要的元素从设备复制到主机。
关于你的两种方法,它们是相同的(这是一个C++问题,不特定于CUDA)。