viernes, 4 de abril de 2014

Teaching the SIMD Execution Model: Assembling a Few Parallel Programming Skills.

En esta ocasión hablaré un poco sobre el artículo titulado "Teaching the SIMD Execution Model: Assembling a Few Parallel Programming Skills" escrito por el profesor Ariel Ortiz y publicado en las memorias del 34º SIGCSE Technical Symposium on Computer Science Education en febrero del 2003, nos da un poco de introducción sobre la gran importancia que tiene el curso de compiladores y sobre como es el método de utilización de SIMD (single input multiple data) sobre una gama de procesadores (pentium 4), la utilización de SIMD nos permite lograr un procesamiento de multiples datos de manera simultánea, lo cuál permite una mejora bastante considerable en el rendimiento de los programas pero, no todo es miel sobre  hojuelas, el hecho de programar utilizando el método SIMD, es considerablemente mucho más difícil que la metodología tradicional. 

Por lo general, la mayoría de las aplicaciones que se ven beneficiadas con este tipo de metodología son las que necesitas procesar gran cantidad de datos, por lo que esa gran cantidad de datos pude ser paralelizado, generando un mayor rendimiento al sistema, un claro ejemplo de una aplicación que necesita procesar una gran cantidad de datos son los videojuegos, pues realizan gran cantidad de cálculos para realizar sus objetivos.

Algo que me llama la atención es que la metodología SIMD ya lleva un buen rato a la luz de los programadores, pues tan solo en el Tecnológico de Monterrey se ha impartido desde los noventas, pero no es eso lo que se me hace interesante sino que hoy en día, se puede llegar a hacer uso de esta tecnología y lograr exprimir su gran potencial de procesar datos simultáneamente.

En mi punto de vista como estudiante, yo creo que es un tema un poco complejo, definitivamente no es imposible aprenderlo, pero si implica dedicarle una buena cantidad de tiempo para que podamos comprender los conceptos básicos, así como lograr escribir varios programas por nuestra cuenta.



martes, 25 de marzo de 2014

“MapReduce: Simplified Data Processing on Large Clusters”

El artículo titulado MapReduce: Simplified Data Processing on Large Clusters y escrito por Jeffrey Dean y Sanjay Ghemawat, publicado en el Comunications of the ACM en enero del 2008 me pareció bastante interesante, nos da una visión acerca de la gran complejidad que puede traer el hecho de procesar datos tan inmensos, pero lo más interesante es que a pesar de la gran complejidad que implica este tipo de tareas, pueden ser resueltas por herramientas tan sencillas como lo son el map y el reduce al momento de ser adaptados con la tecnología primitiva de Lisp, el MapReduce.

MapReduce en su concepto básico nos ayuda para poder paralelizar operaciones de procesos, por lo que al utilizar MapReduce en un esquema en el que existe una gran cantidad de datos nos ayuda muchísimo al rendimiento de los procesos que se estén ejecutando.

Una parte que me gustó mucho sobre el artículo es que mencionan que Google lo utilizó realmente por ser una técnica muy fácil, incluso para programadores que tengan muy poca o incluso nada de experiencia utilizando sistemas paralelos y distribuidos, por otra parte también dicen que Google lo utilizo porque una gran cantidad de problemas puede ser resuelto utilizando la técnica de MapReduce.

La técnica de MapReduce también es muy conocida en el mundo de la inteligencia artificial, en temas como lo son sistemas expertos y machine learning. El artículo también menciona varios procesos o tareas que pueden ser realizadas por los programadores para que la técnica de MapReduce se vuelva mucho más potente tales como, mantener en orden los datos a ser procesados, evadir datos erróneos, incrementar el número de los datos de entrada y los datos de salida, entre otras más técnicas que pueden ayudar al desempeño de la técnica MapReduce.

El artículo realmente nos da a entender en su totalidad que utilizar la técnica de MapReduce nos ayuda muchísimo a procesar gran cantidad de datos, pues el esquema es a prueba de fallas, también nos menciona que dicha técnica nos puede dar gran poder como programadores al permitir una paralelización mucho más fluida y sencilla.

viernes, 7 de marzo de 2014

Teaching Concurrency with Erlang

En el arículo titulado Teaching Concurrency with Erlang, escrito por Ariel Ortiz y publicado en las memorias del 42° SIGCSE Technical Symposium on Computer Science Education en marzo del 2011, nos da un panoramasobre lo complicado que puede llegar a ser enseñar  programación concurrente utilizando el modelo COP (concurrency oriented programming).

¿Qué es la programación concurrente?
La programación concurrente es/son programa(s) que tiene más de una línea lógica de ejecución, en pocas palabras, se ejecutan al mismo tiempo con la ayuda del hardware para brindar un mayor rendimiento al usuario.


El profesor ariel tiene mucha razón al decir que es complejo y retador enseñar la metodología COP a estudiantes como nosotros pues, tenemos la vieja escuela de la programación secuencial desde que iniciamos nuestra carrera como futuros ingenieros en sistemas, además que es importante conocer todos los factores que implican conocer lo que es la programación concurrente, el profesor menciona ciertos conceptos muy importantes sobre lo complicado que es llegar a enseñar y que los alumnos los entiendan, entre ellos están conceptos como carreras de condición, deadlocks, starvation entre otros.

Es interesante como Erlang es un lenguaje de programación enfocado en la programación concurrente, siendo uno de los mejores lenguajes para crear múltiples hilos, pues Erlang trabaja muy de cerca con la comunicación y los hilos, permitiendo generar programas que puedan soportar multiples hilos.

El escrito refleja mucho la ideología del profesor que es utilizar licencias libres para la enseñanza y creo que tiene mucha razón al decir al final del escrito que el siente que sus alumnos disfrutan su clase, valorando las grandes ventajas o beneficios que nos puede brindar Erlang.

En un punto de vista como profesor, el hecho de saber que tus alumnos están disfrutando de tu materia y están aprendiendo cosas útiles en tu materia, es bastante motivador no solo para los alumnos sino para los profesores también.

jueves, 20 de febrero de 2014

Indie Game: The Movie



La película Indie Game: The Movie dirigida por Lisanne Pajot y James Swirsky además de ser una de las mejores películas acerca de videojuegos, me parece también una película llena de mensajes de superación personal, pues nos cuenta acerca de todos los obstáculos que desarrolladores independientes tuvieron que pasar para salir exitosos.
Los juegos independientes son aquellos desarrollados por personas comunes y corrientes, que no están  regidos por una gran empresa, el perfil del programador independiente está mucho más enfocado en hacer lo que le hace feliz y no en lo que le deje más dinero o en la empresa tan importante en la que esté trabajando.
La película se basa en tres juegos independientes principales:
  • Super meat boy
  • Braid
  • Fez
La película narra la historia de cada uno de los videojuegos anteriores, enfocándose principalmente en el desarrollo inicial de los videojuegos y en el pensamiento de los creadores al inicio de sus proyectos, así como en su vida personal.

Es interesante como un videojuego que parece tan sencillo pueda implicar bastante tiempo y trabajo, tan solo para el juego de Fez, se tardó más de cinco años en terminar su videojuego.

La película me dejó un muy buen sabor de boca pues está totalmente dirigida a la comunidad geek, gamer y old gamers, me sentí muy identificado con el desarrollador (Edmund) de super meat boy, pues yo también fui de esos niños obsesionados con dibujar a Mario.

La película también nos da como reflexión el hecho de saber que si dos personas pudieron desarrollar un videojuego tan bueno como lo fue super meat boy, cualquiera de nosotros que nos dedicamos a esa área también somos capaces de desarrollar cualquier proyecto con una calidad muy buena, siempre y cuando seamos felices con lo que hacemos. En mi punto de vista esta película debe ser vista por todo gamer de hueso colorado.

martes, 11 de febrero de 2014

Welcome to the jungle



Desde que entré a mi carrera siempre se hablaba de la famosa Ley de Moore, claro, la mayoría de los computólogos o electrónicos conocen esta ley basada en que los elementos electrónicos iban a ser más pequeños e incluso que la transferencia de datos en los procesadores iba a pasar de ser físico a ser por el flujo de electrones y con esto, crear procesadores de niveles inimaginables, bueno, pues parece increíble pero cierto que la Ley de Moore comienza a morir, y no porque ya no puedan seguir desarrollando integrados más pequeños sino por el hecho de que ya se está trabajando e investigando con otro tipo de material, lo cual es mucho más barato y con mucha mayor oportunidad de explotar los recursos a bajo costo.

Algo que menciona el autor y que ya he visto en varias clases como “Cómputo en la nube” es que hoy en día la tendencia  va hacia el cómputo en la nube, o mejor dicho una nueva mina, tal como lo menciona el autor, pues esta nueva tecnología ha ido disolviendo a la ya tan famosa Ley de Moore.
El hecho de que una nueva tecnología llegue a disminuir el gran avance que ha alcanzado la Ley de Moore no quiere decir que sea fácil migrar todo ya lo hecho a dicha nueva tecnología, también entran otras variables de gran importancia para que esto suceda, como los programadores por ejemplo, tal como se platicó en el blog de “The free lunch is over” de nada sirve contar con la mejor tecnología si los programadores o los ingenieros siguen siendo arcaicos y sin nuevas ideas.

Creo que el artículo mencionado anteriormente tiene mucha relación con éste artículo, pues estoy seguro que hoy en día el cómputo paralelo ha tenido un gran apoyo y soporte, pero en un par de años que se alcance lo mayor posible a la nube, será indispensable el tema del paralelismo.


martes, 4 de febrero de 2014

Parallel computing on any desktop

El artículo escrito por Ami Marowka "Parallel computing on any desktop" me parece muy interesante, nos hace reflexionar un poco sobre lo accesible que puede llegar a ser hoy en día programar con máquinas de múltiples núcleos, así como soluciones de hardware, también salieron diversas soluciones de software, una de estas soluciones es tratada por el autor, su nombre es OpenMP, el cual fue desarrollado especialmente para los programadores.

OpenMP es una herramienta que permite paralelizar ciertas partes de código con tan solo agregar unas directivas, el único problema de esta herramienta es que no puede ser utilizada por todos los lenguajes de programación, actualmente solo puede ser utilizado por C y C++, cabe destacar que OpenMP utiliza el modelo fork-join como modelo de ejecución paralela.

El artículo principalmente nos habla sobre cómo se ha ido desarrollando este paradigma de programación paralela y concurrente desde sus inicios, al igual que en el artículo anterior, el autor nos menciona la gran accesibilidad que tenemos hoy en día los programadores de poder trabajar con máquinas de núcleos múltiples, pues en los inicios los únicos que podían llegar a trabajar con máquinas de este tipo eran los científicos, universidades y centros de investigación.

Sin duda la programación concurrente/paralelo va tomando más fuerza cada día gracias a la aparición de computadoras con múltiples cores, sin embargo debemos tener muy en claro que el hecho de tener una máquina con muchos núcleos no sirve de gran cosa si programadores como nosotros, no realizamos código que pueda llegar a explotar ese hardware, es decir, que los programadores sigan escribiendo código de manera serial, es por eso que es tan importante que nosotros los programadores podamos adoptar este tipo de paradigmas para poder crear software de manera mucho más eficiente y de mucho mayor calidad para los usuarios.




viernes, 24 de enero de 2014

The Free Lunch Is Over

El artículo escrito por Herb Sutter me pareció muy interesante. Es obligatorio conocer como era la perspectiva de la gente acerca de los procesadores en el 2004, ya que como podemos ver en la actualidad, esas perspectivas no se han cumplido y creo que no se cumplirán en los años venideros. Otro punto que me llamó mucho la atención es que el artículo fue siendo actualizado con el paso de los años, dándonos cuenta que el hombre no ha sido capas de realizar/crear cierto procesador que cumpla las expectativas en la ley de Moore basada en la teoría que los elementos electrónicos iban a ser más pequeños e incluso que la transferencia de datos en los procesadores iba a pasar de ser físico a ser por el flujo de electrones y con esto, crear procesadores de niveles inimaginables. 

Otro punto que ha llegado a tocar el autor es sobre el gran cambio que tuvo que tomar el desarrollo software en cuanto a la concurrencia. Sin duda lo que me gustó más del artículo es que el autor da como advertencia a todos los desarrolladores que debemos prestar atención al diseño de aplicaciones, pues ya no solo se toman factores primarios, ahora se toman en cuenta diversos factores que pueden ayudar muchísimo a concretar un muy buen trabajo, entre esos factores el autor menciona el detectar partes del código que puedan llegar a ser programadas de manera paralela o concurrente.

En mi punto de vista el artículo me puso a reflexionar sobre qué tanto los desarrolladores aprovechan los núcleos de su computadora para realizar programas o aplicaciones de mucho mayor calidad, creo que lo que a nosotros como desarrolladores nos debería preocupar más que tener miles de núcleos a nuestra disposición es el hecho de escribir buen código, lógicamente utilizando y explotando los recursos que el hardware nos pueda brindar, sin duda nos queda mucho por aprender como programadores.