#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/