Archivo

Entradas Etiquetadas ‘c/c++’

Paralelismo: ¿OpenMP o Intel TBB?

Lunes, 6 de diciembre de 2010 Sin comentarios

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...
Share

C++ : Problemas con la herencia cuando hay sobrecarga de miembros

Lunes, 29 de marzo de 2010 5 comentarios

Os muestro un sencillo tip muy brevemente. Si estás utilizando sobrecarga de funciones miembro en una clase base e intentas heredar dichos miembros en una clase derivada observarás que esta última no tiene visibilidad de todas las sobrecargas realizadas. Leer más…

GD Star Rating
loading...
Share
Categories: Programación Tags: , ,

C/C++: Calificador restrict

Sábado, 13 de marzo de 2010 3 comentarios

cpp1

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...
Share
Categories: General Tags: , , ,

Tutorial CMake

Lunes, 7 de diciembre de 2009 7 comentarios

cmake

Última actualización: 16/09/2010

Hasta ahora he estado usando las autotools (autoconf, automake, libtool, etc.) para llevar a cabo la configuración de todos mis proyectos, y la verdad que me ha ido muy bien con estas herramientas una vez conseguí desentrelazar alguna que otra cosilla que me llevó más de un quebradero de cabeza. Pero ya sabéis, uno no se cansa de aprender cosas y ampliar conocimientos, y desde hace tiempo vengo observando que cmake recibe muy buenas críticas, sobre todo debido a la posibilidad que nos ofrece para poder configurar nuestros proyectos software para distintas plataformas (GNU/Linux, Windows, Mac OS/X, etc) y distintos compiladores (GnuC, Visual C++, Borland, MinGW, etc). En esta entrada os hablaré sobre cmake, explicaré algunas de sus principales características y os dejaré algunos ejemplos útiles. Leer más…

GD Star Rating
loading...
Share

C/C++ : Tipos de cast

Sábado, 5 de diciembre de 2009 Sin comentarios

cpp1A pesar de llevar bastante tiempo programando en C/C++ parece que uno no llega a conocer nunca a fondo todas las características que posee un lenguaje determinado. En esta entrada quiero hablaros de los distintos tipos de conversiones entre datos, ya que así me sirve también a mi de nota recordatoria cuando sea necesario :P . La mayor parte de información que  os muestro a continuación a sido recopilada de internet, pero me he asegurado de comprobar que toda ella es veraz realizando las comprobaciones oportunas en mi ordenador y por supuesto añadiendo notas personales. Allá vamos …

Leer más…

GD Star Rating
loading...
Share