Linux에서 Cuda 컴파일을 위해 매우 간단한 Makefile이 어떻게 생겼습니까?
-
05-07-2019 - |
문제
Linux에서 매우 기본적인 Hello World Level Cuda 프로그램을 컴파일하고 싶습니다. 세 가지 파일이 있습니다.
- 커널 : helloworld.cu
- 주요 방법 : helloworld.cpp
- 공통 헤더 : Helloorld.h
NVCC 및 G ++로 이것을 컴파일하기 위해 간단한 makefile을 작성해 주시겠습니까?
감사,
가버
해결책
만일 경우, 여기 내 변형이 있습니다. Mac에서 Cuda 프로젝트를 컴파일하는 데 사용하지만 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가 XO로 컴파일되는 것처럼 보이므로 Helloworld.cu 및 HelloWorld.cpp를 갖는 것은 좋은 생각이 아닙니다. 귀하의 권한을 사용하면 "Kernel"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 $@
(주요 공간은 탭입니다.)
그것이 작동하면 더 얇은 버전을 시도하십시오.
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
제휴하지 않습니다 StackOverflow