Question

Je souhaite compiler un programme Cuda de niveau mondial Hello très basique sous Linux. J'ai trois fichiers:

  • le noyau: helloWorld.cu
  • méthode principale: helloWorld.cpp
  • en-tête commun: helloWorld.h

Pourriez-vous m'écrire un Makefile simple pour le compiler avec nvcc et g ++?

Merci,
Gabor

Était-ce utile?

La solution

Juste au cas où, voici ma variante. Je l’utilise pour compiler des projets CUDA sur Mac, mais je pense que cela conviendra également à Linux. CUDA SDK est nécessaire.

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

Autres conseils

Je n'ai jamais entendu parler de Cuda auparavant, mais d'après la documentation en ligne, il semble que X.cu soit censé être compilé dans X.o. Il n'est donc pas judicieux d'avoir helloWorld.cu et helloWorld.cpp. Avec votre permission, je renommerai le & Quot; noyau & Quot; helloKernel.cu, cela devrait alors fonctionner:

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

(Notez que ces espaces sont des tabulations.)

Si cela fonctionne, essayez une version plus astucieuse:

NVCC = nvcc

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

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

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

Ma version, commentée mais transparente:

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

Voici un exemple de mon projet actuel. Comme vous pouvez le constater, il existe quelques bibliothèques 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

puis exécutez make ce et ./ce

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top