Sunday, November 22, 2015

Teaching the SIMD Execution Model

Teaching the SIMD Execution Model: Assembling a Few Parallel  Programming Skills es el artículo que nos tocó leer esta vez. Este artículo fue escrito por Ariel Ortiz que es nuestro profesor para esta materia. El artículo habla acerca de la importancia de utilizar SIMD (Single instruction Multiple Data) en cursos de programación multinucleo.
Es un modelo un poco de entender en su totalidad ya que tiene una complejidad bastante alta a comprada a lo que estamos acostumbrado como utilizar los fork/join en java o lo visto en javascript con los web workers. Incluso Erlang que es un sistema bastante difícil de entender, tienen un modelo de paralelismo bastante fácil de entender. SIMD es principalmente en código de ensamblador y es el último tema que nosotros vimos en la materia, debo decir que no es nada fácil pero te puedes dar cuenta de muchas cosas acerca del proceso y ordenamiento que se debe realizar a estar trabajando en código de ensamblador.
Es muy interesante SIMD ya que puede ayudarte a optimizar muchos problemas que se utilizan en paralelismo. En el curso nos mostró algunos ejemplos Ariel de esto y fue bastante interesante ver que en puro código C contra optimización por código ensamblador, pudimos ver que la diferencia de tiempos de procesamiento eran absolutamente increíbles al utilizar código de ensamblador.
Aunque los ejemplos que vimos eran muy padres y estaban bastante bien implementados en código de ensamblador, hay varios casos en los que utilizarlo no es del todo fácil e incluso podrían ser poco eficientes en su utilización.

SIMD es un modelo que les da mucho control a los programadores y que una vez que uno sabe cómo utilizarlo correctamente, podría traer muchas ventajas para la optimización de problemas y dentro del mundo del paralelismo puede ser incluso una mejora.

Sunday, November 1, 2015

The State of Parallel Programming

Esta vez nos tocó leer el artículo llamado “The State of Parallel Programming” escrito para Dr. Dobbs en 2012, que habla acerca de las herramientas presentadas para programar en paralelo y cómo estas son percibidas por la industria y la tecnología.
 El artículo habla acerca de las barreras que se presentan a los programadores cuando intentan trabajar en paralelo. Muchas de las limitantes son físicas en cuanto a los núcleos que tienen los procesadores, pero esto es algo que con el tiempo ha cambiado muchísimo y ahora el problema son los desarrolladores que están estancados en Free Lunch.
El artículo se enfoca principalmente en la opinión de 275 desarrolladores que su principal enfoque en cuanto a programación es C/C++, que es un lenguaje de programación que a mi parecer tiene muchas áreas de oportunidad en cuanto a herramientas de desarrollo en ambiente paralelo.
Siento que las estadísticas que aquí se presentan son un poco erróneas en el sentido de que la base para las encuestas son personas que no han escarbado al 100% el lenguaje. Esto no significa que no sean expertos, sin embargo, les hace falta adentrarse más a las diferentes herramientas que otros programadores han desarrollado para ayudar y guiar al crear Third Party Pluggins.

Yo en mi trabajo a veces desarrollo cosas complejas, sin embargo, hay cosas que no puedo lograr solo. Afortunadamente, existen dos cosas que me ayudan mucho, una es los foros de discusión en los que otros programadores se han enfrentado a  los mismos problemas que yo y con la ayuda de otros desarrolladores se logran resolver. Y la segunda son los pluggins, siempre se dice que no hay que reinventar la rueda cuando es muy probable que se utilizarán varias cosas ya existentes. Los pluggins de Third Party fueron creados por desarrolladores que decidieron crear estas herramientas Open Source para que otros desarrolladores no tengan que desgastarse haciendo lo mismo.