Vector CUDA内核中的STD类

Vector CUDA内核中的STD类,vector,std,cuda,Vector,Std,Cuda,我知道在CUDA内核中无法使用string、vector、map或set等std类。然而,没有它们是非常不舒服的。我必须在CUDA内核中编写大量代码,所以我希望至少使用字符串和向量。我不是说像推力这样的东西。我希望能够写出这样的东西: __global__ void kernel() { cuda_vector<int> a; for(int i=0;i<10;i++) a.push_back(i); } int main() { ke

我知道在CUDA内核中无法使用string、vector、map或set等std类。然而,没有它们是非常不舒服的。我必须在CUDA内核中编写大量代码,所以我希望至少使用字符串和向量。我不是说像推力这样的东西。我希望能够写出这样的东西:

__global__ void kernel()
{
    cuda_vector<int> a;
    for(int i=0;i<10;i++)
        a.push_back(i);
}

int main()
{
    kernel<<<1,512>>>();
    return 0;
}
\uuuu全局\uuuuu无效内核()
{
cuda_矢量a;

对于(int i=0;i我没有使用过它,但是您可能对它感兴趣,尤其是
向量
实现。看起来它可以做您需要它做的事情。

您找不到类似std::vector for cuda的东西的原因是性能。您传统的向量对象与cuda模型不太适合。如果您计划在上使用只有512个线程,每个线程将管理一个类似std::vector的对象。与在CPU上运行相同的代码相比,您的性能会更差


GPU线程不像CPU线程,它们应该尽可能轻。使用线程块和共享内存让线程协作。如果你在操作一个字符串,每个线程应该处理一个字符,如果你在CPU中使用向量,则将一个数组传递给GPU,并让每个线程处理一个元素。基本上,想想如何用CUDA编程模型解决问题,就像用CPU方法解决问题一样,然后将其转换为CUDA。

只要知道这样的东西对性能一点好处都没有。阅读CUDA C编程指南和最佳实践指南,你就会明白为什么。我明白。但是,我很少使用eed字符串和向量。我的意思是,在计算密集的部分,我不必使用它们。因此,它不会对性能产生太大影响。谢谢你的回答。如果我在forums.nvidia.com上问这个问题,我可能不得不等几天(有经验…)然而,这不是我需要的。这个cupp::vector用于主机代码中。我只想在内核本身中使用vector,而不是在内核之外。我知道这两个模型之间的区别。我想我应该解释一下为什么我需要它。让我们假设我有一个大任务,需要对许多不同的数据(约10000个)执行完全相同的操作.由于这项任务现在正在执行,CPU对这10000个不同的数据执行相同的工作。现在,我想将这些数据传播到不同的cuda内核,但不想对代码做太多更改。因此,每个内核都会做很多事情,但会同时完成。因此,如果CPU有10000个向量,并按顺序执行操作,GPU就会这样做同时,我打赌会快得多:)