Contenido
Introducción
El presente texto nació como un
artículo que por la magnitud del tema no tardo en convertirse en
un pequeño ensayo, aún así lo presentado todavía
califica apenas como un resumen. La idea es ofrecer una visión general
sobre las arquitecturas denominadas multi-core, y las implicaciones
más directas y reconocidas a corto, y mediano plazo. Con Intel trabajando
a toda marcha en sacar al mercado más y más procesadores
basados en sus últimos diseños, y la reciente fusión
entre AMD y ATI queda claro que éste tema apenas está empezando
a tomar forma.
Los
Próximos 25 Años de la PC
El pasado 12 de Agosto la Computadora Personal,
o PC por sus siglas en inglés, cumplía nada menos que 25
años. Festejando así un cuarto de siglo lleno de altibajos,
un cuarto de siglo en el que cambió nuestra manera de trabajar y
comunicarnos; un cuarto de siglo que convirtió a los ordenadores
de un lujo a una dúctil herramienta --casi-- de primera necesidad.
Para los países inudustrializados imaginar su diario vivir sin computadoras
es prácticamente imposible, para aquellos en vías de desarrollo
se han convertido en instrumentos que ayudan a emparejar las cosas un poco.
Y, a pesar de todo esto, la evolución detrás bambalinas de
su hardware recién ahora promete revolucionar nuestras vidas.
Aunque existieron grandes avances entre
la arquitectura ofrecida por un procesador 80286 a un Pentium
IV, los cambios y arreglos no eran del todo extremos. Lo que más
variaba, desde el punto de vista del usuario final, era la velocidad neta
a la que trabajaban y por ende la sofisticación del software que
podían ejecutar. Más allá de esto, y cualquier diferencia
entre un Word 5.0 y su versión 2003, los cambios y mejoras resultaban
muy superficiales.
Desde el inicio de la Era PC existió
una competencia no anunciada entre los productores de hardware y los desarrolladores
de software. Los primeros hacían todo lo que podían para
ofrecer más y más ciclos de procesador al usuario, mientras
que los segundos se ocupaban de poner en uso aquellos disponibles y exigir
por más. Hasta hace menos de cinco años los líderes
eran los creadores de aplicaciones y programas. La familia de procesadores
Pentium IV (de Intel) es, quizá, la primera en establecer una superioridad,
o en todo caso una ventaja, en la carrera para las productoras de microcircuitos.
A medida que los CPUs se hacían
más y más rápidos el número de líneas
de código por programa que debía ser ejecutado se doblaba
o triplicaba. Esto último se debía más a nuevos paradigmas
de programación y desarrollo de software, que a un incremento real
en las capacidades o características de las aplicaciones. El progresivo
e imparable incremento en la velocidad de los CPU promovió, sin
saber, una total indiferencia por parte de los desarrolladores respecto
al tema de optimizar su código y librerías de trabajo (en
programación una librería es un conjunto de funciones/objetos
que actúan como una entidad completa, p. ej. una librería
de funciones trigonométricas; un objeto puede ser una 'ventana
de presentación' más sus atributos particulares --tamaño,
color, posición-- y los métodos --procesos o funciones--
que operan sobre la misma).
Uno de las factores que ayudo a cambiar
el balance en favor de los productores de microprocesadores fue la aparición
del Windows XP. Su mejor y más eficiente implementación
de un sistema multihilo (multithreaded) permitió un uso óptimo
del CPU de un equipo, aún bajo condiciones en las cuales se ejecutaban
varios programas simultáneamente (multitasking). Con aplicaciones
de uso común en el entorno de la oficina o el hogar, un Pentium
IV de última generación invierte hasta un 90% a 95% de sus
ciclos en un hilo denominado Proceso Inactivo del Sistema, lo que
ya dice bastante sobre la ventaja lograda por el hardware. Programas de
uso común vienen a ser los siguientes: MS Word, MS Excel, MS PowerPoint,
WinAmp, Firefox, Netscape, Internet Explorer, Outlook Express, GetRight,
Windows Media, y QuickTime, aunque la lista es mucho más extensa.
Es de esperar que el Windows Vista,
y su entorno de desarrollo .NET Framework, requieran de hardware
más capaz y veloz, en particular debido a la gran cantidad de nuevas
características y extensiones que incluyen, la mayoría de
las cuales no son simples mejoras de lo que se puede ver en Windows
XP. Las buenas noticias son que, sin importar el incremento en los
requerimientos que el software de la próxima década pueda
tener, gracias a la nueva generación de microprocesadores y la arquitectura
multi-core
(multinúcleo) todo indica que de ahora en más aplicaciones
y programas nunca se volverán a encontrar con que requieren más
ciclos de procesador de aquellos que una PC --debidamente compatible--
puede ofrecerles*.
Por los eventos que estamos viviendo hoy,
es muy probable que dentro de unos años el término Ordenador
Personal ya no sea aplicable para un computador
multi-core, al punto
que tal vez sea más apropiado irse acostumbrando a llamarlos Ordenador
Central Personal (Personal Mainframe), u Ordenador Central del Hogar
(Home Mainframe). Después de todo, para aprovechar del poder
de procesamiento que un
multi-core de 32 o más núcleos
posee no habrá otra que conectarlo a varias terminales tontas, usarlo
como DVD player, y hasta como
jukebox para el juego de parlantes
de la sala de estar. Resulta curioso que justo éste año en
que la PC cumple cuarto siglo de vida, también sea el momento en
el que empezamos a tener que verla con nuevos ojos y como perteneciente
a una nueva categoría de producto electrónico. Tal y como
le ocurrió a Plutón que fue recategorizado, muy pronto algo
similar puede que le pase al ordenador, o computador(a), personal.
La
Arquitectura Multi-Core a Grandes Rasgos
Sin entrar en detalles concretos del modelo
que siguen Intel o AMD, el concepto general que manejan ambos
es muy similar. La idea básica detrás multi-core es
la siguiente: en una misma pastilla de microchip, die en inglés,
en vez de armar un sólo bloque de circuito integrado, sea de naturaleza
genérica o específica, se arma más de uno. Por ser
entidades funcionalmente independientes cada uno de estos C.I. se denomina
core
(núcleo). Según el tipo de microprocesador que se desea obtener
cada uno de estos núcleos cuenta con la circuitería de soporte
necesaria para llevar acabo una tarea determinada. Por ejemplo, en el caso
de un CPU son núcleos de propósito general (que incluyen
memorias cache y unidades de procesamiento de punto flotante) , para un
GPU son núcleos de shader u orientados al procesamiento de
imágenes, para un PPU son núcleos de procesamiento de algoritmos
de simulación de física newtoniana.
La razón para éste rotundo
cambio en perspectiva y arquitectura es, en esencia, bastante trivial:
el incremento lineal y progresivo de la velocidad llegó a un punto
en el cual requiere de demasiada energía y genera mucho calor para
ser práctico. Además, el número de transistores con
los cuales ya es posible trabajar, alrededor de los mil quinientos millones,
causan un incremento en la complejidad de los diseños que muy pronto
ocasionará más problema que el calor o el consumo de energía.
La solución lógica, alcanzada con los multi-core,
es repetir diseños que se sabe funcionan rodeados de leves cambios
y extras para que trabajen como una sola entidad física. Baste decir
que una arquitectura Pentium (60-66 MHz, Marzo 1993), que funcionaba
muy bien, requiere de 3,1 millones de transistores, con la densidad que
permite un Itanium 2, y su millar y medio de millón de transistores,
se podría fácilmente integrar unos 483 Pentium en
él.
Las ventajas a corto plazo que la nueva
arquitectura ofrece incluyen ahorros progresivos, y proporcionales, de
energía a medida que se incrementa el número de núcleos,
además de una disipación menor de calor, pero, quiza lo más
importante, es que permitirá el ingreso a una Era en la cual el
paralelismo es a nivel físico y real, y no a nivel software y lógico
como hasta el momento ocurría. Esto quiere decir que en vez de ejecutarse
varias aplicaciones a la vez gracias a la velocidad del CPU, creando una
ilusión de concurrencia, se podrá hacerlo gracias a la presencia
de varios núcleos de procesamiento dentro un mismo microprocesador,
lo que es como tener varios CPU pero en un mismo paquete. A éste
respecto, la imagen utilizada en un texto de Intel sobre el tema es de
lo más apropiada para dar un ejemplo simple del concepto general:
[E]n vez de lograr que más
vehículos vayan por una misma vía incrementando la velocidad
a la que conducen, empezaremos a trabajar con vías paralelas que
permitan a más vehículos movilizarse simultáneamente.
La mayor distinción entre un entorno
multi-procesador, tal y como los conocemos hoy, y uno multi-core
es que éste último permite al usuario común contar
con paralelismo por hardware, algo que estaba sólo reservado a laboratorios,
universidades, y centros de investigación modernos hasta hace un
par de años. Cuarto siglo después de su lanzamiento la PC
tiene todas las intenciones de renovarse a si misma, y en el proceso ser
el foco de una revolución total del modo en que trabajamos, nos
distraemos, nos comunicamos, y vivimos.
A finales del siglo XX el incremento en
el número de transistores con los que se podía trabajar hizo
que muchos diseñadores de hardware propusieran la integración
del GPU con el CPU, una tendencia que en sus días enfrento mucha
controversia además de problemas técnicos. El caso es que
en ese momento, y otros tantos antes, la unificación de todos estos
microprocesadores no resultaba práctica desde más de un punto
de vista. La arquitectura multi-core pone el tema nuevamente sobre
la mesa y en ésta oportunidad las cosas parecen estar finalmente
a su favor. Todavía queda por ver si esto acaba siendo ventajoso,
o no, para el usuario.
Con CPUs que poseean 2, 4, u 8 núcleos
el integrar aquellos que cumplen procesamiento general con los enfocados
a gráficos quizá todavía no sea lo ideal. Sin embargo
cuando el número se incremente a 16, 32, o 64 las oportunidades
y la viabilidad se expanden, al final de cuentas es más que sólo
probable que en un hogar común usar el 50% de esos núcleos
para ejecución de software como tal sea más que suficiente.
A esto hay que añadir el nuevo modelo de shader unificado
que trae el DirectX 10, que tal vez permitiría diseñar
un núcleo universal que puede a su vez funcionar como shader.
Ésta última especulación adquire aún más
sentido tras la adquisión de ATI por parte de AMD (Julio 24, 2006),
y que entre sus planes esté el "[a]provechar de los conocimientos
de cada uno en su área de mayor experiencia para desarrollar productos
nuevos."
No sería de extrañar que
en un futuro cercano se hable de núcleos híbridos capaces
de trabajar como procesador general (lo que hoy viene a ser un CPU), procesador
gráfico (un GPU) o, inclusive, procesador de simulación de
física newtoniana (un PPU, como el PhysX de Ageia),
todo dependiendo de cuál poseea mayor demanda según lo detecte
el sistema operativo, o el propio hardware***. Otra alternativa sería
presentar arquitecturas multi-core que puedan adaptarse a mercados
particulares ofreciendo configuraciones de núcleos que varían
según la tarea, o tareas principales que el comprador tenga en mente.
Por ejemplo, habría modelos con 32 núcleos todos tipo CPU,
otros tendrían 16 núcleos CPU, 8 GPU, y 8 PPU; el primer
caso podría servir en oficinas donde no se requiere gran poder de
procesamiento gráfico, el segundo modelo podría estar enfocado
al hogar donde sería bueno contar con un procesador capaz de ejecutar
vídeojuegos que exigen capacidad gráfica y simulación
de física newtoniana. Las alternativas son muchas, y lo anterior
no es necesariamente pura especulación.
Las
Implicaciones Para el Software
Actualmente todavía hay bastante
debate sobre las implicaciones a mediano y largo plazo de la nueva arquitectura,
en especial porque para ser aprovechada en un 100% requiere de software
que éste diseñado desde un inicio con compatibilidad multi-core.
Es decir, aplicaciones y programas que hayan sido desarrollados con la
capacidad de aprovechar hardware que permite la ejecución concurrente
de hilos de ejecución (thread of execution). Hoy en día,
si bien existe bastante software con la habilidad de trabajar con hilos
el caso de que los mismos pueden ejecutarse independientemente y en paralelo
no siempre se da. En términos sumamente simplificados se puede ver
a un hilo de ejecución como código (pseúdo)autónomo
que puede valerse por si sólo.
El problema que la arquitectura multi-core
resalta sobre la ejecución multihilo es más que todo lógico,
porque el concepto en sí existe desde la epoca del Windows 95.
Con un único CPU trabajando a grandes velocidades el sistema operativo
lograr crear la ilusión de ejecución simultánea gracias
a una técnica denominada time slicing (particionamiento de
tiempo), mediante ésta se asigna a cada hilo un tiempo de procesador,
mismo que a dos mil millones de instrucciones por segundo muy bien puede
percibirse como que todo ocurre de forma concurrente. El detalle aquí
es que por más que se tenga decenas de hilos, sean de programas
diferentes o no, su ejecución es líneal, uno tras otro, si
bien a grandes velocidades. La caja de pandora que abre la nueva arquitectura
es que permitiría la ejecución de cada hilo en paralelo,
y en tiempo real, con un núcleo de ejecución asignado a cada
uno de ellos (en un caso ideal).
No obstante que podemos pensar en variedad
de tareas que tienen todo el potencial necesario para aprovechar al máximo
de una ejecución simultánea, desde el punto de vista de los
programadores la historia es otra. Uno de los grandes problemas con el
paralelismo en general es mantener los datos en memoria consistentes y
evitar su corrupción. También es importante un control eficiente
del acceso a la información compartida que poseen los hilos en ejecución,
tarea que aunque suena sencilla es sumamente difícil de codificar,
más aún cuando hay que pensarla de tal manera que sea compatible
con un sólo CPU, a la vez que con multi-core donde el número
de núcleos puede ser de 2, 4, 8, o más. Por otra parte no
toda tarea que puede ser subdividida para ejecución en paralelo
termina trabajando de forma más eficiente que cuando lo hace linealmente.
Si bien Windows XP puede trabajar
con procesadores multi-core, o dual-core que son la primera
implementación comercial de la nueva arquitectura, el número
de aplicaciones disponibles que realmente pueden aprovechar del núcleo
adicional es sumamente reducido, por no decir casi nulo. Habrá que
esperar por el Windows Vista, y versiones específicas del
software para tareas comunes, para notar las ventajas de la nueva arquitectura.
Personalmente cálculo un mínimo de cinco años, a una
década, para que la comunidad de desarrollo de software alcance
un punto óptimo en el empleo de paradigmas de programación
apropiados, para aplicaciones y programas que puedan trabajar en entornos
que ofrecen paralelismo real a nivel hardware.
El
Poder de una Súper-Computadora en Cada Hogar
En estos momentos se tiene la impresión
de que poca gente realmente logra vislumbrar, en toda su magnitud, lo que
estamos viviendo; las arquitecturas multi-core van mucho más
allá del simple incremento en velocidad y cambio de nombre en un
procesador. Baste decir que Intel está lanzando al mercado varios
modelos que permiten ejecutar desde dos a diez hilos de código simultáneamente
--bajo condiciones ideales--, una burda analogía sería comparar
esto con la ejecución concurrente de diez aplicaciones en equipos
diferentes. Si bien las implicaciones inmediantas de todo esto no son nada
claras, a corto plazo (el lapso de una década) hablamos de que cada
usuario de PC contará, prácticamente, con el poder de procesamiento
que hoy en día sólo tienen las súper-computadoras
(ver siguiente subtítulo).
¿Qué hacer con tanto poder
de procesamiento? Considerando que en la actualidad un procesador Pentium
IV pasa un 90% de su tiempo sin hacer nada, es difícil imaginar
qué más se puede hacer para consumir el doble de ciclos de
procesador, si no más. Éste mismo detalle debe estar en las
mentes de los diseñadores de Intel, y con seguridad los de AMD,
no en vano tienen planeadas tecnologías de soporte que permitan
aprovechar de todo ese poder, tales como las terminales tontas (teclado,
ratón, y monitor sin CPU), la conexión inalámbrica
entre decenas de periféricos, o la promoción a que el reconocimiento
de imágenes y de voz sean cosas cotidianas.
Valga notar que entre el software de escritorio
que más ciclos de procesador requiere están los vídeojuegos,
y ninguno de los que sale al mercado, o tiene planeada su salida, durante
los próximos cinco años fue diseñado con paralelismo
en mente (que se sepa). Varios juegos de última generación
parece que tienen, a uno u otro nivel, la capacidad de aprovechar de procesadores
en la línea de las series Pentium IV con HT, Pentium Extreme, Pentium
D, e incluso Core-Duo, pero en ningún caso es un aprovechamiento
al 100%, o uno ideal. Es muy probable que sean los subsistemas con capacidad
de funcionamiento (semi)autónomo, como los de simulación
de física newtoniana, los que estén beneficiándose
de la presencia de núcleos adicionales trabajando como un hilo de
ejecución (pseúdo)independiente. Lo que en ningún
momento implica, necesariamente, que tengan un diseño enfocado hacia
la ejecución en paralelo. Al menos esa sería la impresión
que se recibe de jugar, por ejemplo, los demos de Maelstrom, ParaWorld,
Call
of Juarez, y Joint Task Force en un equipo provisto de una Pentium
D (posee dos núcleos, pero todavía no aprovecha en su
totalidad de la nueva microarquitectura Core de Intel).
El
Plan de Intel Hasta el 2015 - La Era de Tera**
Lo que éste año llega a un
punto crítico empieza en realidad con el lanzamiento de la familia
Pentium
IV de procesadores, cuya arquitectura permitía la ejecución
de hasta dos instrucciones por ciclo en condiciones ideales. En el 2002
Intel lanza al mercado el Pentium IV con Hyper-Threading, que desde
el punto de vista del sistema operativo se trata de dos núcleos
de ejecución, aunque en realidad es un diseño optimizado
que permite que los recursos del CPU estén un mínimo de tiempo
sin uso, pero que sigue siendo un sólo núcleo.
A finales del 2005 Intel introduce al mercado
el primero producto que realmente aprovecha de las nuevas arquitecturas
diseñadas por su equipo de investigación, el Pentium D.
Este 2006 Intel está demostrando que gran parte de sus fábricas
ya han sido adaptadas para trabajar con las nuevas arquitecturas, permitiéndole
alcanzar niveles apropiados de producción para lanzar al mercado
buena parte de sus novedades una tras otra, como ser al Pentium Extreme,
Core-Duo, Core2-Duo, Core2-Duo Extreme, e Itanium 2 para servidores. Todas
los modelos Extreme son híbridos que aprovechan de optimizaciones
Hyper-Threading
para ejecutar más instrucciones por ciclo en cada núcleo
disponible. Entre las características destacadas de la arquitectura
Core
están las siguientes: menor uso de energía, ejecutan más
instrucciones por ciclo y por núcleo, velocidades de bus mayores,
y menor disipación de calor.