【发布时间】:2016-06-02 17:21:48
【问题描述】:
我一直在练习编写 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,调用内核,然后将其传回。
【问题讨论】:
-
抱歉,已删除标签。
-
是的,但我明白他在说什么,要理解这一点,您需要的不仅仅是 C 知识。
-
@Olaf 这不是
related到 C 吗?? -
@2501:因为 CUDA 不是 C,而是基于 C++。仔细阅读代码。
-
@WaffleMan0310:C 和 C++ 是不同的语言。 CUDA 是基于 C++ 的!