Как должен выглядеть очень простой Makefile для компиляции Cuda под Linux?
Я хочу скомпилировать очень базовую программу Cuda на мировом уровне под Linux. У меня есть три файла:
- Ядро: helloWorld.cu
- Основной метод: helloWorld.cpp
- общий заголовок: helloWorld.h
Не могли бы вы написать мне простой Makefile для компиляции с помощью nvcc и g++?
Спасибо,
Габор
Ответы
Ответ 1
На всякий случай, вот мой вариант. Я использую его для компиляции проектов CUDA на Mac, но я думаю, что это тоже подойдет Linux. Для этого требуется SDK CUDA.
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
Ответ 2
Я никогда не слышал о Cuda раньше, но из онлайн-документации кажется, что X.cu предполагается скомпилировать в X.o, поэтому helloWorld.cu и helloWorld.cpp не очень хорошая идея. С вашего разрешения я переименую "kernel" helloKernel.cu, тогда это должно работать:
NVCC = nvcc
helloWorld.o: helloWorld.cpp helloWorld.h
$(NVCC) -c %< -o [email protected]
helloKernel.o: helloKernel.cu
$(NVCC) -c %< -o [email protected]
helloWorld: helloWorld.o helloKernel.o
$(NVCC) %^ -o [email protected]
(Обратите внимание, что эти ведущие пробелы являются вкладками.)
Если это работает, попробуйте версию slicker:
NVCC = nvcc
helloWorld.o: %.o : %.cpp %.h
helloKernel.o: %.o : %.cu
%.o:
$(NVCC) -c %< -o [email protected]
helloWorld: helloWorld.o helloKernel.o
$(NVCC) %^ -o [email protected]
Ответ 3
Моя версия, многословная, но прозрачная:
myapp: myapp.o
g++ -fPIC -o [email protected] $< -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 [email protected] -c $<
matrixMul: matrixMul.o
g++ -fPIC -o [email protected] $< -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 [email protected] -c $<
Ответ 4
Вот пример, как выглядит мой текущий проект. Как вы можете видеть, существует несколько библиотек 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