gpt4 book ai didi

CUDA内核参数不兼容

转载 作者:行者123 更新时间:2023-11-30 21:37:56 24 4
gpt4 key购买 nike

我不知道出了什么问题,我想将两个 vector 加在一起,但出现错误。我看了一些教程,但没有看到问题这是我的错误:

argument of type "int **" is incompatible with parameter of type "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;
}

最佳答案

编译器警告非常清楚。这:

int *d_a[arraySize];
int *d_b[arraySize];
int *d_c[arraySize];

是不正确的,而且几乎肯定不是您想要的。您已将 d_ad_bd_c 声明为指针数组,这与内核声明冲突(并且没有什么意义,因为看起来您只需要一个指针来表示 abc 的设备版本。

我怀疑你的意思实际上是

int *d_a;
int *d_b;
int *d_c;

如果您进行更改,代码可能应该可以编译。

关于CUDA内核参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24081819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com