domingo, 30 de abril de 2017

Teaching the SIMD Execution Model

Hoy hablaré de un artículo escrito por el profesor Ariel Ortiz sobre la enseñanza del modelo SIMD (Single Instruction, Multiple Data) de programación en ensamblador.

Como es tradición, comenzaré con la canción de esta entrada, y dado que será la última entrada del curso (no necesariamente del blog), he elegido una canción especial, la canción de la entrada será "Goodbye" del grupo Coreano 2NE1, espero les guste.


Aprender lenguaje ensamblador es difícil, aprender lenguaje ensamblador utilizando instrucciones para desarrollar aplicaciones concurrentes es aún más díficil, programar en lenguaje ensamblador requiere conocer a muy bajo nivel las especificaciones del procesador, además de conocer instrucciones crípticas que te hacen pensar que resolver bugs para programas de COBOL no sea tan malo.

Sin embargo, considero que tener una idea general de cómo programar en ensamblador aporta un gran área de conocimiento a un desarrollador, aunque quizá no lo utilice en la práctica, conocer lo que hay detrás de las llamadas de otros lenguajes de más alto nivel puede ayudar al desarrollador a entender los detalles de implementación de más bajo nivel, lo cuál lo ayuda a entender mucho mejor un sistema, incluso ayudando al desarrollador a tomar mejores decisiones de arquitectura (puede incluso evitar que un desarrollador decida utilizar un lenguaje monstruoso, como Lua).

Los nuevos procesadores soportan un set de instrucciones que permiten procesar en paralelo cierta información, por lo que un programa desarrollado directamente en lenguaje ensamblador que utilice instrucciones de procesamiento concurrente puede acelerar una aplicación de una forma que con cualquier otro lenguaje, a menos que se utilice un compilador de alto rendimiento se podría obtener, el tradeoff es que el desarrollador debe comprender perfectamente cómo se debe procesar la información a un nivel muy bajo para evitar problemas que son practicamente imposibles de debuggear.

Creo que aprender a desarrollar en lenguaje ensamblador, aunque sean aplicaciones relativamente sencillas, brinda una forma de pensar muy poderosa al desarrollador, ya que lo ayuda a conocer a nivel extremadamente bajo como se mueve, procesa y almacena la información en el procesador.

Wololo.

No hay comentarios:

Publicar un comentario