c++ - 如何在 cuda 内核中添加 vector 元素?

标签 c++ cuda

#include <cuda.h>
#include <cuda_runtime.h>
#include <iostream>
#include <vector>
using namespace std;

__global__ void kernel(vector <int> *a,vector <int> *b, vector <int> *c)
{
    int index=threadIdx.x;
    c[index]=a[index]+b[index];
};

int main ()
{
    //Paar constanten initializeren
    int N=3;
    vector <int> a (3,1);
    vector <int> b (3,1);
    vector <int> c (3,0);
    int size=N*sizeof(vector <int>);
    //Device variabelen
    vector <int> d_a;
    vector <int> d_b;
    vector <int> d_c;

    //<size> bytes device-geheugen vrijmaken op locatie &a
    cudaMalloc( (void **) &a, size);
    cudaMalloc ( (void **) &b, size);
    cudaMalloc ( (void **) &c, size);

    //Kopieer inputs van &a naar &d_a
    cudaMemcpy(&d_a,&a,size,cudaMemcpyHostToDevice);
    cudaMemcpy(&d_b,&b,size,cudaMemcpyHostToDevice);

    printf( (char *) a[1]);
    printf( (char *) c[1]);
    //Voer kernel uit

    kernel<<<N,1>>>(&d_a,&d_b,&d_c);

    //Kopieer resultaat terug naar host 
    cudaMemcpy(&c,&d_c,size,cudaMemcpyDeviceToHost);

    printf( (char *) c[1]);

    return 0;
};

所以这是我的基本 C++ vector 加法程序,尽管它不会编译,因为它不知道在添加索引时如何处理“+”(“没有运算符”+“匹配这些操作数”)。任何人都知道为什么这在内核中不起作用?我认为这可能与它是一个 host 函数或类似的东西有关,尽管我不知道如何解决这个问题。

提前致以问候和感谢。

最佳答案

您不能在设备代码中使用 STL ...您将不得不使用数组或其他一些 CUDA 结构,例如 Thrust Library .

关于c++ - 如何在 cuda 内核中添加 vector 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13002610/

相关文章:

c++ - CUDA内核模板实例化导致编译错误

c++ - 从 C++ 类调用 .cu 文件中的内联函数

c - 在 CUDA 中倾斜图像

c++ - 将元素从一个列表添加到另一个列表的简单方法

c++ - 如何优雅地使用智能指针在 C++ 中为复杂的生命周期建模?

c++ - 矩形近似算法

c++ - 按值与按引用读取 C++ vector

python - Windows 10 Ubuntu 外壳 "CUDA driver version is insufficient"

c++ - 将 16 字节和 256 字节复制到共享内存之间的区别

c++ - 什么时候使用 find_path?