viernes, 4 de abril de 2014

SIMD!

Hoy hablaré un poco acerca del artículo Teaching the SIMD Execution Model: Assembling a Few Parallel Programming Skills, escrito por Ariel Ortiz y publicado en las memorias del 34° SIGCSE Technical Symposium on Computer Science Education en febrero del 2003. Este artículo habla del uso de SIMD (single-instruction/multiple-data) permitiendo así el multiprocesamiento en procesadores con Intel Pentium 4. Mostrando las ventajas contra el modelo SISD (single-instruction/single-data) en el cual solo se procesa un elemento a la vez. 
La tecnología SIMD ha avanzado junto con los procesadores, es así como se comenzó con MMX con el procesador Intel Pentium II. Aunque a comentario personal SIMD resulta ser muy conveniente para el procesamiento en paralelo sino que tiene el gran inconveniente de que es totalmente dependiente de la arquitectura/procesador en la cual se encuentre desarrollando. Pero eso sí, no depende del sistema operativo en el cual se esté ejecutando, así que actualmente su portabilidad es muy alta.
La cuestión que más se hace notar en el artículo es acerca de la enseñanza de esta tecnología.



Me pareció interesante utilizar “idioms” para aprender ciertos patrones de uso con SIMD, considerando prácticamente que con cinco patrones puedes conocer la manera en que funciona el lenguaje me hace creer que es completamente sencillo poder llegar a dominar el uso de SIMD.
Actualmente en clase utilizamos librerías para utilizar el conjunto de instrucciones SIMD utilizando C como lenguaje base, aunque en este artículo se hace mención de las instrucciones junto con Ensamblador. Para algunos parece poco alentador que el uso de esta tecnología sea a ese nivel, sé que no es sencillo pero el hecho de que estemos acostumbrados a lenguajes más amigables hace que no sea tan agradable la experiencia, además de que también el compilador puede hacer que nos metamos en rollos.
Sin duda una tecnología que promete tener impacto, pero quizá aún no se ha encontrado un nicho que de verdad quiera aprovecharlo.

martes, 25 de marzo de 2014

MapReduce

Hoy comentaré acerca del artículo MapReduce: Simplified Data Processing on Large Clusters escrito por Jeffrey Dean y Sanjay Ghemawat, publicado en el Comunications of the ACM en enero del 2008.

Me ha resultado interesante ver los aplicativos reales de funciones tan básicas como lo serían un Map y un Reduce pero con un enfoque diferente y una manera de realizarlo que nos permita el procesamiento de cantidades enormes de datos, hablando en la cantidad de terabyte. 

Es así como en el artículo se nos explica que MapReduce es una abstracción inspirada en las primitivas de Lisp (map y reduce) y de otros lenguales funcionales. Además de presentar las estadísticas de rendimiento, ejecutando operaciones de alto consumo de procesamiento; y como la implementación se encuentra basada en un modelo Maestro-Trabajador.



Así que con esta abstracción realizar un map hace que apliquemos una función definida por nosotros,  de esta manera se crean el número de instancias necesarias para paralelizar la tarea. Después de esto el reduce se encargará de juntar los resultados.

MapReduce ha resultado ser una herramienta poderosa para las actividades que Google realiza, como lo es los problemas de machine learning, problemas de clustering, extracción de datos para la elaboración de reportes, extracción de datos de sitios web o procesamiento de imágenes satelitales. Ya que además realiza todo esto de manera paralela, y con un esquema tolerante a fallos. 
También se mencionan características interesantes para que se tenga un mejor rendimiento como mejorar las funciones a utilizar, mantener un orden en los datos, saltar datos que contengan error, enviar mensajes de estatus y otros que son útiles para la actividad.

Su éxito es completamente atribuido a que es un modelo fácil de usar y que la mayoría de los problemas pueden ser expresados en la manera que se utiliza MapReduce.

viernes, 7 de marzo de 2014

Teaching Concurrency

La opinión del día es a cargo del artículo “Teaching Concurrency-Oriented Programming with Erlang” escrito por el profesor del curso y publicado en las memorias del 42° SIGCSE Technical Symposium on Computer Science Education en marzo del 2011. 
Después de la introducción de este artículo vino a mí la pregunta de siempre, porque la programación concurrente no se enseña pronto en los cursos. Debo decir que al tener una base en programación orientada a objetos, conocer otros paradigmas de programación es importante en la formación de un ingeniero en sistemas computacionales. Ya que esto nos ayudará en todo caso a resolver problemas de diversa índole.
Erlang es un lenguaje totalmente nuevo para mí, pero también con gratos recuerdos de Prolog, el cual debo afirmar no aprendí muy bien pero que me ha ayudado a comprender un poco más sobre el funcionamiento de Erlang.
Entre las características de Erlang debo apuntar que mi favorita es la asignación sencilla de variables, ya que en el momento de realizar programas concurrentes ayuda mucho a que no te equivoques, o asignes un nuevo valor a algo. Quizá para muchos no es algo agradable y quizá hasta molesto, pero cuando realizas programas que requieren revisar valores y modificar otros esta función sin duda es muy útil. Es una manera de mantener el estado de ciertos objetos inmutable.
Otra cosa agradable a mi punto de vista, es el sistema de mensajes, el cual considero que es sin duda intuitivo.
No esperaba que el artículo incluyese experiencias de aprendizaje del lenguaje, lo cual demuestra que el lenguaje es bondadoso en el área de la programación concurrente. 
Después de este artículo considero que sin duda será una buena experiencia aprender Erlang, aunque sin duda mi mayor interés es conocer cómo se combinan el paradigma funcional y concurrente al momento de desarrollar algo en Erlang.

miércoles, 19 de febrero de 2014

Juegos Independientes

Hace algunos días vi “Indie Game: The Movie” producido por BlinkWorks Media y dirigido por Lisanne Pajot y James Swirsky en el año 2012. Fue una grata sorpresa para mí ver este documental en clase. 
Me agrada como comienza, con esa pregunta de ¿por qué haces juegos?
Dejando a un lado la fama y fortuna escuché de cada uno de los desarrolladores que era porque querían ser escuchados, querían comunicarse con las personas, querían que fueran agradables para las personas ya que cada uno de sus juegos es un reflejo de sí mismo.
Es completamente cierto, no es un estereotipo nada más porque sí, que las personas de la carrera no somos lo suficientemente sociales por así llamarle. Muchas veces preferimos el trabajo individual y también la poca interacción quizá porque esto nos ayuda a ver mejor las cosas de otra manera y encontrar soluciones a diversos problemas.
Así que cuando escuché a estos personajes decir que es una manera de salir al mundo, me sentí completamente identificada.


Hace tiempo atrás llegue a ver Braid, que es uno de los juegos que se comenta en el documental. Me parecía un juego tan profundo que lo dejé de jugar, aunque eso no tenía nada que ver con su jugabilidad la cual para mi gusto era magnífica. Braid para mí es un viaje, así como el tuyo o el mío en esta vida, pero con la posibilidad de regresar el tiempo. ¿Por qué regresar el tiempo? Sencillo, es un aprendizaje de que no siempre puedes revertir las cosas, y que aunque pudieses hacerlo muchos de los escenarios volverían a repetirse. Me resultó triste que los comentarios acerca de este juego resultaran en una experiencia sin sentido, “como jugar Mario en el futuro”. El juego es mucho más que eso.


FEZ… Hace poco leí que había sido lanzado y con éxito, la verdad es uno de los juegos de los que se habla en el documental que más ganas me dan de jugar. Después del sin fin de historias que tiene, y como prácticamente pasaría a la historia por ser no muy bueno o por nunca ser lanzado. Creo que será una experiencia agradable cuando lo juegue.


Super Meat Boy, fue todo un suceso, tengo memorias de amigos jugando el juego y diciendo que era simplemente asombroso. El documental es todo un viaje en el desarrollo de Super Meat Boy, sin duda un viaje que termina muy bien.


Me agradó mucho este documental, creo que deberían existir más documentales de esta área. Sí conoces algún otro documental parecido a este o igual de interesante, compártelo.

martes, 11 de febrero de 2014

Hardware Jungle

Esta vez comentaré acerca del artículo “Welcome to the Jungle” escrito por Herb Sutter en diciembre del 2011. Después de haber leído el artículo “The Free Lunch Is Over”, también de Herb Sutter, ya había cambiado un poco mi manera de pensar respecto al paralelismo y cómo afectaría el entorno de la tecnología, pero sin duda “Welcome to the Jungle” ofrece toda una resolución acerca de esos pensamiento sobre los cambios. Recordé aquella vez que los procesadores de doble núcleo comenzaron a introducirse en el mercado, parecía toda una novedad. Aunque cuando volví a pensar que todo tenía más de un procesador no pude recordar cuando paso. Actualmente hasta los teléfonos y tabletas cuentan con esta tecnología aparte de las computadoras. De acuerdo a Herb Sutter, esto sucedió en el 2011, aunque la finalización de la era  del “single-threaded”, también conocida como el free lunch fue en el 2005. Después de esto llegamos a la era multicore, y últimamente otras dos eras han sido añadidas, es por eso que Herb Sutter afirma que nos encontramos en una jungla. Estas eran son Hetero-core y Cloud-core.


Los núcleos heterogéneos  son aquellos que cuentan con un procesador normal y otros especialistas en ciertas áreas.
Los núcleos en la nube (por así denominarles en español), deben considerarse como hardware o infraestructura como servicio, y ha comenzado a ser un hit comercial.

Aunque “Welcome to the Jungle” trata principalmente de 4 temas: El fin de la ley de Moore, la tendencia actual, el efecto de esto en el desarrollo de software y los distintos estados de acercamiento al fin de la ley de Moore.

Creo que lo que más me ha impactado de este artículo es mencionar que la ley de Moore termina, aunque él menciona que ya se veía venir, algunas personas (como yo), de verdad no lo vieron venir. Pero cabe recalcar que la parte de la finalización es en etapas y realiza una analogía respecto a la minería y como el desarrollo tecnológico en el área de procesamiento ha sufrido cambios.
Lo que yo rescataría de este artículo es la conciencia que Herb Sutter quiere compartirnos acerca de que ahora vivimos en una jungla, y todo puede suceder respecto a la tecnología, además de que esto cambiará sin duda nuestra manera de crear sistemas.

martes, 4 de febrero de 2014

Paralelismo para todos

Después de haber leído el artículo "Parallel Computing on any Desktop" escrito por Ami Marowka y publicado en el Communications of the ACM en septiembre del 2007, me doy cuenta que ya tiene algo de rato este tema del paralelismo y el interés por descubrir más formas de aprovecharlo, tanto en hardware como software.
Como es muy conocido de todos, antes todas estas cosas, disponibles ahora al alcance de nuestro bolsillo, eran excesivamente costosas y se encontraban para uso exclusivo de investigación, o en grandes compañías o universidades.
Si se requería procesamiento en paralelo se utilizaba una técnica de clústers (llamada Beowulf), fácil de construir y de aumentar de tamaño, pero compleja en cuanto a su programación y manejo. Se requería personal especializado en el área. Aun con esta técnica, la adopción del paradigma por resolver los problemas en manera paralela no aumento.


Luego de esto se comenzó con el desarrollo de los procesadores multinúcleo, claramente en sus principios estos eran muy costosos y sólo disponibles para ciertas arquitecturas. Pero ahora tener un procesador con doble núcleo está a nuestro alcance, y si no es de dos núcleos puede ser de n, no olvidemos que ya hay arquitecturas de hasta 4 núcleos.
El desarrollo del hardware ha sido muy importante en este tema, así como también lo ha sido el software, es así como la librería OpenMP hace su aparición permitiendo al usuario un fácil uso de los hilos de ejecución así como la implementación de estos en el código, haciendo así que el usuario se olvide de crear, destruir y manipular threads y solo se preocupe por el área de código que desea paralelizar. Pero hay que aclarar que algunos problemas demandan cierta modelación y OpenMP no llega a soportar.

En conclusión me parece interesante que desde antes se tuviera interés en el tema, pero que la complejidad del mismo haya detenido un poco su desarrollo.

viernes, 24 de enero de 2014

Free Lunch....

El título de este post me recuerda mucho a aquellos abusadillos en la escuela que le quitaban el almuerzo a otros, aunque después de leer el artículo  “The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software” escrito por Herb Sutter me quedé pensando que mucho tiempo los de nuestra especie (Me refiero a aquellos que se dedican a programar, escribir líneas de código, a diseñar soluciones, sí ingenieros en sistemas) hemos abusado de los sistemas o arquitecturas de las PC's aprovechando su capacidad y deseando que tengan más y más para que así nuestras soluciones sean rápidas.

Hace ya algún tiempo algunos nos habremos dado cuenta que este asunto ha quedado estancado, las computadoras no ofrecen más procesamiento o velocidad, actualmente la velocidad de un procesador ronda entre los 2 y 3 GHz. Al parecer las empresas han apostado a incrementar los procesadores y ofrecer tecnologías con más de un procesador. 

Pero esta solución nos lleva a lo siguiente, si la mayoría de los programas se encuentran programados solo para un procesador y sus tareas no ser divisibles, en qué nos va a ayudar que nuestro equipo tenga más de un procesador, sin duda será inútil, además de qué muy probablemente ese programa no se encuentre optimizado.

Debo afirmar que conozco a personas que no se preocupan por la optimización de sus programas o por aprovechar las nuevas arquitecturas en el mercado, muchas son de la filosofía "qué utilice los recursos que quiera" pero creo que eso ya debería de terminarse si estamos en una era dónde al parecer no habrá muchos avances en cuanto a velocidad de procesamiento sino a cantidad.

Considero que es importante cambiar la manera de pensar en las soluciones y crearlas para que puedan separarse, aunque también hay cosas que todos sabemos que no pueden ser cambiadas o que pueden solo ejecutarse con cierta secuencia de pasos que no pueden dividirse. ¿Tú que piensas acerca de esto? 
Te invito a que comentes acerca de este tema y espero te haya agradado mi aportación.

miércoles, 15 de enero de 2014

Yo!!

Esta es la primera entrada a este blog dedicado a la materia de programación multinúcleo y trata acerca de las expectativas del curso y algunas cosas interesantes sobre mí.

Programación multinúcleo... sólo a mí me gusta meterme en camisa de once varas como dicen por ahí, la verdad es que el nombre resultó mucho de mi interés y más porque algo como programar en ese estilo solamente lo he escuchado en temas referentes a investigación, cosas cero comerciales, pero aún no sé por qué, si la tecnología esta avanzando hacia allá, pero en fin. Espero que esta clase me brinde mayor conocimientos en lenguajes que te permitan desarrollar y ejecutar programas en varios núcleos. Además es un paradigma completamente diferente a como estamos acostumbrados a programar por lo tanto espero que también mejore mi habilidad de resolución de problemas así como el diseño de mis algoritmos (qué es una de mis cosas favoritas). Tengo muchas expectativas sobre lo que sucederá pero sé que valdrá la pena.

Respecto a mí, no puedo contar muchas cosas, pero de mis pasatiempos es ver series y jugar (juegos de PC o Magic). Libros... hace mucho que no son mis compañeros, pero creo que pronto retomaré la lectura, aunque quizá sea de cosas de mi trabajo, como patrones de diseño o algún lenguaje en particular.

Música, me gusta mucho el pop, aunque mi favorito es el kpop (pop en coreano), no me pregunten como es que me comenzó a gustar, pero sin duda lo disfruto mucho. Mi grupo favorito es Super Junior.

Acerca de pelis, la última que vi... si no me equivoco fueron los Juegos del Hambre: En Llamas. Disfruto mucho del género de acción, suspenso y un poquito de terror.

Programas de TV, le he agarrado el gusto a Juego de Tronos, creo que comenzaré a leer los libros debido a esto :)

Algunas otras cosas singulares de mi persona es que me gustan mucho los rompecabezas y cantar y aunque no lo haga muy bien...

Pues eso es todo, espero se hayan divertido con mi post. Nos vemos pronto!