2009-10-22 3 views
10

Linux上で非常に基本的なhelloワールドレベルのCudaプログラムをコンパイルしたいと思います。Linux上でのCudaコンパイルのような非常にシンプルなMakefileの外観

  • カーネル:helloWorld.cu
  • 主な方法:helloWorld.cpp
  • 共通ヘッダ:helloWorld.h

は、あなたがコンパイルする私に簡単なMakefileを書くことができ、私は3つのファイルを持っていますこれは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

は私が前にクーダ聞いたことがないが、X.cuはそうhelloWorld.cuとのhelloWorldを持つ、Xoをにコンパイルされることになっているかのようにオンラインドキュメントからそれが見えます。 cppは良い考えではありません。

 
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] 

(それらの先頭のスペースがタブであることに注意してください。)

をそれが動作する場合、スリッカーバージョンを試してみてください:あなたの許可を得て、私は、これは動作するはずです、「カーネル」helloKernel.cuの名前を変更します

 
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

は私の現在のプロジェクトがどのように見えるかの例です。あなたが見ることができるように、その後、

関連する問題