lunes, 23 de noviembre de 2015

Harder, better, faster, SIMD

Los sistemas computacionales son sin duda alguna indispensables para múltiples actividades cotidianas. Podemos realizar actividades de oficina, buscar puntos específicos en la ciudad, ver fotos, editar videos, reproducir música, y muchas otras cosas más. Sin embargo, muchas de las aplicaciones más recientes no existirían de no haber sido por el desarrollo de los lenguajes de programación, y de las computadoras mismas.

Todos los lenguajes de programación tienen su origen en un lenguaje final: el binario. El binario es el verdadero dialecto computacional. Pero este no es un lenguaje que sea fácil de programar, y mucho menos de leer. Dado esto, se implementó una tecnología que permitiera a un usuario con  conocimientos suficientes acerca del hardware, para poderlo programar: el ensamblador.

Una de las variantes del ensamblador, es la implementación tipo SIMD (Simple Instruction, Multiple Data). Este tipo de implementaciones en ensamblador permiten agilizar el procesamiento de instrucciones que se repiten (como en un ciclo for en C), de tal forma que se aprovechan los componentes del procesador (registros y memoria caché, principalmente). Sin embargo, el uso de este tipo de implementaciones tiene ciertas restricciones:

·       1.  No es fácil escribir un programa en ensamblador si no se tiene una idea de qué se va a hacer.
·        2.  Al nivel de programación que tenemos hoy en día (por la complejidad de los lenguajes para su fácil uso), si no sirve en un lenguaje de nivel superior a ensamblador, no tiene caso hacerlo en ensamblador.
·         3. Dependiendo de la arquitectura del procesador, se deben considerar el número de bits y bytes a procesar en los registros.
·         4. El total de bytes a procesar debe ser múltiplo del total de registros a utilizar, siendo también congruente con el número de bits de éstos.


Este tipo de implementaciones resulta interesante, ya que una aplicación puramente en C, puede alcanzar speed ups de más de 20 unidades, cuando la implementación del código paralelizable es una extensión SIMD bien realizada.

No hay comentarios.:

Publicar un comentario