首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CUDA设备代码中使用std::向量

在CUDA设备代码中使用std::向量
EN

Stack Overflow用户
提问于 2012-04-29 20:23:52
回答 5查看 43.6K关注 0票数 52

问题是:库达内核中是否存在使用类“向量”的方法?当我尝试时,我会得到以下错误:

代码语言:javascript
复制
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed

那么有一种方法可以在全局区域使用向量吗?我最近尝试了以下几种方法:

  1. 创建一个新的Cuda项目
  2. 转到项目的属性
  3. 打开Cuda C/C++
  4. 转到设备
  5. 将“代码生成”中的值更改为此值: compute_20,sm_20

.之后,我能够在我的Cuda内核中使用printf标准库函数。

是否有办法按照内核代码中支持printf的方式使用标准库类vector?这是在内核代码中使用printf的一个示例:

代码语言:javascript
复制
// this code only to count the 3s in an array using Cuda
//private_count is an array to hold every thread's result separately 

__global__ void countKernel(int *a, int length, int* private_count) 
{
    printf("%d\n",threadIdx.x);  //it's print the thread id and it's working

    // vector<int> y;
    //y.push_back(0); is there a possibility to do this?

    unsigned int offset  = threadIdx.x * length;
    int i = offset;
    for( ; i < offset + length; i++)
    {
        if(a[i] == 3)
        {
            private_count[threadIdx.x]++;
            printf("%d ",a[i]);
        }
    }   
}
EN

回答 5

Stack Overflow用户

发布于 2012-04-29 20:47:34

你不能在数据自动化系统中使用STL,但是你可以使用推力库来做你想做的事情。否则,只需将矢量的内容复制到设备上,并对其进行正常操作。

票数 22
EN

Stack Overflow用户

发布于 2013-05-03 16:02:31

在库达库推力中,可以使用thrust::device_vector<classT>在设备上定义向量,并且主机STL向量和设备向量之间的数据传输非常简单。您可以参考这个有用的链接:http://docs.nvidia.com/cuda/thrust/index.html,以找到一些有用的示例。

票数 13
EN

Stack Overflow用户

发布于 2012-04-30 12:58:53

不能在设备代码中使用std::vector,应该使用数组。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10375680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档