Aunque el chip Cell puede tener diferentes configuraciones, la configuración básica es un chip multinúcleo compuesto por un «Elemento Procesador de Potencia» («PPE») (a veces llamado «Elemento de Procesamiento», o «PE»), y múltiples «Elementos de Procesamiento Sinérgico» («SPE»). El PPE y los SPE están conectados entre sí por un bus interno de alta velocidad denominado «Bus de Interconexión de Elementos» («EIB»).
Elemento Procesador de Potencia (PPE)Editar
El PPE es el núcleo de la CPU basado en PowerPC, de doble emisión en orden y multihilo simultáneo, con un pipeline de 23 etapas que actúa como controlador de los ocho SPE, que manejan la mayor parte de la carga de trabajo computacional. El PPE tiene capacidades limitadas de ejecución fuera de orden; puede realizar cargas fuera de orden y tiene pipelines de ejecución retardada. El PPE funcionará con sistemas operativos convencionales debido a su similitud con otros procesadores PowerPC de 64 bits, mientras que los SPE están diseñados para la ejecución de código de punto flotante vectorizado. El PPE contiene una caché de nivel 1 de 64 KiB (32 KiB de instrucciones y 32 KiB de datos) y una caché de nivel 2 de 512 KiB. El tamaño de una línea de caché es de 128 bytes. Además, IBM ha incluido una unidad AltiVec (VMX) totalmente canalizada para punto flotante de precisión simple (Altivec 1 no admite vectores de punto flotante de precisión doble), una unidad de punto fijo de 32 bits (FXU) con un archivo de registro de 64 bits por hilo, una unidad de carga y almacenamiento (LSU), una unidad de punto flotante de 64 bits (FPU), una unidad de bifurcación (BRU) y una unidad de ejecución de bifurcaciones (BXU): Unidad de Instrucción (IU), Unidad de Ejecución (XU) y Unidad de Ejecución Vectorial/Escalar (VSU). La IU contiene la caché de instrucciones L1, el hardware de predicción de bifurcaciones, las memorias intermedias de instrucciones y el inicio de sesión de comprobación de dependencias. La XU contiene las unidades de ejecución de enteros (FXU) y la unidad de carga-almacenamiento (LSU). VSU contiene todos los recursos de ejecución para FPU y VMX. Cada PPE puede completar dos operaciones de doble precisión por ciclo de reloj utilizando una instrucción escalar de multiplicación-fusión, lo que se traduce en 6,4 GFLOPS a 3,2 GHz; u ocho operaciones de precisión simple por ciclo de reloj con una instrucción vectorial de multiplicación-fusión, lo que se traduce en 25.6 GFLOPS a 3,2 GHz.
Xenon en Xbox 360Editar
El PPE se diseñó específicamente para el procesador Cell, pero durante su desarrollo, Microsoft se dirigió a IBM para solicitar un núcleo de procesador de alto rendimiento para su Xbox 360. IBM cumplió y fabricó el procesador Xenon de tres núcleos, basado en una versión ligeramente modificada del PPE con extensiones VMX128 añadidas.
Elementos de Procesamiento Sinérgico (SPE)Editar
Cada SPE es un procesador de doble emisión en orden compuesto por una «Unidad de Procesamiento Sinérgico», SPU, y un «Controlador de Flujo de Memoria», MFC (DMA, MMU, e interfaz de bus). Los SPE no tienen ningún hardware de predicción de bifurcaciones (de ahí que haya una gran carga para el compilador). Cada SPE tiene 6 unidades de ejecución divididas entre pipelines pares e impares en cada SPE : La SPU ejecuta un conjunto de instrucciones (ISA) especialmente desarrollado con una organización SIMD de 128 bits para instrucciones de precisión simple y doble. Con la generación actual de la Cell, cada SPE contiene una SRAM integrada de 256 KiB para instrucciones y datos, denominada «Local Storage» (no confundir con la «Local Memory» en los documentos de Sony que se refieren a la VRAM) que es visible para el PPE y puede ser direccionada directamente por el software. Cada SPE puede soportar hasta 4 GiB de memoria de almacenamiento local. El almacén local no funciona como una caché convencional de la CPU, ya que no es transparente para el software ni contiene estructuras de hardware que predigan qué datos cargar. Los SPE contienen un archivo de registro de 128 bits y 128 entradas y miden 14,5 mm2 en un proceso de 90 nm. Un SPE puede operar con dieciséis enteros de 8 bits, ocho enteros de 16 bits, cuatro enteros de 32 bits o cuatro números de coma flotante de precisión simple en un solo ciclo de reloj, así como una operación de memoria. Tenga en cuenta que la SPU no puede acceder directamente a la memoria del sistema; las direcciones de memoria virtual de 64 bits formadas por la SPU deben pasar de la SPU al controlador de flujo de memoria (MFC) del SPE para establecer una operación DMA dentro del espacio de direcciones del sistema.
En un escenario de uso típico, el sistema cargará los SPE con pequeños programas (similares a hilos), encadenando los SPE para manejar cada paso de una operación compleja. Por ejemplo, un descodificador podría cargar programas para leer un DVD, decodificar el vídeo y el audio, y visualizarlo, y los datos pasarían de SPE a SPE hasta acabar en el televisor. Otra posibilidad es dividir el conjunto de datos de entrada y que varios SPE realicen el mismo tipo de operación en paralelo. A 3,2 GHz, cada SPE proporciona un rendimiento teórico de 25,6 GFLOPS de precisión simple.
Comparado con sus contemporáneos de ordenadores personales, el rendimiento general relativamente alto en coma flotante de un procesador Cell parece empequeñecer las capacidades de la unidad SIMD de CPUs como el Pentium 4 y el Athlon 64. Sin embargo, comparar sólo las capacidades de punto flotante de un sistema es una métrica unidimensional y específica de la aplicación. A diferencia de un procesador Cell, estas CPUs de sobremesa son más adecuadas para el software de propósito general que suele ejecutarse en los ordenadores personales. Además de ejecutar múltiples instrucciones por reloj, los procesadores de Intel y AMD cuentan con predictores de bifurcación. El Cell está diseñado para compensar esto con la ayuda del compilador, en el que se crean instrucciones de preparación de bifurcación. Para las operaciones en coma flotante de doble precisión, como las que se utilizan a veces en los ordenadores personales y a menudo en la informática científica, el rendimiento del Cell desciende un orden de magnitud, pero sigue alcanzando los 20,8 GFLOPS (1,8 GFLOPS por SPE, 6,4 GFLOPS por PPE). La variante PowerXCell 8i, diseñada específicamente para la doble precisión, alcanza 102,4 GFLOPS en cálculos de doble precisión.
Las pruebas realizadas por IBM muestran que los SPE pueden alcanzar el 98% de su rendimiento máximo teórico ejecutando la multiplicación de matrices en paralelo optimizada.
Toshiba ha desarrollado un coprocesador alimentado por cuatro SPE, pero sin PPE, llamado SpursEngine, diseñado para acelerar los efectos de cine y 3D en la electrónica de consumo.
Cada SPE tiene una memoria local de 256 KB. En total, los SPE tienen 2 MB de memoria local.
Bus de interconexión de elementos (EIB)Edit
El EIB es un bus de comunicación interno al procesador Cell que conecta los distintos elementos del sistema en el chip: el procesador PPE, el controlador de memoria (MIC), los ocho coprocesadores SPE y dos interfaces de E/S fuera del chip, para un total de 12 participantes en la PS3 (el número de SPU puede variar en aplicaciones industriales). El EIB también incluye una unidad de arbitraje que funciona como un conjunto de semáforos. En algunos documentos, IBM se refiere a los participantes del EIB como «unidades».
El EIB se implementa actualmente como un anillo circular que consiste en cuatro canales unidireccionales de 16 bytes de ancho que giran en sentido contrario por parejas. Cuando los patrones de tráfico lo permiten, cada canal puede transportar hasta tres transacciones simultáneamente. Como el EIB funciona a la mitad de la velocidad del reloj del sistema, la velocidad efectiva del canal es de 16 bytes cada dos relojes del sistema. A máxima concurrencia, con tres transacciones activas en cada uno de los cuatro anillos, el ancho de banda instantáneo máximo del EIB es de 96 bytes por reloj (12 transacciones concurrentes × 16 bytes de ancho / 2 relojes de sistema por transferencia). Aunque esta cifra se cita a menudo en la literatura de IBM, no es realista escalar este número simplemente por la velocidad del reloj del procesador. La unidad de arbitraje impone restricciones adicionales.
El ingeniero senior de IBM David Krolak, diseñador principal del EIB, explica el modelo de concurrencia:
Un anillo puede iniciar una nueva operación cada tres ciclos. Cada transferencia tarda siempre ocho tiempos. Esa fue una de las simplificaciones que hicimos, está optimizado para el flujo de muchos datos. Si haces operaciones pequeñas, no funciona tan bien. Si piensas en trenes de ocho vagones circulando por esta vía, mientras los trenes no se choquen entre sí, pueden coexistir en la vía.
Cada participante en el BEI tiene un puerto de lectura de 16 bytes y un puerto de escritura de 16 bytes. El límite para un solo participante es leer y escribir a una velocidad de 16 bytes por reloj del EIB (para simplificar se suelen considerar 8 bytes por reloj del sistema). Cada procesador de la SPU contiene una cola de gestión DMA dedicada capaz de programar largas secuencias de transacciones a varios puntos finales sin interferir con los cálculos en curso de la SPU; estas colas DMA pueden gestionarse también de forma local o remota, proporcionando una flexibilidad adicional en el modelo de control.
Los datos fluyen en un canal EIB paso a paso alrededor del anillo. Como hay doce participantes, el número total de pasos alrededor del canal hasta el punto de origen es de doce. Seis pasos es la distancia más larga entre cualquier par de participantes. Un canal EIB no puede transportar datos que requieran más de seis pasos; dichos datos deben tomar la ruta más corta alrededor del círculo en la otra dirección. El número de pasos que implica el envío del paquete tiene muy poco impacto en la latencia de la transferencia: la velocidad del reloj que conduce los pasos es muy rápida en relación con otras consideraciones. Sin embargo, las distancias de comunicación más largas son perjudiciales para el rendimiento general del BEI, ya que reducen la concurrencia disponible.
A pesar del deseo original de IBM de implementar el EIB como una barra transversal más potente, la configuración circular que adoptaron para ahorrar recursos rara vez representa un factor limitante en el rendimiento del chip Cell en su conjunto. En el peor de los casos, el programador debe tener especial cuidado en programar patrones de comunicación en los que el EIB sea capaz de funcionar a altos niveles de concurrencia.
David Krolak explicó:
Bueno, al principio, en los primeros momentos del proceso de desarrollo, varias personas presionaban para que hubiera un conmutador de barra cruzada, y por la forma en que está diseñado el bus, en realidad se podía quitar el EIB y poner un conmutador de barra cruzada si se estaba dispuesto a dedicar más espacio de silicio en el chip al cableado. Teníamos que encontrar un equilibrio entre la conectividad y el área, y no había suficiente espacio para poner un interruptor de barra transversal completo. Así que se nos ocurrió esta estructura de anillo que nos parece muy interesante. Se ajusta a las limitaciones de área y sigue teniendo un ancho de banda impresionante.
Evaluación del ancho de bandaEditar
A 3,2 GHz, cada canal fluye a una velocidad de 25,6 GB/s. Considerando el EIB de forma aislada de los elementos del sistema que conecta, lograr doce transacciones concurrentes a esta tasa de flujo se traduce en un ancho de banda abstracto del EIB de 307,2 GB/s. Basándose en esta visión, muchas publicaciones de IBM describen el ancho de banda disponible del EIB como «superior a 300 GB/s». Esta cifra refleja el ancho de banda instantáneo máximo del EIB escalado por la frecuencia del procesador.
Sin embargo, hay otras restricciones técnicas relacionadas con el mecanismo de arbitraje de los paquetes aceptados en el bus. El grupo de Rendimiento de Sistemas de IBM explicó:
Cada unidad en el EIB puede enviar y recibir simultáneamente 16 bytes de datos en cada ciclo de bus. El ancho de banda de datos máximo de todo el EIB está limitado por la velocidad máxima a la que se espían las direcciones en todas las unidades del sistema, que es una por ciclo de bus. Dado que cada solicitud de dirección fisgoneada puede transferir potencialmente hasta 128 bytes, el ancho de banda de datos máximo teórico en el EIB a 3,2 GHz es de 128Bx1,6 GHz = 204,8 GB/s.
Esta cita representa aparentemente todo el alcance de la revelación pública de IBM de este mecanismo y su impacto. La unidad de arbitraje EIB, el mecanismo de snooping y la generación de interrupciones en caso de fallos de traducción de segmentos o páginas no están bien descritos en la documentación que IBM ha hecho pública hasta ahora.
En la práctica, el ancho de banda EIB efectivo también puede verse limitado por los participantes en el anillo. Mientras que cada uno de los nueve núcleos de procesamiento puede soportar 25,6 GB/s de lectura y escritura simultáneamente, el controlador de la interfaz de memoria (MIC) está vinculado a un par de canales de memoria XDR que permiten un flujo máximo de 25,6 GB/s para lecturas y escrituras combinadas, y los dos controladores IO están documentados para soportar una velocidad de entrada combinada máxima de 25,6 GB/s y una velocidad de salida combinada máxima de 35 GB/s.
Para aumentar la confusión, algunas publicaciones antiguas citan el ancho de banda EIB asumiendo un reloj de sistema de 4 GHz. Este marco de referencia da como resultado una cifra de ancho de banda EIB instantáneo de 384 GB/s y una cifra de ancho de banda limitado por el arbitraje de 256 GB/s.
En general, la cifra teórica de 204,8 GB/s que se cita con más frecuencia es la mejor para tener en cuenta. El grupo de rendimiento de sistemas de IBM ha demostrado que los flujos de datos centrados en la SPU alcanzan los 197 GB/s en un procesador Cell que funciona a 3,2 GHz, por lo que esta cifra también es un buen reflejo de la práctica.
Controladores de memoria y E/SEdit
Cell contiene una macro Rambus XIO de doble canal que interactúa con la memoria Rambus XDR. El controlador de interfaz de memoria (MIC) es independiente de la macro XIO y está diseñado por IBM. El enlace XIO-XDR funciona a 3,2 Gbit/s por pin. Dos canales de 32 bits pueden proporcionar un máximo teórico de 25,6 GB/s.
La interfaz de E/S, también un diseño de Rambus, se conoce como FlexIO. La interfaz FlexIO está organizada en 12 carriles, cada uno de los cuales es una ruta punto a punto unidireccional de 8 bits de ancho. Cinco rutas punto a punto de 8 bits de ancho son carriles de entrada a Cell, mientras que los siete restantes son de salida. Esto proporciona un ancho de banda máximo teórico de 62,4 GB/s (36,4 GB/s de salida, 26 GB/s de entrada) a 2,6 GHz. La interfaz FlexIO se puede sincronizar de forma independiente, normalmente a 3,2 GHz. 4 carriles de entrada + 4 de salida soportan la coherencia de memoria.