Como deve um olhar muito simples Makefile como por Cuda compilação no Linux
-
05-07-2019 - |
Pergunta
Eu quero compilar um programa muito básico Cuda nível Olá mundo no Linux. Eu tenho três arquivos:
- o kernel: helloWorld.cu
- método principal: helloWorld.cpp
- cabeçalho comum: helloWorld.h
Você poderia me escrever um simples Makefile para compilar este com nvcc e g ++?
Obrigado,
Gabor
Solução
Apenas no caso, aqui está a minha variante. Eu usá-lo para compilar projetos CUDA no Mac, mas eu acho que irá atender Linux também. Ela exige 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
Outras dicas
Eu nunca ouvi falar de Cuda antes, mas a partir da documentação on-line parece que X.cu é suposto ser compilado em X.o, assim que ter helloWorld.cu e helloWorld.cpp não é uma boa idéia. Com sua permissão eu vou mudar o nome do "núcleo" helloKernel.cu, então isso deve funcionar:
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 $@
(Note que esses espaços à esquerda são guias.)
Se isto funcionar, tente uma versão mais lisa:
NVCC = nvcc helloWorld.o: %.o : %.cpp %.h helloKernel.o: %.o : %.cu %.o: $(NVCC) -c %< -o $@ helloWorld: helloWorld.o helloKernel.o $(NVCC) %^ -o $@
Minha versão, detalhado, mas transparente:
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 $<
Aqui está um exemplo que meus atuais olhares projeto como. Como você pode ver, há algumas bibliotecas 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
em seguida, executar
e ./ce