كيف ينبغي أن يبدو ملف Makefile البسيط جدًا لتجميع Cuda ضمن Linux

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

سؤال

أرغب في تجميع برنامج Cuda الأساسي للغاية على مستوى العالم لنظام التشغيل Linux.لدي ثلاثة ملفات:

  • النواة:helloWorld.cu
  • الطريقة الرئيسية:helloWorld.cpp
  • رأس مشترك:helloWorld.h

هل يمكن أن تكتب لي ملف Makefile بسيطًا لتجميعه باستخدام nvcc وg++؟

شكرًا،
جابور

هل كانت مفيدة؟

المحلول

فقط في حالة، هذا هو البديل الخاص بي.أستخدمه لتجميع مشاريع CUDA على نظام Mac، ولكن أعتقد أنه سيناسب 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 ليس فكرة جيدة.بعد إذنك، سأعيد تسمية "kernel" إلى 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