我不知道出了什么问题,我想把两个向量加在一起,但是我得到了一个错误。 我查看了一些教程,但我没有看到问题 这是我的错误:
类型的参数" int **"与" int *"
类型的参数不兼容
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void addKernel(int* c, int* a, int* b)
{
int i = threadIdx.x;
c[i] = a[i] + b[i];
}
int main()
{
const int arraySize = 5;
int a[arraySize] = { 1, 2, 3, 4, 5 };
int b[arraySize] = { 10, 20, 30, 40, 50 };
int c[arraySize] = { 0 };
int *d_a[arraySize];
int *d_b[arraySize];
int *d_c[arraySize];
cudaMalloc((void **)&d_a, arraySize*sizeof(int));
cudaMalloc((void **)&d_b, arraySize*sizeof(int));
cudaMalloc((void **)&d_c, arraySize*sizeof(int));
cudaMemcpy(d_a, a, arraySize*sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, arraySize*sizeof(int), cudaMemcpyHostToDevice);
dim3 block(5, 1, 1);
dim3 grid(1, 1, 1);
addKernel<<<block,grid>>>(d_c, d_a, d_b);
cudaMemcpy(c, d_c, arraySize*sizeof(int), cudaMemcpyDeviceToHost);
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
printf("{1,2,3,4,5} + {10,20,30,40,50} = {%d,%d,%d,%d,%d}\n",
c[0], c[1], c[2], c[3], c[4]);
getchar();
return 0;
}
答案 0 :(得分:1)
编译器警告非常清楚。这样:
int *d_a[arraySize];
int *d_b[arraySize];
int *d_c[arraySize];
不正确,几乎肯定不是你想要的。您已声明d_a
,d_b
和d_c
中的每一个都是指针数组,这与内核声明冲突(并且没什么意义,因为它看起来像对于a
,b
和c
的设备版本,您只需要一个指针。
我怀疑你的意思实际上是
int *d_a;
int *d_b;
int *d_c;
如果进行了更改,代码应该可以编译。