#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++ ベクトル加算プログラムですが、インデックスを追加するときに「+」をどう処理するかわからないためコンパイルされません (「これらのオペランドに一致する演算子「+」はありません」)。これがカーネル内で機能しない理由を知っている人はいますか? その問題を回避する方法はわかりませんが、それがホスト関数またはそのようなものであるという事実に関係している可能性があると思います。
よろしくお願いします。