Domanda

Voglio compilare un programma Cuda di livello mondiale ciao di base su Linux. Ho tre file:

  • il kernel: helloWorld.cu
  • metodo principale: helloWorld.cpp
  • intestazione comune: helloWorld.h

Potresti scrivermi un semplice Makefile per compilarlo con nvcc e g ++?

Grazie,
Gabor

È stato utile?

Soluzione

Per ogni evenienza, ecco la mia variante. Lo uso per compilare progetti CUDA su Mac, ma penso che si adatta anche a Linux. Richiede 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

Altri suggerimenti

Non ho mai sentito parlare di Cuda prima, ma dalla documentazione online sembra che X.cu dovrebbe essere compilato in X.o, quindi avere helloWorld.cu e helloWorld.cpp non è una buona idea. Con il tuo permesso, rinominerò & Quot; kernel & Quot; helloKernel.cu, quindi dovrebbe funzionare:

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

(Nota che quegli spazi iniziali sono delle schede.)

Se funziona, prova una versione slicker:

NVCC = nvcc

helloWorld.o: %.o : %.cpp %.h
helloKernel.o: %.o : %.cu

%.o:
    $(NVCC) -c %< -o $@

helloWorld: helloWorld.o helloKernel.o
    $(NVCC) %^ -o $@

La mia versione, dettagliata ma trasparente:

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

Ecco un esempio di come appare il mio progetto attuale. Come puoi vedere ci sono alcune librerie 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

quindi esegui make ce e ./ce

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top