一个非常简单的Makefile应该是什么样子的,以便在linux下编译Cuda
-
05-07-2019 - |
题
我想在Linux下编译一个非常基本的hello world级别的Cuda程序。我有三个文件:
- 内核:你好世界.cu
- 主要方法:你好世界.cpp
- 通用标头:你好世界.h
你能给我写一个简单的 Makefile 来用 nvcc 和 g++ 编译它吗?
谢谢,
加博尔
解决方案
以防万一,这是我的变体。我用它在 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 并不是一个好主意。经您许可,我将重命名“内核”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