::push_back"-6ren">
gpt4 book ai didi

cuda - 在 CUDA 设备代码中使用 std::vector

转载 作者:行者123 更新时间:2023-12-02 15:24:43 41 4
gpt4 key购买 nike

问题是:有没有办法在 Cuda 内核中使用“向量”类?当我尝试时,出现以下错误:

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. 将“代码生成”中的值更改为以下值:计算_20,sm_20

........之后我就可以在我的Cuda内核中使用printf标准库函数了。

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

// 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]);
}
}
}

最佳答案

您无法在 CUDA 中使用 STL,但您也许可以使用 Thrust library做你想做的事。否则只需将向量的内容复制到设备并正常操作即可。

关于cuda - 在 CUDA 设备代码中使用 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10375680/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com