Introducción
Las aplicaciones que dominan el mercado del software
demandan mayor capacidad de cómputo, de forma, permanente en prácticamente
todos los campos del conocimiento: multimedia, procesamiento digital
de señales, 3D, aplicaciones dedicadas, reconocimiento de patrones,
astrofísica, simulación. Esta relación que existe entre el desempeño
de los procesadores y los requerimientos de las aplicaciones, ha
sido un patrón que se ha mantenido desde que en 1954 hizo su entrada
estelar la primera computadora que se fabricó de forma masiva y
que tenía capacidad para realizar operaciones de punto flotante.
Estamos hablando de la IBM 704, la misma que podía ejecutar 40,000
instrucciones por segundo. Cuarenta y seis años después, en el
2010, prácticamente cualquier computadora portátil (o laptop) puede
realizar millones de operaciones por segundo. Esta mejora, en el
desempeño, se ha debido en gran parte al desarrollo de la tecnología
del silicio que ha permitido la miniaturización de los transistores,
incrementando de esta forma el número de transistores que pueden
integrarse en el diseño de los nuevos procesadores (más número
de transistores significa mayor funcionalidad y capacidad en la
misma área).
Desde hace más de 20 años, los arquitectos de computadoras
han utilizado el incremento del número de transistores y la velocidad
que éstos pueden alcanzar, para duplicar el rendimiento cada 18
meses, como fue vaticinado en 1965 por el co-fundador de Intel
Gordon Moore. Hoy en día la tecnología ha seguido poniendo a disposición
de los arquitectos más transistores, sin embargo el paradigma de
cómputo que se había venido utilizando ya no pudo transformar este
recurso tecnológico en el rendimiento con la tendencia seguida
desde 1965. Este fenómeno es también conocido como “Moore’s Gap”,
ya que hay un vacío en cuanto al rendimiento esperado, como resultado
del avance tecnológico. Dos son las razones principales que provocaron
este fenómeno: los modelos de programación siguen siendo fundamentalmente
secuenciales, haciendo cada vez más difícil encontrar paralelismo
en las aplicaciones que se ejecutan en los nuevos procesadores.
Con el objetivo de extraer el máximo paralelismo a nivel de instrucción
los diseñadores implementaron dentro del procesador sistemas de
control muy complejos (segmentación, renombrado, ejecución fuera
de orden, predicción de saltos, pre-búsquedas de instrucciones).
Sin embargo, el rendimiento obtenido estaba muy por debajo de lo
esperado. Esta complejidad en cuanto a la arquitectura de los procesadores
se enfrentó a un nuevo problema: la
disipación de calor. Los niveles de
calor alcanzados por los procesadores son tan altos que resulta
inviable (desde el punto de vista económico y funcional) seguir
manteniendo el paradigma computacional que había logrado llegar
al siglo XXI. De esta forma la industria, prácticamente en su totalidad,
decidió que su futuro estaba en el cómputo paralelo.
La industria decidió que su única opción viable
era remplazar su modelo de uni-procesador complejo e ineficiente
por un modelo de multiprocesador sencillo y eficiente. Esta estrategia
dio entrada a lo que hoy conocemos como procesadores multinúcleo.
Por un lado se estaba resolviendo el problema de la complejidad
del uniprocesador y por el otro, se utilizaría el mayor número
de transistores para incrementar el número de procesadores o núcleos
cada 18 meses, mientras se siguiera sosteniendo lo vaticinado por
Gordon Moore.
En una arquitectura multinúcleo cada procesador
contiene múltiples procesadores (o núcleos), donde cada núcleo
cuenta con su unidad de proceso independiente. El estilo de computación
para este tipo de procesadores es MIMD (Multiple Instruction
Multiple Data), es decir que se tiene la capacidad de ejecutar
más de una instrucción de manera concurrente y que cada una de
estas instrucciones será ejecutada utilizando múltiples secuencias
de datos, llevándonos a esquemas de paralelismo de procesos o hilos.
Esta estrategia también impactó a los sistemas de Supercómputo (o supercomputadoras) considerados como las computadoras con mayor capacidad de cómputo y diseñadas para atender necesidades computacionales complejas que requieren tiempos de cómputo muy grandes. A diferencia de las Supercomputadores anteriores, este tipo de sistemas se integra con miles de procesadores económicos conectados en paralelo, de ahí que se les haya dado el nombre de supercomputadoras masivamente paralelas. Cerca del 20% de los sistemas incluidos en el TOP500 son integrados o construidos en arquitecturas tipo cluster ensambladas con componentes de bajo costo y comerciales (commodity components). De este 20% prácticamente todos utilizan procesadores de 32 bits de Intel y AMD, con plataformas Linux como Sistema Operativo.
Sin embargo, que el modelo de programación por excelencia
siga siendo secuencial, ahora nos enfrenta a un viejo y muy conocido
problema: si las habilidades de la mayoría de los programadores
se basan en modelos secuenciales de programación, ¿cómo paralelizaremos
eficientemente las aplicaciones para que utilicen estos sistemas
masivamente paralelos con múltiples núcleos?
|