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)。