如何在CUDA内核中添加向量元素

How can I add vector elements in a cuda kernel?

本文关键字:添加 向量 元素 内核 CUDA      更新时间:2023-10-16
#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 向量添加程序,尽管它不会编译,因为它不知道该在添加索引时该如何处理" "(" no oterator" "匹配这些操作数")。有人知道为什么这在内核内不起作用吗?我认为这可能与它是 host 函数或类似的事实有关,尽管我不知道如何解决这个问题。

问候,预先感谢。

您不能在设备代码中使用STL ...您将不得不使用数组或其他CUDA构造(例如推力库)。