引言
最近由于更换项目,服务器也被换走,估计一时半会用不到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 这三个指令,可以很方便的在指定目录下搜素、查找替换等操作,就避免了一个个文件名输入来说明编译关系。