LinuxでのCudaコンパイルでは、非常にシンプルなMakefileはどのように見えるべきですか

StackOverflow https://stackoverflow.com/questions/1607015

質問

Linuxで非常に基本的なhello worldレベルのCudaプログラムをコンパイルします。 3つのファイルがあります:

  • カーネル:helloWorld.cu
  • mainメソッド:helloWorld.cpp
  • 共通ヘッダー:helloWorld.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がX.oにコンパイルされることになっているように見えるので、helloWorld.cuとhelloWorld.cppを持つことは良い考えではありません。あなたの許可を得て、<!> quot; kernel <!> quot;の名前を変更します。 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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top