Как должен выглядеть очень простой Makefile для компиляции Cuda под linux
Я хочу скомпилировать очень базовую программу hello world level Cuda под Linux. У меня три файла:
- ядра: файл HelloWorld.КР
- основной метод: helloWorld.cpp
- общий заголовок: helloWorld.h
не могли бы вы написать мне простой Makefile для компиляции этого с nvcc и g++?
спасибо,
Габор!--1-->
4 ответов
на всякий случай, вот мой вариант. Я использую его для компиляции проектов CUDA на Mac, но я думаю, что он также подойдет Linux. Для этого требуется CUDA SDK.
BINDIR = ./ # places compiled binary in current directory
EXECUTABLE := helloWorld
CCFILES := helloWorld.cpp
CUFILES := helloWorld.cu
# an ugly part - setting rootdir for CUDA SDK makefile
# look for common.mk - I don't know where SDK installs it on Linux -
# and change ROOTDIR accordingly
ROOTDIR := /Developer/GPU\ Computing/C/common
include $(ROOTDIR)/../common/common.mk
Я никогда раньше не слышал о Cuda, но из онлайн-документации похоже, что X. cu должен быть скомпилирован в X. o, поэтому имеет helloWorld.ку и адский мир.cpp-не очень хорошая идея. С вашего разрешения я переименую "ядро" helloKernel.cu, тогда это должно сработать:
NVCC = nvcc helloWorld.o: helloWorld.cpp helloWorld.h $(NVCC) -c %< -o $@ helloKernel.o: helloKernel.cu $(NVCC) -c %< -o $@ helloWorld: helloWorld.o helloKernel.o $(NVCC) %^ -o $@
(обратите внимание, что эти ведущие пробелы являются вкладками.)
Если это работает, попробуйте версию slicker:
NVCC = nvcc helloWorld.o: %.o : %.cpp %.h helloKernel.o: %.o : %.cu %.o: $(NVCC) -c %< -o $@ helloWorld: helloWorld.o helloKernel.o $(NVCC) %^ -o $@
моя версия, многословная, но прозрачная:
myapp: myapp.o g++ -fPIC -o $@ $< -L /usr/local/cuda/lib -lcudart myapp.o: myapp.cu /usr/local/cuda/bin/nvcc --compiler-options -fno-strict-aliasing \ -I/usr/local/cuda/include \ -DUNIX -O2 -o $@ -c $< matrixMul: matrixMul.o g++ -fPIC -o $@ $< -L /usr/local/cuda/lib -lcudart # It MUST be named .cu or nvcc compiles as regular C !!! (no __global__) matrixMul.o: matrixMul.cu /usr/local/cuda/bin/nvcc --compiler-options -fno-strict-aliasing \ -I/usr/local/cuda/include \ -DUNIX -O2 -o $@ -c $<
вот пример того, как выглядит мой текущий проект. Как вы можете видеть, есть несколько библиотек OpenGL
ce : cudaExample.c cudaExample.h
cp cudaExample.c cudaExample.cu
/usr/local/cuda/bin/nvcc -arch=sm_20 -o ce -lglut -lGL -lGLU -lXext -lXmu -lX11 -lm cudaExample.cu
выполнить make ce
и ./ce