• No results found

PART A – Basic Messages

6. BASIC PROCEDURE

6.3 Activate Message (ACT)

Sistema operativo y entorno de desarrollo

La biblioteca CUDA de tiempo de ejecuci´on y el entorno de desarrollo de software (SDK1)

est´an disponibles para correr en computadoras basadas en sistemas operativos Linux, OSX o Windows que soporten controladores NVIDIA. Durante todo el proyecto de desarrollo e implementaci´on de la CVA, se utiliz´o CUDA configurado para Linux.

Las configuraciones de Linux usadas para el desarrollo de todos los programas, y para correr los programas CUDA, todos se basan en versi´on de 64-bit (Intel 64) del kernel Linux v2.6.32 del conjunto de herramientas GNU. El conjunto de herramientas GNU consiste de una colleci´on de compilador GNU (GCC), para hacer programas para compilado automatico y enlace, el depurador GNU (GDB) para depurar, y otras herramientas asociadas. Para desarrollo de CUDA, se us´o la versi´on 4.0 del juego de herramientas CUDA. Este juego de herramientas consiste de un compilador, incluye cabeceras para los archivos fuentes, la biblioteca enlazable en tiempo de ejecuci´on, un depurador, y herramientas asociadas.

Compilador

El compilador NVIDIA C (nvcc) trabajo de forma muy similar al compilador GCC C/C++ (g++). Los archivos fuente contienen tanto c´odigo hu´esped y c´odigo dispositivo, el compi- lador hace la doble funci´on, compilar c´odigo hu´esped y dispositivo separadamente (Sanders y Kandrot, 2010), combinando ambos junto a la biblioteca CUDA de tiempo de ejecuci´on, en binarios simples. Por lo tanto la necesidad del compilador C. Para los programas secuenciales

1

sin CUDA, se utiliza solamente el compiladorgccgcc. Se hace notar que al especificar arqui- tectura 32 o 64-bit (por defecto) al compiladornvcc, se aplica tanto para c´odigo hu´esped como para c´odigo dispositivo. Esto se hace por razones de compatibilidad, una de las cuales es la habilidad de almacenar apuntadores. Para las sesiones de depuraci´on se utiliz´o el par´ametro -g (para hu´esped) y -G (para dispositivo). Dado que la capacidad de c´omputo CUDA de- termina si alguna funcionalidad se soporta, el compilador nvcc acepta un par´ametro que define la arquitectura. El par´ametro -arch sm 20 se usa para indicar que el c´odigo utiliza funcionalidad soportada a partir de la arquitectura 2.0.

Como nota, el compilador nvcc tiene algunos par´ametros interesantes para optimizaci´on autom´atica usando instrucciones CUDA m´as r´apidas. El par´ametro -prec-sqrt para un caso especifico, puede ser verdadero o falso para aproximaciones m´as r´apidas al calcular ra´ız cuadrada. Los par´ametros -use fast math permite eso, y muchas otras aproximaciones m´as rapidas. El par´ametro -maxrregcount puede ser usado para controlar los registros m´aximos que una funci´on kernel GPU puede usar, lo cual al incrementarse puede aumentar el desempe˜no por hilo, pero a la vez limita la cantidad de hilos por bloque.

Depuraci´on

La depuraci´on fue hecha usando cuda-gdb, el cual es una versi´on extendida de GDB para soportar programas de GPU, as´ı como para depurar c´odigo CPU. La depuraci´on de hilos CUDA es una experiencia diferente que la depuraci´on de programas multi-hilos CPU, pues no todos los hilos pueden sobrevivir cuando ocurre el error o se detiene en un punto de alto especificado. Por otro lado, al fallar la llamada a funciones kernel o a funciones de tiempo de ejecuci´on CUDA, pueden haber fallado debido a errores en el lanzamiento de funciones kernelanteriores. Errores de este tipo ocurrieron durante este proyecto de tesis, en su mayor´ıa causados por condiciones de anticipaci´on o direcci´on incorrecta de memoria. Para estos casos se us´o primero el programa cuda-memcheck para determinar cual kernel, cual bloque y cual hilo caus´o el problema, o para verificar que el error no permaneci´o.

Recursos de hardware

La computadora que se utiliz´o para el desarrollo y pruebas de los programas secuenciales y paralelos, es parte del laboratorio de Evovisi´on, del departamento de ciencias de la com- putaci´on, del Centro de Investigaci´on Cient´ıfica y Educaci´on Superior de Ensenada (CI- CESE). La computadora es una estaci´on de trabajoPrecision T7600 de Dell. Esta cuenta con 8 n´ucleos Xeon de Intel y 8 gigabytes de memoria RAM. Tiene una tarjeta gr´afica Quadro 4000 de NVIDIA, compatible con CUDA, con capacidad de computo de v2.0. La versi´on implementada de la CVA en C y CUDA, fueron ´unicamente probadas en la computadora mencionada.

Ap´endice B. Biblioteca OpenCV

OpenCV es una biblioteca de funciones de programaci´on dirigida principalmente a la visi´on por computadora en tiempo real, desarrollado por Intel, y ahora con el apoyo de Willow Garage e Itseez. Es gratuito para uso bajo la licencia BSD1 de codigo abierto. La biblioteca

esta escrita en C y C++ corre bajo Linux, Windows y Mac OS X. Existe un desarrollo activo en interfaces para Python, Ruby, Matlab, y otros lenguajes de programaci´on. OpenCV fue dise˜nado para ser eficiente computacionalmente, y tener un enfoque mayor en aplicaciones en tiempo real. Se escribi´o en C optimizado, y puede tomar ventaja de procesadores multi- n´ucleo. De hecho, si se desea una optimizaci´on autom´atica en arquitecturas Intel, se puede comprar la biblioteca IPP2 de Intel, la cual consiste en rutinas optimizadas de bajo nivel en

muchas diferentes ´areas algor´ıtmicas.

Una de las metas de OpenCV es proporcionar una infraestructura de visi´on por com- putadora f´acil de usar, que ayude a la gente, a desarrollar aplicaciones de visi´on bastante complicadas r´apidamente. La biblioteca OpenCV contiene mas de 500 funciones que abarcan muchas areas en vision, incluyendo inspecci´on de productos de fabrica, im´agenes medicas, seguridad, interfaz de usuario, calibraci´on de c´amara, visi´on est´ereo, y rob´otica. Al ir de la mano com´unmente la visi´on por computadora y aprendizaje maquina, OpenCV tambi´en contiene por completo, una biblioteca de aprendizaje maquina de pr´oposito general.

La primera version alfa de OpenCV fue lanzado al p´ublico en la Conferencia IEEE sobre vision por computador y reconocimiento de patrones en 2000, y cinco betas fueron puestos en libertad entre 2001 y 2005 - La primera version 1.0 fue lanzado en 2006 - A mediados de 2008, obtuvo OpenCV apoyo corporativo de Willow Garage, y ahora de nuevo bajo desarrollo activo. Una version 1.1 ´pre-lanzamiento´, fue lanzado en octubre de 2008.La segunda version del OpenCV fue en octubre de 2009 - OpenCV 2 incluye importantes cambios en la interfaz C++, el objetivo de los patrones mas facil, mas con seguridad de tipos, nuevas funciones y mejores implementaciones de los existentes en t´erminos de rendimiento. Versiones oficiales ocurren ahora cada seis meses y el desarrollo se hace ahora por un equipo independiente de

1

Del ingles Berkeley Software Distribution 2

Rusia con el apoyo de las empresas comerciales.En agosto de 2012, el apoyo a OpenCV fue adquirida por una fundaci´on sin fines de lucro, OpenCV.org, que mantiene un desarrollador y usuario del sitio.

Entre las ´areas de aplicaci´on de OpenCV est´an:

• Sistema de reconocimiento facial • El reconocimiento de gestos • Rob´otica m´ovil

• Identificaci´on de objetos

• Segmentaci´on y reconocimiento

• Stereopsis visi´on est´ereo: la percepci´on de profundidad de 2 c´amaras • Estructura del movimiento

• El seguimiento del movimiento • La realidad aumentada

OpenCV esta escrito en C++ y su interfaz principal se encuentra en C++, pero a ˜Aon

conserva una extensa interfaz aunque menos completa de C. En la actualidad hay interfaces de pleno derecho en Python, Java y MATLAB/Octave. El API de estas interfaces se pueden encontrar en la documentacion en linea. Contenedores en otros lenguajes como C#, Ch., Ruby se han desarrollado para fomentar la adopci´on por parte de un p´ublico mas amplio.

Todos los nuevos desarrollos y algoritmos en OpenCV se desarrolla ahora en la interfaz de C++. Una interfaz basada en GPU CUDA ha estado en marcha desde septiembre de 2010. Una interfaz basada en GPU OpenCL ha estado en marcha desde octubre de 2012.

OpenCV se ejecuta en Windows, Android, Maemo, FreeBSD, OpenBSD, iOS, BlackBerry 10, Linux y OS X. El usuario puede obtener versiones oficiales de SourceForge, o tomar la instant´anea actual con SVN desde all´ı.