cuda / cpp程序

时间:2017-12-17 11:59:29

标签: c++ makefile cuda

这是我第一次尝试创建一个makefile(这是一个学生项目)。 首先,我有两个不同的来源: - 在src文件夹中的convolve.cu和main.cpp。 一个cuda标题: - 在include文件夹中的convolve.cuh。 我为futur .o

创建了一个obj文件夹

现在我提供每个文件的部分内容:

main.cpp:

#include "CImg.h"
#include "../include/convolve.cuh"
using namespace cimg_library;

int main(){
CImg<float> var1("/*path*/");
CImg<float> var2("/*path2*/");
convolve(&var1,&var2);
//some code
}

convolve.cu:

#include "CImg.h"
#include "cuda.h"
using namespace cimg_library;

__constant__ filter[N][M];
__global__ void kernel(/*some arg*/){
//some code
}

__host__ void convolve(/*some arg*/){
//some code
}

convolve.cuh:

#ifndef CONVOLVE_H
#define CONVOLVE_H
#define N /*value*/
#define M /*value*/

extern __constant__ filter[N][M];
extern __host__ void convolve(CImg<float>&,const CImg<float>&);
extern __global__ void kernel(/*some arg*/);
#endif //CONVOLVE_H

cuda.h不在默认路径中,但是在以下路径中: /usr/local/cuda-9.0/include 并需要这些库:-lX11 -lpthread -lcudart 位于那里:/usr/local/cuda-9.0/lib64

通过阅读互联网上的一些讲座,我通过这个makefile,我把它放在main.cpp旁边的src文件夹中:

makefile:

1 CC=nvcc
2 IDIR =../include
3 special_IDIR = /usr/local/cuda-9.0/include
4 LDIR = /usr/local/cuda-9.0/lib64
5 CFLAGS=-I$(special_IDIR) -L$(LDIR)
6 
7 LIBS = -lX11 -lpthread -lcudart
8 ODIR = ../obj
9 
10 
11 _DEPS = convolve.cuh
12 DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
13 
14 _OBJ = main.o convolve.o
15 OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
16 
17 $(ODIR)/%.o: %.cpp
18         $(CC) -c -o $@ $< $(CFLAGS)
19 
20 $(ODIR)/%.o: %.cu $(DEPS)
21         $(CC) -c -o $@ $< $(CFLAGS)
22 
23 all: $(OBJ)
24         $(CC) -o $@ $^ $(CFLAGS) $(LIBS)
25 
26 
27 .PHONY: clean
28 
29 clean:
30         rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 

当我致电make all时,我遇到了两种不同的错误。 一个来自我如何编译&#34; cuda代码&#34; :error: ‘__host__’ does not name a type并为__global____constant__个实例带来同样的问题。 当我使用nvcc编译器时,在编译期间不应该知道那些定义?我必须误解如何编译cuda内核...

第二个错误告诉我../obj/main.o目标没有规则,all是必需的。 我没有找到问题。根据我现在所理解的,这条规则不应该用以下那些线来做? :

17 $(ODIR)/%.o: %.cpp $(DEPS)
18         $(CC) -c -o $@ $< $(CFLAGS)

谢谢你的时间!

编辑:我想我发现了第一个错误的来源,但不知道如何纠正错误。 在我的main.cpp文件中,我致电convolve.cuh,其中包含__global__等等。我用-c选项编译它。但是,如果我尝试使用-x cu选项,那么我遇到了一些CImg声明的问题(例如var1和var2)我进入main.cpp并且__global__没有问题等等。事情。

0 个答案:

没有答案