gpt4 book ai didi

c++ - 参数与相同类型的参数不兼容

转载 作者:行者123 更新时间:2023-11-28 00:02:54 24 4
gpt4 key购买 nike

我一直在练习编写 CUDA 代码并学习大规模并行编程背后的结构和理念。不管怎样,我遇到了一个我不太明白的问题。

代码如下:

#include <cuda_runtime.h>
#include <stdio.h>
#include <math.h>

__global__ void cudaTest(struct led* input[])
{
int ledNum = blockIdx.x * blockDim.x + threadIdx.x;
}

int main()
{
struct led
{
unsigned char red, green, blue;
};

struct led* input[1200];
struct led* dInput[1200];

cudaMalloc((void**)&dInput, sizeof(struct led) * 1200);
cudaMemcpy(dInput, input, sizeof(struct led) * 1200, cudaMemcpyHostToDevice);
cudaTest<<<4, 300>>>(dInput);
cudaMemcpy(input, dInput, sizeof(struct led) * 1200, cudaMemcpyDeviceToHost);
cudaDeviceSynchronize();
cudaFree(dInput);

printf("Input: %d", *input);

}

我遇到的问题是在编译程序时:

testCuda.cu(22): 错误:“led **”类型的参数与“led **”类型的参数不兼容

cudaTest<<<4, 300>>>(dInput);

出于显而易见的原因,我不明白这一点……它说本质上相同的东西与自身不兼容。

我不知道这是否是我为数组分配内存的方式、我初始化它的方式或其他方面的问题。非常感谢任何帮助。

编辑:仅在某些情况下,此代码没有应用程序,它是一个测试程序,我在将代码实现到我的项目中之前用来测试代码。这个程序的目标很简单,就是在GPU上为一个数组分配空间,传给GPU,调用内核,再传回来。

最佳答案

当编译器第一次在您的内核函数中遇到它作为参数类型时,它不知道您的 struct led 是什么。因此,您需要在使用它之前定义该结构类型,即使作为函数参数也是如此。您拥有的这种构造在普通 C 或 C++ 中无法正常工作,因此此处的基本概念并非特定于 CUDA。

此外,对于 dInput,我们不会为打算用作设备指针的指针创建主机分配。所以只需声明裸指针,然后在 cudaMalloc 中使用它来将设备分配附加到它。

试试这个,而不是你拥有的:

 #include <cuda_runtime.h>
#include <stdio.h>
#include <math.h>

struct led
{
unsigned char red, green, blue;
};

__global__ void cudaTest(led *input)
{
int ledNum = blockIdx.x * blockDim.x + threadIdx.x;
input[ledNum].red = 5;
}

int main()
{

led* input = new led[1200];
led* dInput;

cudaMalloc((void**)&dInput, sizeof(struct led) * 1200);
cudaMemcpy(dInput, input, sizeof(struct led) * 1200, cudaMemcpyHostToDevice);
cudaTest<<<4, 300>>>(dInput);
cudaMemcpy(input, dInput, sizeof(struct led) * 1200, cudaMemcpyDeviceToHost);
cudaDeviceSynchronize();
cudaFree(dInput);

printf("Input: %d", input[0].red);

}

关于c++ - 参数与相同类型的参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598353/

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