La revista Queue de la ACM dedicó su número de septiembre al tema del desempeño en el software. Entre los artículos hubo un caso de estudio para el cual realizaron una larga y reveladora entrevista a Russell Williams. Este hombre habló del software del que es Arquitecto en Jefe y conoce todas las entrañas: Photoshop.

Con detalles interesantísimos, Williams (ex-empleado de Apple, para quien ayudó a desarrollar el sistema operativo Copland) ofreció un completo panorama de los retos técnicos que ha enfrentado Photoshop a lo largo de 20 años. Además deja muy claro que la llamada Ley de Amdahl es uno de los más importantes. Quiero ofrecerles pequeños extractos de la entrevista y algunos comentarios al margen.

El bug oculto

Photoshop es un software pionero en la adopción de técnicas de cómputo paralelo para el escritorio. Williams ha estado al frente desde entonces. Cuenta que esa labor ha sido relativamente sencilla puesto que muchas de las operaciones que lleva a cabo Photoshop son naturalmente paralelizables e independientes, y poco han tenido que hacer sincronizarlas. No obstante, un error de programación escondido por 10 años limitó esas posibilidades y por ende el desempeño del software.

[...] el bug con más larga vida que conozco de Photoshop [...] Cada par de versiones reestablecíamos la búsqueda [...]

Williams y su equipo sabían que el bug estaba localizado en cierta parte del código dedicada a las operaciones asíncronas de E/S. Tenían que desactivarla parcialmente para evitar el bug y en consecuencia aceptar que Photoshop no se ejecutaría tan veloz como podría.

Eventualmente descubrieron que el problema estaba relacionado con el sistema operativo. Encontraron que para la misma tarea de manipulación de archivos Mac implementaba una función atómica (indivisible) cuando Windows lo hacía con dos: una fuente común de errores cuando existe concurrencia de tareas de cómputo. En fin, ese sólo conocimiento ayudó a dar con el bug, 10 años después.

El Muro de Amdahl

En bien conocido que una tarea de cómputo dedicada al procesamiento de imágenes puede dividirse en subtareas prácticamente independientes entre sí y que bien pueden ejecutarse en paralelo. Williams cuenta que en el caso de Photoshop

procesamos [e.g., una imagen en memoria] sobre múltiples procesadores y luego separamos nosotros mismos pedazos de ella en hilos para cada CPU.

En 1994 Photoshop tomó ventaja de la arquitectura de multiprocesamiento simétrico que Windows NT les proveía. Asimismo con Mac. Desde entonces el software ha sido capaz de aprovechar sin problemas equipos con 2 y 4 CPU. Hoy en día ese éxito está amenazado por la Ley de Amdahl.

Pero, ¿qué es la Ley de Amdahl? En términos simples, se trata de una fórmula para estimar hasta qué punto un sistema puede incrementar sus prestaciones cuando una o más de sus partes mejoran. Suele usarse en computación paralela para predecir el aumento máximo de velocidad (speedup) de un sistema con múltiples procesadores.

Por ejemplo, si un CPU tarda 10 minutos en realizar una tarea, lo ideal es que 10 CPU tarden 1 minuto. Y, ¿si sumamos 100 CPU? ¿1000 CPU? De hecho, de aumentar la cantidad de CPU en un punto dado observaríamos que el tiempo de procesamiento ya no decrece. Esto obedece a diversas razones, una de ellas (típica hoy en día), es el cuello de botella establecido por el ancho de banda de acceso a memoria, que es mucho más lento que el CPU, ávido de datos por procesar.

Photoshop está limitado por la Ley de Amdahl porque

  1. Muchos de sus procedimientos son seriales, como decidir si merece la pena que una imagen sea procesada en la GPU o en el CPU. "Si pasamos 10% de nuestro tiempo haciendo eso, esto es suficiente para no permitirnos escalar más allá de 10 procesadores"

  2. Usar 8 o 16 procesadores, por ejemplo, implica dividir el procesamientos de imágenes en tareas aún más pequeñas, lo que a su vez lleva a invertir cada vez tiempo extra en tareas de sincronización, en particular cuando hay inevitables operaciones seriales de por medio.

Así, la llamada Ley de Amdahl es una suerte de "Muro de Amdahl".

Software, hardware y escalabilidad

Por un lado está el hardware de nuestros equipos de cómputo, que ha evolucionado para conformar complejos centros de procesamiento de bits. En ellos encontramos arquitecturas de CPU que según el caso son multicore, SMP, hyperthreading, NUMA, 32 o 64 bits, o cierta combinación de esas tecnologías. A esto debemos sumar el hardware GPU y sus valiosas prestaciones (véase la supercomputadora personal Tesla de NVIDIA). No pasarán muchos años antes de poder contar a precios accesibles equipos con 8 o 16 procesadores y arreglos más complejos de GPU.

Por otro lado tenemos el software en general, que ya sea por razones pragmáticas o históricas, es invariablemente serial u ofrece concurrencia limitada. Es decir, software que no ha estado aprovechando de forma óptima las capacidades para cómputo paralelo o concurrente en el hardware. Entre las excepciones (obvias) están el software para videojuegos, multimedia (e.g., VLC) y más recientemente navegadores web (e.g., Chrome).

Creo que si el software de escritorio logra avanzar hacia el cómputo paralelo, tendrá en la experiencia de software como Photoshop (y otros, sin duda) un punto de referencia para hacerlo mejor para enfrentar el problema de la escala y el desempeño. Vamos, para saltar con éxito el dichoso muro.

Imágenes: PhotoshopNews | HONGKIAT

Suscríbete gratis a Hipertextual

Estamos más ocupados que nunca y hay demasiada información, lo sabemos. Déjanos ayudarte. Enviaremos todas las mañanas un correo electrócnio con las historias y artículos que realmente importan de la tecnología, ciencia y cultura digital.