Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura de Un Procesador de Celular
Arquitectura de Un Procesador de Celular
ndice
Introduccin 3
Arquitectura . 4
Power Processor Element 6
Synergistic Processor Element 6
Element Interconnect Bus 7
Consideraciones sobre ancho de banda 8
Modelos de programacin 10
Stream processing 10
Cola de tareas 10
Multitarea auto-gestionada 11
Escalabilidad 11
Pruebas oficiales y resultados .. 12
Multiplicacin de matrices .. 12
Programacin del Cell 14
Mecanismos de comunicacin 14
Mailboxes 14
Ejemplo de programacin 15
DMA 16
Ejemplo de un programa completo .. 18
Simulacin del Cell 20
Tiempos de comunicacin entre ncleos en Cell . 21
Implementacin del conjunto de Mandelbrot en Cell 23
Obteniendo rendimiento del Cell .. 25
Precauciones 26
Multicomputacin con Cell 27
Conclusiones 29
Bibliografa 30
Introduccin
El procesador Cell es el resultado del esfuerzo conjunto entre Sony, Toshiba e
IBM (STI) para desarrollar una nueva arquitectura de ltima generacin que adems es
el corazn de la consola PlayStation 3.
Se trata de una arquitectura paralela de ltima generacin.
Su desarrollo ha durado ms de 3 aos y se han invertido en l ms de 400
millones de dlares. Apareci pblicamente en 2005.
Ha sido diseado para realizar trabajos de clculo intensivo, y aplicaciones
llamadas de banda ancha, de hecho su nombre completo es Cell Broadband Engine
(Motor de Banda Ancha Cell), entre las que se incluyen videojuegos, descompresin de
audio/vdeo, y otros contenidos digitales.
Es un procesador altamente escalable y puede utilizarse en multitud de
dispositivos. Esta es la tecnologa que las tres compaas desarrolladoras pretenden usar
para inundar el mercado con dispositivos de diversos tipos, posibilitando que sistemas
con, en principio poca potencia de clculo puedan competir con superordenadores
cientficos.
Las caractersticas concretas de la arquitectura se publicaron en la ISSCC
(Conferencia Internacional de Circuitos en Estado Slido) en el ao 2005 en San
Francisco. Sus principales caractersticas son las siguientes:
-
produccin, permitindoles actuar como servidores para aplicaciones de muy alta carga
como los juegos multijugador masivos online.
Arquitectura
El procesador Cell est compuesto por un procesador de propsito general
principal IBM PowerPC, llamado Power Processor Element, o PPE, y de 8
coprocesadores esclavos llamados muy rimbombantemente Synergistic Processor
Engine, o SPE.
costes de fabricacin, y otro PPE est reservado al sistema operativo, con lo cual quedan
un total de 6 SPEs disponibles para el programador.
Los elementos de proceso se interconectan entre s, con el controlador de
memoria RAM y con la CPU principal mediante el Element Interconnect Bus (EIB).
Una memoria cach de nivel 2 proporciona acceso rpido a las instrucciones y datos
usados recientemente. El controlador de memoria XDRAM permite la conexin del Cell
a una memoria de alta velocidad con un ancho de banda de hasta 25.6 Gb/s.
Modelos de programacin
Dada la flexible arquitectura del Cell, se han establecido varios modelos para su
programacin, para explotar el paralelismo inherente a cada aplicacin especfica.
Stream processing
Es el nombre comercial que se le ha dado a este modelo de programacin,
basado en flujo de datos, y consiste en alinear varios SPEs en cascada, para que cada
uno de ellos ejecute parte de un proceso complejo, que pueda ser segmentado, como es
el
caso
de
la
decodificacin
MPEG.
Conexin en cascada
11
12
13
El cdigo que ejecutan los SPEs y el cdigo que ejecuta el PPE se compilan con
compiladores diferentes puesto que son arquitecturas distintas, y una vez creados los
archivos objeto, con la herramienta embedspe se enlaza todo en un archivo ejecutable.
Cada fichero objeto de cdigo SPE exporta como global un manejador del programa
que permite al PPE cargar el cdigo en cualquier SPE.
Mecanismos de comunicacin
Existen dos tipos de direcciones, la direccin efectiva (ea), que es de 64 bits y
abarca todo el mapa de memoria. La memoria RAM, los dispositivos de E/S, el Local
Store de cada SPE y todo lo dems est mapeado en la ea.
Para el direccionamiento local a nivel de SPE se utiliza una direccin reducida
de 32 bits (18 en la PS3), llamada lsa (Local Store Address), que comprende slo los
256Kb de memoria, y los registros del MFC, y dems.
Mailboxes
14
15
/*
* Ejecutar la instruccin eieio para asegurar
* que la lectura del registro de estado de la cola
* se ha ejecutado antes que la lectura del valor
*/
__asm__(eieio);
mb_value = *((volatile unsigned int *)(ps +
SPU_Out_Mbox));
DMA
Existe todo un sistema de control DMA gestionado por los MFC de los
SPE dirigido por numerosos comandos para hacer muy diversos tipos de
transferencia.
Los tamaos de la transacciones pueden ser de 1, 2, 4, 8 y n*16 bytes
(siendo n entero), con un lmite mximo de 16 KB por transaccin.
Cada SPE tiene una cola de comandos que permite encolar hasta 16
solicitudes al controlador DMA.
El PPE tiene una cola similar de 8 elementos, teniendo preferencia las
transacciones iniciadas por los SPEs.
Cada solicitud DMA tiene asociado un tag de 5 bits que puede ser
utilizado como identificador para la recepcin, o para monitorizar el estado de la
solicitud, al igual que el tag de las funciones de comunicacin de MPI.
Un solo comando DMA puede causar la ejecucin de una lista de
solicitudes (almacenadas en el local store de los SPE), las listas se pueden usar
para implementar scatter y gather. Una lista puede contener hasta 2000
solicitudes de transferencia.
16
17
//alineado a 16
18
//parametro de entrada
//parametro de entrada
//parametro de salida
//valor que no se usa para que la estructura
//tenga un tamao multiplo de 16 bytes
} program_data;
int main(unsigned long long spe_id, unsigned long long
program_data_ea, unsigned long long env) {
program_data pd __attribute__((aligned(16)));
int tag_id = 0;
//LEER LOS DATOS DE ENTRADA MEDIANTE DMA
//Iniciar copia
mfc_get(&pd, program_data_ea, sizeof(pd), tag_id, 0, 0);
//Esperar a que se complete
mfc_write_tag_mask(1<<tag_id);
mfc_read_tag_status_any();
//PROCESAR DATOS
pd.distance = pd.speed * pd.num_hours;
//ENVIAR RESULTADOS DE VUELTA
//Iniciar copia
mfc_put(&pd, program_data_ea, sizeof(program_data), tag_id, 0,
0);
//Esperar a que se complete
mfc_write_tag_mask(1<<tag_id);
mfc_read_tag_status_any();
return 0;
}
19
20
N=
19999999
1,5
N=
59999999
N=
109999999
1
0,5
0
0a1
0a2
1a2
21
Con lo que la medida de tiempos en MPI no tiene sentido, ya que esta librera
todava no implementa la compatibilidad con los SPE. Siendo la forma ms eficiente de
implementar aplicaciones paralelas, el uso de las libreras y la API proporcionadas por
IBM (libspe, ..)
Una prueba sencilla de comunicacin entre el PPE y un SPE, en milisegundos
dio una media de 2286 us, pero estas medidas se han realizado usando llamadas al
sistema operativo, con lo que no resulta eficiente, para ello sera necesario utilizar los
contadores internos de los SPE, que no estn muy bien documentados. Para tener una
referencia fiable de los tiempos de comunicacin entre SPEs, en el website de IBM se
muestra la siguiente tabla (medida en Gb/s).
Test configuration
SPE1 <-> SPE3, SPE5 <-> SPE7, SPE0 <-> SPE2, SPE4 <-> SPE6
186 GB/s
SPE0 <-> SPE4, SPE1 <-> SPE5, SPE2 <-> SPE6, SPE3 <-> SPE7
197 GB/s
SPE0 <-> SPE1, SPE2 <-> SPE3, SPE4 <-> SPE5, SPE6 <-> SPE7
197 GB/s
SPE0 <-> SPE3, SPE1 <-> SPE2, SPE4 <-> SPE7, SPE5 <-> SPE6
197 GB/s
SPE0 <-> SPE7, SPE1 <-> SPE6, SPE2 <-> SPE5, SPE3 <-> SPE4
78 GB/s
SPE0 <-> SPE5, SPE1 <-> SPE4, SPE2 <-> SPE7, SPE3 <-> SPE6
95 GB/s
SPE0 <-> SPE6, SPE1 <-> SPE7, SPE2 <-> SPE4, SPE3 <-> SPE5
197 GB/s
22
23
24
Se han publicado adems resultados que demuestran que el Cell puede generar
conjuntos de mandelbrot de 640x480 pixels a una velocidad de 30 veces por segundo,
utilizando todo lo anterior y bajando a nivel de ensamblador.
Obteniendo rendimiento del Cell
Para obtener rendimiento hay que explotar el paralelismo tanto a nivel de
instruccin sectorizando el cdigo, como a nivel de procesador haciendo una buena
gestin del reparto, proceso y comunicaciones.
A nivel de SPU, al ser un procesador vectorial se debe vectorizar el cdigo para
aprovechar las instrucciones SIMD de la mquina, IBM propociona en sus libreras las
SPU Intrinsics, que son definiciones de alto nivel de instrucciones en ensamblador,
que permiten al programador hacer un uso ms eficiente de la mquina con menos
esfuerzo y al compilador generar cdigo ms eficiente. Existe el tipo vector, que es un
registro de 128 bits de la mquina, el cual puede contener 16 valores de 8 bits, 8 valores
de 16 bits, 4 valores de 32 bits, o 2 valores de 64. Se declaran as:
vector unsigned short vec;
Lo que declara un vector de 8 valores de 16 bits. A continuacin se puede operar
con el mediante instrucciones como:
spu_add(vec1, vec2) : Suma dos vectores
25
Existen tambin otras instrucciones para operaciones bit a bit, y para otros tipos
de cmputo.
Para evitar la penalizacin por saltos en los bucles, lo cual es importante dado
que no hay unidad de prediccin de saltos y se asume siempre que el salto se toma, se
utilizan instrucciones que permiten escribir en un vector destino los valores de un vector
origen segn los bits de otro vector mscara. De esta forma, estructuras como:
If(condicion)
A = x;
else
A = y;
Se pueden reescribir como:
Calcular x;
Calcular y;
A = Spu_sel(condicion, x, y);
Que significa que se genere una prediccin de saltos para contador > 0,
teniendo en cuenta que la condicin slo se va a dar 1 vez.
Por otro lado, pueden y deben aplicarse otras tcnicas de aceleracin
tradicionales como el desenrollamiento de bucles (desenrollando decenas de
iteraciones, dado el elevado nmero de registros de la mquina), la planificacin
de instrucciones para facilitar el solapamiento de operaciones, o la segmentacin
software para mantener ocupadas todas las etapas del procesador.
Precauciones
Hay que tener en cuenta muchos factores de hardware a la hora de programar
aplicaciones de alto rendimiento en cell, las ms importantes son:
-
Los SPE solo tienen un puerto de acceso a su local store, y el local store
contiene instrucciones y datos, con lo que si algn otro procesador est
26
27
28
Bibliografa
30