# Michael Abrash

Michael Abrash es un programador de videojuegos y escritor técnico especializado en la optimización de procesadores 80x86 usando lenguaje ensamblador. Por lo regular comienza una discusión técnica comparando el asunto técnico en cuestión con sus experiencias en la vida diaria. Su manera de escribir motiva al lector a pensar creativamente y abordar la resolución de problemas técnicos de una forma innovadora.

## Programador de Videojuegos

Antes de ser un escritor técnico Abrash fue un programador de videojuegos cuando se empezaron a comercializar las primeras computadoras de IBM. Su primer juego comercial, Space Strike, fue lanzado en 1982 y arrancaba cuando la computadora se encendía. Fue coautor de varios juegos de PC con Dan Illowsky quien previamente creó Snack Attack para la Apple II. Abrash y Illowsky trabajaron juntos en Cosmic Crusader (1982), Big Top (1983) y Snack Attack II.
Después de trabajar en Microsoft en los gráficos usados por el sistema operativo Windows NT 3.1 usando código ensamblador, regresó a la industria de los videojuegos a mediados de los noventas para trabajar en el videojuego Quake de id Software. Algunas partes de la tecnología que usa Quake están documentadas en la columna que publicaba para la revista Dr. Dobb's Journal, llamada Abrash's Ramblings in Realtime. Después de que Quake saliera a la venta, Abrash regresó a Microsoft para trabajar en investigación de lenguaje natural, luego se movió al equipo del primer Xbox en el 2001.
En 2002 trabajó para RAD Game Tools, donde él contribuye el software de renderizado de la compañía Pixomatic, el cual emula la funcionalidad de una tarjeta gráfica con un nivel similar a DirectX 7 y es usado como el software de renderizado en juegos como Unreal Tournament 2004. En esa compañía el y Mike Sartain diseñaron una arquitectura nueva llamada Larrabee, la cual es parte del proyecto GPGPU de Intel. A finales del 2005, Pixomatic fue adquirida por Intel.
Gabe Newell, director general de Valve, menciona que ha "tratado de contratar a Michael Abrash desde siempre. [...] Cada 3 meses vamos a cenar y le pregunto '¿ya estás listo para trabajar con nosotros?" En el 2011 Abrash se unió a Valve.
El 28 de marzo de 2014, la compañía de realidad virtual Oculus VR, público un comunicado en el que menciona que Michael Abrash se une a la compañía como científico en jefe. Esto sucede tres días después de que Facebook anunciara la compra de Oculus VR.

## Escritor Técnico

En los 80s fue escritor para la revista Programmer´s Journal. Los artículos publicados en esa revista fueron condensados y publicados en su libro de 1989, Power Graphics Programming.
Su segundo libro, Zen of Assembly Language (1990), se enfoca en escribir eficientemente código de ensamblador para el procesador de 16 bits 8086, pero para cuando su libro salió al mercado el procesador 80486 ya estaba disponible. El tema principal del libro era que el rendimiento del ordenador debe de medirse todo el tiempo; el libro incluye una herramienta llamada Zen Timer para medir si las optimizaciones al código fuente realmente están funcionando.
Mucho del contenido de Zen of Assembly Language fue actualizado en el libro Zen of Code Optimization: The Ultimate Guide to Writing Software That Pushes PCs to the Limit (1994), además de añadir material nuevo. La presentación de un programa de refinamiento gradual demuestra empíricamente como el rediseño de algoritmos puede mejorar el desempeño en un factor de 100. El recodificar lenguaje ensamblador por otro lado solo puede mejorar el desempeño en un factor de 10. Muestra cuán elusiva la mejora de desempeño puede ser; el solo mejorar el desempeño en una subrutina puede exponer cuellos de botella en otras. También demuestra las mejoras de desempeño usando instrucciones en ensamblador específicas del procesador, en comparación a optimizaciones con lenguaje ensamblador usado en general en varios procesadores.
Otra lección que Abrash ofrece es como las mejoras de desempeño obtenidas, micro optimizaciones, pueden desaparecer o incluso hacer el programa más lento. Fue capaz de mejorar la velocidad de sus programas al contar cuidadosamente los ciclos del reloj del procesador en cada instrucción, para luego ordenarlas de tal forma que usaran el menor número de ciclos posible, aunque el número de ciclos de reloj de cada instrucción cambiaba con cada nueva implementación de la arquitectura x86 y, como resultado de esto, los beneficios que obtenía en velocidad se perdían de una generación de procesadores a otra. Por ejemplo, la instrucción orientada en bit, "XOR EAX, EAX" (el ejemplo anterior está en la sintaxis de ensamblador usado por Intel) era la manera más rápida para establecer un registro a cero en las primeras generaciones de los procesadores x86, pero la mayoría del código es generado por compiladores, y los compiladores rara vez generan instrucciones XOR, así que los diseñadores decidieron mover las instrucciones generadas por el compilador que se usaban más frecuentemente al principio de la lógica de decodificación, haciendo que la instrucción literal "MOV EAX, $0" se ejecutara más rápido que la instrucción XOR. Aun así, el código ensamblador que es cuidadosamente optimizado en general se ejecutara bien en procesadores x86 más recientes, incluso sin optimizar para las nuevas arquitecturas. La razón es que las políticas de optimización cambian gradualmente entre arquitecturas, así que varias optimizaciones que se asumen válidas en arquitecturas anteriores siguen funcionando en arquitecturas nuevas, por ejemplo "la aritmética de enteros es mucho más rápida que la aritmética de punto flotante" o "el minimizar el acceso a memoria para maximizar el uso de registros".
En 1997 el libro Graphics Programming Black Book fue publicado, es una colección de sus artículos cuando escribía para la revista Dr. Dobb's sobre su trabajo en el subsistema de gráficos para Quake 1. Actualmente se encuentra disponible de manera gratuita en la página web de la revista.