integración del multiprocesador basado en la arquitectura de

Anuncio
INTEGRACIÓN DEL MULTIPROCESADOR BASADO EN LA ARQUITECTURA DE
DETECCIÓN DE EVENTOS (MADE)
Andrés UPEGUI (1), Iván HERRERA (2), Hernán SÁNCHEZ (3)
Grupo de Microelectrónica U.P.B., Medellín-Colombia
Email: [email protected]
Dirección General de Investigaciones - Universidad Pontificia Bolivariana (U.P.B.)
Emails: (1) [email protected] (2) [email protected] (3) [email protected]
Resumen:
El Multiprocesador basado en la arquitectura de
detección de eventos (MADE),
construido con base en una
novedosa arquitectura de multiprocesadores multiprogramados, es
diseñado para ser aplicado en sistemas de buses seriales de alta
velocidad y aplicaciones que requieran grandes volumenes de
operaciones matemáticas. En el presente artículo se describe el
diseño del Multiprocesador descrito en [1] y [2], integrando en un
solo encapsulado cuatro procesadores, un módulo detector de
eventos y cada uno de los controladores necesarios para
administrar la memoria de cada procesador.
I. INTRODUCCIÓN
Las redes industriales se han diseñando con el objetivo
de controlar sistemas distribuidos en campo, donde existen
grandes distancias entre las unidades de control y los
diferentes actuadores o elementos finales del sistema. Hay
dos parámetros a optimizar en dichas redes: mínima
utilización de cableado y máxima velocidad. En la
actualidad se tienen diferentes estándares de buses seriales
de comunicación (i.e. ProfibusÒ , PCIÒ ) que cumplen con
las condiciones descritas: sólo utilizan un cable para
interconectar los elementos y pueden transmitir a
velocidades del orden de hasta 66 MHz.
El Multiprocesador MADE [1,2], ha sido diseñado con
el objetivo de procesar la información que reciba por el bus
de datos a una elevada velocidad. Su principio de
funcionamiento está basado en una arquitectura de
detección de eventos [3].
La metodología de
funcionamiento de esta arquitectura consiste en ejecutar
ciertos procesos como respuesta a la detección de uno o
más eventos. De esta manera no se tiene un sistema
sincrónico que dependa de una única señal de sincronismo,
sino que cada nodo procesador actúa independientemente
en función de los procesos que le correspondan y hayan
sido activados. La aparición de un evento determinado
libera la ejecución de un nuevo proceso. De esta manera se
economiza tiempo y se maximiza la utilización del
Multiprocesador.
El MADE en su primera etapa utilizaba la técnica de
memoria compartida [3], con dos microcontroladores 8031
como unidades básicas de proceso, una memoria de
programa para cada módulo y una memoria de datos
compartidos que permitía coherencia entre los dos
módulos. En la segunda etapa se integran los nodos de
procesamiento en una sola unidad, de modo que se puede
lograr una mayor velocidad de trabajo, suprimiendo
problemas de velocidad de transmisión entre buses
externos. De igual forma, se busca optimizar el manejo de
memoria con una técnica de memoria compartida
distribuida, reemplazando la memoria centralizada de la
versión anterior.
El diseño electrónico utilizando arreglos lógicos
programables por voltajes (FPGAs) constituye una
alternativa muy económica y eficiente [5], que permite no
sólo la integración de un gran número de lógica digital
dentro de un mismo chip, sino que evita la necesidad de
cableado y permite aumentar el rendimiento del sistema
hasta frecuencias del orden de 100 MHz.
II. ESTADO ACTUAL DEL MULTIPROCESADOR
MADE
A.) Arquitectura del MADE
En su primera etapa el multiprocesador cuenta con dos
microcontroladores 8031, cada uno con memoria propia de
programa y de datos, y un sistema de memoria de datos
compartida. Los bloques se encuentran interconectados por
medio de un bus bidireccional (Figura #1), el cual dispone
de 8 líneas destinadas a transmitir las direcciones y datos y
cuatro líneas de control, distribuidas de la siguiente
manera:
- Línea de petición del bus
- Línea de lectura / escritura
- Líneas de asignación del bus
- Línea de reloj del bus
BP
R/W_
LDA
CK_BUS
(El número de líneas LDA depende del número de nodos
procesadores utilizados).
forma: en su memoria propia dispone de 16 Kbytes para
memoria de programa, y otros 16 Kbytes destinados a
datos. Los 32 Kbytes sobrantes son destinados para
direccionar memoria compartida.
FIG. # 1. ARQUITECTURA DEL MADE
B.) Estructura del Nodo de Procesamiento
Cada nodo procesador cuenta con un microcontrolador
8031, una memoria RAM estática de 32 Kbytes y el
controlador de la unidad de proceso (CODUP),
implementado en una FPGA XC4010XL, la cual se encarga
de administrar el acceso a la memoria externa propia y
compartida (Ver Fig. #2).
FIG. #3. BLOQUE DE MEMORIA DEL MADE
E.) Manejo de Tiempos
Para el manejo de tiempos del MADE es necesario
monitorear las líneas de control del 8031 de modo que se
pueda discriminar cuando se desea acceder a la memoria
propia o memoria compartida. Igualmente es necesario
garantizarle al microcontrolador que su esquema de
tiempos será respetado en cada acceso a la memoria
compartida, aún cuando la memoria ya esté siendo usada
por otro nodo de procesamiento, teniendo en cuenta que
para el acceso a la memoria compartida es necesario
solicitar el uso del bus, recibir una confirmación, transmitir
la dirección y enviar o recibir el dato deseado. Todo esto
se debe realizar buscando lograr la menor latencia posible
del sistema. Una descripción detallada se encuentra
disponible en [1].
F.) Implementación del Sistema
FIG. #2. NODO DE PROCESAMIENTO
La memoria RAM compartida requiere el uso del
administrador de memoria compartida (ADCOM)
implementado en otra FPGA XC4010XL (Ver Fig.#3), con
el fin de establecer las comunicaciones desde y hacia los
nodos de procesamiento y para conmutar las señales de
control de la memoria RAM. Este bloque ejecuta funciones
tales como generar el reloj y administrar el uso del bus,
asignando prioridades a cada uno de los nodos con las
líneas LDA.
C.) Administración de Memoria
Cada microcontrolador 8031 tiene la capacidad de
direccionar 64 KB, los cuales se distribuirán de la siguiente
El multiprocesador está construido sobre tres tarjetas de
desarrollo
XS-40
de
la
compañía
XESS
(http://www.xess.com) las cuales contienen una FPGA
XC4010XL, un microcontrolador Intel 8031, una memoria
RAM estática de 32 KB y tiene la capacidad de almacenar
la configuración de la FPGA usando una EEPROM serial
de la familia AT17 de Atmel.
Usando las tarjetas XS-40, se programan las FPGAs
para que realicen una interconexión coherente entre los
microcontroladores. La interconexión física se realiza
usando una tarjeta especialmente diseñada para tal
propósito con lo que se logra un mejor rendimiento del
sistema.
G.) Software de Prueba
El software diseñado para probar el sistema consiste en
un programa desarrollado para el microcontrolador 8031.
La función básica del programa es encontrar el número
mayor entre un conjunto de números de longitud definida
(en principio se habla de 100 números).
Para el multiprocesador, se envían serialmente los
numeros a un 8031, el cual los almacena en la memoria
compartida. Posteriormente, cada nodo de procesamiento
realiza la comparación de la mitad de los números
encontrando el mayor respectivo.
Luego el primer
microcontrolador que termine escribe su resultado en una
dirección asignada en la memoria compartida, así como un
registro designado para indicar que ha terminado la tarea.
Cuando el otro nodo lee dicho registro, procede a capturar
el dato arrojado por el primer microcontrolador y a realizar
la comparación final entre los dos números y lo retorna por
el puerto serial al PC. Esta tarea se repite indefinidamente
generando un pulso cada vez que ésta se complete.
A partir del programa realizado para el
microcontrolador 8031 y del análisis de sistemas
multiprocesados hermanos del MADE como el TORCH
[7], se determinó teóricamente el número de ciclos de reloj
que requiere el sistema para ejecutar toda la labor de
comparación de datos y devolución del resultado.
De acuerdo a la arquitectura del multiprocesador y a la
estructura del programa se obtiene un resultado que denota
mayor eficiencia para los programas que manejan grandes
cantidades de información (Tabla # 1).
TABLA # 1. COMPARACIÓN DEL NÚMERO DE CICLOS
N um eros
# Ciclos M ono
# Ciclos M ulti
Ganancia
10
1584
1095
1.44
100
15624
8250
1.89
1000
156024
79800
1.95
Los datos obtenidos son más satisfactorios a medida
que el tamaño del conjunto aumenta. Se puede observar en
la Tabla 1. que para el caso de n=1000 se obtuvo una
ganancia de 1.95, muy cercana a la ganancia ideal 2
descrita en [7].
Cabe anotar que la ganancia que se obtiene para alguna
tarea depende en gran parte de la habilidad del
programador para aprovechar los recursos que ofrece el
multiprocesador.
III. MULTIPROCESADOR MADE II
A.) Arquitectura
La nueva versión del Multiprocesador Paralelo Basado
en la Arquitectura de detección de Eventos (Figura # 4)
consiste en 4 nodos de procesamiento independientes, cada
uno consta de un procesador controlado por un Controlador
de Unidad de Proceso (CODUP II). Adicionalmente hay
un módulo detector de eventos (MODE), el cual se encarga
de detectar los eventos configurados por el usuario y
ejecutar las acciones necesarias para atender dicho evento.
FIG. # 4. ARQUITECTURA DEL MADE II
Cada nodo de procesamiento dispone de una memoria
externa, formando un sistema de memoria compartida
distribuida con cuatro memorias y en el cual un nodo de
procesamiento puede direccionar cualquier unidad de
memoria.
El sistema cuenta con cuatro buses:
• Bus de datos, el cual transmite direcciones y datos.
• Bus de detección de eventos externos, el cual tiene
como función interconectar al MODE con las interfaces
de entrada y salida.
• Bus de detección de eventos internos, el cual
interconecta al MODE directamente con los
procesadores.
• Bus de control, que interconecta al módulo detector de
eventos con los diferentes nodos de procesamiento.
Como es evidente el sistema cuenta con una elevada
cantidad de buses, lo cual implica un hardware más
costoso, pero se justifica en la medida que disminuye la
latencia del sistema.
B.) Nodo de Procesamiento
Cada nodo de procesamiento esta compuesto por un
procesador, un CODUP II y una memoria externa (Fig. #
5). Dicha memoria esta destinada a almacenar programa y
datos. El programa tan solo podrá ser accedido por el
procesador correspondiente a su nodo, mientras que los
datos estarán disponibles para cualquier procesador que
requiera tanto escribir como leer.
El procesador es un procesador RISC de 8 bits que
cuenta con una interface de comunicación UART, un
modulo detector de eventos y un banco de 16 registros.
El CODUP II es un módulo controlado por una máquina
de estados, que basicamente tiene tres estados principales.
Tiene acceso al bus compartido y a la memoria
correspondiente a su nodo, y tiene el control de la señal de
reloj del procesador. A continuación se describen los tres
estados basicos del CODUP II.
FIG.# 6. PROCESADOR DE 4 BITS
FIG.# 5. NODO DE PROCESAMIENTO DEL MADE II.
El primer estado es considerado el estado normal de
operación, en el cual el procesador esta leyendo su
memoria de programa y bien esta leyendo o escribiendo
datos en su propia memoria, en este caso el CODUP II
actua como un puente que permite la interconección entre
ambos.
El segundo estado es de acceso a memoria de otro nodo
de procesamiento. En este caso el CODUP II detiene el
oscilador del procesador, solicita el uso del bus compartido
para luego enviar la dirección deseada y el dato si es un
ciclo de escritura o espera el dato si el ciclo es de lectura.
El tercer estado se da cuando la memoria del nodo
procesador es requerida por otro nodo. En este caso la
prioridad la tiene el otro nodo, de modo que se recibe la
dirección requerida (y el dato si el ciclo es de escritura), se
verifica si dicho espacio de memoria le corresponde, se
detiene el reloj del procesador, se ejecuta la operación de
lectura o escritura y vuelve al estado normal de operación.
Dado el caso que en el momento de la solicitud del otro
procesador la memoria este siendo utilizada por el
procesador perteneciente al nodo, tanto la dirección como
el dato son almacenados en buferes para reponer los datos
al culminar la operación.
C.) Procesador
Para efectos de prototipaje se implemento en un
principio un procesador de 4 bits escalable a 4*n bits tipo
RISC para procesamiento de datos seriales a una alta
velocidad. En la primera versión del proyecto se desarrolló
en 4 bits como un ejercicio para ser escalado
posteriormente a un número mayor de bits según sea
necesario.
Se diseñó un procesador integrado en lenguaje VHDL
(Figura # 6), con una cantidad de 5000 compuertas en un
dispositivo de lógica programable FPGA de Xilinx. El
procesador tiene actualmente una frecuencia de operación
es de 25 MHz (100 Mhz es la frecuencia máxima de la
FPGA XC4010XL de Xilinx) que consume 4 ciclos de reloj
por instrucción. Las cuatro micro-operaciones que realiza
el procesador por instrucción son: fetch, decode, execution
y memory read and writeback.
El procesador funcionará en dos posibles modos; el
modo LOAD o de carga del programa, (por medio del cual
se almacena el código en la memoria RAM externa), y el
modo EXECUTE o de ejecución del programa previamente
almacenado en la memoria RAM. La selección del modo
de trabajo para el procesador se realiza mediante la señal de
control Enable, así: (Enable = 0 => LOAD PROGRAM ;
Enable = 1 ==> Modo EXECUTE).
El bajo consumo de recursos del procesador permite
multiplicar la cantidad de unidades procesadoras en un solo
circuito integrado y construir de esta manera un solo
sistema multiprocesador integrado en una única pastilla
semiconductora.
D.) Módulo Detector de Eventos
Conforme con el principio de sincronía por medio de
eventos externos al procesador, se diseñó un sistema de
interrupciones programables por medio del software del
procesador. El procesador incluye toda la lógica para que
por medio de la instrucción PRG se permita accesar un
modo especial de configuración de eventos, tales como
diferentes tipos de datos y de valores en registros que al
presentarse generan señales de sincronismo para los
procesadores adyacentes. De esta forma se puede activar la
ejecución de nuevos procesos hijos que no necesitarán
información adicional del procesador padre ni ningún tipo
de protocolo de arbitramento de buses. Aca se presenta
una de las ventajas mas grandes del procesador, ya que con
esta metodología de sincronismo, se logra tener varias
unidades procesadoras funcionando simultáneamente, con
el más bajo contenido de encabezados o de información no
útil para el usuario externo.
De esta forma, los módulos detectores de eventos de
cada uno de los nodos de procesamiento, estan
programados para atender de cierta forma ciertos eventos
en forma programable. Mientras que el detector de eventos
global del multiprocesador tiene como función informarle a
cada uno de dichos módulos que tipo de eventos han
ocurrido, bien sean externos o internos.
E.) Administración de Memoria
El procesador cuenta con un espacio total de memoria
de 128 Kbytes, distribuido en 4 memorias RAM de 32
Kbytes. Cada memoria esta asignada a un procesador y es
directamente manejada por el Controlador de Unidad de
Proceso (CODUP), correspondiente al nodo.
De estos 32 Kbytes, los 16 de menor peso están
asignados a la memoria de programa, y solo puede ser
accedida por el procesador correspondiente a dicho nodo.
Los 16 de mayor peso están destinados a datos y pueden ser
accedidos por cualquier procesador. El procesador a
utilizar en cada nodo de procesamiento tiene la capacidad
de direccionar 64 Kbytes de memoria de datos, los cuales
son compartidos por los cuatro procesadores.
El espacio de memoria de datos tiene un
direccionamiento absoluto (Figura # 7), de modo que la
memoria del nodo 0 almacena las direcciones desde la 0
hasta 16 Kbytes, la del nodo 1 va desde la dirección 16 K
hasta 32 K, la del nodo 2 desde 32 K hasta 48 K y la del
nodo 3 desde la dirección 48 K hasta 64 K
FIG.# 7. DISTRIBUCIÓN DE MEMORIA DE DATOS
Para cada nodo de procesamiento el espacio de
memoria no será absoluto sino relativo, de modo que
cuando cualquier procesador requiere una dirección de la 0
a la 16 K, se refiere a su propia memoria, de 16 a 32 K se
refiere al nodo de procesamiento que le sucede y asi
sucesivamente.
Dicho direccionamiento se logra
sumandole cierta cantidad (+0,+1,+2,+3) a los 2 bits de
mayor peso del bus de direcciones (Figura # 7).
Por ejemplo, el procesador 2 requiere el dato que se
encuentra en la dirección 7 K de la memoria del nodo 1,
dicha dirección es 16 K + 7 K = 23 K en el espacio de
direccionamiento absoluto. Pero cada procesador tiene un
direccionamiento relativo, de modo que para el procesador
2 es la dirección (16 K x 3) + 7 K = 55 K (16 K se
multiplica por 3 debido a que el nodo 1 esta tres puestos
mas adelante que el nodo 2). Asi que el procesador
direcciona 55 K equivalente a “1101111111111111” al
sumar 2 (“10“) a los dos bits de mayor peso (“11”) queda
“10” + “11” = “01” (no se tiene en cuenta carry). Asi se
obtiene la dirección absoluta “0101111111111111”
equivalente a 23 K.
Cabe anotar que el sumador viene incluido en el
CODUP II y solo es usado para el acceso a datos. Las
direcciones de programa no se ven modificadas por el
sumador, ya que cada procesador tan solo lee programa de
su propia memoria. El programa esta almacenado dentro
del espacio de memoria de 0 a 16 K. El procesador cuenta
con una linea de P/D (Program / Data) (Figura # 5) que va
al CODUP, dicha linea indica si el acceso es a memoria de
programa o de datos y simplemente habilita o deshabilita el
sumador.
F.) Manejo de Tiempos
El acceso a memorias de diferentes nodos implica una
latencia adicional, ya que el procesador debe esperar a que
el CODUP II ejecute la comunicación con los otros nodos.
Cada tipo de acceso (lectura o escritura) implicará una
latencia diferente, cuando se realiza un ciclo de lectura de
datos en otra memoria, el CODUP II se debe encargar de
detener el procesador, comunicarse con el procesador
deseado y enviarle la dirección, el otro CODUP II debe
recibirla, leer el dato y devolverlo al solicitante. Para llevar
a cabo dicha operación la latencia estará entre 5 y 8 ciclos
de reloj dependiendo de la asignación del bus. Para un
ciclo de escritura no habrá necesidad de detener el reloj, ya
que el procesador no estará esperando respuesta, a menos
que dicha operación este precedida por otro acceso a bus
que no haya sido atendido.
De igual forma, cuando una memoria va a ser accedida
por otro nodo, se debe deshabilitar su procesador
correspondiente. En este caso la latencia es de 2 ciclos
tanto para el ciclo de lectura como de escritura.
Se obtiene menor latencia del sistema, en general, con
rutinas de escritura en memoria compartida, que con rutinas
de lectura de memoria compartida, por lo tanto es virtud del
programador y del compilador tratar de evitar al máximo
las lecturas de memoria de otros nodos, ya que ademas de
tomar mas ciclos de reloj, congestionan más el bus ya que
tienen que enviar una dirección y esperar una respuesta.
IV. CONCLUSIONES
La característica de ser un sistema multiprocesado con
nodos de proceso ejecutando programas independientes
sugiere una plataforma de desarrollo muy novedosa para
aplicaciones que requieran alta velocidad de ejecución y
posibilidad de asignación de proceso concurrentes. El
MADE presenta un modelo muy apropiado para los
sistemas de comunicación serial, donde los requisitos de
velocidad y volumen de información no permiten el uso de
sistemas monoprocesados tradicionales.
El sistema brinda la posibilidad de manejar grandes
cantidades de información que requieran cierto tratamiento
matemático, ya que el multiprocesador se presta para que
cada nodo procese ciertos datos o realice ciertas
operaciones arrojando varios resultados parciales. Y así
lograr un sistema multitarea a nivel de hardware.
La siguiente tarea del MADE será demostrar su
capacidad de procesamiento al ser utilizado como unidad
de proceso en un enlace con un sistema de comunicaciones
PCI de 32 bits a 32 MHz.
V. REFERENCIAS
[1] I. Herrera, H. Sánchez, A. Upegui, L. Restrepo.
“Multiprocesador Paralelo Basado en la Arquitectura de
detección de Eventos (MADE)”,
En: SE´99: 1er.
Seminario Nacional de Investigación en Ingeniería
Electrónica y Telecomunicaciones en Colombia.
Universidad de los Andes. Bogotá. 1999.
[2] I. Herrera, H. Sánchez, A. Upegui, L. Restrepo.
“Modelo de Simulación y Prueba para el Multiprocesador
Paralelo Basado en la Arquitectura de detección de Eventos
(MADE)”, En: VI Workshop Iberchip. Sao Paulo, Brasil,
Marzo, 2000.
[3] R. Gerndt, “An Event-Driven Multi-Threading
Architecture for Embedded Systems”, Proceedings of the
codes/CASHE '97
[4] John D. Kubiatowicz. Integrated Shared-Memory and
Message-Passing Communication in the Alewife
Multiprocessor. PhD thesis, Massachusetts Institute of
Technology, Department of Electrical Engineering and
Computer Science, February 1998.
[5] S. Hauck. “The Roles of FPGA´s Reprogrammable
Systems”. In Proceedings of theIEEE, Vol 86. No 4, Abr.
1998. p 615 – 635.
[6] The Programmable Logic Data Book 1998. XILINX.
[7] The Torchers. TORCH Architectural Specification.
1992. Stanford University.
[8] K. Hwang, F. Briggs. Arquitecturas de computadores y
procesamiento paralelo. 1ed. McGraw-Hill. Madrid, 1988.
[9] M. Flynn, “Computer Architecture: Pipelined and
Parallel Processor Design”. Ago. 1995.
VI. CURRÍCULUMS
Andrés E. Upegui Posada: Ingeniero Electrónico de la
UPB, Coordinador del Grupo de Microelectrónica de la
UPB, en el cual dirige varios proyectos de investigación de
arquitecturas de procesadores, tratamiento de señales de
audio y video y diseño y construcción de dispensadores
inteligentes entre otros. Profesor de la materia Electrónica
Integrada en la misma universidad. Miembro activo del
grupo de Microelectrónica de la U.P.B. desde 1998. Ha
asistido a eventos como el 37° Design Automation
Conference en Los Angeles como expositor y como
ponente al 1° Congreso Internacional de Ingenierías
eléctrica y electrónica en Bucaramanga entre otros, además
de una publicación en el VI Workshop de Iberchip en Sao
Paulo. Ha asistido a cursos como al Xilinx University
Workshop (San Jose, CA , USA) , y al Seventh Training on
SoC Design Using Design and Prototyping Platforms
(Santa Clara, CA, USA) entre otros. Áreas de Interés:
Lenguajes HDL, Microelectrónica, Arquitecturas y
programación de procesadores
Iván Herrera: Ingeniero Electrónico de la Universidad
Pontificia Bolivariana. Ingeniero de planta en Intel ( Costa
Rica), fue profesor de tiempo completo en la Facultad de
Ingeniería Electrónica, de la cual también fue coordinador
del Grupo de Investigación en Microelectrónica. Desde
1997 se encuentra vinculado con investigaciones en el área
de arquitectura de procesadores y el diseño de circuitos
utilizando lógica reconfigurable. Entre 1998 y 1999
trabajó en el laboratorio de Profibus del Instituto de
Microelectrónica Aplicada IAM FuE GmbH en
Braunschweig - Alemania. Ha participado en varios
eventos de microelectrónica entre los cuales figura el 37°
Design Automation Conference en Los Angeles, el VI
Workshop de Iberchip en Sao Paulo, Seventh Training on
SoC Design Using Design and Prototyping Platforms en
Santa Clara, California y los Workshop de Xilinx ITESM
en Guadalajara y en San Jose, California.
Hernán Sánchez: Ingeniero Electrónico de la U.P.B.
Trabaja como profesor de la materia Electrónica Integrada
desde 1995, en la cual introduce el diseño de lógica
programable empleando lenguajes de descripción de
hardware VHDL y dispositivos tipo FPGA's. Miembro
fundador del grupo de microelectrónica U.P.B del cual es
coordinador del área de investigaciones. Ha desarrollado
conferencias y cursos especiales con la UPB desde 1997.
Asistente a varios eventos de Microelectrónica, como el
Workshop de Xilinx (Guadalajara, México) y el Curso
Internacional de Técnicas de Diseño de Circuitos
Integrados VLSI (Medellín, Colombia). Actualmente se
desempeña como Analista de Telecomunicaciones en
SURATEP.
Descargar