CUDABOF unter Ubuntu 10.04 32 bit
There was a time, when I shared a blog. This post was written by Stephan. See all blogpost from him or stalk him on github.
Das Open Source Projekt OpenVIDIA : Parallel GPU Computer Vision beschäftigt sich mit Nvidias CUDA-Technology und Computer Vision. U.a gibt es die Beispielanwendung “CUDABOF” (CUDA Bayesian Real-time Optical Flow), in der es um Bewegungserkennung geht (mehr über die Theorie könnt ihr hier erfahren). Die CUDA-GPU soll dabei die Bewegungsberechnungen unterstützen.
Das Programm konnte mit der gegebenen Makefile aber nicht erfolgreich kompiliert werden. Darum gibt es hier eine angepasste Makefile für ein 32Bit System:
``` ###
Configuration
###
NVIDIA_INSTAL_DIR=$(HOME)/NVIDIA_GPU_Computing_SDK/C CUDA_BASE=/usr/local/cuda
###
You shouldn’t have to change down from here
###
INCLUDE:= -I.
-I/usr/local/cuda/include
-I$(NVIDIA_INSTAL_DIR)/common/inc/
-I$(CUDA_BASE)/include
CXXFLAGS= -fno-strict-aliasing -DUNIX -O0 -ggdb $(shell pkg-config –cflags opencv)
LDFLAGS= -L$(NVIDIA_INSTAL_DIR)/lib
-L$(NVIDIA_INSTAL_DIR)/common/lib
-L$(NVIDIA_INSTAL_DIR)
-L$(CUDA_BASE)/lib
-lcutil_i386 -lcudart -lGL -lGLU -lglut -lGLEW
$(shell pkg-config –libs opencv) \
NVCCFLAGS = –compile –host-compilation ‘C++’
–compiler-options -fno-strict-aliasing
–compiler-options -ggdb $(INCLUDE)
–compiler-bindir=/usr/bin/gcc-4.3
EXEC = test01
test02_spatialDerivs
test03_gaussianPyramid
test04_opticalFlow
all: $(EXEC)
VERBOSITY:=@ ECHO_COMPILING=@echo “compiling $@”
###### #
COMPILATION OF OBJECT FILES
# ######
%.o: %.cu %.hpp CUDABOF.hpp $(ECHO_COMPILING) $(VERBOSITY)nvcc $(NVCCFLAGS) $<
%.o: %.cpp *.hpp $(ECHO_COMPILING) $(VERBOSITY)g++ -c $< $(INCLUDE) $(CXXFLAGS)
###### #
TESTS
# ######
TEST_BUILD_RULE= $(VERBOSITY)g++ -fPIC -o $@ $^ $(LDFLAGS)
test01: test01_kernel.o test01.o Utils.o MathUtils.o $(ECHO_COMPILING) $(TEST_BUILD_RULE)
test02_spatialDerivs: test02_spatialDerivs.o Utils.o MathUtils.o BayesianOpticalFlowKernels.o $(ECHO_COMPILING) $(TEST_BUILD_RULE)
test03_gaussianPyramid: test03_gaussianPyramid.o Utils.o MathUtils.o GaussianPyramidKernel.o $(ECHO_COMPILING) $(TEST_BUILD_RULE)
test04_opticalFlow: test04_opticalFlow.o Utils.o MathUtils.o OpticalFlow.o BayesianOpticalFlowKernels.o GaussianPyramidKernel.o $(ECHO_COMPILING) $(TEST_BUILD_RULE)
###### #
TESTS
# ###### clean: rm -f *.o $(EXEC) ``
Anmerkung: Falls ihr bei der CUDA-Installation abweichende Pfade genommen habt (vor allem beim CUDA-SDK, das standardmäßig im Home-Ordner des Nutzers installiert wird), müsst ihr die Pfade natürlich anpassen (über die Variablen NVIDIA_INSTAL_DIR und CUDA_BASE am Anfang der Datei).
Folgende Bibliotheken/Pakete sind zudem nötig:
- OpenCV: libcv-dev
- libhighgui-dev
- Compiler g++ und gcc in Version 4.3 (mit Version 4.4 lässt sich dieses Programm und die Nvidia-Bespiele zu Cuda nicht kompilieren)
Nach dem ihr “make” erfolgreich ausgeführt habt, könnt ihr folgende Programme in der Konsole ausführen:
- ./test01
- ./test02_spatialDerivs (Aufruf mit einem Bild als Parameter)
- ./test03_gaussianPyramid (Aufruf mit einem Bild als Parameter)
- ./test04_opticalFlow
“test04_opticalFlow” verwendet bei der Bewegungsvorhersage die GPU und erzeugt auf meinem Laptop so nur 80 Prozent CPU-Auslastung (zum Start des Programms muss eine Webcam/Videokamera angeschlossen sein, die von OpenCV erkannt wird).
Bei Problemen mit der neuen Datei hilft es vielleicht, die originale Makefile mit der angepassten zu vergleichen.
Viele Grüße
Stephan
