gpt4 book ai didi

无法将内核的原型(prototype)放在 header 中

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:23 30 4
gpt4 key购买 nike

io.cuh:

#ifndef IO_CUH
#define IO_CUH

#include <cuda.h>

typedef struct{
unsigned width;
unsigned height;
unsigned char *image; //RGBA
}rgb_image;

__global__ void transformToGrayKernel(rgb_image *img);
void decodeTwoSteps(const char* filename, rgb_image *img);
void encodeOneStep(const char* filename, rgb_image *img);
void processImage(const char *filename, rgb_image *img);

#endif // IO_CUH

我正在尝试使用以下 makefile 编译简单的程序:

lodepng.o: lodepng.h
cc -c lodepng.c -o lodepng.o
io.o: io.cuh lodepng.o
nvcc -c io.cu -o io.o
main: io.o
nvcc main.c io.o -o main

'main.c' 使用 io.cu 中的一个函数,它依赖于 lodepng.c。

在一些引用代码的小警告之后,我得到了以下错误:

nvcc main.c io.o -o main nvcc warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. In file included from main.c:1:0: io.cuh:12:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘void’ global void transformToGrayKernel(rgb_image *img); ^ makefile:6: recipe for target 'main' failed make: *** [main] Error 1

最佳答案

错误是由关键字__global__引起的,而不是你内核的原型(prototype)。

那是因为编译器nvcc会解释它的输入文件,并选择相应的规则来编译它。虽然您使用 nvcc 来编译“main.c”,但它会被视为 C 源文件,而不是 CUDA 源代码。所以编译器在编译文件“main.c”时无法识别CUDA关键字__global__

您可以将文件类型从“main.c”更改为“main.cu”,它将被视为 CUDA 源代码。然后编译器可以识别关键字__global__

关于无法将内核的原型(prototype)放在 header 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867956/

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