关于GPU的 MAKEFILE
引言
最近由于更换项目,服务器也被换走,估计一时半会用不到GPU了,因此最近想把前一段时间做的一些工作,整理记录一下。
实验室采用的GPU有两款:
1. 服务器上的板卡:NVIDIA的Tesla K20C
2. 嵌入式开发板: 丽台代工的Tegra K1
软件环境为 RHEL6.5 Linux系统 + CUDA 6.5
首先,附上自己写的一个MAKELIFE文件
MAKEFILE
#Location of the CUDA Toolkit
CUDA_PATH ?= "/usr/local/cuda-6.5"
GCC ?= g++
NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(GCC)
#internal flags
NVCCFLAGS := -m64 #64位机器
NVCCFLAGS += -g -G -lfftw3f
# -G 是加调试
# -lfftw3f 是加fftw3f的库
CCFLAGS := $(NVCCFLAGS) -Xcompiler -fopenmp
LDFLAGS := $(CCFLAGS) -lcudart -L /usr/local/cuda-6.5/lib64/
#Common includes and paths for CUDA
INCLUDES := -I /usr/local/cuda-6.5/samples/common/inc -I /usr/local/cuda-6.5/include
LIBRARIES := -lcudadevrt -lcufft_static-lculibos
CUDACCFLAGS := -shared -Xcompiler -fPIC
#####################################################################################
target = object
#源文件
src-cpp = $(wildcard ./src/*.cpp)
src-cu = $(wildcard ./src/*.cu)
#wildcard 是在某个目录下查找
src-cpp-nodir = $(notdir $(src-cpp))
src-cu-nodir = $(notdir $(src-cu))
#notdir 是在查找返回的文件里去除目录的信息
objs-cpp-o = $(patsubst %.cpp, %.o, $(src-cpp-nodir))
objs-cu-o = $(patsubst %.cu, %.o, $(src-cu-nodir))
objs-o = $(objs-cu-o)$(objs-cpp-o)
#patsubst 是替换
#Target rules
all : $(target)
$(objs-cu-o) : $(src-cu)
$(EXEC)$(NVCC)$(INCLUDES)$(CCFLAGS) -c $(src-cu)
$(target) : $(objs-o)
$(NVCC) -o $(target)$(objs-o)$(LDFLAGS)$(LIBRARIES)
clean:
rm -f $(target)$(objs-o)
本MAKEFILE,用于在Linux系统中,定义整个工程的编译规则。
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,MAKEFILE定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为MAKEFILE就像一个Shell脚本一样,其中也可以执行操作系统的命令。
巧妙的利用wildcard notdir parsubst 这三个指令,可以很方便的在指定目录下搜素、查找替换等操作,就避免了一个个文件名输入来说明编译关系。

浙公网安备 33010602011771号