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. 

Saturday, October 17, 2015

MapReduce: Simplified Data Processing on Large Clusters

MapReduce: Simplified Data Processing on Large Clusters es el artículo que nos tocó leer esta vez. MapReduce es un modelo de programación que se utiliza para análisis de datos muy grandes. Esto se logra con la ayuda de concurrencia a lo largo de múltiples computadores para su buen funcionamiento y con una gran tolerancia a fallas. Este modelo de programación es muy conocido en muchas áreas de programación, en la materia de Lenguajes de Programación utilizamos alguna versión un poco “primitiva” de la misma para resolver problemas que requieran mucho tiempo de cálculo. MapReduce es una herramienta clave para la utilización en sistemas para el análisis de big data. Con la ayuda de este, se puede utilizar hardware más barato pero en masa para lograr resultados increíbles ya que MapReduce puede acceder fácilmente a sistemas de datos, bases de datos e incluso en el manejo de archivos no estructurados.
Por la forma en la que se maneja MapReduce, sería bastante interesante verlo ser usado en lenguajes de programación como Erlang, que están enfocados principalmente en multi threading y que al igual que el mismo modelo de programación, también tiene sus partes que lo convierten libre de errores.

Viendo desde un punto de vista la implementación de un método MapReduce, me puedo dar cuenta que hasta cierto punto es muy sencillo y de lo que he aprendido en Clojure, muy fácil de utilizar y reutilizar. Una vez que puedas entender que hace cada una de sus componentes, puedes verdaderamente domar el método por completo, Map lo utilizamos muchísimo cuando trabajamos con datos que requieren de muchos incides,  o que puede estar en algún formato que en realidad no necesitamos. Y el Reduce es algo nuevo que conocí y lo vi en Clojure, este recibe todas las entradas posibles de una lista y los reduce a partir de un operador que se le dé.

Sunday, October 11, 2015

Teaching Concurrency with Erlang

Teaching Concurrency with Erlang es el artículo que nos tocó leer esta vez. El articulo habla acerca de la experiencia que fue dar la clase de Lenguajes de programación enseñándoles a los alumnos Erlang en el campus Estado de México. De solo pensarlo puedo decir como estudiante que tuvo que haber sido un poco difícil y posiblemente muy frustrante ( ha ha).
La materia la dio Ariel nuestro profesor y platica de lo importante que es ver la diversidad que existe en los lenguajes de programación y romper un poco la monotonía de que nos enseñen lenguajes como C/C++ y Java para resolver casi todas las aplicaciones que se nos presentan. Aunque para varios también les fue enseñando Python, a mí me tocó ver objective-c para la materia de aplicaciones móviles, en el que nos enseñaron a crear aplicaciones para iOS y también fue una experiencia diferente a lo que normalmente estamos acostumbrados.
En cuanto a nuestra educación, puedo imaginar que Erlang les abrió los ojos a los estudiantes bastante ya que al ser un lenguaje de programación que su principal enfoque sea la concurrencia, las aplicaciones con casi ilimitadas para la utilización de Erlang. En mi caso, Lenguajes de programación es todo Clojure, y eso no quiere decir que sea malo, al contrario, siento que Clojure también te abre los ojos a una nueva forma de resolver problemas con su programación funcional a comparación de lo usual que es programación orientada a objetos.

El articulo sostiene muchas ideas de las ventajas que tiene aprender a utilizar Erlang y que están bastante bien fundamentadas para mantenerse a favor de que siga siendo enseñado. La materia de Lenguajes de programación me gustó mucho gracias a que aprendimos algo fuera de lo usual que es Clojure, pero considero que posiblemente hubiera disfrutado el curso igual si además nos hubieran enseñado Erlang.

Monday, October 5, 2015

Joe Armstrong on Erlang

En este blog nos tocó hablar acerca del podcast titulado Joe Armstrong on Erlang. Él nos platica un poco de cómo está diseñado Erlang y de sus múltiples aplicaciones posibles. Empezando porque este lenguaje ha sido diseñado con el propósito de manejarse de manera concurrente y que puede ser muy tolerando a distintas fallas que pueden ocurrir.
Joe habla acerca del sistema de mensajes que se desarrolló que funciona muy bien en cuanto a múltiples llamadas concurrentes, al ser de este tipo quiere decir que siempre se respeta el orden de ejecución y casi nada se puede correr de manera errónea. El chiste de este sistema es tomar en cuenta el hecho de que fue diseñado para controlarse en ambientes paralelos y hay que aprovechar esos features al máximo. Aunque este diseñado para ser a prueba de fallas, no siempre se podrá evitar un error pero gracias a la forma en la que está hecho es muy fácil también percibir cuando se producen errores y manejarlos con un superior que se encarga de que todo siga funcionando correctamente y hace registro de los errores que aparecen.
Ya que entramos en una era en la que es importante considerar paralelismo en nuestros programas, Erlang ha ido creciendo y es utilizado en algunas de las más populares aplicaciones que utilizamos día a día como lo es en WhatsApp y el chat en Facebook.

Erlang puede que sea uno de muchos lenguajes de programación que surgirán para manejar casi nativamente el manejo de multi threading, ya que toda la tecnología que nos rodea en este momento se va cada vez más a que los procesadores seguirán creciendo en cuanto a núcleos. Las aplicaciones que tiene Erlang son casi infinitas y debo decir que ya que lo veo no es tan fácil entenderlo pero es un lenguaje muy padre.

Sunday, September 27, 2015

Oh Lambda, Lambda, Lambda


Oh Lambda, Lambda, Lambda es el podcast que nos tocó escuchar esta vez. En éste se habla acerca de lo grande que son los Lambas, sus múltiples usos y el hecho de que los introdujeron hace poco en Java en la versión 8. En éste se explican muchas formas de usar las lambdas y los beneficios que se pueden ver ahora en Java.
Los lambdas eran ya utilizados es otros lenguajes de programación, y tienen una gran influencia sobre los lenguajes funcionales, como Lisp, C++, Clojure, entre otros. Era necesario que se implementaran también en Java, de forma que se volviera un lenguaje más flexible e “inteligente”, ahora Java se volvió un lenguaje más fuerte, sin tantos retrasos importantes.
El uso de las lambdas permite eliminar muchas líneas "boilerplate" del código, como ellos mencionan. Antes se tenía que escribir algo extenso para lograr algo muy sencillo. Y como dicen en el podcast, los lambdas son el “syntactic sugar” de Java y otros lenguajes.
Por otro lado, la programación orientada a objetos es uno de los tipos más utilizados y al introducir las lambdas en Java, se pueden crear Interfaces Funcionales, eliminando sintaxis, por lo que los códigos se vuelven más fáciles de leer y escribir.
Me gustó mucho escuchar el podcast, Freddy y Bob explican muy bien el uso de las lambdas, y hablaron mucho de los problemas que con estos se pueden solucionar. Además creo que resulta muy fácil entender en qué situaciones usarlos para nuestro beneficio. Creo que estas mejoras hacen que Java se vuelva un lenguaje más amigable y mucho menos pesado, además de que se logró un mejor rendimiento del programa.

Creo que con la implementación de los lambdas a Java, los programadores tenemos más facilidad de enfocarnos a crear códigos de forma más legible, y todos podemos sacarle mayor provecho a estas herramientas.  

Saturday, September 12, 2015

Indie Game: The Movie

Para esta entrada de blog estaré hablando acerca de la película que vimos en clase Indie Game: The Movie. Esta película va de la mano con tres diferentes juegos y su proceso de desarrollo. Braid es un puzzle game que es muy entretenido y el creador le metió muchísimo amor a su creación, pero al final la gente no comprendía el mensaje que él quería enviar con el juego y esto lo deprimió mucho. Fez es un juego con mucho Hype y que muchas personas impacientes querían que ya saliera, pero lo que no sabían era todos los problemas relacionados con el desarrollo de juego.
Uno de los más grandes problemas con los que se enfrente el creador de Fez es el hecho de tener una fuerte pelea legal con otra persona que fue co-creador del juego o al menos eso quería apelar. Después de múltiples intentos para ya por fin liberarse de esta persona para poder 1) anunciar más su juego en eventos como PAX y 2) el tener el permiso de poder vender su juego sin que la otra persona pueda quitarle su sueño.

Por ultimo habla de los creadores de Super Meat Boy y su enorme batalla por estar en la tienda en línea de Xbox, una vez que lograron que su juego estuviera en la tienda de Xbox, tuvieron una enorme cantidad de ventas aun siendo un juego indiee. Me volví muy fan de los creadores de Super Meat Boy y no solo porque lograron grandes ventas en la plataforma de Xbox, sino por el siguiente juego que desarrollaron después. Binding of Isaac es una joya en los juegos de tipo rogué-like y mantiene mucho de los elementos artísticos que se usaron en super meat boy. Aunque solo salió para computadora, se espera que su secuela tenga entrada a diferentes consolas y portátiles.

Monday, September 7, 2015

Welcome to the Jungle

Welcome to the jungle es el artículo que nos tocó leer esta vez. Este articulo retoma lo visto en el artículo de The Free Lunch Is Over que habla de cómo se terminó la creencia de que single threaded applications dominarían el mundo por siempre. Procesadores con múltiples núcleos es la nueva era y a partir de aquí es que se puede decir que ha progresado hasta tres diferentes modelos o transiciones que se amplifican el uno al otro. Multicore que apareció en 2005, luego continua Heterogeneus cores a partir del 2009 y por último Elastic compute cloud cores del 2010 hasta el presente.
El primero es básicamente lo que se ha estado hablando desde el artículo de The Free Lunch Is Over en donde ya no se puede trabajar considerando únicamente single threaded application pero una en multi threaded applications. El segundo habla de la diversidad que se creó en CPU’s y como esto amplifica aún más la forma de programar en paralelo y que es importante considerar al estar trabajando con diferentes procesadores ya que estos pueden cambiar incluso los lenguajes que llegan a soportar y por ultimo elastic compute cloud. En este se habla de cómo el funcionamiento de multiprocesamiento en realidad ya está generado para cualquier máquina de hoy en día, pueda hacer uso de multithreaded programming con el uso de múltiples tecnologías que existen de manera comercial en la nube, tales como Amazon Web Services, Microsoft Azure, Google App Engine, entre otros.

Lo que también se remarca en el artículo es la ley de Moore y que como desde hace un tiempo se sabía que el crecimiento exponencial que había en los procesadores llegaría a un fin, y que la relevancia de programadores que se adaptes a programación multinucleos era de suma importancia para poder progresar.

Saturday, August 29, 2015

Parallel Computing on any Desktop

Parallel Computing on any Desktop es el artículo que nos tocó leer esta vez. El artículo es muy interesante y toma algunos de los puntos que aparecen en el artículo anterior acerca de cómo ya comenzaron a surgir los procesadores con múltiples cores de procesamiento que soportan multithreading y sirven bien para parallel programming. Empieza diciendo que parallel programming por algún tiempo solo fue disponible para unos pequeños sectores de la sociedad tal como centros de investigaciones científicas o algunas escuelas de alto nivel para mantener y sacar provecho de estos monstruos de procesamiento en paralelo y que de estos sectores, surgieron grandes avances como el Beowulf.
Sin embargo esto no era del todo amigable para usuario normales, requería de mucho entendimiento e investigación que solo algunas escuelas tuvieron los fondos para poder tener gente experta en el tema del uso de máquinas con programación paralela. Además de eso, si pudieras conseguir una forma para programación paralela, no era tan sencillo saber generar problemas así, por lo que empezaron a surgir nuevas tecnología y de nuevos métodos para lograrlo como lo es OpenMP. Yo he trabajado con OpenMP en semestres pasados y debo decir que aunque este articulo lo haga parecer como un ángel caído del cielo para ayudar en programación en paralelo, yo siempre tuve enormes problemas en hacerlo funcionar (ha ha).

En su tiempo OpenMP ayudo a muchas personas a desarrollar programas de una manera más sencilla y eficiente, sin embargo, ahora existen muchas más formas de manejar programación en paralelo y está siempre seguirá creciendo de la mano con los poderosos procesadores que hoy en día se crean y que en un futuro mejoraran mucho más para generar un mayor impacto en la forma en la que todos programamos día a día y quizás algún día necesitemos pensar en formas nuevas de programar. 

Monday, August 24, 2015

The Free Lunch Is Over

The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software es el artículo que nos tocó leer esta vez. Debo decir que yo no me había metido tanto en el mundo del paralelismo hasta el año  pasado, yo siempre creí que era algo difícil de obtener y que posiblemente no habría altos impactos en rendimiento. Me alegra decir que estaba muy equivocado en mi razonamiento, hace dos semestres lleve la materia de programación avanzada donde por primera vez trabaje en C y además manejamos paralelismo. Fue ahí que en realidad vi el potencial de utilizar paralelismo para resolver problemas y como mejoran por mucho el rendimiento.
Así como yo mantuve esa postura errónea acerca de multiprocesamiento, se puede entender que hace ya algunos años se creía que se podía hacer casi cualquier cosa en single threaded programming teniendo en cuenta que los procesadores siempre iban a seguir saliendo y cada vez con muchas más ventajas para el procesamiento y ejecución de instrucciones. Pero en más recientes años, los fabricantes más reconocidos han optado por generar procesadores de múltiples núcleos y con mucho mejor soporte en hyperThreading para mejorar los cpu’s en general al incrementar los núcleos.
Algo más que hay que considerar que es bastante interesante es el crecimiento de la programación para móviles, actualmente en mi trabajo yo creo aplicaciones de naturaleza hibridas. Eso quiere decir que no utilizo código nativo de los dispositivos para desarrollar en ellos. Por el momento no manejo en ningún momento paralelismo en los trabajos que he realizado, pero al recordar varias de las cosas que he generado, se me ocurren ligeros cambios agregando paralelismo que podrían incrementar el rendimiento y los tiempos de carga para múltiples procesos de cálculo.

Quizás todavía podamos tener situaciones en las que generar nuestros programas aun no necesiten estar generados utilizando paralelismo en su totalidad, pero hay que siempre tenerlo en cuenta a la hora de programar y puede que dentro de muy poco tiempo tengamos que adaptarnos y darnos cuenta que en realidad the free lunch is over.

Thursday, August 13, 2015

Hola! :3

Hola, mi nombre es Andrés Peláez Fialdini y como podrán darse cuenta me inscribí tarde a la materia por lo que tengo un poco de miedo del curso pero a la vez me emociona muchísimo. Hay el rumor de que esta será la última vez que den esta materia por lo que fue lo que me hizo querer entrar de última hora haciendo un cambio en mi horario. Soy fan de los videojuegos, actualmente juego mucho Dark Souls II. En cuanto a gustos, vi hace poco las películas de Jump Street y debo decir que se han ganado un lugar en mi corazón haha.