La exploración de espacios de diseño y modelado de desempeño son vitales para el desarrollo de sistemas computacionales modernos. Este tipo de estudios son necesarios para evaluar la viabilidad del desarrollo de proyectos de diseño de micro-arquitecturas.
En este proyecto se realizarán pruebas de rendimiento a dos benchmarks utilizando GEM5, una plataforma modular para la investigación de arquitectura de sistemas computacionales y de los sistemas de micro-arquitectura de procesadores.
Las pruebas se realizarán en distintos modelos de 24 micro-arquitecturas base, con el fin de evaluar el rendimiento de cada una ante las misma carga de trabajo.
Se escogieron dos ISAs para realizar esta prueba. Cada set de instrucciones será la base para 12 micro-arquitecturas distintas.
ISA
├── RISC-V
└── ARM
Para cada ISA se probarán dos tipos de procesadores de los que provee GEM5
. Cada procesador será modificado para construir 6 micro-arquitecturas con distintas configuraciones.
PROCESADOR
├── TimingSimple
└── TraceCPU
Para realizar los cambios se deben seleccionar 2 parámetros del procesador y cambiar su valor 5 veces. Además, se deben evaluar los tipos de branch-predictor.
BRANCH PREDICTOR UNIT
├── 2bit_local
├── Bi_mode
└── Tournament
Para cada branch-predictor se varían sus parámetros:
BRANCH PREDICTOR PARAMETERS
├── BTBEntries
├── localPredictorSize
├── globalPredictorSize
└── choicePredictorSize
Los modelos de hardware serán probados con dos benchmarks: uno del tipo SPEC y otro del tipo PARSEC.
Tipo | Benchmark | Descripción |
---|---|---|
SPEC2006 | 401.bzip | Algoritmo de compresión de archivos en memoria |
PARSEC | canneal | Algoritmo de recocido simulado consiente de la caché para optimizar los costos de enrutamiento en el diseño de chips |
Estos benchmarks se seleccionaron por su alto uso de memoria, lo que nos permite variar parámetros de las memorias caché, como su tamaño, grado de asociatividad, cantidad de sets, entre otros y evaluar su rendimiento (misses y hits).
¿Cómo se visualizan los resultados de las pruebas? Creamos una herramienta que permite la visualización de los resultados obtenidos mediante gráficos. El sistema permite observar las cinco variaciones por parámetro para cada una de las combinaciones.
()[]
# | Benchmark | ISA | Procesador | BPU | cache-assoc | cache-size |
---|---|---|---|---|---|---|
1 | 401.bzip | ARM | TimingSimple | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
2 | 401.bzip | ARM | TimingSimple | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
3 | 401.bzip | ARM | TimingSimple | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
4 | 401.bzip | ARM | TraceCPU | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
5 | 401.bzip | ARM | TraceCPU | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
6 | 401.bzip | ARM | TraceCPU | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
7 | 401.bzip | RISCV | TimingSimple | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
8 | 401.bzip | RISCV | TimingSimple | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
9 | 401.bzip | RISCV | TimingSimple | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
10 | 401.bzip | RISCV | TraceCPU | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
11 | 401.bzip | RISCV | TraceCPU | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
12 | 401.bzip | RISCV | TraceCPU | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
-- | --------- | ----- | ---------- | ---------- | --------------- | --------------- |
13 | canneal | ARM | TimingSimple | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
14 | canneal | ARM | TimingSimple | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
15 | canneal | ARM | TimingSimple | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
16 | canneal | ARM | TraceCPU | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
17 | canneal | ARM | TraceCPU | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
18 | canneal | ARM | TraceCPU | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
19 | canneal | RISCV | TimingSimple | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
20 | canneal | RISCV | TimingSimple | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
21 | canneal | RISCV | TimingSimple | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
22 | canneal | RISCV | TraceCPU | 2bit_local | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
23 | canneal | RISCV | TraceCPU | Bi_mode | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
24 | canneal | RISCV | TraceCPU | Tournament | DM,2w,4w,8w,16w | 1k,2k,4k,8k,16k |
- Esteban Alvarado - Software Developer - @estalvgs1999
- Gabriel Abarca - Software Developer - @Abstractize
- Olman Castro - Software Developer - @oldboy379
Este proyecto fue desarrollado para el curso CE4301 - Arquitectura de Computadores I del Instituto Tecnológico de Costa Rica. 2021 🄯
Agradecimiento al profesor del curso:
- Prof. Luis Alberto Chavarría Zamora