10

我想在 Linux 下编译一个非常基本的 hello world 级别的 Cuda 程序。我有三个文件:

  • 内核:helloWorld.cu
  • 主要方法:helloWorld.cpp
  • 通用头文件:helloWorld.h

你能给我写一个简单的 Makefile 来用 nvcc 和 g++ 编译它吗?

谢谢,
加博尔

4

4 回答 4

8

我以前从未听说过 Cuda,但从在线文档看来,X.cu 似乎应该被编译成 Xo,因此拥有 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 $@
于 2009-10-22T18:31:05.140 回答
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
于 2009-11-13T06:26:01.907 回答
2

我的版本,详细但透明:

我的应用程序: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/包括\
    -DUNIX -O2 -o $@ -c $<

矩阵Mul:矩阵Mul.o
    g++ -fPIC -o $@ $< -L /usr/local/cuda/lib -lcudart

# 必须命名为 .cu 或 nvcc 编译为常规 C !!!(没有__global__)
矩阵Mul.o:矩阵Mul.cu
    /usr/local/cuda/bin/nvcc --compiler-options -fno-strict-aliasing \
    -I/usr/local/cuda/包括\
    -DUNIX -O2 -o $@ -c $<
于 2010-01-09T17:59:36.237 回答
1

这是我当前项目的示例。如您所见,有一些 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

于 2012-05-03T18:26:21.113 回答