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

时间:2015-02-21 15:54:55

标签: c++ arrays vector cuda

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

作为旁注,我接触过的大多数科学存储方法都会预先确定它们的坐标数量。如果你创建这个文件,我强烈建议这样做,因为它比使用std :: vector更快,它必须在容量增长时动态地重新分配和复制内存。

答案 1 :(得分:0)

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

另一方面,我对你的陈述感到有些惊讶:

  

因为无法动态分配非向量数组大小

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

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