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)
``
<strong>
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).
</strong>
Folgende Bibliotheken/Pakete sind zudem nötig:
<ol>
<li>OpenCV: libcv-dev</li>
<li>libhighgui-dev</li>
<li>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)</li>
</ol>
Nach dem ihr "make" erfolgreich ausgeführt habt, könnt ihr folgende Programme in der Konsole ausführen:
<ul>
<li>./test01</li>
<li>./test02_spatialDerivs (Aufruf mit einem Bild als Parameter)</li>
<li>./test03_gaussianPyramid (Aufruf mit einem Bild als Parameter)</li>
<li>./test04_opticalFlow</li>
</ul>
"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