#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++ 向量加法程序,虽然它不会编译,因为它不知道在添加索引时如何处理“+”(“无运算符”+“匹配这些操作数”)。任何人都知道为什么这在内核中不起作用?我认为这可能与它是一个主机功能或类似的东西有关,尽管我不知道如何解决这个问题。
提前问候和感谢。