CUDA:我如何将主机存储的向量传递给设备端 int 数组?

CUDA: How would I pass a host stored vector to a Device side int array?

我目前正在使用 CUDA 处理坐标列表。因此,我正在将坐标从文本文件读取到主机,并将这些坐标传递到 GPU 上的数组中。

不幸的是,我不知道每个文本文件中包含多少个坐标。因此,我使用向量来存储主机端的坐标 - 因为无法动态分配非向量数组大小。

然而,由于声明设备变量是即时完成的,我想知道是否有一种方法可以将主机向量的值传递到设备端浮点数组中?

从矢量传递数据的方式与数组相同。 std::vector 中的值存储在连续内存中。

Is it safe to assume that STL vector storage is always contiguous?

附带说明一下,我接触过的大多数科学存储方法都会预先定义它们有多少个坐标。如果您创建此文件,我强烈建议您这样做,因为它比使用 std::vector 更快,后者必须在容量增长时动态重新分配和复制内存。

正如 Christian Sarofeen 所说,您可以直接访问原始 vector 数据,更多信息 here。如果您使用的是 C++11,最好的方法是为此目的使用 data() 函数。

另一方面,我对你的这句话感到有点惊讶:

as non-vector array sizes can not be allocated dynamically

我不同意,这应该对你有用:

int x;
cin >> x;
int* dynamicArray = new int[x];
// Do computations on dynamicArray,
// possibly copy to GPU memory.
// Then deallocate.
delete [] dynamicArray;