dise˜no, implementación y evaluación de un procesador multi-núcleo

91
Universidad de Buenos Aires Facultad de Ingenier´ ıa Tesis de Grado de Ingenier´ ıa Electr´ onica Dise˜ no, Implementaci´on y Evaluaci´on de un procesador multi-n´ ucleo Alumno: Sr. Federico Giordano Zacchigna Director: Dr. Ing. Ariel Lutenberg 31 de julio de 2012

Upload: trinhphuc

Post on 12-Feb-2017

222 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Universidad de Buenos Aires

Facultad de Ingenierıa

Tesis de Grado de Ingenierıa Electronica

Diseno, Implementacion yEvaluacion de un procesador

multi-nucleo

Alumno: Sr. Federico Giordano Zacchigna

Director: Dr. Ing. Ariel Lutenberg

31 de julio de 2012

Page 2: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo
Page 3: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

i

A mi familia

Page 4: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

ii

Page 5: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

iii

Resumen y motivacion del presente trabajo

En este trabajo se presenta una implementacion de un procesador multi-nucleo. El mismo esta basado en el procesador Plasma, que es un procesador decodigo libre, simple que ha sido utilizado para la realizacion de varios proyectosy pruebas, y que esta basado en la arquitectura de instrucciones MIPS. Elprocesador ha sido objeto de estudio en varios trabajos, entre los que se cuentantrabajos realizados por integrantes de nuestro grupo en donde se estudia sufuncionamiento bajo efectos de radiacion e interferencia electromagnetica. En laactualidad se desea continuar con esta lınea de investigacion sobre procesadoresmulti-nucleos y por eso surge la necesidad de implementar este procesador. Lascaracterısticas antes nombradas sobre el procesador Plasma, son ideales parala realizacion de este trabajo. El sistema plasma multi-nucleo tiene distintasaplicaciones directas, entre ellas:

Sistemas tolerantes a fallas utilizables en ambientes de alta interferenciaelectromagnetica y expuestos a radiacion no ionizante, para aplicacionesen sistemas de seguridad de reactores nucleares y sistemas de control ynavegacion de satelites y vehıculos espaciales. Este tema es de especialinteres hoy en dıa para instituciones como CONAE, CNEA e INVAP.

Investigaciones cientıficas relacionadas con el estudio de los efectos de laradiacion y la interferencia electromagnetica sobre los FPGA’s donde seutilice una version funcional de un softcore que sirva para realizar medi-ciones y sacar conclusiones sobre los efectos que estos fenomenos tienensobre los dispositivos.

Desarrollos de sistemas multi-nucleos parametrizables mixtos (AsymetricMulticore Architecture) para aplicaciones de alto rendimiento, donde seimplementan micros optimos para distintos procesos, por ejemplo, ejecu-cion de RTOS, procesamiento de senales, GPU’s, comunicaciones, etc.

Un objetivo importante en la implementacion del procesador multi-nucleoque se realiza en este trabajo es que sea de forma tal que se puedan instanciarun numero generico de nucleos durante el proceso de sıntesis, y las partes masrelevante del diseno de la arquitectura del procesador son la arquitectura de lamemoria, la memoria cache y la comunicacion entre los distintos nucleos. A lolargo del trabajo se detallan los principales factores que influyen sobre el disenodel mismo. Tambien se muestran las principales complicaciones que apareceny las soluciones a las mismas. Se muestran los detalles de su implementacionen VHDL. Se realizan pruebas del mismo en un kit Nexys2 de Digilent, basadoen una FPGA Xilinx Spartan3E-1200. Finalmente se presentan los resultadosobtenidos.

Page 6: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

iv

Page 7: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

v

Agradecimientos

En primer lugar, agradezco al Laboratorio de Sitemas Embebidos de la Uni-versidad de Buenos Aires, lugar en el cual fue llevado a cabo el presente trabajo.Agradezco a su director y mi tutor, el Dr. Ing. Ariel Lutenberg, por el apoyobrindado. Agradezco tambien a Lucas Chiesa por la ayuda que me brindo alrealizar el trabajo.

Agradezco especialmente a los miembros del jurado, el Ing. Juan ManuelCruz, el Ing. Nicolas Alvarez, y el Ing. Fabian Vargas miembro de la PontifıciaUniversidade do Rio Grande do Sul (PUCRS), por ceder parte de su tiempopara evaluar el presente trabajo.

Parte del desarrollo de este trabajo de tesis tuvo lugar en el Institut fur Da-tentechnik und Kommunikationsnetze (IDA) de la Universidad Tecnica Brauns-chweig. Agradezco a su director Peter Ruffer, y a mis companeros del labo-ratorio Mark y Mustafa. Agradezco al DAAD y al Ministerio de Educacionde la Republica Argentina por brindarme esta posibilidad, al darme una beca.Agradezco a los integrantes del programa ALE-ARG del DAAD, Agustin Ro-sembaum, Alejando Rodriguez, Eliseo Rocchetti, Federico Beltzer, Lucas Cla-ramonte, Mauro Calabria, Ariel Malawka, Sofıa Carolina Visintini. Agradezcoa todas las otras personas que formaron parte de mi vida mientras estuve enAlemania, Jose Alejandro Diaz Vides, Ismael Holgueras de Lucas, Dani Umpie-rrez Corona, Mariana Almeida Ribeiro, Audrey Segura Medina, Valerio RogerLasso, Jose Rivero Rodrıguez, Maria y Angela Cildoz Guembe. Y agradezco es-pecialmente a aquellos con quienes logre tener una afinidad especial durante miestadıa en Alemania, personas que me ayudaron mucho con su compania y apo-yo en los momentos difıciles, Sergio Medina, con quien compartı un tiempo enParıs, Mariel Figueroa, Bruno Strappa, Bruno Emmanuel Rossi, Mari Antber,Ana Rodriguez, Juan Jose Baena Castillo, Belen Kistner, Miguel Mamani.

Durante los primeros cinco anos y medio de carrera tuve el agrado de co-nocer a muchas personas con quienes trabaje en MAN Ferrostaal, a todos ellosquiero agradecerles, Leandro Feniello, Olga Hiczuk, Alicia Hiczuk, Martin Kent,Eduardo Kenda, Daniel Morales, Sergio Acri, Walter Allaltune, Osvaldo Preiti,Lucas De La Canal, Marta, Romina Lepore, Daniela Islas y al resto de los inte-grantes.

Agradezco a todos los profesores que formaron parte de mi formacion academi-ca, a aquellos de la facultad y a aquellos del mi colegio, el Instituto Holter Schule,pero especialmente a mis profesores de electronica a quienes aprecio mucho, Ing.Ruben Saclier, Ing. Norberto Muino, Ing. Carlos Siganotto y al Ing. Charly, ya mis profesores de aleman especialmente a Diana, Geraldine Lorenzo, FedorPellmann y muy de corazon a Juana Dartsch, quien fue por lejos mi mejorprofesora.

Agradezco a las personas que forman parte de la materia Dispositivos Se-miconductores, de la cual formo parte hace ya mas tres anos, Mariano GarcıaInza, Sebastian Carbonetto, Diego Martin, Claudio Pose, Luciano Cesar Natale,Gabriel Sanca y en su momento Daniel Rus.

Agradezco a todos mis companeros de la facultad de ingenierıa entre ellos,Fernando Chouza, Diego Martın, Fabricio Alcalde, Gabriel Gabian, Pablo Del-gado, Enzo Lanzelotti, Fernando Berjano, Paola Pezoimburu, Federico Roasio,Ezequiel Esposito, Claudio Pose, Andres Manikis y a todos aquellos que norecuerde en este momento. Tambien agradezco a aquellos que dejaron ser com-

Page 8: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

vi

paneros de la facultad, para pasar a ser amigos, Luciano Cesar Natale, GermanAcosta, Diego Vilaseca, Gustavo Dıaz, Matıas Weber, Claudio Lupi, ManuelFernandez, Lucas Sambuco,

Quiero agradecer a todas las personas importantes que pasaron por mi vidadurante este perıodo, ya que no solo estoy terminando mi carrera sino culmi-nando una gran etapa en mi vida, y todos estas personas formaron parte de ella,Lis Weiss, Jose Spillmann, Marcelo Razeto, Sandra Canepuccia, Santiago Raze-to, Natalia y Carla Belen Rossi, Sebastian Salles, Alejandro sansalone, GlendaBusch, Sarah Collins, Ana Belen Garcıa, Barbara Beutel, Ignacio Unrrein, LucasSakalis, Mauro Garcıa Alena, Alejandro Mauch, Sebastian Deter, Gaston Santa-na, Pablo Falcioni, Martın Burgueno, Alejandro Sappracone, Hernan Goncalves.

Agradezco de tambien a mis mas grandes amigos, a quienes siempre voya querer, quienes fueron companeros en buenos y malos momentos, quienessiempre estuvieron, con quienes compartir dıas y noches de estudio, salidas einfinidad de cosas y por eso son especiales para mi, Jesica Lazart, Mariana Ende,Barbara y Daniela Spillmann Weiss, Agustina Canepa, Franco Gallardi, HernanPedros, Juan Sist, Patricio Helfrich, Leonardo Unger, Mauricio Koller, FernandoPerez, Matias Schwabauer e Ignacio Razeto.

No puedo dejar de agradecer a la familia Hoffmann, a quienes personalmenteme gusta llamar ‘mi familia alemana’, a quienes quiero muchısimo, ellos sonMichael, Martina, Ulrich y Bernhard.

Por ultimo quiero agradecerles mucho mucho mucho a mi familia, quienesme apoyaron durante toda mi vida e hicieron esto posible, a ellos los amo incon-dicionalmente y son Nelida Nazarre, Rodolfo Parrondo, Oscar Zacchigna, AnaMarıa D’Ambrosio, y Julia Zacchigna.

Page 9: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Indice general

1. Introduccion 11.1. Ventajas de la paralelizacion . . . . . . . . . . . . . . . . . . . . . 11.2. Clasificacion de los procesadores . . . . . . . . . . . . . . . . . . 21.3. Evolucion de los procesadores . . . . . . . . . . . . . . . . . . . . 3

1.3.1. Inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3.2. Paralelismo a nivel de instruccion . . . . . . . . . . . . . . 31.3.3. Limitaciones en el paralelismo a nivel de instruccion . . . 91.3.4. Paralelismo a nivel de tarea . . . . . . . . . . . . . . . . . 9

1.4. Multi-Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.5. Multi-procesadores . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6. Sistemas operativos y programacion distribuida . . . . . . . . . . 13

1.6.1. Sistemas operativos . . . . . . . . . . . . . . . . . . . . . 131.6.2. Procesos e hilos . . . . . . . . . . . . . . . . . . . . . . . . 141.6.3. Planificacion de hilos . . . . . . . . . . . . . . . . . . . . . 141.6.4. Programacion distribuida . . . . . . . . . . . . . . . . . . 15

1.7. Consumo y frecuencia de trabajo . . . . . . . . . . . . . . . . . . 161.8. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2. Teorıa y diseno 192.1. Procesador Plasma y arquitectura MIPS . . . . . . . . . . . . . . 192.2. Comunicacion entre los procesadores . . . . . . . . . . . . . . . . 202.3. Bus de interconexion . . . . . . . . . . . . . . . . . . . . . . . . . 222.4. Arquitectura de la memoria . . . . . . . . . . . . . . . . . . . . . 24

2.4.1. Principio de localidad . . . . . . . . . . . . . . . . . . . . 242.4.2. Jerarquıa de la memoria . . . . . . . . . . . . . . . . . . . 242.4.3. Memoria Cache . . . . . . . . . . . . . . . . . . . . . . . . 252.4.4. Arquitectura de la memoria en procesadores multi-nucleo 302.4.5. Protocolos y algoritmos de coherencia de cache . . . . . . 32

2.5. Manejo de interrupciones . . . . . . . . . . . . . . . . . . . . . . 332.6. Operaciones atomicas . . . . . . . . . . . . . . . . . . . . . . . . 342.7. Caracterizacion a priori del procesador . . . . . . . . . . . . . . . 39

3. Implementacion y resultados obtenidos 413.1. Herramientas utilizadas . . . . . . . . . . . . . . . . . . . . . . . 413.2. Estructura del procesador multi-nucleo . . . . . . . . . . . . . . . 423.3. Controlador de memoria . . . . . . . . . . . . . . . . . . . . . . . 42

3.3.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.2. Puertos de la entidad . . . . . . . . . . . . . . . . . . . . 43

vii

Page 10: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

INDICE GENERAL viii

3.4. Plasma multi-nucleo . . . . . . . . . . . . . . . . . . . . . . . . . 463.4.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . 463.4.2. Puertos de la entidad . . . . . . . . . . . . . . . . . . . . 50

3.5. Arbitro del bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.5.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . 513.5.2. Puertos de la entidad . . . . . . . . . . . . . . . . . . . . 53

3.6. Manejador de interrupciones . . . . . . . . . . . . . . . . . . . . . 543.6.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . 543.6.2. Puertos de la entidad . . . . . . . . . . . . . . . . . . . . 54

3.7. Nucleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.7.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . 553.7.2. Puertos de la entidad . . . . . . . . . . . . . . . . . . . . 603.7.3. Descripcion del algoritmo de coherencia de cache . . . . . 62

3.8. Unidad de control del nucleo . . . . . . . . . . . . . . . . . . . . 633.8.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . 633.8.2. Puertos de la entidad . . . . . . . . . . . . . . . . . . . . 65

3.9. CPU plasma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683.10. Caracterizacion del procesador . . . . . . . . . . . . . . . . . . . 68

3.10.1. Tamano del procesador . . . . . . . . . . . . . . . . . . . 703.10.2. Desempeno en funcion del trabajo de las tareas . . . . . . 703.10.3. Desempeno en funcion de la utilizacion del bus . . . . . . 703.10.4. Tiempo de procesamiento en funcion del numero de nucleos 723.10.5. Importancia de la memoria cache en procesadores multi-

nucleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

4. Conclusiones y trabajos futuros 754.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754.2. Trabajos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Bibliografıa 77

A. Implementaciones de spinLocks 79A.1. Con soporte de hardware . . . . . . . . . . . . . . . . . . . . . . . 79A.2. Solucion propuesta por Peterson . . . . . . . . . . . . . . . . . . 80A.3. Solucion propuesta por el creador del PlasmaOS . . . . . . . . . 80

Page 11: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Capıtulo 1

Introduccion

En este capıtulo se hace una breve introduccion a la paralelizacion en elcontexto de los procesadores, para luego poder clasificar a los procesadores seguneste criterio. Luego se realiza descripcion de la evolucion de los procesadores a lolargo de la historia. Se muestran tambien las limitaciones que fueron apareciendoy los cambios en el enfoque de los disenos de los mismos.

1.1. Ventajas de la paralelizacion

El concepto de paralelismo es de gran importancia para este trabajo y lodefiniremos en nuestro caso como la forma de realizar dos acciones simultanea-mente. Aprovechar el paralelismo es uno de los metodos mas importantes paramejorar el rendimiento en la ejecucion de cualquier tarea, en particular en pro-cesadores. Por ejemplo, al transferir informacion de un disco rıgido, la velocidadde transferencia esta dada por el ancho de banda del disco, pero si se se colocandos discos y los cuales se acceden simultaneamente, se logra duplicar el anchode banda, y ası mejorar el rendimiento.

A nivel de ejecucion de codigo hay distintos tipos de paralelismos y distintasformas de explotarlo. Un primer ejemplo del uso del paralelismo es a nivel desistema, para lo que se pueden utilizar multiples discos y/o multiples proce-sadores. La carga de trabajo para atender las solicitudes de los clientes puedeser repartida entre los procesadores y discos, y como consecuencia se obtieneun mejor rendimiento. Cuando en un sistema es posible expandir la memoriay el numero de procesadores y discos se lo llama sistema escalable, y es unapropiedad muy valorada en los servidores.

Por otro lado a nivel de procesadores individuales, sacar provecho del pa-ralelismo a nivel de instruccion es crıtico para mejorar la capacidad de pro-cesamiento, se explica con profundidad en la seccion 1.3.2. Una de las formasmas simples de lograr esto es a traves del uso de pipelining, que fue la tecnicautilizada en los primero micros para explotar el paralelismo. La idea basica delpipeline, que se explica con mayor detalle en la seccion 1.3.2, es solapar la eje-cucion de las instrucciones y ası reducir el tiempo total de ejecucion para una

1

Page 12: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 2

secuencia de instrucciones. Un factor clave que da lugar al pipelining es que notodas las instrucciones dependen de la anterior inmediata y por ello ejecutar lainstruccion parcialmente o completamente en paralelo es posible.

1.2. Clasificacion de los procesadores

A lo largo de la historia han surgido varias clasificaciones para los sistemascomputacionales. Muchas de ellas quedaron rapidamente obsoletas con el pasodel tiempo. Sin embargo, la clasificacion propuesta por Flynn en el ano 1966[1] sigue siendo valida. La misma se basa en un modelo de dos dimensiones:Stream de datos y Stream de instrucciones. Cada una de estas dimensionestiene dos posibles valores: Simple o Multiple (en paralelo). Se obtienen ası cuatrocombinaciones posibles:

SISD: En ingles Single Instruction Single Data. Es el caso de un procesadorsimple como el plasma.

SIMD: En ingles Single Instruction Multiple Data. Es el caso de las llama-das computadoras vectoriales o aquellas llamadas VLIW o EPIC.

MISD: En ingles Multiple Instruction Single Data. Son de uso poco fre-cuentes, algunos computadoras que entran en esta categorıa son aquellasque deben ser tolerantes a fallas, en las cuales existen multiples procesa-dores trabajando sobre el mismo stream de datos, y que a la vez deben decoincidir en el resultado.

MIMD: En ingles Multiple Instruction Multiple Data. Es el caso de losmultiprocesadores que se tratan en este trabajo.

Los SIMD y MISD son sistemas disenados para usos especıficos, y no serantratados con mucha profundidad en este trabajo. Los SISD son los mas simplesde los procesadores, y no sacan provecho ni de la paralelizacion de los datosni de las instrucciones, aunque si hacen uso de tecnicas como pipelininig. Lascomputadoras MIMD son las mas flexibles dentro de esta clasificacion, es posibleejecutar dos streams de datos e instrucciones diferentes en simultaneo, seano no independientes entre sı. Es claro tambien que deben existir al menos lamisma cantidad de tareas (o streams de instrucciones y datos) que de nucleos deprocesamiento para poder aprovechar las ventajas de una computadora MIMD.Esto se explica en las siguientes secciones y de allı se concluye que el surgimientode procesadores MIMD es consecuencia del:

La necesidad de aumentar el rendimiento en la ejecucion de tareas.

La limitacion de los procesadores SISD, y de la paralelizacion posible enlas instrucciones.

La posibilidad de dividir las tareas en diferentes procesos independientes,o poco correlacionados, lo que se llama paralelizacion a nivel de tareas.

A lo largo de este trabajo se tratan consecuencias y problematicas de estaparalelizacion.

Page 13: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 3

1.3. Evolucion de los procesadores

1.3.1. Inicio

Los primeros procesadores, surgidos en la decada del 60, ejecutaban secuen-cialmente cada una de las instrucciones del codigo. La ejecucion de cada instruc-cion esperaba la finalizacion de la instruccion predecesora antes de comenzar. Nohacıan uso de ningun tipo de paralelizacion. El metodo utilizado para aumentarsu rendimiento consistıa en aumentar la frecuencia del reloj, y los disenos delas arquitecturas se apuntaban a reducir tiempo de propagacion de las senalesen el procesador (es decir, cantidad de compuertas conectadas en cascada), yde esa manera poder aumentar la frecuencia de trabajo. Otro metodo que seutilizaba para llegar a ese mismo objetivo era mejorar la tecnologıa del procesode fabricacion de los circuitos integrados, reduciendo cada vez mas el tamanode los transistores y ası poder aumentar su velocidad de trabajo [2]. Rapida-mente se alcanzaron los lımites maximos para las tecnologıas de la epoca, y secomenzaron a estudiar otro tipo de maneras de seguir mejorando el rendimien-to, basadas en la arquitectura del procesador en vez del proceso de fabricacion.La evolucion en las arquitecturas se apuntaba a mejorar los rendimientos perosiempre teniendo en cuenta los tipos de programas que se pretendıa correr enlos procesadores.

Para medir el rendimiento de un procesador se utilizan programas llama-dos benchmark. Existen distintos benchmarks para evaluar distintos aspectos deprocesador. Por ejemplo, algunos evaluan operaciones en punto fijo, otras enpunto flotante, ancho de banda de la memoria, etc. Ademas existen distintosbenchmarks segun el contexto para el que fueron disenados, como pueden sercomputadoras de escritorio, servidores, sistemas embebidos, etc. Tras la ejecu-cion de un benchmark, un cierto numero de instrucciones han sido procesadas, yuna cierta cantidad de ciclos de reloj y un perıodo de tiempo determinado hantranscurrido. A partir de estos tres valores surgen dos parametros muy utiliza-dos para evaluar a los procesadores, el CPI (en ingles Cicles Per Instruction)que no tiene en cuenta el tiempo de ejecucion y a la vez es independiente de lafrecuencia de reloj y el IPS (en ingles Instructions Per Second) que no tiene encuenta la cantidad de ciclos que le lleva finalizar la ejecucion de una instruccion.La frecuencia de trabajo del procesador es a la vez el factor que vincula estosdos valores.

En las siguiente secciones de este capıtulo se muestra la evolucion de las ar-quitecturas, junto con las mejoras y las problematicas que implican. Finalmentese muestran las nuevas tendencias en los procesadores, donde en algunos casosespeciales dejan de ser importantes los rendimientos individualmente y pasa aser fundamental la relacion rendimiento/consumo.

1.3.2. Paralelismo a nivel de instruccion

El paralelismo a nivel de instruccion o ILP (en ingles Instruction Level Pa-ralelism) se refiere a la posibilidad de superponer la ejecucion de mas de unainstruccion en un programa. Estas instrucciones pueden ser consecutivas o no.

Un ejemplo de dos instrucciones que pueden ejecutarse en paralelo es:

1 add $1 , $2 , $32 sub $4 , $2 , $3

Page 14: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 4

Donde el resultado de sumar los regitros $2 y $3, se guarda en $1 y por otrolado la resta de esos dos mismos registros se guarda en el registro $4. Las dosoperaciones pueden ejecutarse al mismo tiempo, sin ningun problema. Distintoes en el siguiente ejemplo:

1 add $1 , $2 , $32 sub $4 , $1 , $5

Donde se ve que la segunda operacion no puede ser ejecutada hasta que el re-sultado de primer instruccion no este disponible. A estas instrucciones se lasllama dependientes, o tambien se dice que existe una dependencia entre las ins-trucciones. Existen varios tipos de dependencias entre instrucciones, pueden serde datos, de control o de hardware Estas dependencias se detallan en profun-didad en este trabajo. Para programas tıpicos en assembler MIPS, en bloquesde programa donde no hay saltos ni bucles(salvo por el salto para llegar a esebloque y el salto para volver) el porcentaje tıpico de instrucciones paralelizablesse encuentra entre un 15 % y un 20 % [2]. Al ejecutar este tipo de bloques enun procesador con capacidad de paralelismo no brinda una mejora significativa.Para bloques de programa donde existen ramificaciones y bucles, este porcentajede instrucciones paralelizables es mucho mayor y hacer provecho de la paraleli-zacion a nivel de instruccion se vuelve una de las maneras mas eficientes paramejorar el rendimiento.

La ejecucion de instrucciones en forma superpuesta implica modificacionesen la arquitectura del procesador:

Pipelining : Cuando la logica utilizada para la ejecucion de una instruccionno puede seguir siendo reducida, el pipelining es una tecnica que surge na-turalmente. Se basa en dividir la ejecucion de la instruccion en etapas,donde cada una de estas etapas tiene una cantidad mucho menor de com-puertas conectadas en cadena. De este modo se logra bajar el tiempo depropagacion en cada etapa, lo cual hace posible el aumento de la frecuenciadel reloj. Estas etapas son interconectadas por registros (flip-flops), quetienen la funcion de guardar los resultados de cada etapa y transferirlo a lasiguiente en cada ciclo de reloj [3]. Las cinco etapas tıpicas y los registrosutilizados para interconectarlas se muestran en la figura 1.1. Las etapaspueden superponerse. En la figura 1.2(a) se ve un ejemplo de un pipelinede una arquitectura RISC, donde la ejecucion de la instruccion se divideclasicamente en cinco etapas:

• IF Instruction Fetch

• ID Instruction Decode

• EX Execution

• MEM Memory Access

• WB Write Back

En este tipo de arquitecturas existe lo que se llaman stalls: son momen-tos donde alguna etapa del pipeline debe ser pausada por existir algunadependencia entre dos instrucciones consecutivas. Este tipo de arquitec-turas no muestra mejoras en el CPI, de hecho en general lo empeoran,pero al lograr un aumento en la frecuencia de reloj, se puede mejorar elIPS. El CPI empeora debido a los Stalls que se generan en el procesador.

Page 15: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 5

ID EXIF MEM WBIFREG

ISTRO

S

REG

ISTRO

S

REG

ISTRO

S

REG

ISTRO

S

CLK

Figura 1.1: Pipeline de cinco etapas interconectadas con registros. Enesta figura se muestran las cinco etapas en las que se divide clasicamente unainstruccion de una arquitectura RISC, y como se interconectan mediante regis-tros para poder reducir los tiempo de propagacion en las etapas individualmentey ası poder aumentar la frecuencia de trabajo.

En arquitecturas mas evolucionada se utilizan tecnicas como forwardingy bypassing, que permiten evitar algunos de los stall. Como se producenlos stalls y las maneras que existe de evitarlos son temas ampliamenteexplicados en [3]

Multiple Instruction Issue: El procesador ejecuta realmente varias instruc-ciones simultaneamente. Para ellos algunas partes del Hardware deben sermultiplicada, como por ejemplo las ALU. En la figura 1.2(b), se ve comose realiza la ejecucion de las instrucciones. Se muestra la diferencia con elejemplo de la figura 1.2(a), donde en cada ciclo de reloj se ejecutan dosveces cada una de las etapas del pipeline. El uso de este recurso mejora elCPI. En el ejemplo de la figura 1.2(b) el CPI puede llegar a ser reducidoa la mitad, al ser posible completar hasta dos instrucciones por ciclo. Deesta manera se vuelve posible tambien alcanzar valores de CPI menoresa la unidad. En los pipelines mas mas evolucionados los stalls debidosa dependencias entre instrucciones son practicamente eliminados, lo quemejora notablemente el ILP.

Como se dijo este tipo de soluciones permiten la ejecucion superpuesta deinstrucciones, pero a veces la superposicion no es posible debido a las depen-dencias existentes entre las instrucciones. A veces estas dependencias dependensolo del orden de las instrucciones, por ejemplo en el siguiente codigo:

1 add $1 , $2 , $32 sub $4 , $1 , $53 sub $6 , $2 , $3

las instrucciones 1 y 2 son dependientes. Un procesador con dos issue slots1

tiene dos ramas de ejecucion de instrucciones. La rama que ejecute la segundainstruccion, debera ser pausada en algun momento debido a la dependenciaexistente. Para evitar la pausa que se produce en la ejecucion se puede modificarel orden de las instrucciones por el siguiente:

1 add $1 , $2 , $32 sub $6 , $2 , $3

1No tomamos como ejemplo un procesador que solo posee un pipeline, porque como se dijoantes las dependencias entre instrucciones pueden ser evitadas en esas arquitecturas.

Page 16: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 6

IF ID EX MEM WB

Ciclo3

Ciclo4

Ciclo5

Ciclo6

Ciclo7

Ciclo8

INSTRUCCIÓN 1

Ciclo2

Ciclo9

Ciclo1

INSTRUCCIÓN 2INSTRUCCIÓN 3INSTRUCCIÓN 4INSTRUCCIÓN 5

TIEMPO

INSTRUCCIO

NES

IF ID EX MEM WBIF ID EX MEM WB

IF ID EX MEM WBIF ID EX MEM WB

(a) Arquitectura con pipeline de cinco etapas.

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

Ciclo3

Ciclo4

Ciclo5

Ciclo6

Ciclo7

Ciclo8

INSTRUCCIÓN 1

Ciclo2

Ciclo9

Ciclo1

INSTRUCCIÓN 2INSTRUCCIÓN 3INSTRUCCIÓN 4INSTRUCCIÓN 5

TIEMPO

INSTRUCCIO

NES

INSTRUCCIÓN 6INSTRUCCIÓN 7INSTRUCCIÓN 8INSTRUCCIÓN 9

INSTRUCCIÓN 10 IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

(b) Arquitectura con pipeline de cinco etapas y dos issue.

Figura 1.2: En la figura 1.2(a) se puede apreciar como las etapas de las diferentesinstrucciones se suporponen. En la figura 1.2(b) se muestran como se superponenlas etapas e instrucciones de un procesador con el mismo pipeline de cinco etapasy dos issue slots.

3 sub $4 , $1 , $5

esta porcion de codigo tiene mayor ILP que la anterior.Para aumentar el ILP de un programa se puede entonces reordenar las ins-

trucciones. Para poder hacer un reordenamiento y ası hacer uso eficiente delILP, existen dos enfoques claramente diferenciables:

Basado en Software: Este enfoque encuentra posibles instrucciones para-lelizables en forma estatica, en tiempo de compilacion de un programa. Esla forma mas basica de hacerlo. Esto depende del compilador, que basi-camente reacomoda instrucciones de forma tal de bajar el porcentaje deinstrucciones con dependencias. Como se dijo antes en la ISA de MIPS nose especifica la implementacion, por lo que el compilador no tiene porquesaber la arquitectura del mismo, pero si puede explicitarse, de maneraque tenga en cuenta la arquitectura del microprocesador, como puede sersi cuenta o no con unidades de multiplicacion de punto fijo, unidades demultiplicacion de punto flotante, etc.

Basado en Hardware: Este enfoque encuentra posibles instrucciones pa-ralelizables en forma dinamica, en tiempo de ejecucion de un programa.Es decir, las instrucciones no necesariamente ingresan en el orden en el

Page 17: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 7

que se encuentran en el codigo, sino que el procesador puede ‘ver’, la ins-truccion a la que apunta el contador de programa y un numero dado deinstrucciones posteriores a esa. A estas instrucciones se las llama venta-na de programa. De entre todas las instrucciones que se encuentran enesa ventana del programa, el procesador elige las que son mejores para suejecucion en paralelo.

En un caso general estos dos enfoques pueden ser explotados en forma si-multanea, logrando ası mejores resultados en los valores de CPI e IPS.

A modo de ejemplo se presentan brevemente dos tecnicas simples utilizadaspara la planificacion estatica:

Loop unrolling : Incrementa el numero de operaciones que se ejecutan den-tro de un bucle y a la vez reduce el numero de iteraciones. En los bucleses donde en general se encuentra un mayor numero de instrucciones in-dependientes. El ejemplo clasico es el de la suma de dos vectores, dondeen vez de sumar una componente, se suman dos o mas de las componen-tes por iteracion y ası se reduce la cantidad de veces que se ejecutan lasinstrucciones del bucle. Una consecuencia de realizar esto es que el codigoaumenta su tamano ocupando mayor espacio en la memoria.

Pipeline Scheduling : Dado que hay distintos tipos de dependencias, existenpares de instrucciones que tienen dependencias reales y otros que puedenser evitados. Las instrucciones pueden ser planificadas teniendo en cuentaeste factor y de esa manera evitar pausas en la ejecucion. Esta tecnicadepende de la arquitectura.

Existen otras tecnicas de hardware que se utilizan para mejorar el rendi-miento, reduciendo los stalls, mejorando la planificacion dinamica, aumentandoel numero de instrucciones paralelizables, prediciendo posibles saltos y espe-culando que instrucciones se ejecutaran. Se explican a continuacion algunasbrevemente:

A continuacion describimos brevemente algunas de las tecnicas mas cono-cidas para mejorar el rendimiento. Los objetivos son evitar stalls y pausas enen los procesadores, mejorar la planificacion dinamica, aumentar el numero deinstrucciones paralelizables, y predecir el flujo del programa correctamente:

Forwarding and bypassing : Se utiliza en los pipelines para evitar stalls alejecutar instrucciones que poseen dependencias de datos. Se basa en ex-traer los datos antes de que terminen de atravesar el pipeline. Por ejemplo,se extrae el resultado de una operacion aritmetica apenas termina la etapade ejecucion en vez de esperar a que se escriba en un registro.

Branch prediction (local and global): Cuando en un programa hay un sal-to condicional (o bifurcacion) las instrucciones que se deben de ejecutarcambian segun se cumpla o no la condicion de salto. Esta tecnica se basaen ir cargando en el procesador las instrucciones mas probables y ellasdependen de la probabilidad de saltar o no. En un bucle lo mas usual esque al llegar al final se salta de nuevo al principio. Este salto se realizaN veces, de las cuales N − 1 veces se salta y solo una vez se sigue delargo. Para todo bucle con N mayor a uno las probabilidades de salto sonmayores a las de no saltar.

Page 18: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 8

Register renaming : Se generan registros extra aparte de los definidos enla ISA MIPS, estos registros no pueden ser accedidos por los usuarios,en cambio sı internamente por el procesador y en algunos casos se logramejorar el rendimiento. Un ejemplo simple serıa el siguiente:

1 add $1 , $2 , $32 sw $1 , 0x10 ($sp )3 l i $1 , 0x1

Las instrucciones dos y tres tienen una dependencia, de modo que la ins-truccion tres no puede ser ejecutada antes que la dos, ya que se estarıaguardando un valor erroneo, pero el registro $1 es cargado con un valordistinto en la tercer instruccion. Si fuese posible cambiar $1 por $4 en lasdos primeras instrucciones, entonces sı serıa posible ejecutar las instruc-ciones dos y tres en paralelo. Esto ocurre a veces por falta de registrosen la arquitectura, que es una de las condiciones del procesador perfecto:infinito numero de registros en el procesador. A veces no se puede simple-mente disenar un procesador con mayor numero de registros, ya que estacaracterıstica puede estar definida en la arquitectura de instrucciones (co-mo es el caso de MIPS), pero los procesadores sı pueden tener un numeromayor de registros en su arquitectura e internamente utilizarlos como seexplico antes, renombrandolos para lograr mayor ILP.

Teniendo en cuenta lo dicho anteriormente se puede hacer una clasificacionde los nucleos de procesamiento a partir de la arquitectura del procesador, sinespecificar si posee un nucleo o varios de ellos. En esta clasificacion tambien seidentifica a categorıa pertenece de la clasificacion mostrada anteriormente en laseccion 1.2:

Procesador escalar: Los procesadores mas simples, pueden estar imple-mentados con un pipeline o no. Clasificado como SISD.

Procesador super-escalar con planificacion estatica: Procesadores que uti-lizan Multiple Instruction Issue, en general utilizan una arquitectura conpipeline. La planificacion de las instrucciones es estatica, o sea que solo serealiza a nivel de compilacion. Clasificado como MIMD.

Procesadores vectoriales que son clasificados como SIMD, utilizados prin-cipalmente en aplicaciones cientıficas, que generalmente realizan muchasveces la misma operacion entre distintos datos, por ejemplo al hacer ope-raciones entre vectores de gran tamano.

Procesador de arquitectura VLIW (en ingles Very Long Instruction Word)o EPIC (en ingles Explicit-Parallel Instruction Computer): Este tipo deprocesadores son diferentes a los que se han presentado en este trabajo. Lasinstrucciones que ejecutan los mismos indican en forma explıcita la opera-cion que debe realizar cada una de las unidades funcionales del procesador.Tienen dos ventajas frente a los procesadores de planificacion dinamica:Una alta reduccion en el hardware necesario para su implementacion yque los compiladores pueden generar codigo de manera que se aprovecheal maximo las ventajas del paralelismo. Este tipo de procesadores son deltipo de MIMD.

Page 19: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 9

Procesador super-escalar con planificacion dinamica: Procesadores que uti-lizan Multiple Instruction Issue, en general utilizan una arquitectura conpipeline. Aprovecha tanto las planificacion estatica lograda a nivel compila-cion y la planificacion dinamica realizada a nivel de ejecucion. La operacionque ejecuta cada unidad funcional del procesador se define luego de decidirque instrucciones se ejecutan. Este tipo de procesadores se clasifican comoMIMD.

La mayorıa de los nucleos de los procesadores que se utilizan hoy en dıa sonsuperescalares aunque no todos tienen planificacion dinamica de instrucciones,debido a la gran complejidad que esto presenta.

1.3.3. Limitaciones en el paralelismo a nivel de instruccion

En un procesador ideal que aprovecha completamente el ILP presente en unprograma, los lımites en el rendimiento son impuestos por los flujos de datos atraves de los registros o memoria.

Un procesador ideal contarıa con infinitos registros, una ventana de programainfinita, perfectas predicciones en el flujo de ejecucion del programa, un perfectoanalisis de aliasing de memoria2 y accesos a memoria que solo necesiten un ciclode reloj. En un procesador real estas condiciones no se cumplen, y por eso sealcanza el lımite en el rendimiento de un mono-procesador, cuando el costo dehardware es demasiado, y la mejora que su complejizacion proporciona no essignificativa.

1.3.4. Paralelismo a nivel de tarea

En ocasiones se habla de paralelismo a nivel de tarea o hilo (TLP, en inglesThread Level Paralelism). La definicion precisa de hilos, y la de procesos tam-bien, se puede encontrar en [10]. Para explicar TLP basta con tener una pequenanocion de lo que es un hilo o un proceso, para este caso utilizaremos el nombretarea independientemente de que sea un hilo o un proceso. Una tarea es unaporcion de programa que cumple con un objetivo especıfico. Hay tareas que sonindependientes entre sı y tareas que poseen dependencias con otras. El ejemploclasico para dos tareas pseudo-independientes lo encontramos en un servidor alcual acceden N usuarios y hacen N pedidos distintos. En general estas tareaspueden ser ejecutadas todas por separado y en cualquier orden. Un corolariode poder ejecutar las tareas por separado y en cualquier orden es que tambienpueden ser ejecutadas en paralelo.

Los procesadores MIMD pueden explotar las ventajas del TLP y hay dosenfoques para explotarla:

Los multi-procesadores: El enfoque se basa en multiplicar el numero denucleos e interconectarlos de manera eficiente, sin que importe la arquitec-tura del nucleo en sı (ver seccion 1.5). Pueden clasificarse en dos grandes

2Es una tecnica para reducir accesos a memoria durante el proceso de optimizacion entiempo de compilacion. Detecta uno de los dos casos posibles, si existe o no aliasing entrepunteros, es decir punteros que apuntan a una misma posicion de memoria. Una vez detectadoes posible realizar las optimizaciones necesarias, si no se puede asegurar ninguno de los doscasos, las optimizaciones no pueden ser realizadas.

Page 20: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 10

grupos, los procesadores simetricos y los asimetricos. La principal diferen-cia entre los dos grupos es la forma en la que se interconectan los distintosprocesadores, como se comunican y como se distribuye la memoria, comose ve en la seccion 2.2.

Los procesadores que soportan multi-threading(MT) y simultaneous-multi-threading(SMT): Es un enfoque en el que un unico nucleo soporta la eje-cucion de mas de una tarea en simultaneo, o que tiene la capacidad deintercambiar tareas de forma muy rapida, ya que almacena contextos demas de una tarea [2]. En la seccion 1.4 se profundiza el tema.

1.4. Multi-Threading

El concepto de MT o Multi-Threading y SMT del ingles Simultaneous Multi-Threading tiene lugar solo si existen varias tareas en ejecucion, que poseen pocadependencia entre sı. Durante la ejecucion de una tarea se puede llegar a tenerun stall que dure una cantidad significativa de ciclos de reloj, pero no tangrande como para que convenga realizar un cambio de contexto3. Es el caso deuna instruccion de multiplicacion/division entera, o en punto flotante, que sueletomar varios ciclos de reloj antes de entregar el resultado. La situacion anteriorda lugar a lo que se llama multi-threading, lo que implica almacenar el contextode multiples tareas en el nucleo, duplicando hardware necesario, tal como losregistros y el contador de programa. De esta manera un cambio de contextoentre estas dos tareas tiene costo nulo y se vuelve provechoso cambiar de tareacuando existen estos stalls de corto tiempo.

Visto de otra manera, lo que se tiene son varias ventanas de programas entareas distintas y se toman instrucciones o bien de una o de la otra. Hay dostipos de multi-threading, el grueso y el fino. En el grueso, se realiza un cambiode contexto cada vez que hay un stall que lo amerite. En el fino, se cambia detarea en cada ciclo.

La desventaja del grueso, es que espera a que exista un stall antes de cambiarde tarea, con lo que se pierde un ciclo. Durante este ciclo de reloj se identificael stall y un ciclo posterior se procede al cambio de contexto. En el fino secambia de tarea en cada ciclo, lo cual no impide que puedan ocurrir stalls, perosı ocurren con menor frecuencia. Una desventaja del fino es que la latencia deejecucion de una instruccion en una tarea aumenta: En el ejemplo de la figura1.3, al ejecutar las tareas A y B en un MT grueso, las seis primeras instruccionescomienzan su ejecucion entre los ciclos uno y tres, mientras que si se utiliza unMT fino, las seis primeras instrucciones recien comienzan a ejecutarse entre elprimero y el noveno ciclo.

En multi-threading se pueden tomar instrucciones unicamente de una solaventana de programa (o sea de una sola tarea) en cada ciclo de reloj. En cambioen Simultaneous multi-threading, en cada ciclo de reloj pueden ser tomadas ins-trucciones de distintas ventanas, esto se muestra en la figura 1.3 en comparacioncon el MT fino y grueso. En general existe una dependencia notablemente me-nor entre instrucciones de distintas tareas, de esta manera se puede sacar mayor

3Un cambio de contexto es el proceso que realiza el sistema operativo al cambiar de unatarea a otra, para ello debe guardar el estado de la tarea en ejecucion y cargar el estado de latarea que sera ejecutada. Se explica con mayor detalle en la seccion 1.6.1.

Page 21: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 11

ISSUESLOTS

TIE

MPO

TAREA A TAREA B TAREA DTAREA C

ISSUESLOTS

ISSUESLOTS

ISSUESLOTS

(a) Threads.

ISSUESLOTS

TIE

MPO

MT GRUESO MT FINO SMT

ISSUESLOTS

ISSUESLOTS

(b) Multi-Threading.

Figura 1.3: Como cuatro tareas usan los issue slots de un procesador superes-calar en diferentes enfoques. La figura 1.3(a) muestra como cada tarea utilizalos issue slots en un procesador superescalara estandar sin soporte para MT.Los ejemplos de la figura 1.3(b) muestran tres opciones de MT. Se observa quelas tareas se ejecutan en conjunto. El eje horizontal representa los issue slotsdisponibles en cada ciclo de reloj, en este caso cuatro. El vertical el tiempo enciclos de reloj. Coarse-MT cambia la tarea en ejecucion al producirse un stall(pierde un ciclo en cada cambio). Fine-MT cambia la tarea en ejecucion en cadaciclo (aumenta la latencia de ejecucion entre dos instrucciones de una mismatarea). SMT utiliza instrucciones de las cuatro tareas en cada ciclo de reloj,haciendo mejor uso del nucleo (aumenta la latencia como en fine-MT pero enmenor meida).

Page 22: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 12

provecho de la habilidad del procesador de ejecutar instrucciones en paralelo.La dependencia entre las instrucciones es el factor que limita la paralelizacionde instrucciones y con esta tecnica se logran grandes mejoras. Entonces se pue-de decir que el multi-threading es una tecnica que aprovecha ILP y TLP enconjunto.

Teniendo en cuenta este tecnica a los procesadores super-escalares se lospuede subclasificar en:

Superscalar con multithreading grueso.

Superscalar con multithreading fino.

Superscalar con multithreading simultaneo.

Este ultimo tipo de procesadores son usualmente los mas poderosos y masgrandes en tamano. No se utilizaran para el analisis de multi-procesadores eneste trabajo por una limitacion en la capacidad de las FPGAs.

1.5. Multi-procesadores

Sin importar si el nucleo saca provecho de ILP, TLP, MT fino o grueso oSMT, los procesadores multi-nucleo tienen la ventaja de aprovechar el para-lelismo a nivel de tarea que se encuentra en las aplicaciones. Es decir que seaprovecha la TLP independientemente de la arquitectura del nucleo de proce-samiento, ya que se tiene mas de un nucleo de procesamiento, cada uno con susregistros, contador de programa y corriendo una tarea especıfica, cada uno conun contexto distinto.

Los distintos nucleos, o mejor dicho las tareas que corren en ellos, debencomunicarse entre sı y ademas compartir otros recursos de hardware. Existendistintas arquitecturas para lograr esto, que se tratan en el desarrollo de estetrabajo. En la figura 1.4 se contrasta un procesador mono-nucleo con uno demultiples nucleos, que son conectados a traves de un bus simple.

El hecho de compartir la memoria trae varias complicaciones. Por ejemplo,resulta necesario una entidad que la administre de forma correcta. Cada nucleose comunicara con esta entidad antes de poder realizar accesos a memoria.

En casos donde haya mas de un procesador queriendo hacer uso de los re-cursos uno de ellos debera ser pausado hasta que alguno de ellos finalice y laentidad que los administra brinde acceso al siguiente nucleo. Este problema seintensifica a medida que se aumenta el numero de nucleos y que los programastienen mayor cantidad de instrucciones que solicitan acceso a los recursos dehardware.

Dado que uno de los recursos mas solicitado es el acceso a memoria, la im-plementacion de una memoria cache brinda una tecnica para disminuir el traficoque se genera. El uso de memorias cache trae otros beneficios y complicacionesque se detallaran mas adelante en la seccion 2.4.3.

Por ultimo, se debera disenar un controlador de interrupciones distinto alutilizado en procesadores con un unico nucleo, porque los procesadores pue-den en principio ser interrumpidos por separado. La tarea de este controladorsera identificar a que procesador corresponde enviar cada solicitud de interrup-cion y esto se presentara en la seccion 2.5.

Page 23: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 13

Figura 1.4: Procesadores de con un solo nucleo vs procesadores con variosnucleos

1.6. Sistemas operativos y programacion distri-buida

1.6.1. Sistemas operativos

Un sistema informatico consiste en uno o mas procesadores, una memoriaprincipal, y dispositivos de entrada/salida. Todos estos dispositivos forman unsistema complejo. Escribir un programa que realice un buen seguimiento detodos estos componentes, y que a su vez los utilice en forma correcta y deuna manera eficiente, es un trabajo de extrema dificultad. Por estas razones latendencia actual es equipar a estos sistemas con una capa de software llamadasistema operativo, cuyo trabajo es administrar todos los dispositivos y brindar alos programas escritos por los usuarios una interfaz simplificada con el hardware.

Los sistemas operativos se disenan prestando especial atencion al sistemaen el que van a correr, servidores, computadoras de escritorio, sistemas embe-bidos, etc. Se tienen en cuenta muchos factores para su diseno: flujo de datosde entrada/salida, carga de procesamiento, simetrıa o asimetrıa de los distintosnucleos de procesamiento, etc. Un factor que interesa nombrar para este trabajoes que existen sistemas operativos de tiempo real o RTOS(en ingles Real-TimeOperating Sistems). Entre ellos se pueden diferenciar dos tipos: Hard RTOS, enlos cuales las respuestas deben ocurrir en un momento exacto y los Soft RTOS,donde es aceptable no cumplimiento ocasional de algun plazo. Un ejemplo de losSoft RTOS son los sistemas operativos multimedia, que reproducen audio y/ovideo, mientras que uno para los hard RTOS es un sistema operativo que correen un sistema computacional que controla una lınea de produccion, en donde seinteractua con espacios fısicos y los movimientos deben de estar perfectamentecoordinados.

Page 24: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 14

1.6.2. Procesos e hilos

Se llama proceso a una tarea que debe ejecutar el sistema operativo. Es unaporcion de codigo con un fin en particular. Puede funcionar en conjunto conotros procesos o no.

Un proceso puede ser dividido a su vez en hilos, que siguen siendo una porcionde codigo con un fin en particular, pero este conjunto de hilos que forman elproceso tiene la particularidad de compartir el mismo espacio de memoria, aveces llamado tambien contexto. Estos hilos trabajan entonces en un mismorango de memoria de programa y de datos.

Al intercambiar un proceso que se ejecuta en un nucleo, el contexto tam-bien debe cambiar, mientras que al intercambiar entre hilos, no. Un cambio decontexto de memoria suele tener un gran costo computacional, y esta es la prin-cipal diferencia entre los hilos y procesos. Un cambio en el hilo que se ejecutatiene un costo computacional mucho menor al cambio de proceso. Un ejemplodel costo de un cambio de contexto esta relacionada con las memorias cache(ver seccion 2.4). Como dos procesos suelen trabajar en espacios de memoriadistintos, los datos e instrucciones deben ser cacheados nuevamente, generandomuchos misses los cuales suelen tener un costo grande de tiempo. El contextoincluye tambien a los registros del procesador, ellos sı deben de ser almacenadosantes de cambiar de hilo o proceso.

1.6.3. Planificacion de hilos

Una de las capacidades de los OS es poder planificar las tareas en ejecucion.Hay dos protocolos populares:

Planificacion Round-Robin: Reparte el tiempo de ejecucion equitativamen-te entre todas las tareas. Primero se corre la primer tarea un perıodo detiempo preestablecido, luego la segunda tarea la misma cantidad de tiem-po, ası hasta llegar a la ultima y se vuelve a empezar con la primera.

Planificacion preventiva: A cada tarea se le asigna una prioridad y cadauna de ellas tiene un estado: ‘lista’, ‘bloqueada’ o ‘en ejecucion’. En lafigura 1.5, se ven los estados y transiciones posibles de las tareas. Cuandose decide cambiar la tarea en ejecucion se selecciona a la tarea en estado‘lista’ que tenga mayor prioridad, esta sera la tarea que pasara a estar

Figura 1.5: Estados y transiciones posibles para los hilos de un sistema operativo.

Page 25: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 15

en el estado de ejecucion4. Para sacar una tarea en ejecucion existen dosmotivos: que el OS decida que ya estuvo suficiente tiempo en ejecucion oque la tarea se bloquee. Una tarea solo puede pase al estado ‘bloqueada’si esta en estado ‘en ejecucion’. Las razones para bloquear una tarea son:

• La tarea se bloquea por ‘voluntad’ propia, cuando decide que yarealizo suficiente procesamiento libera el CPU para que otra tareapueda ejecutarse.

• La tarea se bloquea al querer utilizar un recurso de hardware ocupa-do.

El OS es entonces una pieza fundamental en todo sistema computacionalque trabaje con multiples tareas ya que es quien planifica las distintas tareassegun prioridad y en funcion de los recursos disponibles, de esta manera elusuario/programador ocuparse solamente de programar las tareas en sı y no encomo se debe alternar su ejecucion.

1.6.4. Programacion distribuida

La programacion distribuida se basa en dividir las tareas que se deben ejecu-tar en la mayor cantidad de subtareas independientes. Este paradigma/enfoquede programacion es impulsado por la aparicion de los multi-procesadores, quecomo vimos tiene la capacidad de correr tareas en paralelo y cuanto mayor sea laindependencia entre tareas mayor sera el aumento en el rendimiento. Este tipode enfoque es el que se le esta dando hoy en dıa a la programacion. El principalproblema de este estilo de programacion es que no ha habido grandes avancesen este area y los compiladores no brindan el soporte suficiente para hacer estetipo de programacion en forma eficiente. El trabajo de subdividir las tareas ylograr la menor dependencia posible queda pura y exclusivamente a cargo de losprogramadores.

Si se lograra hacer aplicaciones que sean cada vez mas distribuidas, la eficien-cia de los procesadores aumentarıa significativamente, simplemente incremen-tando el numero de nucleos en un procesador. Como se explico anteriormente,en aplicaciones de servidores sı es posible distribuir eficientemente la carga detrabajo en multiples tareas. Los sistemas computacionales orientados a servi-dores suelen tener un numero grande de nucleos comparados con otro tipo desistemas. En ese caso se habla de sistemas de multi-procesadores de gran escala.La particularidad de estas aplicaciones es que pueden ser divididas en tareasmuy poco acopladas, es decir intercambian poca informacion entre sı.

Existen otro tipo de aplicaciones mas acopladas, donde el intercambio dedatos es mayor. En este tipo de tareas es donde los programadores tienen undesafıo mayor, que es el de dividir procesos en hilos independientes. Estas aplica-ciones son comunes en sistemas de escritorio y tambien en sistemas embebidos.Los procesadores multi-nucleo son los mas populares en este area, y como dire-mos en breve las tendencias apunta a seguir aumentando en numero los nucleosde un procesador. Los programadores se ven obligados a implementar la pro-gramacion distribuida en caso de querer implementar aplicaciones con un buen

4En un procesador con un nucleo de procesamiento y sin multi-threading hay una unicatarea en estado ‘en ejecucion’, para uno con dos nucleos hay dos, para los procesadores conMT depende de la cantidad de contextos que pueda almacenar cada nucleo.

Page 26: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 16

desempeno, y este es uno de los principales problemas de la informatica hoy endıa.

1.7. Consumo y frecuencia de trabajo

El consumo de un circuito digital esta dado por [5]:

Potdisipada ∝ f × CL × V 2

Donde CL es una capacidad asociada a los transistores, V es la tension dealimentacion y f es la frecuencia de trabajo. La limitacion para aumentar lafrecuencia de trabajo se basa en la potencia que se puede disipar. Anos atrasalcanzaba con reducir el tamano de los transistores, y de esa manera se reducıala capacidad y tambien se bajaba la tension de alimentacion y eso permitıaaumentar la frecuencia. Hoy en dıa existen grandes dificultades para seguir re-duciendo el tamano de los transistores, lo que hace que sea difıcil aumentar lafrecuencia de trabajo sin que aumente el consumo. Entonces resulta mas con-veniente aumentar el numero de nucleos de procesamiento y hacerlos funcionaren conjunto.

Otra lınea de trabajo que existe hoy en dıa busca bajar el consumo de los pro-cesadores al mınimo. Por ello tampoco siempre se utiliza la maxima frecuencia,dejando el rendimiento de lado y el consumo pasa a ser la principal preocupa-cion. Los procesadores mas nuevos son disenados con la capacidad de cambiarla frecuencia de trabajo segun el uso que se le este dando al mismo. Cuando serequiere mayor rendimiento se aumenta la frecuencia de trabajo, mientras quecuando se quiere un ahorro de energıa se disminuye.

Otro metodo que se utiliza para que el rendimiento y consumo de los pro-cesadores sea parametrizable (controlable), es a traves del aprovechamiento delos multiples nucleos que se tiene en un procesador multi-nucleo. Cuando sequiere un consumo bajo, se apagan los nucleos que no son necesarios, y cuandose quieren un rendimiento alto se los enciende. En ocasiones se prefiere tenerun numero mayor de nucleos de bajo consumo en vez una menor cantidad denucleos de alto rendimiento.

Otro caso especial que se da es implementar procesadores con nucleos asimetri-cos, con distinto poder de procesamiento y consumo. Dependiendo de la ne-cesidad se utilizan nucleos de alto, mediano o bajo consumo/rendimiento enconjunto dentro del mismo procesador.

La utilizacion de todas estas tecnicas en conjunto (cambio en la frecuen-cia de trabajo, asimetrıa y apagado y encendido de los nucleos) dan lugar aprocesadores de alto rendimiento y muy bajo consumo al mismo tiempo.

1.8. Conclusiones

Historicamente los enfoques apuntaban a mejorar la arquitectura del nucleode procesamiento: Se aumento la frecuencia de trabajo, se mejoro la tecnologıade fabricacion de transistores. Luego se empezo a explotar ILP. Se desarrolloel pipeline, luego procesadores con multiple issue slots. Posteriormente multi-threading y SMT. Las tendencias de hoy en dıa apuntan a mejorar los multi-procesadores y las tecnicas de programacion distribuida, lo que a la vez permite

Page 27: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 17

aumentar el numero de nucleos de un procesador, y esto ultimo impulsa eldesarrollo en mejores tecnicas de programacion distribuida. Se forma un cicloque se realimenta, e impulsa a los procesadores multi-nucleo. Por otro lado eldiseno del nucleo en sı ha alcanzado niveles, en los cuales se vuelve difıcil seguiravanzando, multiplicar el numero de nucleos en vez de redisenarlos desde elcomienzo resulta conveniente. El consumo de los procesadores se vuelve un factormuy importante y fomenta tambien el diseno enfocado a los multi-procesadores.Y como se dijo antes utilizando este enfoque se puede lograr un bajo consumoy un gran rendimiento, por eso esta tesis se centra en los multi-procesadores.

Page 28: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 1. INTRODUCCION 18

Page 29: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Capıtulo 2

Teorıa y diseno

En este capıtulo se realiza una introduccion al procesador plasma junto conla arquitectura de instrucciones que soporta. Se evaluan las distintas posibili-dades para el diseno del multi-procesador. El tema principal del diseno es laarquitectura de la memoria y la comunicacion entre los procesadores. Otros te-mas secundarios que se tratan son las interrupciones en multi-procesadores y ladificultad de implementar operaciones atomicas en los mismos. Se fundamentanlas decisiones tomadas, las cuales a lo largo del trabajo apuntan a lograr undiseno lo mas simple posible.

2.1. Procesador Plasma y arquitectura MIPS

El micro-procesador plasma es un procesador disenado en VHDL1, sinteti-zable, RISC de 32 bits, ejecuta todas las instrucciones de modo usuario de laISA MIPS(TM) salvo las de acceso desalineado a memoria2.

En la pagina http://opencores.org/project,plasma se puede descargar la ulti-ma version de este procesador. Esta implementacion incorpora tambien algunosperifericos. Fue probado en distintas FPGAs de Xilinx y Altera, pero sobretodoen FPGAs Spartan-3E de Xilinx, en el kit de Digilent ”Spartan-3E Starter Kit”.La arquitectura del procesador plasma implementa la unidad de procesamientoen dos o tres etapas de pipeline a eleccion, una memoria cache opcional de 4kB.La frecuencia de trabajo al implementarlo en FPGAs de Xilinx y Altera ha al-canzado los 25MHz y 50MHz dependiendo del modelo de FPGA. Al presenteno fue implementado a nivel de silicio, o al menos no ha sido reportado en labibliografıa consultada.

1VHDL es el acronimo que representa la combinacion de VHSIC y HDL, donde VHSIC esel acronimo de Very High Speed Integrated Circuit y HDL es a su vez el acronimo de Hard-ware Description Language. Es un lenguaje definido por el IEEE (Institute of Electrical andElectronics Engineers) (ANSI/IEEE 1076-1993) usado por ingenieros para describir circuitosdigitales

2La implementacion de las instrucciones de acceso desalineado a memoria no fue posible,ya que estas estaban patentadas cuando fue disenado

19

Page 30: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 20

MIPS (en ingles Microprocessor without Interlocked Pipeline Stages) es unaISA (en ingles instructions set architecture) RISC (En ingles reduced instructionset computer). Estan definidas instrucciones para procesadores de 32 y 64 bits,y diferentes versiones del set de instrucciones: MIPS I, MIPS II, MIPS III, MIPSIV y MIPS V.

El set de instrucciones no define en ningun momento la arquitectura delhardware del procesador, de hecho existen muchas implementaciones distintasde los mismos, con distintas frecuencias de trabajo, con distinto tamano decache, incluso con pipelines mas o menos profundos.

2.2. Comunicacion entre los procesadores

Como se dijo en el capıtulo 1, surge la necesidad de que los nucleos de losmulti-procesadores se comuniquen entre sı para intercambiar datos, lo cual nosucede en procesadores de un solo nucleo o mono-procesadores. La comunicacionentre los diferentes procesadores se realiza en general a traves de la memoriaque comparten. Existen varias formas de compartir la memoria, lo que dependede la forma en la que esta esta distribuida. Pueden utilizarse buses o una redesde comunicacion, a los cuales se conectan los procesadores y la memoria. Enla figura 2.1 muestran las dos arquitecturas clasicas para la interconexion demulti-procesadores:

En la arquitectura de shared memory o memoria compartida se observaque existe una unica memoria principal que esta conectada directamen-te al bus. Todos los nucleos acceden a la memoria a traves del bus deinterconexion.

En la arquitectura distributed shared memory o memoria compartida dis-tribuida se observa que la memoria no es unica, sino que esta particionadaen bloques, uno por cada procesador, y a la vez se encuentra conectada ala red de interconexion. Esto implica que dependiendo de la posicion dememoria a la que se quiera acceder un nucleo puede necesitar hacerlo atraves del bus o no y esto difiere nucleo a nucleo.

Las arquitecturas de memoria compartida tiene la particularidad de que eltiempo de acceso a cualquier posicion es independiente del nucleo que quieraaccesarla. Esto se denomina: UMA en ingles Uniform Memory Access. En unaarquitectura de memoria compartida, los nucleos estan fuertemente acoplados,lo que significa que pueden comunicarse entre sı a velocidades muy altas, estaes su principal ventaja. Por otro lado la principal desventaja que presenta, sonlas colisiones que se generan en el bus, por ser un bus compartido entre todoslos nucleos. Las colisiones se generan cuando varios nucleos pretendan accederal bus simultaneamente. Esto no es posible, ya que mientras un nucleo tieneacceso, el resto de ellos deben esperar. Las colisiones se incrementan junto conel aumento de nucleos conectados al bus. Por esta razon el numero de nucleosque pueden compartir un bus, tiene un lımite y generalmente es inferior al deuna arquitectura de memoria compartida distribuida.

En las arquitecturas de memoria distribuida compartida los tiempos de ac-ceso a una posicion de memoria depende del nucleo que quiera accesarla. Siel nucleo debe acceder a traves del bus o red de interconexion este tiempo

Page 31: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 21

(a) Arquitectura Shared Memory.

(b) Arquitectura Distributed Shared Me-mory.

Figura 2.1: Arquitectura Shared Memory - Los procesadores tienen todosel mismo tiempo de acceso a cualquier posicion de memoria, UMA (UniformMemory Access). La comunicacion puede ser a traves de uno o varios buses, otambien a traves de un switch.Arquitectura Distributed Shared Memory -Los procesadores tienen distintos tiempos de acceso a distintas zonas de memo-ria, dependiendo si deben acceder a traves del bus o no, NUMA (Non UniformMemory Access). La comunicacion es normalmente a traves de una red de co-municacion.

es mayor. A este tipo de arquitecturas se las denomina NUMA en ingles NonUniform Memory Access. Por otra parte en las arquitecturas de memoria com-partida distribuida si el sistema computacional corre un OS, en el cual se vanreprogramando las procesos que se ejecutan en cada procesador, el planificadorde procesos del sistema operativo se vuelve mucho mas complejo . Al no ser uni-formes los tiempos de acceso, el rendimiento al ejecutar las tareas se ve afectadodependiendo de que nucleo sea el que ejecute el proceso, lo cual implica que elsistema operativo no solo debe decidir que proceso ejecutar, sino tambien encual de los nucleos. Esta problematica tambien aparece en los sistemas nombra-dos en los sistemas asimetricos nombrados en la introduccion, donde los nucleosde procesamiento pueden ser distintos entre sı. Para esos sistemas tambien debeutilizarse un OS complejo que conozca el tipo de procesador que correra la tarea.

Surge entonces otra clasificacion para los procesadores multi-nucleo:

SMP (en ingles Symmetric MultiProcessors): Donde los nucleos son inter-

Page 32: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 22

cambiables, es decir, se consiguen los mismos resultados al ejecutar unatarea en uno o en otro nucleo de procesamiento.

AMP (en ingles Asymmetric MultiProcessors): Se obtienen distintos re-sultados dependiendo de la distribucion de las tareas en los distintos pro-cesadores.

En general los SMP tienen una arquitectura de memoria UMA, donde la me-moria es compartida y centralizada, y se conectan a traves de un bus. Este tipode arquitectura se utiliza para numero bajo de procesadores ya que al aumentarel numero de procesadores aumentan las colisiones en el bus. Tienen la granventaja de tener un acoplamiento fuerte entre los procesadores, lo cual significauna gran velocidad de comunicacion. Por el contrario las arquitecturas AMP,cuando la asimetrıa es producto de la distribucion de la memoria, suelen teneruna arquitectura NUMA, donde la memoria es compartida y distribuida y se in-terconectan a traves de una red de comunicacion. Los procesadores estan muchomenos acoplados entre sı, lo cual implica una disminucion en la velocidad con laque se pueden comunicar, se utiliza para aplicaciones donde los procesadores nodeben compartir una gran cantidad de datos y cuando se necesita aumentar elancho de banda del sistema hacia componentes externos, o sea discos rıgidos ola conectividad a una red, ya que cada nucleo puede tener asociado dispositivosde entrada/salida locales. Esta arquitectura se observa en la figura 2.1(b).

Este tipo de arquitecturas son las que se utilizan generalmente, pero todotipo de combinaciones puede ser valida, como por ejemplo tener una unica me-moria compartida pero dispositivos de entrada/salida locales a los nucleos, etc.En el diseno del plasma multi-nucleo se adopta una arquitectura tipo SMP, en elcual las unidades de procesamiento se conectan a traves de un bus, y compartenuna memoria principal, que es accedida a traves del mismo. Todos los nucleosson iguales y estan basados en el procesador plasma. Se adopta esta arquitecturapor ser simple y adecuada para las aplicaciones embebidas a las que apunta elprocesador.

2.3. Bus de interconexion

Una vez decidida la utilizacion de un bus para la comunicacion se debeevaluar las distintas posibilidades para su diseno. Existen diferentes estructuraspara los buses de comunicacion, entre ellas las mas conocidas:

Single bus en ingles o bus simple.

Switched bus en ingles o bus switcheado.

En la figura 2.2 se pueden observar estas dos posibilidades. Si se utiliza un bussimple(figura 2.2(a)), cuando un nucleo accede al bus tiene acceso a todos losperifericos conectados al mismo,ya sea memoria principal, o cualquier otro pe-riferico. Mientras un nucleo tiene el acceso, el resto de los nucleo que quierantomar el control del mismo deberan esperar que el nucleo en cuestion lo libere.Por el contrario un bus switcheado(figura 2.2(b)) tiene la caracterıstica de poderbrindar acceso a dos o mas nucleos a la memoria principal o a los perifericos,siempre y cuando no haya dos de ellos tratando de acceder a una misma entidad.

Page 33: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 23

NÚCLEO NÚCLEO NÚCLEO NÚCLEO

MEMORIAPRINCIPAL

(a) Bus simple

NÚCLEO NÚCLEO NÚCLEO NÚCLEO

MEMORIAPRINCIPAL

BANCO 0 BANCO 1

SWITCHEDBUS

BANCO 0 BANCO 1

(b) Bus switcheado

Figura 2.2: Bus simple y switcheado. En un bus simple, solo un nucleo puedetener acceso a memoria. Si dos nucleos intentan acceder a memoria, se produceuna colision. Por el contrario, en un bus switcheado se pueden generar accesosen paralelo entre los nucleo y los distintos bancos de memoria (si dos nucleosintentan acceder al mismo banco de memoria, tambien se produce una colision).El resultado es un aumento en el ancho de banda entre los nucleos y la memoria.En la figura se muestra una de las posibles conexiones entre los nucleos y losbancos.

En algunos casos la memoria principal se puede dividir en bloques y se imple-menta un controlador de memoria por cada bloque. De esta manera se puedeaumentar el ancho de banda del bus, ya que permite acceso de dos o mas nucleos(hasta un maximo que depende de la cantidad de bloques o controladores dememoria) en simultaneo, la restriccion para ello es que no quieran acceder almismo bloque de memoria. Este bus es considerablemente mas complejo, sin em-bargo es una de las maneras mas eficientes de aumentar el rendimiento del bus.Al aumentar en gran cantidad los nucleos de procesamiento, el bus de conexionse vuelve un cuello de botella, limitando el rendimiento, en estos casos puede serde extrema utilidad cambiar el bus a un bus switcheado y dividir la memoriaprincipal en bloques. Al hacer uso de esta tecnica se aumenta el ancho de bandaentre la memoria y los nucleos y la arquitectura sigue siendo tipo UMA, lo cualno es un detalle menor.

Page 34: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 24

En el plasma multi-nucleo se opta por utilizar un bus simple, ya que enprincipio no es necesaria otra estructura mas compleja, ya que en este tra-bajo se pretende implementar procesadores de numero relativamente bajo denucleos(hasta ocho). Un bus simple tiene la ventaja de permitir mensajes debroadcast (multidestino), mas adelante en este trabajo se discute el beneficioque brinda utilizar esta estructura al algoritmo de coherencia de cache (que seve en la seccion 3.7.3).

Al existir muchas entidades que acceden al bus, en necesario controlar losaccesos al mismo. Para nuestro caso particular estas entidades son los distintosnucleos. Idealmente el acceso al bus deberıa ser repartido equitativamente entretodos los procesadores y ninguno de ellos deberıa tener prioridad, de esta maneraque la ejecucion de una tarea sea lo mas independiente posible del nucleo en elque se ejecuta. En el plasma multi-nucleo se implementa un arbitro de bus, quesera el encargado de la tarea de controlar el acceso al bus y repartirlo lo masequitativamente posible. Su implementacion y funcionamiento se describe en laseccion 3.5.

2.4. Arquitectura de la memoria

2.4.1. Principio de localidad

El principio de localidad surge de observar una caracterıstica muy usual: losprogramas tienden a reutilizar datos e instrucciones que han sido usadas recien-temente. Una regla empırica es que los programas pasan un 90 % del tiempode ejecucion con solo un 10 % del codigo [2]. De este modo, a partir del pasadoreciente se puede predecir con bastante precision que instrucciones y datos unprograma utilizara en un futuro cercano. El principio de localidad es mucho masfuerte cuando se refiere a instrucciones o codigo, y no tanto al referirse a datos.Existen dos tipos de localidad:

Localidad temporal: Es probable acceder en un futuro cercano nuevamentea posiciones de memoria que han sido accesados recientemente.

Localidad espacial: Posiciones de memoria situadas cercanas a otras acce-didas recientemente, tienden a ser accesados en un futuro cercano tambien.

2.4.2. Jerarquıa de la memoria

Al programar siempre se desea disponer de una gran cantidad de memoriade acceso rapido. Existen memorias rapidas, que tienen un costo es elevado, ytambien existen memorias lentas, que tienen un bajo costo, y por otro lado, elprincipio de localidad se basa en que el codigo no es accedido uniformemente,algunas porciones son utilizadas con mayor frecuencia que otras.

Lo que se busca al jerarquizar la memoria, es utilizar la memorias rapidasy las de bajo costo en conjunto, procurando que las posiciones de memoriaque tengan mayor probabilidad de ser accedidas se encuentren ubicadas en lasmemorias mas rapidas. El objetivo es brindar al usuario del sistema la ilusion deposeer un memoria tan grande como la mas economica y tan rapida como la mascara. En la figura 2.3 se pueden ver los distintos niveles tıpicos de una memoriajerarquizada. Para aprovechar el costo y el desempeno de los distintos tipos de

Page 35: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 25

Velocidad Tamaño Costo EjemploCPU

MEMORIA

MEMORIA

MEMORIA

RÁPIDA

LENTA

PEQUEÑA

GRANDE

COSTOSA

ECONÓMICA

SRAM

DRAM

DISCORIGIDO

MAGNÉTICO

Figura 2.3: La esctructura basica de memoria jerarquizada. Se muestrauna memoria dividida en tres niveles, y se caracteriza cada nivel de memoriasegun tamano, costo, velocidad de acceso y una tecnologıa posible para su fa-bricacion. A medida que la memoria se aleja del CPU, la velocidad y el costobajan, mientras que el tamano aumenta. Al utilizar una memoria jerarquizada,el programador tiene la ilusion de estar trabajando con una memoria tan grandecomo la mas economica y tan rapida como la mas cara.

memorias se disenan niveles de memoria que a medida que la memoria se alejadel CPU, el tamano aumenta, mientras que la velocidad y el costo disminuyen.

Historicamente, jerarquizar la memoria se ha vuelto mas importante a me-dida que el desempeno de los procesadores se incremento, ya que la velocidadde trabajo de los procesadores aumento mas rapido que la velocidad de accesoa la memoria principal.

La cantidad y el tamano de los niveles de memoria puede variar en cadacaso. Una de las estructuras clasicas para estos niveles es: cacheL13, cacheL2,cacheL3(solo en procesadores de alto rendimiento), memoria principal, disposi-tivos de entrada/salida (discos rıgidos, memory stick, etc);

En el plasma multi-nucleo no se tienen discos rıgidos ni otros dispositivosde entrada/salida del estilo. Se elije implementar solo dos niveles de memoria:cacheL1 y memoria principal. Por la velocidad de trabajo de la FPGA, delprocesador y de la memoria externa, no vale la pena utilizar una jerarquıa mascompleja que esta, y con estos dos niveles es suficiente.

2.4.3. Memoria Cache

El CPU es quien realiza pedidos de datos e instrucciones en la memoria y lohace a la memoria mas rapida que a su vez es la mas cercana. Como se dijo enla seccion anterior esta memoria es tambien la mas pequena, lo cual la imposibi-lita a tener almacenados todos los datos e instrucciones existentes. Llamaremositems a cada una de las posiciones de memoria, ya sean datos o instrucciones.

3El nombre cacheL1 viene del ingles cache level one.

Page 36: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 26

Esta memoria entonces tiene un subconjunto de los items presentes en la me-moria principal. Este tipo de memorias son llamadas memorias cache. Cuandoel CPU realiza el pedido de algun item y este no es encontrado en una memoriacache, traspasa el pedido al siguiente nivel de memoria hasta que se alcanzala memoria principal. En memoria principal el item tiene que estar obligato-riamente. Cuando no se encuentra un item en cache se dice que se produjo unmiss. Por el contrario cuando si se lo encuentra se habla de un hit. Como se dijoantes, a medida que se baja de nivel en la jerarquıa de memoria, estas se vuelvenmas rapidas. Esta es la manera en la cual se aprovecha la localidad temporalde un item. Para aprovechar la localidad espacial de los items se utiliza otratecnica, que es la de trabajar con bloques de memoria de tamano mayor al deuna palabra. Llamamos una palabra a una unica instruccion o dato, en el casodel plasma estan formadas por 32 bits. Si se produce un miss en una cache, envez de solo copiar ese item en la cache, se aprovecha para copiar un bloque detamano mayor que contenga el item en esa cache.

Al tener que copiar un nuevo bloque en una cache, inevitablemente se tieneque escribir sobre algun otro bloque ya existente. Hay distintas maneras demapear la memoria principal en cache, mapeo directo, asociativo de N vıas ofull asociativo. En algunos casos dada una direccion de memoria el bloque adesplazar es fijo (es el caso de mapero directo), y en otras formas de mapeoexisten distintas posibilidades. En caso de existir mas de un posible bloque areemplazar, el rendimiento depende de cual se elije. Para ello existen distintaspolıticas de reemplazo. Dependiendo de las polıticas puede variar el rendimientode la cache. Los tamanos de los bloques varıan segun el diseno, y tambien varıansegun el nivel de la memoria. El tamano de la cache, el tamano de los bloques,el mapeo de memoria en cache y la polıtica de reemplazo afectan el desempenode la cache. Mas adelante en esta seccion se explica el mapeo de bloques dememoria en cache y las polıticas de reemplazo principales.

Por otro lado, se pueden clasificar los accesos a memoria de un CPU en, datose instrucciones. Como se explico en la seccion 2.4.1 al analizar la ejecucion de losprogramas se observan tendencias de accesos a memoria, que es en lo que luego sebasa el principio de localidad. Este principio es distinto para los accesos a datosy para los accesos a instrucciones, y es un factor significativo. Otro factor a teneren cuenta es que al copiar un bloque de instrucciones en una memoria cache,la probabilidad de reutilizarlas es relativamente alta. Por lo tanto se prefiere notener que reemplazar un bloque de instrucciones recientemente copiado por unbloque de datos. En estas dos razones esta basada la idea de dividir la memoriacache en instrucciones y datos. Sin embargo, en animo de simplificar el diseno,en este trabajo se utiliza una memoria unificada.

Mapeo de bloques y polıticas de reemplazo en memorias cache.

A modo de ejemplo tomemos una memoria cache con las siguientes carac-terısticas:

Tamano de cache: 8kB.

Tamano de bloque: 1kB.

Ancho de la direccion: 32bits.

Page 37: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 27

Figura 2.4: Distribucion de bit de las direcciones de memoria. Los bitsmenos significativos de la direccion son para direccionar las palabras dentro delbloque, en este caso son diez. Luego existen una cierta cantidad de bits parael mapeo de bloques en cache, en este caso tres, dos, unos o cero, dependiendode la cantidad de vıas disponibles en la memoria cache. El resto de los bits dela direccion, los mas significativos, junto con los que se utilizan para el mapeo,son para direccionar el bloque en memoria principal. Los bits que le siguen alos utilizados para mapear el bloque en cache son utilizados para el tag, y lacantidad de bits de tag puede variar.

De estas condiciones se desprende que la memoria cache tiene una capacidadpara albergar ocho bloques de memoria. Existen entonces dos maneras de ma-pear los bloques de memoria principal en memoria cache: directo o asociativo.En ocasiones se habla tambien de un tercero que es el full asociativo, pero siguesiendo un caso particular del asociativo. En mapeo directo la posicion de ubi-cacion de un nuevo bloque queda totalmente determinada por la direccion enla que se encuentra en memoria principal. Para este ejemplo los ultimos 10bitsdireccionan una palabra dentro de algun bloque. Con los siguientes 22bits seselecciona un bloque en memoria principal, algunos de estos bits tambien seutilizan para determinar la posicion del bloque en la cache, la cantidad de bitsutilizados depende del tipo de mapeado utilizado. En la figura 2.4 se pueden veren detalle los bits utilizados en cada caso y en la figura 2.5 un ejemplo de comolos bits de la direccion de memoria influyen en la posicion que toma el bloqueen una memoria cache. Al copiar ese bloque en una memoria cache resultan lossiguientes escenarios posibles:

mapeo directo: la posicion del bloque queda determinada por los 3bits (12a 10, ver 2.4). En la figura 2.5 se ve un ejemplo de como diferentes bloquesde memoria se ubican en memoria cache. En la figura 2.6(a) se muestracomo se organizan los bloques para este caso.

asociativa de dos vıas: la posicion del bloque queda determinada en primerlugar por los 2bits (11 a 10, ver 2.4), luego puede ubicarse en cualquierade los dos lugares (dos vıas, ver figura 2.6(b)) disponibles. La vıa en laque queda ubicado queda determinada por la polıtica de reemplazo.

asociativa de cuatro vıas: la posicion del bloque queda determinada enprimer lugar por un solo bit(bit10, ver 2.4, luego puede ubicarse en cual-quiera de los cuatro lugares (cuatro vıas, ver figura 2.6(c)) disponibles.La vıa en la que queda ubicado queda determinada por por la polıtica dereemplazo.

Page 38: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 28

Figura 2.5: Mapeo directo

asociativa de ocho vıas, este caso es que a tambien se lo llama full asocia-tiva, donde el bloque puede ser ubicado en cualquiera de las ocho (ochovıas, ver figura 2.6(d)) posiciones de la cache, lo cual quedara determinadopor la polıtica de reemplazo.

Para los casos donde existe mas de una posicion de memoria en donde ubicarel bloque, esta posicion queda determinada por las polıticas de reemplazo:

Aleatoria: El bloque es reemplazado de forma aleatoria y en general es laalternativa de menor eficiencia.

FIFO: Se usa un algoritmo First In First Out FIFO (primero en entrar esel primero en salir) para determinar que bloque debe abandonar la cache.Este algoritmo generalmente es poco eficiente.

Menos recientemente usado (LRU): El bloque que se copia en cache des-plaza al bloque que ha pasado mas tiempo en calle sin ser utilizado.

Menos frecuencias usadas (LFU): Se sustituye el bloque que ha tenidomenor frecuencia de acceso.

En el plasma multi-nucleo se utiliza una cache de mapeo directo y con untamano de bloque de una palabra. Que el bloque tenga el tamano de una unicapalabra es malo en cuanto al rendimiento de la cache, pero presenta una granventaja en cuanto a la simplicidad del diseno de la cache. Otra consecuencia deesto es que se deja de aprovechar la localidad espacial, y solo se hace uso de lalocalidad temporal. Por otro lado se utiliza una polıtica de escritura en cache ymemoria principal en cada escritura de datos. En la seccion 2.4.4 se presentanlas distintas polıticas de escritura que existen.

Page 39: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 29

(a) Mapeo directo. (b) Mapeo asociativo de dos vıas.

(c) Mapeo asociativo de cuatrovıas.

(d) Mapeo asociativo de ocho vıas o full asociativa.

Figura 2.6: Alternativas de mapeos. En el eje vertical se ven las distintasentradas de la cache que quedan determinadas por la direccion del bloque. Enel horizontal se muestran las vıas disponibles para cada caso. En la memoriade mapeo directo (2.6(a)) 3 bits seleccionan la entrada y solo existe una uni-co bloque a reemplazar. En asositiva de dos vıas (2.6(b)) 2 bits seleccionan laentrada y existen dos bloques posibles para reemplazar. En asositiva de cuatrovıas (2.6(c)) 1 bits seleccionan la entrada y existen cuatro bloques posibles parareemplazar. En full asositiva (2.6(d)) la entrada es unica y cualquier bloquepuede ser reemplazado para albergar al nuevo. En los casos que hay mas de unaposibilidad, las polıticas de reemplazo se utilizan para decidir cual sera reem-plazado.

Page 40: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 30

2.4.4. Arquitectura de la memoria en procesadores multi-nucleo

Importancia de la memoria cache

Como se explico en la seccion 2.4.2 jerarquizar la memoria tiene la impor-tante ventaja de brindar la ilusion de una memoria de gran tamano que a la vezes rapida y barata. Esto lo logra almacenando datos e instrucciones en memo-rias cache. En procesadores mono-nucleos esa es la unica funcion de este tipode memoria, pero para procesadores multi-nucleo que utilizan SMP, donde losnucleos son interconectados por un bus, es indispensable implementar bloquesde memoria cache para evitar el elevado numero de colisiones de acceso al busque se producirıan sin ellas.

Para explicar esto se supone un sistema de dos nucleos, en dos versiones:una que posee solamente memoria principal y otro que ademas tiene al me-nos un nivel de memoria cache. En el caso donde los dos nucleos ejecutan unprograma que esta en memoria principal, ambos nucleos intentaran acceder ala primer posicion de memoria del programa indicada por el contador de pro-grama. Es imposible que los dos nucleos accedan simultaneamente a memoria,entonces uno de ellos sera pausado inevitablemente, mientras que el segundoaccedera a la primer posicion de memoria para buscar la instruccion a ejecutar.Una vez que el primer nucleo finalice con la utilizacion del bus, recien en esemomento se cedera acceso al segundo nucleo, lo cual sucedera en el siguienteciclo de reloj. Pero en este nuevo ciclo, el primer procesador ya habra finalizadocon la ejecucion de la instruccion anterior y deseara acceder a la segunda ins-truccion. Ahora la situacion sera la inversa: el segundo procesador sera quientendra acceso al bus y a la memoria, y el primero sera quien debera esperar.Esto sucedera constantemente, y basicamente el acceso al bus limitara a losprocesadores. Independientemente de la cantidad de nucleos que se tengan, solose podra acceder a una instruccion del codigo por ciclo de reloj. Entonces, cadauno de los dos nucleos se encontrara pausado uno de cada dos ciclos de reloj, detener cuatro nucleos cada uno se encontrara pausado tres de cada cuatro ciclos,etc. En el caso de no ser una instruccion lo que quiere acceder uno de los nucleos,es exactamente lo mismo, ya que visto desde afuera, el nucleo pide acceso a unaposicion de memoria, y del nucleo hacia afuera, no interesa si pretende leerla,escribirla, si es dato o instruccion.

Para el caso en el que se tiene una memoria cache, la situacion cambia com-pletamente. En principio se consideran programas sin instrucciones de acceso amemoria (en la ISA MIPS estas serıan por ejemplo LW, SW, LB, SB, etc.), masadelante se analizaran los casos en los que se accede a datos. Cuando los dos pro-cesadores ejecuten un programa que este en memoria principal, ambos nucleosintentaran acceder a la primer posicion de memoria del codigo. El primero reci-bira acceso al bus y a la memoria, mientras que el segundo sera pausado hastaque el primero termine con la utilizacion del bus. Luego el segundo tendra ac-ceso a bus, pero a diferencia del caso anterior el primer nucleo ya no solicitaacceso al bus, debido a que ya posee tambien la siguiente posicion de memoriaque necesita, porque al copiar la primera, copio todo un bloque de memoriaque incluıa al resto de las posiciones de memoria cercanas. De esa manera seaprovecha la localidad espacial del codigo.

La localidad temporal del codigo se aprovecha en los casos que existen bucles

Page 41: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 31

de ejecucion, o llamadas reiteradas a una misma funcion o sub-rutina, dondese ejecutan una y otra vez las mismas instrucciones. En ocasiones particulares,para ciertos tamanos bloque, ciertos tamanos de cache y accesos a posiciones dememoria de cierta distancia especıfica, se pueden producir misses consecutivos,aumentando mucho los tiempos de acceso.

Se concluye entonces que una memoria cache es necesaria para procesadoresmulti-nucleo, y que puede ser una memoria unificada de instrucciones o datos,pero en caso de estar dividida la de instrucciones es obligatoria, mientras que lade datos no, ya que el porcentaje de accesos a memoria para buscar instruccioneses siempre mucho mayor al de los accesos a datos.

Polıticas de escritura

En general los datos no solo son leıdos, sino que en ocasiones tambien semodifican y se vuelven a escribir en memoria. Al tener en cuenta las escriturasde los datos otros aspectos entran en juego, al disenar las memorias cache. Porejemplo, al escribir un dato, existen varias posibilidades:

Escribir el dato en memoria cache unicamente.

Escribir el dato en memoria principal y cache.

Escribir el dato unicamente en memoria principal.

La forma en la que se escribe la cache y la memoria principal toman los nombresde polıticas de escritura en cache y polıticas de escritura en memoria principal.Las polıticas de escritura en memoria principal son:

Write-Through: La memoria principal se escribe en cada instruccion deescritura.

Write-Back : La memoria principal se escribe cuando un bloque que hasido modificado es desalojado de la memoria cache.

Las polıticas de escritura en memoria cache son:

Write-Allocate: La memoria cache se escribe en las instrucciones de escri-tura.

Write-No-Allocate: La memoria cache no se escribe en las instrucciones deescritura.

la polıtica de escritura es entonces una combinacion de las polıticas de escriturade memoria cache y de memoria principal:

Write-Through Write-Allocate: Poco comun, pero muy simple.

Write-Through Write-No-Allocate: Poco comun, tambien simple como laanterior.

Write-Back Write-Allocate: La mas utilizada.

Write-Back Write-No-Allocate: Sin sentido, ya que el dato no se escribeen ninguna memoria y se perderıa.

Page 42: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 32

En general la polıtica Write-Through es poco utilizada, ya que se debe acce-der a memoria en cada escritura, sin embargo su implementacion es mucho massimple. En esta primera version del plasma multi-nucleo se utiliza una polıticaWrite-Through Write-Allocate, que es poco comun y algo ineficiente en algunoscasos, pero que en este caso particular, al tener un bus simple y un bloque deltamano de una palabra se vuelve aceptable y por sobre todas las cosas muchomas simple para implementar. En el capıtulo de implementacion (seccion 3) seexplicara con mayor detalle las razones que fundamentaron su adopcion.

2.4.5. Protocolos y algoritmos de coherencia de cache

Como se explico anteriormente, no tiene sentido tener SMP si no se imple-menta una memoria cache. En esta subseccion se retoma el analisis sobre lasmemorias cache de datos. La diferencia que estas tienen frente a las caches deinstrucciones es que las posiciones de memoria que contienen datos, no solo seleen, sino que tambien se escriben, como se menciono anteriormente. El proble-ma aparece cuando dos caches distintas tienen un mismo dato. Si el dato soloes leıdo no hay ningun problema, como sucede con las instrucciones, pero si eldato se escribe sı. Como se dijo, el dato se puede escribir en cache, en memoriaprincipal o en ambas. En cualquiera de estos casos, el dato que queda albergadoen la cache del nucleo que no realiza la escritura queda desactualizado. Enton-ces, si este procesador realiza una lectura del dato, leera un valor incorrecto. La‘coherencia de cache’se refiere justamente a este problema. En el cuadro 2.1 sepresenta un ejemplo con dos memorias cache, y con una polıtica de escritura enmemoria write-through write-allocate Se ve que al final de las cuatro accionesque realizan los procesadores los datos en las dos cache difieren y en este casoel CPU1 realiza una lectura incorrecta del dato. En estos casos se dice que lacache no es coherente, lo cual no debe suceder, porque los datos leıdos debenser siempre correctos.

Que una memoria cache sea coherente implica que los datos que estan al-macenados en ella son validos y que al realizar una lectura siempre se lee undato correcto, es decir se lee el ultimo valor escrito en esa posicion de memoria.Para lograr la coherencia existen diferentes protocolos, que se pueden clasificaren dos grupos:

Protocolos basados en un directorio: Existe un directorio que almacenalos estados de los bloques de memorias compartidos entre todas las caches

Accion Consecuencia Valor en Valor en Valor realCache0 Cache1 del dato

Estado inicial 0CPU0 lee el dato Miss en Cache0 0 0CPU1 lee el dato Miss en Cache1 0 0 0

CPU0 escribe Write en Cache0 y 1 0 1el dato en memoria principal

CPU1 lee el dato Lee 0 cuando el 1 0 1data real es 1

Cuadro 2.1: Ejemplo de memorias cache no coherentes

Page 43: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 33

del sistema. Las caches se comunican con el directorio al solicitar un dato,el directorio es quien sabe si la cache del CPU que solicita el dato tieneun dato actualizado o no. Es mas popular en multi-procesadores de granescala.

Protocolos Snooping: No es centralizado. Cada cache guarda una copia delbloque y una copia del estado del mismo. Cada memoria cache escucha alas senales de snooping de otras memorias caches. Las senales de snoopingdan informacion a cada meoria cache acerca de los cambios en los estadosde los bloques. El snooping requiere un mecanismo de broadcast, que puedeser implementado con un bus simple. En casos donde se tiene un busswitcheado no es posible realizar broadcast. Muchas veces se utiliza un busadicional, exclusivamente para implementar los algoritmos de coherencia.Existen varios algoritmos para mantener la coherencia entre ellos los maspopulares son: MSI, MESI, MOSI, MOESI [2] [7]. Este tipo de protocoloesta presente en la mayoria de los procesadores actuales.

En el plasma multi-nucleo se utiliza un protocolo de snooping, por ser massimple y adecuado para la arquitectura. Independientemente del protocolo quese utilice para mantener la coherencia de cache tambien se debe de tener encuenta el algoritmo que se utiliza. En el protocolo de snooping, como se dijoantes, se debe de enviar informacion sobre las acciones que se realizan sobre losbloques a cada una de las caches. Para ellos se necesitan senales extras en elbus local del procesador. En el capıtulo 3 se detalla el protocolo y el algoritmoimplementado y que senales se utilizan para lograr la coherencia.

2.5. Manejo de interrupciones

Otro factor a tener en cuenta al pasar de sistemas de un solo nucleo a SMP,es el manejo de interrupciones. En procesadores mono-nucleo la interrupcion deun nucleo depende de los siguientes elementos:

El estado de cada una de las fuentes de interrupcion.

La mascara de interrupciones.

Si las mismas estan habilitadas o no.

Basicamente se realiza una operacion and bit a bit entre la mascara y el estadode interrupciones, y si este resultado es distinto de cero y las mismas estanhabilitadas, el procesador es derivado a alguna tarea que sea capaz de manejarla excepcion.

En un procesador multi-nucleo las posibilidades aumentan ya que existenvarios nucleos que pueden ser interrumpidos. Cada uno de los nucleos a su vezpuede habilitar y deshabiltar las interrupciones por separado. Algunos sistemasimplementan tambien las interrupciones inter-procesadores. Esto no sera inclui-do en este trabajo de tesis.

Para el plasma multi-nucleo se quiere un manejador de interrupciones quedistribuya los pedidos de interrupciones en forma pareja entre todos los pro-cesadores, de modo tal que no sea siempre el mismo nucleo el encargado demanejarlas, y ası lograr que todos lo nucleos se comporten igual. No se tiene en

Page 44: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 34

cuenta si el procesador tiene bloqueadas o no las interrupciones, esto podrıa im-plementarse en alguna version futura del plasma de modo de mejorar la latenciaque tiene una interrupcion en ser procesada. La latencia de la interrupcion esel tiempo que tarda desde que da una excepcion hasta que se ejecuta la tareaindicada.

2.6. Operaciones atomicas

Una operacion atomica hace referencia a la lectura-modificacion-escriturade una posicion de memoria. En ningun caso es posible resolverlo en una unicainstruccion, por lo tanto se implementa mediante un conjunto de instrucciones.Este conjunto de instrucciones debe de ser ejecutado en forma secuencial y sinser interrumpidas. El efecto buscado con estas instrucciones puede ser afectadosi esto no se cumple. Se utiliza la exclusion mutua, que es un mecanismo paraevitar que dos o mas procesadores entren en una seccion crıtica al mismo tiempo.La exclusion mutua se logra a su vez utilizando secciones crıticas. Una seccioncrıtica es una seccion de codigo en la cual el procesador tiene acceso exclusivo alos recursos compartidos y bajo ningun punto de vista debe ser interrumpido. Siproceso se encuentra en una seccion crıtica y un segundo proceso quiere entrara una seccion crıtica, este ultimo proceso es bloqueado hasta que el primerosale de la seccion crıtica, ver figura 2.7. Ası se evita que haya dos procesosutilizando recursos compartidos. Se dice entonces que los recursos compartidosson protegidos mediante secciones crıticas, y ası se logra la correcta utilizacionde los recursos.

Lograr la exclusion mutua entre procesos es simple en procesadores mono-nucleo. Basta con deshabilitar las interrupciones. De esta manera el proceso quecorre en el CPU en ese momento no puede ser interrumpido, por lo tanto tampo-co puede ser reemplazado, y al no existir otro procesador corriendo otro procesoen paralelo, este es el unico proceso que corre y por lo tanto tiene acceso exclusi-vo a los recursos. Para salir de una seccion crıtica basta con restaurar el estadoanterior de las interrupciones. En procesadores multi-nucleo la implementacionno es trivial. Para entrar en una seccion crıtica, un proceso debe asegurarse queningun otro proceso se encuentra en una seccion crıtica. Lo primero que haceun proceso que quiere entrar en una seccion crıtica es deshabilitar las interrup-ciones del nucleo en el que corre de manera que evite ser reemplazado por otroproceso. Luego hay que asegurar que ningun otro proceso, que este corriendo enotro nucleo se encuentre en una seccion crıtica. Si otro proceso se encuentra enuna seccion crıtica, el nuevo proceso que quiere entrar se bloquea. La maneraque se tiene de hacer esto es utilizando los llamados locks, que es algun tipo deregistro o variable compartida entre los procesadores. Se dice que un procesotiene un lock cuando es el que tiene el permiso para acceder a los recursos, esdecir se encuentra en una seccion crıtica. En este caso se puede hablar de proce-so o nucleo indistintamente, ya que al deshabilitar las interrupciones el procesoqueda ligado al nucleo. Al salir de una seccion crıtica el proceso libera el lock.

La manera de implementar un lock es guardando su estado en un registro.Un ejemplo serıa cuando ningun proceso tiene el lock, el registro tiene el valornumerico menos uno almacenado. Cuando algun proceso se aduena del lock elregistro guarda el numero del CPU que corre el proceso que tiene el lock. Deesta manera un proceso antes de entrar en una seccion critica se asegura que el

Page 45: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 35

SECCIÓN CRÍTICA de A

SECCIÓN CRÍTICA de BB está

bloqueada

TIEMPO

PROCESO B

PROCESO A

T0 T1 T3T2

T0: A entra a una sección critica.T1: B intenta entrar a una sección crítica, pero no puede y se bloquea.T2: A deja la sección crítica y B entra a una sección crítica.T3: B deja la sección crítica.

Figura 2.7: Exclusion mutua, evita que dos procesos ingresen en una seccioncrıtica simultaneamente.

registro del lock este en menos uno. Le asigna al registro el valor del CPU dondeesta corriendo y entra en la seccion crıtica. Cuando algun otro proceso quieraentrar en una seccion crıtica y revise el valor del registro, el mismo no sera ceroentonces no podra entrar en la seccion crıtica y debera volver a intentar nueva-mente hasta que se libere el lock (o lo que es lo mismo que el registro del lockvalga cero) (ver figura 2.8). Este proceso se lo llama spinLock [10]. El proceso deobtencion de un lock para entrar en una seccion crıtica se muestra en la figura2.8. Se ve que antes de empezar a competir por el lock, los procesos guardanel estado de las interrupciones (habilitado/deshabilitado) del CPU donde estancorriendo, para poder restaurarlos al finalizar con la seccion crıtica. Una carac-terıstica que deben tener las secciones crıticas protegidas por locks es ser lo masacotadas que sea posible, ya que al entrar a una seccion crıtica bloquean no soloa otros procesos que quieran entrar en estas secciones, sino tambien al CPU enel que corren, ya que no es posible cambiar interrumpir al CPU para cambiar elproceso que esta corriendo en el. Este tipo de implementacion lleva el nombrede mutual exclusion with busy waiting [10]. Existen otros artilugios utilizadospor los sistemas operativos para proteger recursos compartidos y que a la vezpueden ser accedidos por un CPU por un largo perıodo sin bloquear a los otrosCPUs, como son lo Mutex, Semaphores, entre otros [10].

Presentado de esta manera el problema, parecerıa que la exclusion mutuafunciona sin inconvenientes, pero mediante el ejemplo del cuadro 2.2 se demues-tra que no. En el ejemplo se toma un sistema con dos nucleos. Al final del quintociclo los dos procesos (el que corre en el CPU0 y el que corre en el CPU1) se en-cuentran simultaneamente en secciones crıticas, lo cual es un estado indeseado,ya que no cumple con la exclusion mutua. El problema al querer implementarun lock se muestra en la figura 2.9: para querer implementar un lock es necesariorealizar operaciones atomicas, y para realizar operaciones atomicas es necesariotener un lock.

Page 46: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 36

Figura 2.8: Exclusion mutua a traves de la utilizacion de un spinLock.El diagrama en bloques de arriba muestra el proceso para obtener el lock, entrara una seccion crıtica, hacer uso de algun recurso compartido, salir de la seccioncrıtica y liberar el lock. Si un proceso ya posee el lock es imposible que otro loobtenga al mismo tiempo. El proceso que quiera obtenerlo quedara en un bucle,hasta que el lock sea liberado, y pueda obtenerlo. El lock es quien permite a losprocesos acceder o no a las secciones crıticas.

Page 47: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 37

Ciclo CPU0 CPU1 Registrodel lock

0 Quiere entrar Quiere entrar −1a una seccion a una seccion

crıtica crıtica1 Lee registro del lock Sin acceso al bus −12 Compara que sea -1 Lee registro del lock −13 Escribe el resgistro Compara que sea -1 −1→ 0

del lock con 04 Entra en la seccion Escribe el resgistro 0→ 1

crıtica del lock con 15 Entra en la seccion 1

crıtica

Cuadro 2.2: Ejemplo con dos nucleos de la problematica que aparece al quererimplementar un lock en forma directa.

Las siguientes son las operaciones atomicas que deben realizarse para obtenerun lock:

Lectura del registro de estado del lock.

Evaluar si el valor corresponde al de lock liberado.

Si se encuentra liberado guardar un nuevo estado en el mismo, de lo con-trario no hacer nada.

En lenguaje assembler de MIPS I, esto lleva al menos tres instrucciones y resultaimposible asegurar su atomicidad. Si se considera que $2 apunta al registro dellock y que $3 posee el numero del CPU que ejecuta el proceso, entonces lasinstrucciones serıan:

1 $spinLock :2 lw $1 , 0($2)3 bnez $1 , $spinLock4 nop #Se e j e c u t a siempre , s in importar s i e l s a l t o se

toma o no .5 sw $3 , 0($2)

O con una version equivalente: Si se agrega la condicion de que $1 sea distinto decero se puede reescribir el codigo de la siguiente manera ocupe tres instrucciones:

1 l i $1 , 02 $spinLock :3 bnez $1 , $spinLock4 lw $1 , 0($2) #Se e j e c u t a siempre , s in importar s i e l s a l t o

se toma o no .5 sw $3 , 0($2)

Durante el perıodo de tiempo que existe entre las instrucciones dos y cinco delprimer caso, o tres y cinco del segundo ningun otro nucleo deberıa de realizaruna lectura o escritura del registro del lock (apuntado por 0($2)). Al resultar im-posible comprobar esto se puede caer en el problema mostrado en el cuadro 2.2.Para evitar este problema, en MIPS II se han definido dos nuevas instruccionesespecialmente disenadas para realizar estas operaciones atomicamente:

Page 48: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 38

Figura 2.9: Problematica de las operaciones atomicas.

LL - Load Link :

SC - Store Conditional :

El codigo cambiarıa por:

1 $spinLock :2 l l $1 , 0($2)3 bnez $1 , $spinLock4 nop #Se e j e c u t a siempre , s in importar s i e l s a l t o se

toma o no .5 sc $3 , 0($2)

Y se agregarıan las siguiente instrucciones para comprobar que las operacionesLL y SC sobre la posicion de memoria apuntada por 0($2) hayan sido atomicas,y en caso de no ser atomicas se vuelve a intentar:

6 bez $3 , $spinLock #Si l a s i n s t r u c c i o n e s no fueron atomicasentre l l y sc entonces $3 es i g u a l a 0

7 nop #Se e j e c u t a siempre , s in importar s i e l s a l t o setoma o no .

Como se comenta en el codigo si las instrucciones entre LL y SC no fueronatomicas, entonces $3 termina con valor cero despues del SC, sino con valoruno.

Al ejecutar LL, un flag es seteado y se mantiene ası a menos que:

Otro CPU realice algun Store en la misma direccion fısica de memoriautilizada en el LL.

Que ocurra una excepcion entre LL y SC en el CPU que las esta ejecu-tando.

El funcionamiento de estas instrucciones se define en la ISA de MIPS [6]. LaISA es mas especıfica en cuanto a la explicacion y pone como condicion que

Page 49: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 39

la direccion debe ser cacheable, y los stores pueden ser realizados por otrasentidades (no solo CPUs).

Los nucleos del plasma no soportan las instrucciones de MIPS II por eso esque se debe buscar otra solucion a este problema. Algunos autores proponensoluciones por software a este problema como en [10]. Estas soluciones son pocoeficientes y en la bibliografıa solo se muestran ejemplos funcionales para dosnucleos. En el apendice A se muestra el codigo para una implementacion ensoftware de spinLock.

En el procesador plasma multi-nucleo no se utilizaran las soluciones de soft-ware, ya que no se han estudiado en profundidad y no se puede asegurar nadaacerca de su rendimiento ni que funcionen sin caer en un deadlock, termino utili-zado para identificar una situacion en la cual dos CPU (o mas) estan esperando-se mutuamente a que terminen alguna operacion, y ninguno puede hacerlo. Encambio se brinda soporte extra por hardware para las operaciones atomicas,la implementacion es muy simple y se ve en la seccion 3. Vale aclarar que encaso de que no se quiera utilizar simplemente se puede implementar una de lassoluciones propuestas por software sin ningun problema. Otro soporte que debebrindar el hardware para sistemas multi-nucleo es el indice del CPU que corre elproceso. En el plasma multi-nucleo se implementa en un registro fijo por nucleoque almacena este valor.

2.7. Caracterizacion a priori del procesador

Para finalizar este capıtulo se presenta un resumen de las decisiones de disenotomadas.

En particular implementaremos el diseno en un kit Nexys2 de Digilent queposee una Spartan-3E-1200, el diseno cumplira con las siguientes caracterısticas:

Multi-procesador generico: Se pueden implementar N nucleos.

Procesadores:

• Escalar: O sea un solo Issue Slot.

• Pipeline de 2 o 3 etapas a eleccion.

Frecuencia de trabajo: 25MHz.

Cache:

• 512kB de tamano.

• Tamano de bloque de 32bits (una palabra).

• Compartida para instrucciones y datos.

• Polıticas de escritura Write-Through Write-Allocate.

• Mapeo directo.

• Protocolo de snooping para la coherencia de cache.

Memoria RAM: 16MB de memoria para instrucciones y datos.

Memoria interna en cada procesador: 1KB

Conexion serie UART.

Page 50: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 2. TEORIA Y DISENO 40

GPIO:

• 1 puerto de salida de 32bits.

• 1 puerto de entrada de 32bits.

Interrupciones: Las interrupciones son emascarables globalmente, y se pue-den habilitar en cada nucleo por separado. Las fuentes de interrupcionesson:

• Interrupcion por nivel en uno de los pines del puerto de entrada.

• Temporizador: cada 10ms aproximadamente.

• UART: Nuevos datos recibidos.

• UART: Disponible para el envıo de datos.

1 contador de 32 bits.

2 registros de proposito general, para comunicacion de los procesadores.

Soporte adicional de hardware:

• Para identificacion del numero nucleo.

• Para implementacion de locks.

Page 51: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Capıtulo 3

Implementacion yresultados obtenidos

En este capıtulo se hace primero una breve descripcion de las herramientasutilizadas y luego se detalla la forma en la que se implemento cada bloque delplasma multi-nucleo. Se presenta luego la implementacion de la capa superior yse avanza hacia las capas inferiores. De esta manera queda ordenado el trabajoy se comprende claramente la arquitectura disenada.

3.1. Herramientas utilizadas

El diseno total del sistema se realizo en un entorno de un sistema operativolinux, que es un sistema operativo libre y gratuito. Las principales herramientasutilizadas para la implementacion del procesador fueron las siguientes:

Eclipse+Sigasi: Eclipse es una interfaz de desarrollo generica. El pluginSigasi brinda soporte para el desarrollo de codigo de VHDL y Verilog.

Kate: Es un editor de texto que se utilizo en algunos casos que resultabamas comodo que el eclipse.

GHDL: Es un compilador y simulador del lenguaje VHDL.

gtkwave: Es un visualizador de senales, que permite ver resultado de lassimulaciones realizadas mediante GHDL.

IseWebPack: Es una herramienta de Xilinx gratuita que se utilizo parasintetizar los circuitos y generar los archivos necesarios para programar laFPGA. La herramienta brinda muchas mas prestaciones, como compilary simular VHDL, visualizador de senales y interfaz para programar lasFPGAs, pero solo se utilizo para la sıntesis de los circuitos.

DigilentAdept: Es un set de herramientas utilizadas para comunicarse conlos kits de desarrollo de Digilent. Brinda la interfaz para programar lasFPGAs de estos kits.

41

Page 52: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 42

Vale destacar que todas las herramientas y software utilizada para su reali-zacion son de caracter libre o bien gratuito.

3.2. Estructura del procesador multi-nucleo

La estructura general del procesador se ve en la figura 3.1. Se ven cuatrocapas principales:

1. La capa superior, que incluye el procesador plasma multi-core y el contro-lador de memoria. Este ultimo es dependiente del kit en el que se imple-menta.

2. La arquitectura interna del procesador multi-nucleo, que incluye entreotras entidades al arbitro del bus y a los nucleos.

3. La arquitectura interna del nucleo, que incluye a los nucleos de procesa-miento del plasma original y tambien toda la arquitectura de la memoriacache.

4. La capa inferior para nosotros seran las unidades de procesamiento delplasma original.

3.3. Controlador de memoria

Como se dijo anteriormente, se comienza por presentar el controlador dememoria que es la capa superior del sistema. El controlador de memoria funcionacomo interfaz entre el plasma y la memoria externa (ver figura 3.2). La memoriaexterna es fabricada por Micron y el modelo es MT45W8MW16BGX. Su funciones adaptar las diferencias que pueda haber en ancho de palabras, ancho dedirecciones, tiempos de acceso, etc.

El plasma posee dos puertos uno de entrada de datos (dataR) y otro desalida datos (dataW), cada uno con un ancho de 32bits y esta disenado parauna memoria asincronica. Por otro lado la memoria posee un unico puerto deentrada/salida de 16bits.

3.3.1. Descripcion

El controlador de memoria es una simple maquina de estados, que arrancaen un estado de inicializacion. Como la memoria viene configurada por defectopara operar en modo asincronico, lo unico que se hace en este estado es esperaruna cierta cantidad de ciclos hasta que la memoria se encuentre operativa. Elnumero de ciclos que debe esperar es parametrizable, de esta manera se puedecambiar facilmente la frecuencia de trabajo del mismo. Una vez finalizada lainicializacion se pasa a un estado ocioso a la espera de alguna solicitud deescritura o lectura. Por cada solicitud de escritura/lectura del CPU se realizandos escrituras/lecturas en memoria, esto se debe a la diferencia del ancho depalabra, la del CPU es de 32bits mientras que la memoria 16bits. Nuevamentelos ciclos de espera para una lectura o escritura son parametrizables.

El controlador de memoria se puede hacer funcionar a una frecuencia igual omayor a la del CPU, y de esta manera se podrıan obtener pequenas mejoras en

Page 53: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 43

Figura 3.1: Estructura jerarquica del plasma multi-nucleo.

los tiempos de acceso. En esta implementacion y haciendo trabajar al controla-dor a 25MHz, igual que el procesador, se obtiene una lectura de 32bits en ochociclos y una escritura de 32bits en diez ciclos. Esto nos brinda tiempos de escri-tura de 400ns y en caso de haber un miss en cache la penalidad sera de 320ns.En la figura 3.3 se pueden ver simulaciones de las operaciones de escritura ylectura.

3.3.2. Puertos de la entidad

clk i (entrada): Para sincronizar.

reset (entrada)i: Para reiniciar la unidad.

Interfaz plasma multi-nucleo:

• Salida 30bits de direccion: El procesador direcciona con 30 bits pala-bras de 32 bits (o 4 bytes).

• Salida 32bits de datos a escribir: Los datos que el procesador escribeen memoria.

• Entrada 32bits de datos a leer: Los datos que el procesador lee desdela memoria.

Page 54: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 44

Pla

sma

mul

ti-nú

cleo

Mem

oria

ram

ext

erna

Co

ntr

ola

do

r d

e m

emo

ria

32 bits-dataW

32 bits-dataR

16 bits-dataIO

4 bits-byteWE

request_i

memClk_o

memAdV_o

memCRE_o

memCE_o

memOE_o

memWE_o

memLB_o

clk_i

reset_i

22bits-dirección 23bits-dirección

busy_o

memUB_o

memWait_i

Figura 3.2: Controlador de memoria para el plasma multi nucleo. El mismodepende del kit en el que se implementa. Las senales en van del controlador ala memoria externa y las verdes del controlador al plasma multi-nucleo

• Salida 4bits de habilitacion por byte para la escritura:• Salida solicitud de memoria: Indica cuando las senales son validas,

es decir cuando comenzar una escritura o lectura de memoria.• Entrada memoria ocupada: Esta senal indica al plasma cuando se ha

finalizado el acceso a memoria solicitado. Si la solicitud es de escrituraentonces cuando esta senal lo indique podran ser leıdos los datos y noantes. Un cero logico indica que los datos son validos, un uno logicoque el controlador sigue trabajando y por lo tanto que los datos noson validos.

Interfaz de la memoria:

• Entrada 23 bits de direccion: Para direccionar las 223 posiciones dememoria de 16 bits, el procesador direcciona con 22 bits efectivospalabras de 32 bits (Memoria: 2(23bitsdireccion) × 16bits de datos =128Mbits - CPU: 2(22bitsdireccion) × 32bits de datos = 128Mbits)).• Entrada/Salida 16bits de datos a escribir/leer: La memoria utiliza un

unica puerto de 16bits para escribir y leer datos.• Entrada memClk (Clock): Se utiliza para los modos sincronicos, en

este caso tiene el valor constante cero.• Entrada memAdV (Address Valid): Se utiliza para los modos sincroni-

cos, en este caso tiene el valor constante cero.• Entrada memCRE (Configuration Register Enable): Se utiliza para

configurar el modo de funcionamiento de la memoria, en este casotiene valor constante cero, ya que la memoria viene configurada pordefecto para operar en modo asincronico.• Entrada memCE (Chip enable): Se utiliza para habilitar o deshabi-

litar la memoria. En este caso tiene un valor constante cero, lo cualindica que la memoria esta siempre habilitada.

Page 55: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 45

(a) Operacion de lectura.

(b) Operacion de escritura.

Figura 3.3: Operaciones de escritura y lectura. En la figura 3.3(a) se visua-lizan las senales del controlador de memoria al realizar una operacion de lectura,se ve como la lectura de 32bits del CPU requiere dos lecturas de memoria de16bits. El dato leıdo (dataR o) cambia primero los 16bits menos significativosy luego el resto. Una vez que se tiene el dato valido la senal de busy o toma elvalor cero. En la figura 3.3(b) se visualizan las senales del controlador de memo-ria al realizar una operacion de escritura. En este caso se realiza la escritura delbyte mas significativo de la palabra de 32bits (bits31 1 24). La primera de lasdos escrituras en memoria es en los bits15 a 0 y la segunda en los bits31 a 16.Como se escribe el byte mas significativo solo se habilita la senal memUB o (sehabilita la escritura dejando la senal cero) en la segunda escritura en memoria.

Page 56: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 46

• Entrada memOE (Output Enable): Habilita la salida de la memoria.Tendra valor cero cuando se realicen lectura de datos y uno al escribirla memoria.

• Entrada memWE (Write Enable): Habilita la escritura de la memo-ria.

• Entrada memLB (Lower Byte enable): Habilita la escritura del bytebajo (bits7 a 0) de la palabra (de 16bits) que se escribe.

• Entrada memUB (Upper Byte enable): Habilita la escritura del bytealto (bits15 a 8) de la palabra (de 16bits) que se escribe.

• Salida memWait (Wait): Provee informacion relevante del estado dela memoria al operar en modo burst, en este caso su valor sera igno-rado.

3.4. Plasma multi-nucleo

Siguiendo con la descripcion jerarquica de las entidades, aquı se aborda elplasma multi-nucleo. Esta es la entidad que alberga a todo el resto del diseno.A continuacion se muestra el detalle de su arquitectura y luego se realiza unlistado de los puertos de entrada y salda de la entidad (ver figuras 3.4 y 3.5).

3.4.1. Descripcion

Se listan a continuacion los distintos bloques que presenta el plasma multi-nucleo en su arquitectura interna. Aquellas simples seran descriptas directamen-te en esta seccion otras mas complejas se detallaran en secciones posteriores.

1. N nucleos que se quieran instanciar: La arquitectura de cada nucleo seexplica en la seccion 3.7.

2. Arbitro del bus: Su arquitectura se explica en la seccion 3.5.

Plasmamulti-núcleo

memBusy_i

busBusy_i

reset_i

clk_i

uart_RX_i

uart_TX_o

GPIO0_o (32 bits)

GPIOA_i (32 bits)

addres_o (30 bits)

dataR_i

we_o (4 bits)

dataW_o

Entrada

/

Salida

Al controlador

de

memoria

Figura 3.4: Puertos de entrada y salida del plasma multi-nucleo. Apartedel reset i y el clk i tenemos dos tipos de pines en el procesador: aquellosque son de la interfaz con la memoria y los de entra/salida hacia el usuario.

Page 57: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 47

Com

pone

ntes

vario

s

Núc

leo

Núc

leo

Núc

leo

Mul

tiple

xor

Gen

erad

or d

e se

ñale

s

busS

noop

_s

mem

Req

uest

_s

cpuP

ause

_sÁ

rbitr

o de

bus

Man

ejad

or d

ein

terr

upci

ones

Sop

orte

de

HW

para

lock

s

Reg

s. d

e in

terc

om.

UA

RT

rea

d

UA

RT

writ

e

Más

cara

de

IRQ

Est

ado

de IR

Q

Con

tado

r

GP

IO (

E/S

)

Las

señ

ales

de

clk_

i y

rese

t_i

van

a t

od

os

los

blo

qu

es

Señ

ales

(d

e iz

q.

a d

er.)

:-

bu

sSn

oo

p_i

- m

emR

equ

est_

o-

cpu

Pau

se_i

- b

usR

equ

est_

o-

bu

sAcc

essE

nab

le_i

- b

usB

usy

_i-

irq

_i-

lock

Req

ues

t_o

Señ

ales

(d

e iz

q.

a d

er.)

:-

cpu

Dat

aR_s

- cp

uD

ataW

_s-

cpu

Ad

dre

ss_s

- cp

uW

e_s

Señ

ales

hac

ia e

l co

ntr

ola

do

r d

e m

emo

ria

exte

rno

:-

bu

sDat

aR_s

- b

usD

ataW

_s-

bu

sAd

dre

ss_s

- b

usW

e_s

- m

emR

equ

est_

s

busW

e_s

memRequest_s

irqM

ask_

s

irqS

tatu

s_s

busA

ddre

ss_s

mem

Req

uest

_s

busV

alid

_s

Figura 3.5: Arquitectura del plasma multi-nucleo, agrupa a todo el restode las entidades del procesador.

Page 58: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 48

3. Manejador de interrupciones: Su arquitectura se explica en la seccion 3.6.

4. Multiplexor del bus: Este sistema recibe todas las senales que pueden serleıdas por el CPU y tambien la senal de escritura proveniente del CPU.Mediante las senales de direccion y de habilitacion de escritura por byte(cpuAddress s y cpuWE s), rutea las senales a los destinos correspondien-tes.

El dato de lectura del nucleo (la senal cpuDataR s) toma valores de algunade las siguientes fuentes:

memoria interna

la memoria externa (directo de memoria externa si se produce unmiss o dato proveniente de cache durante un hit).

el puerto de lectura de UART (datos recibidos).

el puerto de entradas de proposito general (GPIO puerto A).

el puerto de salida (GPIO puerto 0).

los registros de comunicacion inter-procesador, son registros de proposi-to general.

el registro de estado de interrupciones.

el registro de mascara de interrupciones.

el registro del lock, se .

el registro del contador.

El CPU por su parte la senal de escritura del CPU (senaL cpuDataW s)puede ser enviada a varios destinos:

los registros de intercomunicacion.

el puerto de salida de datos de la UART (datos para ser transmitidos).

el puerto de salidas de proposito general (GPIO puerto 0).

el registro de mascara de interrupcion.

la memoria interna.

la memoria externa (se escribe memoria externa y cache al mismotiempo, por la polıtica de escritura write-allocate).

Todos los registros especiales son mapeados en direcciones de memoria.En la seccion 3.8 se detalla la distribucion de las direcciones de memoria.

5. Manejador del lock : Es una porcion de hardware para el soporte de locks, elresto del hardware necesario para su implementacion se encuentra en cadauno de los nucleo. Por su parte, cada nucleo envıa una senal de solicitud aesta entidad, quien las chequea y entrega el lock al nucleo que corresponda(unicamente a uno). La forma que tiene de entregar el lock a uno u otronucleo, es asignando el valor correspondiente a ese nucleo en el registrodel lock1.

1El valor correspondiente al nucleo i es 2i, un valor nulo en el registro del lock indica queningun nucleo lo posee.

Page 59: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 49

Esta entidad analiza las solicitudes de los nucleos, una en cada ciclo dereloj. Las solicitudes son realizadas por los nucleos a traves de la senal desolicitud(lockRequest s). Si el nucleo que es chequeado solicita el lock,esta entidad se lo entrega. En cambio si no hay una solicitud, se procedea chequear la senal de solicitud del siguiente nucleo. Cuando el lock ya seencuentra asignado a un nucleo, la entidad deja de chequear las solicitudesdel resto de los nucleos y espera a que el nucleo que posee el lock lo libere.El mecanismo que implementan los nucleos para liberar el lock es borrarla solicitud (senal que recibe esta entidad). Una vez liberado el lock esposible seguir evaluando las siguientes solicitudes. La implementacion enVHDL se muestra a continuacion:

1 u2 lockHandler : process ( c l k i , r e s e t i ,plasmaCoreLockRequest s )

2 variable checkCpu v : i n t e g e r ;3 begin4 i f r e s e t i = ’1 ’ then5 l o c k R e g i s t e r s <= ZERO(31 downto 0) ;6 checkCpu v :=0;7 e l s i f r i s i n g edge ( c l k i ) then8 i f plasmaCoreLockRequest s ( checkCpu v ) = ’1 ’ then9 l o c k R e g i s t e r s ( checkCpu v ) <= ’ 1 ’ ;

10 else11 l o c k R e g i s t e r s <= X”00000000 ” ;12 checkCpu v := ( checkCpu v + 1) mod numberOfCores ;13 end i f ;14 end i f ;15 end process ;

Esta implementacion soporta hasta treinta y dos nucleos y a la vez debe serigual a alguna potencia de dos debido a las operaciones en modulo (lınea12 del codigo VHDL). Otra deficiencia del diseno es que al controlar unoa uno los cores, se puede tener una latencia entre la solicitud del lock y laobtencion del mismo de hasta N ciclos de reloj en el peor de los casos, conN = numero de nucleos. Esto ultimo no es de gran importancia ya que engeneral el tiempo que tarda el CPU en chequear el registro del lock (parasaber si lo obtuvo o no), es mayor que esta latencia, e inclusive en el peorde los casos tiene mejor rendimiento que la implementacion por softwarepropuesta en el sistema operativo del plasma. Esta implementacion essimple, requiere poco hardware, brinda un reparto equitativo de los locksentre los nucleos, se desempena mejor que la implementacion por softwarey se asegura que no habra deadlocks entre los nucleos que compitan porel recurso.

6. Generador de senales: No es una entidad real, es una forma de agrupartres procesos presentes en el plasma multi-nucleo:

a) busSnoop s: Es una senal necesaria para la impementacion del algo-ritmo de snooping para la coherencia de cache. La senal es repartidaa todos los nucleos, en la seccion 3.7.3 se explica como cada nucleola utiliza esta senal para mantener la coherencia de cache. La senaltoma un valor logico alto cada vez que alguno de los nucleos realizauna escritura en memoria, y se mantiene en ese valor durante un solociclo de reloj. En las escrituras en memoria es en el unico momentoen el que una posicion de memoria puede ser modificada.

Page 60: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 50

b) memRequest s: Es la senal que se envıa al controlador de memoriapara solicitar una lectura escritura de un dato. Esta senal toma elvalor logico uno cuando el nucleo que tiene accesos al bus realiza unasolicitud de memoria, el resto de las solicitudes de los nucleos sinacceso al bus son ignoradas.

c) corePause s: Esta es la senal de pausa que recibe cada uno de losnucleos. Un nucleo es pausado si:

Si el nucleo que posee acceso al bus quiere acceder a memoria yel controlador indica que esta ocupada.Si se intenta escribir en el registro de la UART y esta se encuentraocupada enviando un dato previo.El nucleo internamente puede pausarse a sı mismo, esto sucedepor ejemplo en los casos donde no consiguen el acceso al bus.

7. Componentes varios: Al igual que en el item anterior, este entidad noexiste realmente, es una manera de agrupar varios componentes que estanrelacionados:

a) UART: Es una controlador de UART estandar, que se accede a travesde dos registros, uno para leer datos recibidos y otro para enviardatos. La velocidad del mismo es configurable durante el proceso desıntesis, pero luego queda fija. Los datos son de 8 bits y los datos seenvıan y reciben sin bit de paridad.

b) Regitros para las solicitudes de interrupcion (IRQ del ingles InterruptReQuest): posee dos registros, para leer el estado de las interrupcionesy la mascara de interrupcion. El registro de mascara tambien puedeser escrito.

c) Registro del contador: Tiene 32bits y se incrementa en cada ciclo. Soloes posible leerlo, para saber la cantidad de ciclos que transcurrierondesde que se alimento el circuito. El bit 18 del contador funcionacomo fuente de interrupcion del procesador.

d) Registros del GPIO: Son dos registros que representan los puertosde entrada y salida del procesador. El registro del puerto de entrada(32bits) puede ser leıdo. El registro del puerto de salida (32bits) puedeser escrito o leıdo. Las escrituras en el registro del puerto de salidase pueden realizar son bit a bit.

e) Registros para comunicacion inter-procesadores: Dos registros de proposi-to general que se comparten entre todos los procesadores. Brindanuna forma de comunicacion entre los nucleos sin necesidad de recurrira la memoria externa. Son utiles a la hora de ejecutar programas dede inicializacion de memoria o durante el boot de los procesadoresantes de que se inicie el sistema operativo.

3.4.2. Puertos de la entidad

clk i (entrada): Para sincronizar.

reset (entrada)i: Para reiniciar la unidad.

Page 61: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 51

Interfaz con la memoria externa: todas las senales se envıan hacia el con-trolador de memoria o se reciben desde el mismo.

• address o (salida 30 bits): Para direccionar la memoria externa. Estasenal se envıa al controlador de memorial.

• we o (salida 4 bits): para indicar escritura selectiva de los 4bytes delas palabras de 32bits.

• dataW o (salida 32 bits): dato de escritura en memoria principal atraves del controlador de memoria.

• dataR i (entrada 32 bits): dato de lectura provenientes de la memoriaprincipal a traves del controlador.

• memBusy i (entrada): senal que indica que la memoria esta ocupada,por lo tanto los datos de lectura que entrega no son validos.

• memRequest o (salida): senal para solicitar un acceso a memoria, lassenales dataW o y address o deben tener valores validos.

Entrada/Salida:

• uart TX o (salida): senal de transmision de datos de la UART.

• uart RX i (entrada): senal de recepcion de datos de la UART.

• gpio0 o (salida 32 bits): puerto de salida de proposito general.

• gpioA i (entrada 32 bits): puerto de entrada de proposito general.

3.5. Arbitro del bus

Esta entidad se encarga de arbitrar la utilizacion al bus: recibe las distintassolicitudes de acceso al bus de los nucleos y decide cual de ellos tendra controlsobre el mismo. Ası los nucleos acceden de a uno al bus, y esta entidad se encargade que lo hagan de manera equitativa.

3.5.1. Descripcion

A continuacion se presenta el algoritmo que fue implementado para brindarel acceso al bus de manera equitativa. Si el bus se encuentra liberado, entonces sebrinda acceso al primer nucleo que lo solicite. Los pedidos posteriores (mientrasel bus siga ocupado) se listan en un buffer FIFO en el orden que suceden. Encaso de que haya solicitudes simultaneas, se le da prioridad segun el numerode nucleo, el 0 tiene prioridad frente al 1, el 1 frente al 2 y ası sucesivamente.Cuando el nucleo que esta controlando el bus lo libera, el siguiente valor delbuffer es procesado. Este valor indica cual sera el siguiente nucleo en controlarel bus. Si en el momento el que el bus es liberado, el buffer se encuentra vacıo,significa que ningun otro nucleo pretende controlar el bus. El bus pasa deja deestar ocupado y pasa a un estado liberado, como se encontraba inicialmente. Lautilizacion de un buffer FIFO es fundamental para brindar control del bus a losnucleos en forma equitativa La simulacion del funcionamiento de esta entidadse ve en la figura 3.6.

Page 62: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 52

Figura 3.6: Simulacion del arbitro del bus, donde se observa que el la uti-lizacion del bus se reparte en forma equitativa entre los nucleos y el acceso almismo se va cediendo en el orden en el que llegan las solicitudes.

Page 63: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 53

Árbitrodel bus

clk_i

reset_i

busRequest_ibusValid_o

BusAccessEnable_o

busBusy_o

Figura 3.7: Puertos de entrada y salida de la entidad del arbitro del bus.

El buffer utilizado debe tener al menos la misma cantidad de posiciones queel numero de nucleos del procesador, para contemplar el peor caso, que es cuan-do todos los nucleos solicitan acceso simultaneamente. El buffer se implementade manera circular, para ello en el codigo VHDL se utilizaron algunas opera-ciones en modulo [11]. El sintetizador solo puede implementar operaciones enmodulo de potencias de dos. Estas operaciones al trabajar con numeros binariosson facilmente implementables, solo es cuestion de tomar un cierto rango debits. Por ejemplo, si se tiene una senal de 32bits, aplicar operaciones en modulodos, implica quedarse con el ultimo bit, en modulo cuatro con los ultimos dosbits y ası sucesivamente. Por el contrario operaciones en cualquier otro modulose vuelven mucho mas complejas de implementar. Aquı es donde reside la li-mitacion del plasma multi-nucleo de poder ser sintetizado unicamente con unnumero de nucleos igual a potencias de dos. Modificando un poco el codigo deVHDL esta limitacion puede evitarse. La forma de modificarlo es tomando unbuffer siempre de tamano igual a una potencia de dos, y tambien mayor al nume-ro de nucleos. Por ejemplo si se tienen tres nucleos tomar un buffer de cuatroposiciones, si se tienen cinco, seis o siete tomar uno de ocho, y ası analogamentepara cualquier otro valor. El buffer sigue cumpliendo perfectamente su funcion.La contra que implica la modificacion es que el buffer circular dejarıa de tenerel numero mınimo de posiciones (igual al numero de nucleos), desperdiciandolas posiciones adicionales. Esto no representa un gran costo a nivel de hardwarey la contra se vuelve insignificante. Esta modificacion queda pendiente para elfuturo, y no tiene mayor importancia para este trabajo.

Las senales busAccessEnable o, busBusy o y busValid o son redundantes,ya que la senal es de habilitacion del bus, es cero cuando busValid s es ceroy es busBusy negado cuando es uno. Cada nucleo podrıa saber deducirla in-ternamente, pero se deja de esta manera pensando en cambiar el bus por unoswitcheado, donde dejan de ser redundantes.

3.5.2. Puertos de la entidad

La entradas y salida listadas a continuacion son para el procesador plasmamulti-nucleo con N nucleos (ver figura 3.7):

clk i (entrada): para sincronizar.

reset i (entrada): para resetear la entidad.

Page 64: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 54

busRequest i (entrada Nbits): una senal por cada nucleo, esta es la maneraque tiene lo nucleos de realizar la solicitud del bus.

busBusy o (salida Nbits): una senal hacia cada nucleo, para indicar cuan-do el bus esta ocupado.

busAccessEnable o (salida Nbits): una senal hacia cada nucleo, para in-dicar cuando el nucleo tiene el acceso.

busValid o (salida): indica cuando los datos en bus son validos, o lo quees lo mismo cuando uno de los nucleos tiene el control del mismo. En elcaso en que ningun nucleo tiene control sobre el bus, el mismo tiene datosinvalidos.

3.6. Manejador de interrupciones

Como todo procesador necesita un controlador de interrupciones, este enparticular esta disenado para el plasma multi-nucleo y se encarga de identificarcuando existe una interrupcion y a la vez de repartir estas interrupciones demanera equitativa entre los distintos nucleo.

3.6.1. Descripcion

La entidad identifica las interrupciones haciendo una operacion logica ANDentre la mascara de interrupciones y el vector de estado de interrupciones. Encaso de ser distinto de cero implica que existe una solicitud de interrupcionque no fue enmascarada y alguno de los nucleos debe atenderla. La entidadtraslada la solicitud al primer nucleo. Al identificar una nueva interrupcion lasolicitud es trasladada al siguiente nucleo. La entidad reparte las interrupcionesequitativamente entre todos los nucleos.

Una desventaja de esta implementacion es que el manejador de interrup-ciones no puede identificar si el nucleo al que traslada la solicitud tiene lasinterrupciones habilitadas o no. La solicitud no podra ser atendida hasta que elnucleo en cuestion no habilite las interrupciones, lo cual puede provocar un au-mento en la latencia del procesador para atender una interrupcion. Usualmenteun procesador no deberıa tener interrupciones deshabilitadas por un largo tiem-po, por lo que no serıa un gran problema. Por el contrario, si se pretende generarun sistema que pueda asegurar una latencia maxima para atender las interrup-ciones, este manejador deberıa ser modificado, de modo que sı identifique quenucleo puede ser interrupido.

3.6.2. Puertos de la entidad

En la figura 3.8 se muestra la entidad del manejador de interrupciones.

clk i (entrada): Para sincronizar.

reset i (entrada): Para reiniciar la unidad.

irqMask i (entrada8 bits): Recibe la el valor del registro de la mascara delas interrupciones, ver cuadro 3.1.

Page 65: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 55

Manejadorde

interrupciones

clk_i

reset_i

plasmaCoreIrq_o(N bits)

irqStatus_i (8 bits)

irqMask_i (8 bits)

Figura 3.8: Puertos del manejador de interrupciones.

Bit del registro Fuente de interrupcion

0 UART - dato disponible1 UART - disponible para escribir2 bit 18 del contador3 bit 18 del contador negado4 No asignado, valor constante 05 No asignado, valor constante 06 bit 31 del GPIA7 bit 31 del GPIA negado

Cuadro 3.1: Mapeo de los bits del registro de estado y mascara de inte-rrupciones. Los dos primeros son para la comunicacion UART. Se utilizan elbit 18 del contador y este mismo negado, para proporcionar interrupciones cada10ms aproximadamente. El bit 31 del puerto de A (entradas) del procesadorbrinda una fuente de interrupcion externa por nivel alto (bit 6) o bajo (bit 7 ).

irqStatus i (entrada8 bits): Recibe la el valor del registro de los estadosde las interrupciones, ver cuadro 3.1.

plasmaCoreIrq o (salida 8 bits): Las senales de interrupcion hacia cadauno de los nucleos.

3.7. Nucleo

En esta seccion se da una descripcion del nucleo. Es la unidad mas impor-tante del sistema. En su interior alberga varias entidades, entre ellas la memoriacache, el soporte de hardware necesario para locks y su propia unidad de control.La unidad de control del nucleo es la mas compleja del todo el diseno. En estaseccion tambien se describe el algoritmo de coherencia de cache.

3.7.1. Descripcion

En la figura 3.9 se muestra un diagrama de la arquitectura y a continuacionse listan los componentes del mismo:

CPU: Es la unidad de procesamiento original del plasma. Ningun cambiofue realizado en la misma. Esta unidad es quien impone las direccionesde memoria que necesita leer o escribir, impone el valor del dato y la

Page 66: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 56

NÚCLEO

Mem

oria

cach

e de

tags

CP

U

Uni

dad

deco

ntro

l

Reg

isitr

os

Buf

fer

Tri-

stat

e

clk_

iirq_

i

Mem

oria

cach

e de

dato

s

Puerto A

Puerto B

busAccessEnable_s

cpuI

ndex

Mem

oria

Ram

Inte

rna

rese

t_i

clk_

iS

opor

tepa

ra lo

cks

busA

ccE

n

rese

t_i

cpuP

ause

_s

delayedBusAccessEnable_sby

teW

E(4

bits

)

Add

ress

(30b

its)

Dat

aW(3

2bits

)

Dat

aR(3

2bits

)

busS

noo

p

mem

Bus

y

busR

equ

est

busB

usy

mem

Req

uest

BU

S (

data

W,

data

R, a

ddre

ss,

byte

WE

)

lock

Re

que

stcl

k

r

ese

t

Figura 3.9: Diagrama en bloque de la arquitectura de cada nucleo.

Page 67: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 57

habilitacion por byte de una escritura. Es a quien se debe entregar losdatos/instrucciones leıdos. El dato puede provenir de memoria interna,externa, cache, y otros componentes, que se ven con detalle a continuacion.

Bus transceivers: Son utilizados para acoplarse al bus de interconexion.Cuando el nucleo controla el bus impone los valores propios de direccion,de dato a escribir y de habilitacion por byte en el bus, el dato de lecturapresente en el bus es el correspondiente a la direccion del bus. Cuandoel nucleo no tiene acceso al bus esta entidad procura presentar una altaimpedancia hacia el bus, de esta manera otro nucleo puede imponer losvalores deseados. Se muestran en la figura 3.10.

Memoria ram Interna: Es una memoria sincronica interna exclusiva de ca-da nucleo. Al ser sincronica es direccionada con las senales de addressNext sy weNext s. Por su parte la senal dataW s siempre tiene con un ciclo deanticipacion el valor correcto del dato que desea escribir. El contador deprograma de los nucleos se inicializa en la primer posicion de esta memo-ria, de esta manera cada nucleo puede correr un programa independiente.Se realizaron dos implementaciones para esta memoria: una generica yotra utilizando las librerıas de Xilinx llamadas Unisims. Las librerıas pro-veen una forma eficiente de implementar memorias en FPGAs de Xilinx,aprovechando espacio y tiempo de sıntesis.

Soporte de hardware para el ındice de CPU: Es un registro constante quealmacena el ındice del nucleo. El multiplexor, que se explica a continua-cion, direcciona este valor hacia la senal de lectura de datos del CPU(cpuDataR s).

Multiplexor del dato de lectura del CPU (cpuDataR s): Esta unidad selec-ciona el dato que sera leıdo por el CPU. El dato a leer es seleccionado por lasenal proveniente de la unidad de control del nucleo, cpuDataRSelection s,y en un caso especial por la direccion del CPU. Los posibles valores puedenverse en el cuadro 3.2.

Memoria cache: Esta compuesta por dos memorias sincronicas de dos puer-tos cada una, A y B. La primera de las memorias guarda los datos y lasegunda los indicadores (tags en ingles). La memoria de datos tiene unaancho de palabra de 32 bits y la memoria de indicadores un ancho dediez bits. Son nueve bits de tag y uno para indicar la validez del dato.El puerto A se utiliza para atender solicitudes del CPU y el B para laimplementacion del algoritmo de coherencia de cache, de esta manera laimplementacion es mas simple. Se deben considerar los casos en donde ladireccion del puerto A y B coinciden. El caso donde sea una lectura enambos puertos no existe ningun problema. En los casos donde haya unaescritura la unica a tener en cuenta es cuando el puerto B realiza unaescritura y el A una lectura, los otros dos casos, donde A realiza una es-critura, son problemas a resolver por el programador, ya que no se puedehilar tan fino sobre un recurso compartido, o puede ser que se esta ac-cediendo a recursos compartidos sin protegerlos por locks. El unico casoque debe considerarse es cuando se lee un dato a traves del puerto A yal mismo tiempo el puerto B trata de escribir un nuevo dato. Se permite

Page 68: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 58

Condicion Fuente del dato leıdo por Comentarioel CPU (cpuDataR s)

Direccion del CPU Indice del CPU Soporte para la identificar delapunta a 0X1000 (coreNumber) numero de CPU (reg. constante)

cpuDataRSelection s Datos de la memoria interna Para toda lectura de datos o= "00" (internalRamDataR s) inst. de la memoria interna.

cpuDataRSelection s Datos de memoria cache Cuando la lectura en= "01" (cacheDataRA s(31 downto 0)) cache es un hit.

cpuDataRSelection s Datos del bus Al leer memoria externa= "01" (busDataR i) (cacheable o no cacheable),

cuando se produce unmiss en una lecturao se leen componentes externos.

cpuDataRSelection s No interesa Los datos no son leıdos por el= "01" CPU, por lotanto no interesa.

Cuadro 3.2: Posibles fuentes para la senal cpuDataR s.

la escritura del dato a traves del puerto B y el puerto A en vez de leer eldato almacenado en cache entrega el dato de escritura del puerto B.

Cuando el CPU realiza una escritura que no es de 32 bits a traves delpuerto A se invalida esa posicion de memoria, para evitar malas lecturasen el resto de la palabra. Por ejemplo: si un dato se encuentra almacenadoen cache y se realiza la escritura de uno solo de sus bytes, todo funcionacorrectamente. Lo mismo sucede con un cache update, ya que el dato esescrito en las caches de otros nucleos solo si si el dato ya se encontrabaalbergado en las mismas. El problema aparece al realizar una escritura deun dato que no se encuentra en cache. Solo es posible a traves del puertoA, ya que el puerto B solo realiza escrituras de datos que sı se encuentranen cache (actualiza datos, nunca reemplaza los bloques que ya estan encache). Si se escribe el byte cero de una palabra que no esta cacheada,la polıtica de escritura en cache write-allocate, obliga a escribir el datoen cache, y solo se escribe el byte cero y el resto queda con valores nonecesariamente validos. Al realizar una lectura de cualquier otro de losbytes de esa palabra, el dato leıdo es entonces erroneo. Tampoco es posiblesimplemente no escribir el dato, ya que si dato sı se encuentra en memoriacache, al realizar la escritura de un byte de una palabra, el dato tampocoes actualizado.

Dicho esto se plantean tres soluciones:

1. Si se realiza una escritura que no sea de 32 bits en un dato queno se encuentre albergado en memoria cache, primero se busca eldato en memoria y se lo copia en cache Luego se escribe el bytecorrespondiente (en cache y memoria).

2. Invalidar el dato en una escritura que no sea de 32 bits: El bit massignificativo del tag es en realidad el bit de dato valido. Al colocareste ultimo bit en un estado logico uno, el dato se invalida.

3. Al realizar una escritura que no sea de 32 bits se comprueba si el

Page 69: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 59

dato se encuentra en cache o no. En caso de que sı se encuentre seescribe, y en caso de que no se encuentre no se realiza nada. Serıala solucion mas efectiva, ya que no invalida datos innecesariamente yactualiza los bytes de un dato cacheado si es necesario. El problemaque tiene esta solucion es que es necesario acceder dos veces a cache,primero para leer el indicador y compararlo con el del dato a escribir,y luego, en caso de detectar que el dato sı se encuentra en cache,realizar la escritura del byte correspondiente. Al ser la memoria delectura sincronica es posible realizarlo en un solo ciclo de reloj. Sifuera asincronica el tag puede ser leıdo, luego comparado con el otrotag y finalmente el resultado de la comparacion puede ser utilizadopara habilitar la escritura en memoria cache, todo en el mismo ciclode reloj. Al utilizar una memoria sincronica son entonces necesariosal menos dos ciclos de reloj y su implementacion se vuelve algo mascomplicada.

La opcion (1) se descarta por ser totalmente ineficiente, y la (3) tam-bien es descartada, porque al utilizar memoria sincronica se vuelve mascomplicada que la (2), que es la implementacion adoptada.

Registros sincronicos: Son un conjunto de registros sincronicos que retra-san algunas senales un ciclo de reloj, para poder conservar sus valores. Lassenales que se almacenan en estos registros y la necesidad de los mismosse detalla en la seccion 3.7.3.

Soporte de hardware para los locks: En la direccion de memoria 0x200000A0se mapea un registro virtual, que al escribirlo con cualquier valor distintode cero, provoca que la senal lockRequest o tome un valor logico uno, ytoma un estado logico cero al ser escrito con un valor nulo. Su implemen-tacion se muestra a continuacion:

1 lockRequest : process ( c l k i , r e s e t i )2 begin3 i f r e s e t i = ’1 ’ then4 lockRequest o <= ’ 0 ’ ;5 e l s i f r i s i n g edge ( c l k i ) then6 i f cpuAddress s & ”00” = X”200000A0” and cpuWe s /

= ”0000” then7 i f cpuDataW s = X” 00000000”then8 lockRequest o <= ’ 0 ’ ;9 else

10 lockRequest o <= ’ 1 ’ ;11 end i f ;12 end i f ;13 end i f ;14 end process ;

La senal lockRequest o se envıa al manejador de locks del plasma multi-nucleo, quien luego decide que nucleo obtiene el lock.

Multiplexor del puerto A de la cache(direccion, habilitacion por byte, da-taW): mediante de este multiplexor se selecciona que senales controlan alpuerto A de la cache. Las senales que se multiplexan son la direccion delectura/escritura, el dato a escribir, y la habilitacion por byte. Hay dosposibles fuentes para estas senales:

Page 70: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 60

• Al realizar un write-through o una lectura de cache, los datos provie-nen del CPU:◦ Direccion de cache: cpuAddresNext s, es la unica senal que nos

interesa en una lectura.◦ Habilitacion por byte: cpuWeNext s.◦ Dato a escribir en cache: cpuDataW s, el dato a escribir por el

CPU se encuentra disponible con un ciclo de anticipacion, poreso se puede utilizar la senal cpuAddresNext s y cpuWeNext s.

◦ Tag: Son los bits 19 a 11 de la direccion de escritura, es decircpuAddressNext s(19 downto 0).

• Al producirse un miss de lectura, los datos provienen del bus:◦ Direccion de cache: busAddres io.◦ Habilitacion por byte: busWe io.◦ Dato a escribir en cache: busDataW io.◦ Indicador: Son los bits 19 a 11 de la direccion de escritura, es

decir busAddress s(19 downto 0).

Unidad de control: es la unidad de control del nucleo y sin duda la partemas importante del mismo. Se detalla su funcionamiento en la seccion 3.8.

3.7.2. Puertos de la entidad

En la figura 3.10 se muestran los puertos listados a continuacion junto conlos tranceivers del bus:

clk i (entrada): para sincronizar.

reset i (entrada): para reiniciar la unidad.

irq i (entrada): senal para generar una excepcion en el nucleo.

Senales de solicitud de recursos compartidos:

• lockRequest o (salida): senal que utiliza el nucleo para solicitar ellock, descripta en la seccion 3.4. Esta senal es recibida por la enti-dad que administra el lock entre todos los nucleos. Un estado logico‘uno’es una solicitud y ‘cero’es una no solicitud o liberacion del lock.• busRequest o (salida): senal de solicitud de uso del bus, se envıa a la

entidad arbitro del bus descripta en la seccion 3.5.• busAccessEnable i (entrada): senal recibida desde el arbitro del bus

que indica cuando se tiene acceso al bus.• busBusy i (entrada): senal recibida desde el arbitro del bus que indica

cuando el bus se encuentra ocupado.• memRequest o (salida): senal de solicitud de acceso a memoria prin-

cipal. El plasma multi-nucleo toma las solicitudes de memoria detodos los nucleos y genera una unica senal de solicitud que es en-viada al controlador de memoria. De todos los nucleos que solicitenla memoria el que tiene acceso es el mismo que tiene acceso al bus.Esta senal funciona en conjunto con la de solicitud del bus, o bien elnucleo solicita acceso al bus (Por ejemplo al acceder a los perifericos)o solicita acceso al bus y a memoria simultaneamente.

Page 71: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 61

Núcl eo

BUS

busAddres_io

busDataW_io

busWE_io

busDataR_i

reset_i

clk_i

irq_i

memBusy_i

busSnoop_i

busAccessEnable_i

busBusy_i

busRequest_o

lockRequest_o

memRequest_o

Figura 3.10: Puertos de entrada y salida de cada uno de los nucleos del plasmamulti-nucleo. Se muestra tambien como tres de las salida tiene buffers tri-state,necesarios para conectarse al bus. A su vez se tienen entradas directas desde elbus, estas son necesarias para recibir mensajes de broadcast, necesarios para laimplementacion del algoritmo de coherencia de cache elegido.

• memBusy i (entrada): indica cuando la memoria se encuentra ocu-pada. Esta senal puede ser activada por varias razones, por ejemplodurante la inicializacion de la memoria, o cuando algun nucleo realizaun acceso a memoria principal como se explico en la seccion 3.3, opodrıa ser en el caso de que se implemente algun dispositivo DMA2.

Senales del bus de datos/instrucciones y de coherencia de cache:

• busSnoop i (entrada): Senal para la implementacion de la coherenciade cache, que indica que los datos del bus deben ser leıdos para luegoverificar si se debe actualizar la cache o no.• busAddress io (entrada/salida 30 bits): Senal para acceder a memoria

y para la coherencia de cache. Es la direccion que se impone en elbus.• busDataW io (entrada/salida 32 bits): Senal para acceder a memoria

y para la coherencia de cache. Cuando es salida es el dato que escribeen memoria. Cuando es entrada es el dato escrito por otro nucleo enmemoria.

2En ingles Direct Memory Access, es la manera que tienen entidades que no son nucleos deprocesamiento de acceder a la memoria directamente sin necesidad de hacerlo a traves de unCPU, de esa manera no le quitan tiempo de procesamiento. Estas entidad realizan unicamentemovimiento de datos sin procesamiento alguno.

Page 72: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 62

• busWe io (entrada/salida 4 bits): Senal para acceder a memoria ypara la coherencia de cache. Es la habilitacion por byte del dato aescribir puede ser propia o de otro nucleo.

• busDataR i (entrada 32 bits): Solo para el acceso a memoria en par-ticular cuando se realiza una lectura.

3.7.3. Descripcion del algoritmo de coherencia de cache

El plasma multi-nucleo brinda cierto soporte al algoritmo, como ser lassenales de snooping. Pero es nucleo quien alberga al resto del hardware necesariopara su implementacion. La unidad de control del nucleo es quien logicamentecontrola el algoritmo.

Se utiliza un protocolo de snooping (seccion 2.4.5). El algoritmo de cohe-rencia es muy simple, y se detalla a continuacion. Hay una serie de elementosimportantes que dan lugar a este algoritmo tan sencillo:

1. La interconexion de los nucleos se realiza a traves de un bus simple.Los nucleos se conectan al bus a traves de buffers tri-state. Las senalescpuDataW s, cpuAddress s y cpuWe s pueden ser impuestas en el bus si elnucleo posee el acceso. Y cuando no tiene el acceso el nucleo puede leer losdatos impuestos por el nucleo que sı controla al bus. Esto ultimo sumadoa la senal busSnooping permiten el envıo de mensajes de broadcast entrelos nucleos.

2. La senal busSnooping indica cuando hay un mensaje de broadcast en elbus al ponerse en un estado logico uno.

3. La polıtica de escritura en memoria write-throug obliga a escribir los da-tos directamente en memoria principal. En una polıtica algo ineficiente,pero de esta manera se logra que la memoria principal siempre tenga losdatos validos y mas importante aun, obliga a que la informacion sobre lamodificacion de algun dato viaje siempre por el bus.

Estos items permiten que al modificar cualquier dato en memoria se envıe ala vez un mensaje de broadcast a todos los nucleos, con la informacion del nuevodato. Cada nucleo lee este mensaje y en caso de tener almacenado el dato encache lo actualiza con el nuevo dato. A un nivel mas bajo, esto implica la lecturadel tag en memoria cache cada vez que se recibe la senal busSnooping . Comola memoria es sincronica, el resultado de la lectura se obtiene un ciclo despues.Nada asegura que un ciclo despues el dato siga estando en el bus para reali-zar la comparacion3, por lo que los datos del bus necesarios son guardados enregistros. Las senales necesarias son busAddress io, busWe io, busDataW io ybusAccessEnable i, son almacenadas en delayedBusAddress s, delayedBusWe s,delayedBusDataW s y delayedBusAccessEnable s respectivamente. Una vezse obtiene el indicador de la cache se compara con el indicador del registro(delayedBusAddress io(19 downto 11). Si los tags coinciden y el nucleo no

3En esta implementacion se utiliza la memoria del kit Nexys2 y el acceso a memoria tardamas de un ciclo. El dato se mantendrıa en el bus por mas de un ciclo y no serıan necesarioslos registros, pero si la memoria a la que se accede es interna (sea la memoria principal o unacache de nivel dos o inclusive un buffer de escritura), la lectura puede durar un ciclo y losregistros se vuelven necesarios.

Page 73: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 63

fue el que realizo la escritura, entonces la senal cacheUpdate s toma un valorlogico ‘uno’, sino ‘cero’. No tiene sentido actualizar el dato en cache del nucleoque realiza la escritura, ya que el dato que se encuentra en cache es obligatoria-mente el correcto por la polıtica de write-allocate. La senal delayedBusAccessEnable sindica si el nucleo realizo o no la escritura del dato, si en el ciclo anterior tuvoacceso al bus, es quien realizo la escritura.

Mediante la senal cacheUpdate s se le indica al puerto B que debe escribirel dato guardado en los registros. El indicador no es escrito a traves del puertoB, ya que si se actualiza la cache, es porque el indicador de cache igual al de losregistros. El banco de indicadores sigue estando disponible para la lectura encaso de que se produzcan escrituras en ciclos de clock consecutivos, en este casono es posible eso por lo anteriormente mencionado, que la escritura se realizaen una memoria lenta, y no se realiza en mas de un ciclo de reloj. En la figura3.11 se muestra una simulacion del proceso de actualizacion de cache. En lasimulacion los cuatro nucleos realizan una operacion de escritura de una mismaposicion de memoria.

3.8. Unidad de control del nucleo

3.8.1. Descripcion

La unidad controlador del nucleo es una maquina de estados con ocho es-tados (ver figura 3.12). Los estados dependen del tipo de memoria a la que seesta accediendo, sea interna, externa o cache. Todos los perifericos y registrosespeciales del nucleo estan mapeados en memoria, por lo que tambien son consi-derados como una memoria mas. El estado tambien depende del tipo de acceso,o sea si es una escritura o o una lectura. En total se tienen ocho estados:

0. INTERNAL RAM: lectura/escritura en memoria interna.

1. CHECKING: Lectura en cache. Durante este estado tambien se compruebael indicador leıdo, y en caso de coincidir se considera la lectura un hit, delo contrario un miss.

2. WT0 (write-through): escritura en memoria externa, tambien se escribeen memoria cache, debido a la polıtica de escritura write-allocate.

3. WT1 (write-through): estado necesario si se pretende volver a realizar unalectura en cache despues de un WT0, se explica mas adelante.

4. MISC COMPONENTS: lectura/Escritura de registros especiales, en elcuadro 3.3 se muestran los mapeos en memoria.

5. NON CACHEABLE: lectura/Escritura de la porcion de memoria que nopuede ser cacheada.

6. MISS0: luego de un CHECKING, si se produce un miss el dato debe serleıdo de memoria externa. Esto es lo que indica este estado.

7. MISS1: Si luego de un miss se pretende leer cache nuevamente, se debepasar por este estado, segun se explica a continuacion.

Page 74: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 64

Figura 3.11: Simulacion del proceso de actualizacion de cache. En lafigura se ve una simulacion de un procesador con cuatro nucleos. En esta secciondel codigo ejecutan los cuatro una instruccion de escritura en la misma posicionde memoria. Los momentos en los que cada uno de los nucleos inicia la escriturade memoria se pueden ver en la senal de busSnoop s. La primer escritura nogenera ninguna actualizacion, senal cacheUpdate s. En la segunda se actualizael dato recientemente cacheado en el nucleo uno, en la tercera se actualizan losdatos en los nucleos uno y dos, y por ultimo cuando el nucleo cuatro es quienescribe en memoria los nucleos uno, dos y tres actualizan la cache.

Page 75: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 65

Figura 3.12: Estados y transiciones de la maquina de estados de la unidad decontrol.

Al existir un miss o un write-thorugh se debe escribir un dato en la memoriacache. La escritura de este dato se hace durante los estados WT0 y MISS0. Siluego de estar en alguno de estos estados se pretende ir al estado CHECKING,se produce un conflicto, la senal de direccion de memoria cache del puerto Adebe tomar dos valores al mismo tiempo, la direccion de escritura del dato yla direccion de lectura de la siguiente instruccion. Para solucionar este conflictose introducen los estados WT1 y MISS1. Durante WT0 y MISS0 la senal dedireccion del puerto A tiene la direccion correspondiente al dato a escribir en enmemoria cache y en los estados WT1 y MISS1 la senal de direccion del puerto Atiene la direccion del dato/instruccion a leer, para chequear el tag en el siguienteciclo, mientras se esta en el estado CHECKING.

Dentro de la unidad de control hay dos senales llamadas state s y stateNext s,que tienen informacion del estado actual y del estado siguiente respectivamente.state s es una senal sincronica, mientras que stateNext s se obtiene con logicacombinacional a partir de las entradas y del estado actual.

Las salidas de esta entidad son las senales de control de todo el procesador.Las salida pueden depender de state s y de stateNext s. En este caso al de-pender del estado siguiente, que a su vez depende de las entradas, esta maquinaes una maquina de Mealey. Durante el diseno de esta entidad se tuvo que prestarespecial atencion a las dependencias entre las entradas y las salidas, para evitargenerar lazos combinacionales.

3.8.2. Puertos de la entidad

En la figura 3.13 se muestra esta entidad.

clk i (entrada): Para sincronizar.

reset i (entrada): Para reiniciar la unidad.

Page 76: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 66

Direccion Mapeode Memoria

0x00000000

... Memoria interna0x00000FFC

0x00001004

Indice del CPU0x00001004

... No asignada0x0FFFFFFC

0x10000000 Memoria... externa

0x100FFFFF cacheable

0x10100000 Memoria... externa

0x103FFFFF no-cacheable

0x10400000

... No asignada0x1FFFFFFF

0x20000000 Lectura/escritura UART0x20000010 Mascara de interrupciones0x20000020 Estado de interrupciones0x20000030 GPI0 set-bits/lectura0x20000040 GPI0 clear-bits/lectura0x20000050 GPIA lectura0x20000060 Contador0x20000080 Registro de comunicacion0x200000A0 Registro del lock

0x20000000 No asignada, salvo... las direcciones

0xFFFFFFFC antes nombradas

Cuadro 3.3: Mapeo de la memoria. Las direcciones apuntan a cada byte dela memoria. Como utilizamos palabras y registros de 32 bits, las direcciones vande cuatro en cuatro. Ası se define en la ISA de MIPS.

cpuAddress i (entrada30 bits): Proveniente del mliteCpu.

cpuWe i (entrada4 bits): Proveniente del mliteCpu.

cpuAddressNext i (entrada30 bits): Proveniente del mliteCpu.

cpuWeNext i (entrada4 bits): Proveniente del mliteCpu.

busSnoop i (entrada): Senal necesaria para implementar el algoritmo decoherencia de cache. Indica cuando hay un mensaje de broadcast en el bus.

busAccessEnable i (entrada): Provenientes del arbitro del bus. Indica cuan-do se tiene acceso al bus.

busBusy i (entrada): Provenientes del arbitro del bus. Indica cuando elbus esta ocupado.

memBusy i (entrada): Provenientes del controlador de memoria externa.Indica cuando la memoria esta ocupada.

Page 77: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 67

Unidadde

control

clk_ireset_i

busSnoop_i

cacheUpdate_o

cpuWe_icpuAddres_i

CpuWeNext_icpuAddresNext_i

busAccessEnable_ibusBusy_imemBusy_i

cacheTagA_icacheTagB_i

delayedBusAddress_idelayedBusAccessEnable_i

delayedBusWe_i

cacheAddressASource_o

cacheDataRASource_ocacheWEASource_o

cacheEnableA_o

cacheEnableB_o

cpuPause_ocpuDataRSource_o

internalRamEnable_o

busRequest_o

busTransceiversEnable_o

memRequest_o

Figura 3.13: Unidad de control que posee cada uno de los nucleos de plasmamulti-nucleo

cacheRamTagA i (entrada10 bits): Proveniente de la cache, es el indicadorleıdo de la cache a traves del puerto A, incluye el bit de validez.

cacheRamTagB i (entrada10 bits): Proveniente de la cache, es el indicadorleıdo de la cache a traves del puerto B, incluye el bit de validez.

delayedBusAddress i (entrada30 bits): Proveniente de los registros delnucleo. Brinda la direccion presente en el bus con un ciclo de retraso.

delayedBusWe i (entrada(30 bits): Proveniente de los registros del nucleo.Brinda la habilitacion de escritura por byte presente en el bus con un ciclode retraso.

delayedBusAccessEnable i (entrada): Proveniente de los registros del nucleo.Brinda informacion del acceso al bus de este nucleo con un ciclo de retraso.

cacheUpdate o (salida): Senal que indica que se debe actualizar la cachecon los valores de los registros.

cacheRamAddressASource o (salida2 bits): Se envıa al multiplexor delpuerto A, selecciona la direccion del puerto.

cacheRamWeASource o (salida3 bits): Se envıa al multiplexor del puertoA, selecciona la habilitacion por byte del puerto.

cacheRamDataWASource o (salida2 bits): Se envıa al multiplexor del puer-to A, selecciona el dato a escribir del puerto.

cacheRamEnableA o (salida): Es la habilitacion del puerto A de la cache.

Page 78: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 68

mliteCpu

clk

reset_in

intr_in

mem_pause

data_r

data_w

byte_we

address

byte_we_next

address_next

Figura 3.14: Puertos de entrada y salida de CPU del plasma original.

cacheRamEnableB o (salida): Es la habilitacion del puerto B de la cache.

cpuPause o (salida): Es la senal de pausa para el mliteCpu.

cpuDataRSelection o (salida): Se envıa al multiplexor del mliteCpu. Se-lecciona la fuente del dato de lectura del CPU.

internalRamEnable o (salida): Es la habilitacion de la memoria internadel CPU.

busRequest o (salida): Se envıa al arbitro del bus. El la solicitud para lautilizacion del bus.

busTransceiverEnable o (salida): Se envıa a los buffers tri-state, es la ha-bilitacion para que impongan la senal en el bus.

memRequest o (salida): Se envıa al controlador de memoria. Es la solicitudpara acceso a memoria.

3.9. CPU plasma

Como se dijo anteriormente el CPU no se rediseno desde cero, sino que se loutiliza tal cual se extrajo del plasma original. En la figura 3.14 se muestra la in-terfaz de conexion del CPU. No se analiza su estructura interna, solo su interfaz.Todas las salida de este bloque son secuenciales, salvo las salidas address nexty byte we next, cuyo valor dependen del valor del la entrada mem pause, puedeverse en la figura 3.15. Es importante tener esto en cuenta, ya que el valor de laentrada mem pause no puede depender directamente ni del valor de address nextni byte we next, ya que se generarıa un lazo combinacional.

3.10. Caracterizacion del procesador

En esta seccion se evaluan caracterısticas de tamano y desempeno del proce-sador multi-nucleo. Se muestran los resultados de las implementaciones y medi-ciones realizadas y se hace un analisis de los mismos. El procesador multi-nucleomuestra mejoras en el rendimiento al ejecutar los programas de prueba, respectoa la implementacion mono-nucleo del plasma.

Page 79: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 69

Figura 3.15: Interfaz del plasma original. Al analizar su interfaz se en-contro que las salidas address next y byte we next dependen convinacionalmentedel valor de la entrada mem pause.

Page 80: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 70

Numero de nucleos Slices Utilizadas1 26352 46244 8030

Cuadro 3.4: Tamano del procesador plasma

3.10.1. Tamano del procesador

En el cuadro 3.4 se puede ver el tamano en slices que ocupa el plasma multi-nucleo. En estas condiciones se pueden implementar hasta cuatro nucleos enuna FPGA Spartan3E-1200. Las evaluaciones de rendimiento que se muestranen este trabajo se realizan en procesadores de uno a cuatro nucleos.

3.10.2. Desempeno en funcion del trabajo de las tareas

Los siguientes resultados surgen de ejecutar distintos programas de pruebasen el procesador, en cada programa de prueba se aumentaba la cantidad deinstrucciones. La figura 3.16 muestra como mejora el rendimiento en el proce-samiento a medida que aumenta la cantidad de trabajo que realizan las tareasde prueba, el trabajo que realizan las tareas se mide en numero de instruccionesque ejecutan. Los resultados mostrados son para tres tareas distintas, donde lafraccion de instrucciones que acceden a memoria cambia. En estas graficas enparticular se ven tareas con un 15, 00 %, 4, 17 % y 3, 22 % de tareas que accedenal bus del procesador. Las figuras 3.16(a) y 3.16(b) muestran los resultados alcomparar el procesador de cuatro nucleos frente al de uno y el de dos nucleosfrente al de uno respectivamente. Se ve que en todos los casos el rendimientoaumenta a medida que aumenta el trabajo que realizan las tareas en sı. Esto sedebe a que el porcentaje de tiempo que le toma al sistema operativo reescalonarlas tareas es cada vez menor. A partir de cierto valor, este tiempo se vuelvedespreciable frente al tiempo de procesamiento efectivo. Tambien se aprecia quesiempre se llega a un lımite en la mejora, el cual depende del porcentaje deinstrucciones que acceden al bus. En el mejor caso de la figura 3.16(a) este valorse acerca a 4, mientras que en la 3.16(b) a 2, que son los respectivos valoresteorico maximos que se pueden alcanzar en casos ideales.

El caso ideal es cuando no existen colisiones en el bus, y la unica manerade asegurar que las colisiones sean nulas es que ningun nucleo acceda al bus enningun momento, lo cual es imposible. El aumento en las colisiones provoca queel rendimiento disminuya. Las colisiones en el bus generan un lımite en el ren-dimiento de procesadores multi-nucleo. A continuacion se evalua el rendimientode un procesador en funcion de los accesos a memorias de los nucleo.

3.10.3. Desempeno en funcion de la utilizacion del bus

Los siguientes resultados surgen de realizar pruebas en el procesador, ejecu-tando programas en los cuales se aumenta la utilizacion del bus progresivamente.Las colisiones en el bus aumentan al aumentar el numero de nucleos y al au-mentar el porcentaje de utilizacion del bus de cada uno de ellos. Se evalua comomejora la eficiencia del procesadores al disminuir las colisiones. En la figura 3.17,se muestra que la mejora en el tiempo de procesamiento de las tareas disminuye

Page 81: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 71

(a) Al pasar de uno a cuatro nucleos.

(b) Al pasar de uno a dos nucleos.

Figura 3.16: Mejora en el tiempo de ejecucion al pasar de uno a cuatro nucleos.Muestra la relacion en los tiempos de ejecucion en funcion de la cantidad deprocesamiento de las tareas que se corren. La cantidad de procesamiento semide instrucciones que ejecutan las tareas.

Page 82: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 72

Figura 3.17: Mejora en el tiempo de ejecucion para cuatro y dos nucleos, frentea un nucleo, en funcion del porcentaje de instrucciones que acceden al bus enlas tareas.

junto con el aumento del porcentaje de instrucciones que acceden al bus. Tam-bien se ve un resultado indeseado, que es que para porcentajes muy bajos, lamejora vuelve a disminuir. Esto se debe a que para estos valores tan pequenos,el tiempo de procesamiento efectivo de las tareas disminuye y comienza a influirel tiempo necesario para reescalonar las tareas, es decir deja de ser despreciable.Para poder despreciarlo se deben elegir tareas con mayor cantidad de proce-samiento, como se mostro en los resultados expuestos en las figuras 3.16(a) y3.16(b).

3.10.4. Tiempo de procesamiento en funcion del numerode nucleos

La figura 3.18 muestra resultados del tiempo de procesamiento para proce-sadores de uno a cuatro nucleos para tareas con distinta utilizacion del bus.Nuevamente se observa como el porcentaje de instrucciones que acceden al buses crıtico. Dependiendo de la frecuencia de utilizacion del bus la mejora es maso menos marcada al aumentar el numero de nucleos. A medida que disminuyela utilizacion los tiempos mejoran en mayor medida al aumentar los nucleos deprocesamiento. En algunos casos solo se ve que existe una mejora significati-va al pasar de uno a dos nucleos y no de dos a cuatro. Esto se debe al lımiteimpuesto por las colisiones en el bus, al aumentar la cantidad de nucleos, lascolisiones aumentan. En esta grafica tambien tenemos un resultado indeseadopara los casos de 2 % y 4 %, tambien debido al hecho de que el tiempo efectivode procesamiento disminuye y empieza a influir el tiempo de replanificacion delas tareas. Este efecto no se notarıa si se ejecutasen tareas que realicen mayortrabajo, como se mostro en los resultados de la seccion 3.10.2

Page 83: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 73

Figura 3.18: Tiempo de ejecucion para distintas tareas en funcion del numero denucleos de procesamiento. Las tareas difieren en el porcentaje de instruccionesque acceden al bus.

3.10.5. Importancia de la memoria cache en procesadoresmulti-nucleo

Se quiere evaluar el rendimiento al correr un programa en el procesador plas-ma multi-nucleo sin las correspondientes memorias cache, para ellos se correnprogramas de prueba en implementaciones sin la memoria cache. El resultadoes la nula mejora en el rendimiento, independientemente del numero de nucleosy del tipo de tarea, ya sea que tenga o no gran porcentaje de instrucciones deacceso al bus. Este resultado es esperado, ya que todos los nucleos acceden albus por el solo hecho de tener que leer la instruccion que ejecutan. El arbitrodel bus permite el acceso al mismo de a un nucleo a la vez pausando al resto.Tener mas de un nucleo carece de sentido, ya que el procesamiento efectivo sinmemoria cache es igual o inclusive peor.

Page 84: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 3. IMPLEMENTACION Y RESULTADOS OBTENIDOS 74

Page 85: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Capıtulo 4

Conclusiones y trabajosfuturos

4.1. Conclusiones

Se diseno e implemento un sistema multi-nucleo sobre el cual se realizarontesteos de eficiencia. Los resultados presentados muestran la dependencia delrendimiento con el numero de nucleos ,el tipo de tarea que se tenga y la memoriacache. Los factores mas determinantes para la obtencion o no de una mayoreficiencia al procesar distintas tareas son la utilizacion del bus y la carga deprocesamiento que estas tengan. Se mostro tambien que existe un lımite en laposible mejora al rendimiento y que puede estar muy alejado del caso teoricoideal.

Existen otros factores a evaluar en un futuro, entre ellos como se ve modi-ficado el lımite de una posible mejora al implementar otro tipo de memoriascache con otras polıticas y que no sea compartida entre instrucciones y datos.Otros trabajos futuros pueden ser la implementacion del plasma multi-nucleo,que soporte una cantidad de nucleos que no se necesariamente potencia de dos.Tambien la implementacion del monitor del sistema operativo, para controlarla correcta distribucion de las tareas que se ejecutan, en ambientes de gran ex-posicion electromagnetica, que fue uno de los factores que impulso este trabajo.

Este trabajo presenta una primer implementacion del plasma multi-nucleo.Hay una gran cantidad de posibilidades para seguir mejorando el diseno.

4.2. Trabajos Futuros

En primer lugar listaremos trabajos futuros que requieren pocas modifica-ciones a la arquitectura y serıan casi inmediatas:

Modificar el codigo en las secciones que sean necesarias para poder imple-mentar un numero de nucleo que no deba ser necesariamente potencia dedos.

75

Page 86: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

CAPITULO 4. CONCLUSIONES Y TRABAJOS FUTUROS 76

Cambiar las polıticas de escritura de memoria cache, de write-allocate awrite-no-allocate, y luego cambiar levemente el algoritmo de coherenciade cache, de modo que el mismo nucleo observe sus propios mensajes debroadcast y actualice la los datos almacenados en memoria cache utilizandoel puerto B de la misma, como hacen el resto de los nucleo. Se lograrıauna leve mejora al no invalidar datos de memoria cache durante escriturasque no sean de 32 bits. Una vez hecho el cambio realizar mediciones ycompara el rendimiento frente a la version actual.

Modificar la memoria cache y hacerla unicamente de instrucciones. De estamanera los algoritmos de coherencia de cache pueden ser simplificados,reduciendo ası el hardware necesario. Comparar la diferencia de tamanodel procesador y su eficiencia con los de la version anterior.

Modificacion de la memoria interna de cada nucleo. La cantidad de nucleosque pueden ser implementados en en las FPGAs, estan limitados hoy en dıapor los bloques de memoria ram diponibles en las mismas. Reduciendo lamemoria interna posibilitarıa incrementar el numero de nucleos. Realizarnuevas mediciones.

Siguiendo la lınea de trabajo que se menciono durante este trabajo, la im-plementacion de un task scheduler monitor para el plasma multi-nucleo.No precisa ninguna modificacion al plasma. Luego realizar las experimen-taciones en ambientes de alta interferencia electromagnetica y/o bajo ra-diacion nuclear.

Otro tipo de desarrollos posibles basados en estre trabajo pueden ser:

Implementacion de un bus switcheado, incluyendo mas de un controladorde memoria.

Modificacion de la estructura de la cache para que el tamano de bloquesea parametrizable.

Modificacion de la estructura de la cache para que sea parametrizable laasociatividad.

Implementacion de polıtica de escritura en memoria del tipo Write Back.

Separacion de memoria cache en instrucciones y datos.

Implementacion de la MMU (Memory Management Unit).

Implementacion de la FPU (Floating Point Unit).

Mejoras y vectorizacion del manejo de interrupciones y excepciones (NVIC).

Hoy en dıa hay al menos otros cuatro estudiantes que siguen la lınea detrabajo del plama multi-nucleo en sus trabajos de tesis de grado. Ellos trataranalgunos de los temas anteriormente nombrados.

Page 87: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Bibliografıa

[1] Michael J. Flynn, Computer Architecture. Jones & Bartlett Learning, 1995.

[2] John L. Hennessy, David A. Patterson Computer Architecture - A Quanti-tative Approach, 4th Edition. Morgan Kaufman Publishers, 2007.

[3] David A. Patterson, John L. Hennessy Computer Organization and Design- The Hardware/Software Interface, 3rd Edition. Morgan Kaufman Publis-hers, 2005.

[4] Procesador Plasma y PlasmaOS: http://opencores.org/project,plasma

[5] Jan M. Rabaey, Anantha Chandrakasan, and Borivoje Nikolic Digital In-tegrated Circuits, A Design Perspective, 2nd Edition, Prentice-Hall

[6] Arquitectura MIPS: http://www.mips.com/

[7] David E. Culler, Jaswinder Pal Singh, Parallel Computer Architecture: AHardware/Software Approach 1998.

[8] J. Tarrillo, L. Bolzani, F. Vargas, A Hardware-Scheduler for Fault Detectionin RTOS-Based Embedded Systems 2009.

[9] D. Silva, K. Stangherlin, L. Bolzani, F. Vargas, A Hardware-Based Ap-proach to Improve the Reliability of RTOS-Based Embedded Systems 2011.

[10] Andrew S. Tanenbaum, Modern Operating Systems, 2nd edition. PrenticeHall, 2002.

[11] Aritmetica modular, http://en.wikipedia.org/wiki/Modular arithmetic, Wi-kipedia.

[12] Benchmarking, http://es.wikipedia.org/wiki/Benchmark, Wikipedia.

77

Page 88: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

BIBLIOGRAFIA 78

Page 89: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

Apendice A

Implementaciones despinLocks

A.1. Con soporte de hardware

1 uint32 OS SpinLock ( void )2 {3 uint32 s t a t e ;4 u int32 cpuIndex = OS CpuIndex ( ) ;56 s t a t e = OS AsmInterruptEnable (0 ) ; // d i s a b l e i n t e r r u p t s78 i f (MemoryRead(0 x200000A0 ) == (1<<cpuIndex ) )9 return ( u int32 )−1;

1011 MemoryWrite (0 x200000A0 , 0 x f f f f f f f f ) ; // lockRequest12 for ( ; ; ) //wait for l o ck13 {14 i f (MemoryRead(0 x200000A0 ) == (1<<cpuIndex ) )15 break ;16 }17 a s s e r t ((1<<OS CpuIndex ( ) )==MemoryRead(0 x200000A0 ) )18 return s t a t e ;19 }2021 void OS SpinUnlock ( u int32 s t a t e )22 {23 a s s e r t ((1<<OS CpuIndex ( ) )==MemoryRead(0 x200000A0 ) )24 i f ( s t a t e == ( uint32 )−1)25 return ; //nested lock c a l l26 MemoryWrite (0 x200000A0 , 0x0 ) ; // c l e a r lockRequest27 OS AsmInterruptEnable ( s t a t e ) ; // r e s t o r e i n t e r r u p t s28 }

79

Page 90: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

APENDICE A. IMPLEMENTACIONES DE SPINLOCKS 80

A.2. Solucion propuesta por Peterson

Es una solucion por software mostrada en [10], propuesta por G. L. Petersonen el ano 1981. La solucion es mas simple que las que existente en esa epoca. Elcodigo presentado a continuacion es identico al del libro, a pesar de que parezcagenerico solo funciona para dos nucleos.

Cada proceso debıa llamar a la funcion entre region, antes de utilizar unrecurso compartido, y a la funcion leave region al terminar la utilizacion delmismo.

1 #DEFINE FALSE 02 #DEFINE TRUE 13 #DEFINE N 2 /∗ number o f p r o c e s s e s ∗/45 int turn ; /∗ whose turn i s t i ? ∗/6 int i n t e r e s t e d [N ] ; /∗ a l l va lue s i n i t a l l y 0 (FALSE) ∗/78 void ente r r eg i on ( int proce s s ) /∗ proce s s i s 0 or 1 ∗/9 {

10 int other ; /∗ number o f the other p roce s s ∗/1112 other = 1−proce s s ; /∗ the oppos i t e o f p roce s s ∗/13 i n t e r e s t e d [ p roce s s ] /∗ show that you are i n t e r e s t e d ∗/14 turn = proce s s ; /∗ s e t f l a g ∗/15 while ( turn == proce s s && i n t e r e s t e d [ other ] == TRUE) ; /∗ n u l l

statement ∗/16 }1718 void l e ave r eg i on ( int proce s s ) /∗ proce s s : who i s l e a v i n g ∗/19 {20 i n t e r e s t e d [ p roce s s ] = FALSE; /∗ i n d i c a t e s departure from

c r i t i c a l r eg i on ∗/21 }

A.3. Solucion propuesta por el creador del Plas-maOS

Aseguro que no halla mas de un proceso en una regione crıtica y pero nose puede asegurar nada sobre su rendimiento y tampoco de que no caiga en undeadlock. Un ejemplo propuesto es el siguiente:

1 uint32 OS SpinLock ( void )2 {3 uint32 s tate , cpuIndex , i , ok , de lay ;4 volat i le uint32 keepVar ;56 cpuIndex = OS CpuIndex ( ) ;7 s t a t e = OS AsmInterruptEnable (0 ) ; // d i s a b l e i n t e r r u p t s8 i f ( SpinLockArray [ cpuIndex ] )9 return ( u int32 )−1; //a l r eady locked

10 de lay = (4 + cpuIndex ) << 2 ;1112 //Spin u n t i l only t h i s CPU has the sp in lock13 for ( ; ; )14 {15 ok = 1 ;16 SpinLockArray [ cpuIndex ] = 1 ;

Page 91: Dise˜no, Implementación y Evaluación de un procesador multi-núcleo

APENDICE A. IMPLEMENTACIONES DE SPINLOCKS 81

17 for ( i = 0 ; i < OS CPU COUNT; ++i )18 {19 i f ( i != cpuIndex && SpinLockArray [ i ] )20 ok = 0 ; //Another CPU has the sp in lock21 }22 i f ( ok )23 return s t a t e ;24 SpinLockArray [ cpuIndex ] = 0 ;25 OS AsmInterruptEnable ( s t a t e ) ; //re−enable i n t e r r u p t s26 for ( i = 0 ; i < delay ; ++i ) //wait a b i t27 ++ok ;28 keepVar = ok ; //don ’ t opt imize away the de lay loop29 i f ( de lay < 128)30 de lay <<= 1 ;31 s t a t e = OS AsmInterruptEnable (0 ) ; // d i s a b l e i n t e r r u p t s32 }33 }3435 void OS SpinUnlock ( u int32 s t a t e )36 {37 uint32 cpuIndex ;38 i f ( s t a t e == ( uint32 )−1)39 re turn ; //nested lock c a l l40 cpuIndex = OS CpuIndex ( ) ;41 SpinLockArray [ cpuIndex ] = 0 ;42 }