【发布时间】:2021-03-07 10:30:10
【问题描述】:
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 编程指南?
【问题讨论】:
-
"以上2个一样吗?" -- 是的。
-
谢谢。它们在 CPU 上是相同的,但我不知道主机指向 GPU 内存的指针是否正确。关于主要问题,2 语句可以安全使用吗?
标签: c++ memory cuda memcpy data-transfer