كيف ينبغي أن يبدو ملف Makefile البسيط جدًا لتجميع Cuda ضمن Linux
-
05-07-2019 - |
سؤال
أرغب في تجميع برنامج 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