2009-10-22 5 views
10

Linux에서 아주 기본적인 안녕하세요 세계 수준의 Cuda 프로그램을 컴파일하고 싶습니다. 리눅스에서 Cuda 컴파일을위한 매우 간단한 Makefile을 만들려면 어떻게해야합니까?

당신이 컴파일 나에게 간단한 Makefile을 쓸 수 helloWorld.h :

  • 커널 : helloWorld.cu
  • 주요 방법 : helloWorld.cpp
  • 일반적인 헤더 나는 세 개의 파일이 이 nvcc 및 g ++ 함께?

    감사합니다,
    가보

+0

하십시오 make ce./ce을 실행 [확인] 태그와 함께 메이크업 관련 질문에 태그를 몇 가지의 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 

있다. 이론적 설명 : http://meta.stackexchange.com/questions/24030/why-do-they-specify-makefile-tag-instead-of-make/26567#26567 –

답변

4

내 변형입니다. 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 
+0

Hrmm 내가 사용하지 않는 이상한 cutil.h를 찾습니다. – Nils

+1

이 게시물의 나이는 알지만이 정보는 CUDA <5.x로 작업하기 시작하는 사람들에게 유용 할 수 있습니다. 사실, 허용 된 대답은 cutil 의존성을 "-lcutil"로 잡아 당기는 common.mk 파일에 의존합니다. 아무리해도 CUDA> = 5.x의 경우 common.mk의 사용은 더 이상 필요하지 않습니다/모든 Makefile이 자체 포함 된 것으로 (Changelog) – Shadow

8

는 내가 전에 CUDA는 들어 본 적이 있지만, X.cu가 너무 helloWorld.cu 및 인 helloWorld를 가지고, XO로 컴파일하도록되어있는 것처럼 온라인 문서에서 보인다. cpp는 좋은 생각이 아닙니다. 내가 "커널"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] 

(. 그 선행 공백이 탭 참고)이 작동하는 경우

을, 야바위꾼 버전을 사용해 :

 
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] 
+0

일반 cpp 파일에서 nvcc를 사용할 수 있습니까? – teeks99

+0

nvcc에 액세스 할 수 없으므로 확실하지는 않지만 설명서에 따르면 예. 일반적인 컴파일러 작업의 경우 nvcc는 g ++와 같은 표준 컴파일러에 작업을 넘깁니다. – Beta

+0

@ teeks99 예, nvcc에 액세스 할 수 있으며 완벽하게 작동합니다. –

2

내 버전 : 여기

 
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 $< 
1

내 현재 프로젝트가 어떻게 생겼는지 예입니다. 당신이 볼 수 있듯이 다음,