martes, 17 de marzo de 2009

Abstracciones: interfaz hardware-software

La computadora es una herramienta eficaz para la resolución de problemas que al hombre se le escapan, ya sea por potencia de cómputo o por el tiempo que le tomaría obtener una solución aceptable. Para que un problema pueda resolverse computacionalmente es preciso expresarlo en términos comprensibles por la computadora. El desconocimiento de la arquitectura del procesador es, a menudo, una causa de pérdida de eficiencia o de semántica en los desarrollos. Las abstracciones y la metodología son, en este aspecto, herramientas de gran utilidad. Las nuevas arquitecturas multicore (de varios núcleos) están siendo un gran catalizador para el uso de metodologías y abstracciones avanzadas en el mundo de la computación de altas prestaciones (programación paralela).



1.- Las abstracciones y el avance de la tecnología

Las abstracciones acercan al esquema de acción y actuación del hombre aquellos problemas a priori irresolubles de manera directa. Siempre, en ciencia e ingeniería, se han usado abstracciones. Quizás el campo de la ingeniería que más se preste a ello sea el de la computación. Por todos es conocido que las computadoras existen para resolver problemas propuestos por el hombre. El modelo de procesamiento o cómputo de las mismas difiere en cierta medida del que nosotros usamos. Un ejemplo de esto se puede encontrar, en primera instancia, en el álgebra y el sistema de numeración de las computadoras, que difiere del nuestro. Una computadora emplea el álgebra de boole y el sistema de numeración posicional binario, aspectos que la limitan lo suficiente como para que cualquier problema que deseemos que resuelvan deba ser correctamente planteado.

Como ejemplo más claro de esta situación uno puede pensar en la suma. La suma es una operación aritmética que el hombre desde milenios aborda con un algoritmo muy sencillo en el que la herramienta más empleada es el acarreo (“me llevo uno”). Esta operación de “acarreo” impide que un procesador haga la operación de suma en paralelo; en su lugar ha de “emular” el comportamiento humano, sumando bit a bit los dos números involucrados en la operación, obtener el “acarreo” y abordar entonces la operación de suma de los dos bits siguientes.

Esta manera de operar que adopta el procesador le viene impuesta por el hombre. Para salvar la ineficiencia de la operación se ha de recurrir a numerosas y complejas abstracciones. Estas abstracciones resuelven en cierto modo el retraso de la suma. Para ello, se precisa incorporar estas abstracciones como circuitería extra (anticipadores de acarreo, puede consultarse un sencillo ejemplo de esto en [1]). Éste es el ejemplo de que las abstracciones median entre el hombre y el procesador.

El vertiginoso avance de las nuevas tecnologías, liderado por el punto de inflexión que estamos presenciando en la arquitectura de los procesadores, impide que el software avance con la misma velocidad que el hardware. Las abstracciones se presentan, entonces, como la única herramienta útil para salvar el espacio entre hardware y software sin perder eficiencia.



2.- El cambio de paradigma

El aumento en el rendimiento de los procesadores durante la última década ha avanzado, aparentemente, de manera indefinida. El límite de este aumento en el rendimiento viene impuesto por las leyes de la física. Hasta ahora, las betas de rendimiento más aprovechadas eran la escala de integración (incrementar el número de puertas por unidad de superficie), aumentar la frecuencia del reloj y el consabido ILP (o paralelismo de instrucciones). Al principio del año 2003 este crecimiento al que nos tenía acostumbrado la industria alcanzó el límite impuesto por la física (consumo y disipación del calor), lo que impide que se siga incrementando la frecuencia del reloj. Si no se puede seguir incrementando la velocidad de reloj, se pretendió que la responsabilidad recayera sobre el ILP que comenzó a evolucionar para aplicar técnicas muy complejas de paralelismo (predicción de salto, ejecución especulativa, etc.) que requería superficies prohibitivas dentro del chip.

Hoy por hoy, la única beta por explotar para alcanzar los incrementos de rendimiento a los que el software está acostumbrado es el número de puertas por unidad de superficie. De acuerdo a las expectativas, el nivel de integración se duplicará cada año. Tan ingente cantidad de puertas invita a crear más núcleos dentro del mismo procesador, esperando que en 2012 se sobrepasen los 32 núcleos. El inconveniente es que sólo se apreciará el impacto de esta técnica en el software (rendimiento) si el software es capaz de escalar a través de todos estos núcleos.

El giro adoptado por el hardware ha generado un problema de adaptación entre el software y el hardware, susceptible de ser resuelto haciendo uso de las abstracciones.

Con la aparición de las CPU multi núcleo (multicore) y del inicio de la computación en arquitecturas de muchos núcleos (manycore) se puede considerar que un chip individual, ahora, es un sistema paralelo per-se. Es más, con esta tecnología y salvadas las limitaciones de las que acabamos de hablar, el paralelismo de estas nuevas arquitecturas escala de acuerdo a las leyes de Moore [2]. El verdadero reto se ha trasladado al desarrollo de aplicaciones que escalen, de manera transparente, a la par que se añaden nuevos núcleos a la arquitectura. La evolución de las arquitecturas paralelas (hardware en el que se apoya la computación de altas prestaciones) sigue acuñando a los sistemas con más de un núcleo como arquitecturas que sustituirán a las arquitecturas paralelas convencionales (clusters). Hay mucho software desarrollado para las arquitecturas que hasta hoy son las arquitecturas paralelas por excelencia (clusters) pero la aparición de los multicore hará necesario que se porten todas las aplicaciones y que se adopten nuevas estrategias de desarrollo (metodología de software apropiadas -segundo puntal de la computación de altas prestaciones-), que permita disfrutar del escalado trasparente y de las consecuencias directas en el rendimiento.



3.- Las abstracciones

El lugar donde aparecen las abstracciones es en los lenguajes de programación de alto nivel. Cuanto más alto nivel proporcione este lenguaje, más expresividad y posibilidad de usarlas tenemos. Nótese que la posibilidad de expresar la solución a un problema en términos computacionales siempre ha estado lastrada por culpa de la diferencia de expresividad entre el hombre y el procesador. Que un lenguaje sea expresivo ayuda a la resolución del problema pues el hombre podrá expresarlo mejor y la computadora podrá entenderlo mejor. La carga de la traducción recae en el compilador del lenguaje.

Obviando posibles fuentes de pérdida de rendimiento a la hora de elegir el conjunto de instrucciones, del procesador óptimo para pasar del lenguaje de alto nivel al lenguaje de la máquina, esta posibilidad es útil porque amplía el rango de usuarios de la computación a todo aquel que tenga un problema susceptible de ser resuelto por la computadora, sin necesidad de que éste tenga que conocer los detalles íntimos del procesador en el que se abordará la resolución. La expresividad, cuanta más alta sea, más fiel será la traducción. Las abstracciones son una herramienta muy importante en este punto.

No hay comentarios: