

Desde hace cosa de un año siempre que puedo paralelizar alguno de los programas que escribo lo hago de forma sencilla con OpenMP. OpenMP es un estándar que en la actualidad implementan la mayoría de compiladores (gcc, vc, etc.), mediante el cual podemos paralelizar fácilmente un bucle introduciendo ¡una línea de código!. Entonces, ¿a que viene este post? ¿por qué dudo entre un estándar o la librería de intel TBB que aunque tenga una versión abierta no es un estándar?. Este dilema se me planteó en el momento que vi que la gente que desarrolla las OpenCV han decidido cambiar el uso de OpenMP por las Intel TBB, aunque tenía mis dudas de porque había sucedido esto … ya que en sus orígenes las OpenCV fueron escritas por gente de Intel.
Pues bien, la misma gente de Intel en una Wiki de las TBB advierten que no tiene porque el uso de una librería sustituir a la otra, y que pueden ser perfectamente complementarias. Podemos usar TBB en una parte de la aplicación mientras usamos OpenMP en otra. Las OpenMP son fáciles de usar, son un estándar , están soportadas por la mayoría de compiladores y explotan bien el paralelismo. Sin embargo están muy orientadas a bucles o no están dirigidas para el paralelismo a nivel de algoritmos o estructuras de datos. Cuando OpenMP se ajuste bien a nuestro código deberíamos usarlo sin más.
Por otra parte hay que fijarse en el entorno de desarrollo. Si el código está escrito en C++, es probable que TBB se ajuste mejor. TBB encaja especialmente en el código que está altamente orientado a objetos, y hace un uso extenso de plantillas y tipos de datos definidos. Si el código está escrito en C o FORTRAN, OpenMP puede que sea una mejor solución que TBB por su estilo de codificación estructurado. TBB y los hilos nativos no requieren de un soporte específico por parte del compilador mientras que OpenMP si, por lo que OpenMP requiere que compiles con un compilador que reconozca los #pragmas de OpenMP.
Conclusión personal
Si llevas mucho tiempo usando OpenMP, lo estás usando en tus librerías y/o programas y ya tienes cierto dominio de sus directivas y funcionamiento no tienes porque cambiar a TBB. Sin embargo, si estás empezando a introducir paralelismo en tu código, y este está altamente orientado a objetos sería recomendable empezar a usar directamente TBB. Estoy convencido que aprendiendo a usar TBB no habrá mucho problema en después usar OpenMP, ya que en principio es bastante más sencillo de usar.
Más información aquí (aunque en inglés).

Read the Intel Wiki.
GD Star Rating
loading...


Hay que ver lo que son las cosas. Leyéndome un libro de OpenMP descubro una característica de C/C++ bastante importante que había pasado inadvertida para mi durante todos estos años que llevo programando. Resulta que el calificador restrict (o __restrict__ en C++) permite especificar si sabemos a ciencia cierta si el puntero al que añadimos este calificador apunta a un objeto que no es apuntado por ningún otro puntero. Esto es especialmente útil para programas científicos donde los cálculos realizados sobre matrices abundan especialmente. Lo realmente interesante es que al usar este calificador el compilador puede introducir algunas mejoras en el código objeto resultante que mejorarán la eficiencia, y por tanto el tiempo de computo, de nuestros programas. A continuación os muestro unos ejemplos sencillos de como usar el calificador y los tiempos de ejecución obtenidos.
Leer más…
GD Star Rating
loading...


En la nueva versión de OpenCV por defecto está desactivado el uso de OpenMP pero este se puede activar de forma sencilla. Sin embargo al activar el uso de OpenMP, muchas personas se quejan de que algunas funciones de la librería dejan de funcionar. El caso más conocido es el de la función imwrite con la que podemos guardar imágenes y matrices. Mucha gente ha sufrido este problema y hasta ahora nadie había ofrecido una solución, pero recientemente he descubierto la causa de esta extraña situación. Leer más…
GD Star Rating
loading...
Miércoles, 9 de septiembre de 2009
piponazo

Ultima actualización 10/09/2009
Ante la necesidad, o mejor dicho, el placer de poder utilizar la última versión de openmp sobre todo para poder usar variables sin signo en los bucles for paralelizados, hoy he tenido que actualizar a la versión (4.4) del compilador GNU. La documentación oficial de gentoo está un poco obsoleta y no deja claro del todo que pasos hay que seguir en cada caso, por lo que os dejo aquí una breve entrada sobre como actualizar vuestro compilador y recompilar el sistema para aprovechar las nuevas mejoras introducidas. Según he leído, el rendimiento ofrecido por la nueva versión del compilador incrementa en muchas aplicaciones hasta un 4% sin tener que tocar nada de código (esto parece ser debido a una nueva forma de manejar los registros del procesador). Leer más…
GD Star Rating
loading...
Intel está llevando a cabo una curiosa iniciativa en la siguiente dirección Web. Se trata de un espacio para los desarrolladores interesados en sacar el máximo rendimiento a sus aplicaciones mediante la programación paralela con varios hilos, y es que este tipo de programación tiene una serie de conceptos nuevos que nada tienen que ver con la metodología de la programación tradicional (estructurada o orientada a objetos).

En mi caso ya he hecho algunas pruebas de rendimiento en diferentes programas usando la librería que nos ofrece el compilador de Intel (OpenMP) para el desarrollo de programas paralelos. En los casos ideales se consigue una reducción en el tiempo de ejecución de un algoritmo al
% donde n es el número de núcleos del que dispone el sistema. Sin embargo esto no siempre ocurre así e incluso hay casos donde obtenemos un rendimiento peor que en la ejecución normal en un solo núcleo.
En el enlace que os dejo hay disponibles numerosas guías, artículos, tutoriales, foros, etc. que os ayudaran a la integración de los desarrolladores en este nuevo mundo de la programación.
GD Star Rating
loading...
Últimos comentarios