• No se han encontrado resultados

3. Caracterización de tiempos de cómputo variables

4.4. Estructura del simulador

4.4.1. Presentación y arquitectura software

Al principio de este capítulo se justifica la necesidad de trabajar con simulacio- nes basadas en ejecución, dado que se pretende obtener medidas de rendimiento de la microarquitectura para cualquier tipo de programa, sin utilizar trazas de ejecución. Por ello, al tratarse de un simulador basado en ejecución, es necesario disponer de varios elementos básicos. Estos elementos son, fundamentalmente, tres: el cargador de código binario, el modelo de memoria de instrucciones y el control de fallos de página. Además se necesita un soporte para llamadas al siste- ma de manera que las operaciones de entrada y salida que realicen los programas de prueba sobre el disco ó con el terminal se interpreten correctamente en el sis- tema operativo anfitrión. Todas estas características deben ser suficientemente robustas y estar correctamente verificadas.

En ese sentido, el conocido SimpleScalar [ALE02], ofrece soluciones contrastadas para todas esas cuestiones. Como se aprecia en la Figura 4.15, SimpleScalar se

120 4.4. Estructura del simulador

Figura 4.15: Estructura de SimpleScalar, tomada de [ALE02], donde se puede ver cómo el diseño del simulador es muy modular. Esta modularidad permite, entre otras alternativas, su extensión a distintos repertorios de instrucciones cambiando el Functional core (núcleo funcional), así como el modelado de distintas microarquitecturas, modificando las partes corres- pondientes del Performance core (núcleo de rendimiento).

4. Simulación arquitectónica de sistemas asíncronos 121 ha diseñado en base a una estructura muy modular que lo hace muy extensible y portable. Más concretamente, la parte denotada como Functional core (núcleo funcional) se encarga de la simulación de la funcionalidad del repertorio de ins- trucciones modelado, mientras que el Performance core (núcleo de rendimiento) modela las operaciones correspondientes a la microarquitectura como son, por ejemplo, aquellas que afectan al contenido de la memoria y registros. En esta parte también se sitúan la configuración y operaciones sobre el predictor de sal- tos.

Las implementaciones actuales de SimpleScalar admiten varios conjuntos de ins- trucciones como binarios de entrada. Los más utilizados son el repertorio de ins- trucciones de los procesadores Alpha y un repertorio propio llamado PISA. En concreto, debido a la modularidad del código fuente, la extensión de SimpleScalar a otros repertorios de instrucciones se restringe a trabajar sobre un conjunto pe- queño de archivos, independientes del resto del simulador salvo por los interfaces que deben respetar.

SimpleScalar también ofrece una infraestructura muy flexible y extensible para la generación de estadísticas relacionadas con la ejecución de simulaciones. El código fuente provee de un conjunto de funciones predefinidas que hacen que la creación y manejo de contadores para establecer medidas sea muy cómodo para el programador.

Por tanto, SimpleScalar es un excelente punto de partida para realizar simula- ciones arquitectónicas del procesador descrito en apartados anteriores, así como para tomar estadísticas sobre cualquier programa de prueba. Además, SimpleS- calar está codificado en lenguaje C y su código fuente se encuentra disponible en internet de manera gratuita en http://www.simplescalar.com/ .

Ahora bien, como ya se ha explicado en este capítulo, SimpleScalar se diseñó para simular la ejecución de un procesador superescalar síncrono. Esto significa que el modelado de la ejecución de una microarquitectura asíncrona en SimpleS- calar requiere una serie de modificaciones importantes del código fuente. Estas modificaciones se relacionan con los siguientes dos aspectos del simulador:

1. Modelado del paso del tiempo: la ejecución asíncrona de un circuito no se basa en ciclos de reloj, sino en instantes de tiempo. SimpleScalar no permite

122 4.4. Estructura del simulador

Figura 4.16: Estructura de Sim-async. El diseño modular es análogo al de SimpleScalar, aunque presenta las siguientes diferencias fundamentales: (1) El “Motor de Ejecución” se modifica para poder modelar una evolución temporal no ceñida a ciclos de reloj; (2) La arquitectura que se modela en el “Núcleo Arquitectónico” cambia, definiendo ahora distintos dominios asíncronos; (3) En la “Interfaz Programa/Simulador” se fija el repertorio de instrucciones Alpha.

que las etapas del procesador puedan iniciar ó terminar su ejecución en cualquier momento, sino que se ciñe a los flancos de reloj. La alternativa consiste en modelar la temporización del circuito de una manera más lineal. 2. Modelado de una microarquitectura asíncrona: las etapas de las instruc- ciones y los elementos microarquitectónicos definidos en SimpleScalar pre- sentan relaciones muy complejas entre ellos debido a que se modela un procesador totalmente síncrono. Este diseño dificulta la división del mode- lo en dominios asíncronos independientes. La solución reside en crear un nuevo modelo de microarquitectura donde se definan dominios asíncronos concretos.

4. Simulación arquitectónica de sistemas asíncronos 123 dor propuesto en esta tesis. La estructura software de Sim-async, presentada en la Figura 4.16, es análoga a la de SimpleScalar, aunque presenta algunas diferencias resultado de aplicar distintas soluciones a los aspectos anteriormente expuestos. Estas soluciones son las siguientes:

1. Los instantes de tiempo en que se inician o finalizan acciones en la mi- croarquitectura se representan utilizando eventos. Como se explicará más adelante, cada evento dispone de un valor ó marca de tiempo. Los eventos se ordenan según su marca de tiempo y se procesan siguiendo ese orden. La parte del simulador encargada de gestionar los eventos es el “Motor de Ejecución” que se indica en la Figura 4.16.

2. Cada uno de los dominios asíncronos de la microarquitectura que se mo- dela en Sim-async (descrita en el apartado 4.2.2) se define en el “Núcleo Funcional” a través de funciones en lenguaje C. Se han creado además nue- vas estructuras lógicas para elementos hardware modelados como el reorder buffer o las estaciones de reserva, y se ha ajustado la implementación del banco de registros a la nueva microarquitectura. Estas modificaciones sobre estructuras afectan fundamentalmente a la parte del “Núcleo Arquitectóni- co”, aunque debido al nivel de detalle del simulador, existen múltiples inter- acciones entre la parte funcional y la parte arquitectónica (en las lecturas de valores del banco de registros, accesos a estaciones de reserva, reorder buffer o memoria, etc.).

3. Por último, se ha adaptado el repertorio de instrucciones Alpha a la nueva microarquitectura. Gracias a la similitud entre la nueva microarquitectura y las especificaciones del procesador Alpha 21264, utilizado como referencia, esta adaptación resultó bastante directa. La consecuencia más importante es la posibilidad de ejecutar código para Alpha sobre la nueva microar- quitectura bajo cualquiera de las temporizaciones descritas en el Apartado 4.2.3.

En el resto de este apartado se profundiza aún más en los detalles de implementa- ción. Inicialmente se abordan aspectos relacionados con el modelado del tiempo, para pasar después a explicar detenidamente el funcionamiento del ”Motor de Ejecución” del simulador y su interfaz de usuario.

124 4.4. Estructura del simulador