IDSP: un framework distribuido para multicomputadores DSP
Transcripción
IDSP: un framework distribuido para multicomputadores DSP
XIV JORNADAS DE PARALELISMO—LEGANÉS, SEPTIEMBRE 2003 1 IDSP: un framework distribuido para multicomputadores DSP TMS320C6000 Jesús M. Álvarez Llorente 1 , Juan C. Díaz Martín1 , José M. Rodríguez García 1 , Juan L. García Zapata2 , Juan A. Rico Gallego1 Resumen—Este trabajo describe el diseño y desarrollo de IDSP, un framework distribuido para la programación de aplicaciones DSP en multicomputadores basados en procesadores Texas Instruments TMS320C6000. Los fabricantes actuales de multicomputadores DSP utilizan herramientas de configuración que ubican de forma estática las tareas de la aplicación sobre el conjunto de procesadores. El framework IDSP aporta a este estado actual de la cuestión un esquema de direccionamiento que posibilita la creación y ubicación dinámica de tareas. IDSP proporciona esencialmente un conjunto de primitivas de creación y manipulación de instancias de aplicaciones distribuidas denominadas grupos. El grupo es un conjunto de operadores, donde el operador es el contexto de ejecución de un algoritmo DSP. A diferencia de los sistemas comerciales en uso, nuestro esquema de direccionamiento permite una comunicación entre operadores transparente a la ubicación. Esto da lugar a un criterio de ubicación dinámica en función de la carga y la posibilidad de migración de operadores. Palabras clave— TMS320C6000, multicomputador DSP, aplicaciones distribuidas, transparencia, tiempo real. I. INTRODUCCIÓN Y OBJETIVOS U n DSP es un procesador optimizado para ejecutar algoritmos de procesado de señal numéricamente intensivos. La diversificación de uso de estos procesadores ha dado lugar a sistemas operativos de tiempo real (RTOS) para DSPs. Paralelamente, en los últimos diez han aparecido en el mercado multicomputadores basados en este tipo de procesadores. El estado del arte en multicomputadores DSP está bien representado por los desarrollos de compañías como Motorola ([10]), Sundance ([4]) o Hunt Engineering ([9]). Estos fabricantes confían en un núcleo de tiempo real en el DSP como Virtuoso ([8]) DSP/BIOS ([6]), OSE ([11]) o Diamond ([12]) por citar los más representativos. Nuestra investigación se ha llevado a cabo sobre la familia de procesadores Texas Instruments TMS320C6000 ([4]) con DSP/BIOS. DSP/BIOS es el sistema operativo de tiempo real que Texas Instruments distribuye con sus sistemas DSP y es en la actualidad el más difundido y utilizado. Se trata de un sistema pequeño, con apenas 25 Kbytes, pero su interfaz es relativamente compleja. Nuestra experiencia en el desarrollo de un reconocedor de voz indica que DSP/BIOS lleva a aplicaciones complejas difíciles de (1) Departamento de Informática, (2) Departamento de Matemáticas, Universidad de Extremadura. Escuela Politécnica. Campus Universitario. Avda. Universidad s/n. 10071 Cáceres. Correo electrónico: {llorente, juarcarl, jmrodri, jgzapata, jarico}@unes.es. comprender y mantener. Por otra parte, DSP/BIOS no proporciona soporte alguno para la construcción de sistemas distribuidos. IDSP es un framework que aborda estos dos problemas. Proporciona un API potente y sencillo que permite construir aplicaciones distribuidas DSP utilizando los servicios de DSP/BIOS según muestra la figura A. Las aplicaciones DSP habitualmente están constituidas por algoritmos que procesan la señal de forma encadenada. La característica innovadora de IDSP sobre los sistemas comerciales anteriormente citados es la transparencia a la ubicación del algoritmo. Fig. A. El framework IDSP En el siguiente apartado analizaremos la arquitectura de IDSP. En el apartado III se describe el estado actual de desarrollo del sistema, así como los retos más inmediatos. En el apartado IV se recogen las conclusiones y proyectos futuros. II. PRINCIPIOS DE DISEÑO A. El esquema de direccionamiento Nuestra aproximación a la distribución de tares DSP se basa en el siguiente modelo: Una aplicación distribuida DSP es un grafo de algoritmos que se ejecutan repartidos en un conjunto finito de máquinas. Cada nodo del grafo, llamado operador, realiza un algoritmo DSP con los datos procedentes de otros nodos, de manera que el grafo representa un flujo de datos entre operadores. Una instancia de una aplicación se denomina un grupo. La operación de creación de un grupo devuelve un identificador de grupo que es único a nivel de sistema. La Fig. B representa aplicación formada por 5 operadores. 2 ÁLVAREZ, J.M. Y COL.: IDSP: UN FRAMEWORK DISTRIBUIDO PARA MULTICOMPUTADORES DSP TMS320C6000 Fig. B. Modelo de aplicación IDSP Además de operaciones típicas DSP como puede ser una DFT, un operador puede realizar otras tareas. Tal es el caso de los servidores del sistema. Cada aplicación IDSP tiene un identificador estático único, un nombre con el que se registra en un módulo llamado registro de aplicaciones junto con la descripción de su grafo de operadores. Este módulo hace las veces de un sistema de ficheros en el que se almacenan los archivos ejecutables. Los operadores que llevan a cabo algoritmos DSP sobre flujos de señal digital se comunican típicamente mediante abstracciones denominadas canales, que pueden ser de entrada o de salida. Se caracterizan por un un plazo (timeout). Un operador permanece suspendido hasta que se completa una lectura por un canal de entrada o se agota el plazo. Para simplificar el sistema, un operador tiene un único hilo de ejecución soportado por una tarea DSP/BIOS. Típicamente, un operador constará de un bucle infinito en el que, en cada iteración, lee los canales de entrada, procesa los datos recibidos y los escribe en los canales de salida. IDSP asigna los operadores de un grupo siguiendo una estrategia de equilibrado de carga. Así, el grupo g pde la aplicación A puede tener su operador 4 en la máquina m, mientras que el grupo h de la misma aplicación puede tenerlo en la máquina n. Los operadores se comunican mediante el uso de un objeto llamado comunicador. Los mensajes se envían desde un comunicador a otro. Cada operador dispone de un conjunto de comunicadores, como ilustra la Fig. C. El número máximo de comunicadores puede cambiarse en tiempo de compilación. El índice de grupo es asignado de forma única por el sistema en el instante de creación del mismo.. El índice de operador identifica al un operador dentro de la aplicación (entre 0 y el máximo de operadores de la aplicación) y el índice de comunicador identifica al comunicador dentro del operador (entre 0 y el máximo de comunicadores por operador). En el ejemplo de la Fig. B, los operadores se identificarían entre 0 y 4, y los comunicadores del operador 2, entre 0 y 2. De esta forma, el par (gix, oix) identifica a un operador dentro del sistema. Así se logra un esquema jerárquico de identificación grupo-operador-comunicador, ilustrado en la Fig. D, que es independiente de la ubicación. Fig. D. Estrategia de direccionamiento IDSP Un flujo de datos es una secuencia de mensajes. En una aplicación de procesado del habla, por ejemplo, cada mensaje puede transportar una ventana de 256 muestras a un operador que realiza una extracción de características. Este mismo operador emitirá mensajes que consistirán en vectores de 32 enteros, etc. Un mensaje, como se aprecia en la Fig. E, consta de 4 campos: las direcciones de origen y destino, seguidos del tamaño del campo de datos y el propio campo de datos. El campo de datos también se utiliza para identificar métodos de los servidores del sistema, junto con los parámetros y resultados. Dirección Dirección origen destino Tamaño datos Datos o método Fig. E. Formato de mensaje IDSP B. Arquitectura del sistema IDSP se ha construido, al igual que DSP/BIOS, siguiendo técnicas de objetos. Entendemos un objeto como una estructura de datos junto con las operaciones sobre esos datos (métodos). Así, tareas, semáforos, buzones, etc., son objetos proporcionados por DSP/BIOS, y operadores, comunicadores, grupos, etc. son objetos IDSP. IDSP sigue un paradigma de capas o niveles que responde a la estructura de la Fig. F. Fig. C. Objetos involucrados en la comunicación Cada comunicador tiene una dirección única en el sistema que es independiente de la ubicación del operador. Esta dirección se denomina puerto. El puerto se construye mediante tres números enteros: el índice de grupo (gix), el índice de operador (oix) y el índice de comunicador (cix). Observemos que la máquina no está involucrada. Fig. F. La pila IDSP El nivel fundamental es el núcleo, que soporta las operaciones sobre los comunicadores. Permite crear, destruir y manipular comunicadores para enviar mensajes. XIV JORNADAS DE PARALELISMO—LEGANÉS, SEPTIEMBRE 2003 Por encima del núcleo, la interfaz IDSP permite la manipulación de operadores, grupos y canales. Es posible crear y destruir otros grupos y operadores Un canal es realmente la mitad de un comunicador, utilizado bien para entrada, o bien para salida de datos. El canal, al ser creado, determina en tiempo de ejecución cuál es la máquina y el canal destino. De esta manera, la interfaz de canal no utiliza direcciones, lo cual implementa la transparencia a la ubicación del algoritmo. La comunicación entre procesadores se realiza en los niveles de red y enlace. En el nivel de red se lleva a cabo el encaminamiento de mensajes . Si el destino de un mensaje se encuentra en la misma máquina, el mensaje se entrega utilizando el mecanismo de cita; de lo contrario, se pasa al nivel de enlace para que éste lo haga llegar hasta el procesador adecuado. El nivel de enlace implementa la comunicación mediante dispositivos hardware concretos, dependiendo del tipo de periféricos que estemos utilizando, por ejemplo, una combinación del EDMA y el puerto serie MCBSP. Con sólo cambiar el módulo de enlace, y sin tocar el nivel de red, es posible realizar las comunicaciones mediante otros dispositivos disponibles en arquitecturas alternativas, como puede ser el Comm-Port o el Bus Digital de Sundance (SDB) [1]. Una diferencia importante entre los objetos IDSP y DSP/BIOS es que los primeros pueden residir en máquinas diferentes. Este hecho plantea el problema de la invocación remota. Las operaciones sobre objetos remotos en sistemas distribuidos se lleva a cabo usualmente mediante variaciones de la técnica de llamada a procedimiento remoto (RPC). IDSP implementa su propio mecanismo RPC para proporcionar servicios del sistema como la creación de operadores y grupos o la solicitud de carga de una máquina. También como servicios construidos por usuario como puede ser la impresión remota de cadenas de caracteres. La Fig. G ilustra la arquitectura microkernel de IDSP. El núcleo proporciona simplemente la interfaz de comunicación mientras que la gestión de operadores y grupos se lleva a cabo en servidores RPC. 3 de operadores. Mientras hay un servidor de operadores en cada procesador DSP, hay un único servidor de grupos en todo el sistema. La máquina que alberga el servidor de grupos se denomina la máquina raíz. III. DEFINICIÓN DE INTERFACES IDSP se compone de cuatro APIs que gestionan canales, grupos, operadores y comunicadores. Ya que los operadores de un grupo se despliegan sobre los máquinas de forma aleatoria según un criterio de carga, los operadores de una aplicación no conocen a priori donde enviar sus datos. El operador 3 de la Fig. B, por ejemplo, al arrancar no conoce la ubicación física de los operadores 2, 4 y 5. El nivel de canal resuelve este problema. Cada canal de salida, en tiempo de creación, pregunta al servidor de grupos la máquina donde realmente ejecutan los operadores destino. La simplicidad del API de canales es la consecuencia de que no contempla direcciones. Esta aproximación es la adoptada por el API Diamond, pero restringida a una distribución de tareas “cableada” por la herramienta de configuración. La aproximación dinámica de IDSP posibilita, entre otras cosas, la migración de operadores en función de las circunstancias del entorno. A continuación mostramos la interfaz de canal. Int CHANNEL_create (Channel_t * ch, Uns mode, Uns Channel_Nr, Uns timeout); Int CHANNEL_send (Channel_t ch, Ptr buffer, Int nbytes); Int CHANNEL_receive (Channel_t ch, Ptr *buffer, Int *nbytes); Int CHANNEL_destroy (Channel_t ch); Las primitivas que permiten a un operador IDSP crear un grupo, arrancarlo, destruirlo o abandonarlo son las siguientes: Int Int GROUP_self GROUP_create Int GROUP_kill Int GROUP_start Void GROUP_leave El servicio de grupos es soportado en cada máquina particular por el servicio de operadores, cuya interfaz es la que sigue: Oper_t Int Void Int Void Void Int Int Fig. G. La arquitectura IDSP Los servidores RPC del sistema también encajan en el modelo de aplicación IDSP, a saber, están implementados como la instancia única de una aplicación de un único operador. Hay dos servidores RPC fundamentales, el servidor de grupos y el servidor (Void); (Int *gix, Int appCode, Void * param[]); (Int gix); (Int gix); (Void); OPER_self (Void); OPER_upgrade (Void); OPER_degrade (Void); OPER_create (Oper_t *oper, Int operCode, Int appCode, Oper_Addr_t addr, Void *param ); OPER_destroy (Oper_t oper); OPER_exit (Void); OPER_start (Oper_t oper, Oper_Addr_t addr ); OPER_kill (Oper_t oper, Oper_Addr_t addr ); La primitiva upgrade permite a una tarea DSP/BIOS convertirse en un operador IDSP y, por lo tanto, utilizar sus interfaces. La primitiva degrade la despoja de esta condición. Finalmente, el kernel proporciona la siguiente interfaz de mensajes: Int COMM_create Int COMM_destroy Int COMM_receive Int COMM_send (Comm_t *comm, Comm_Attr_t attr, Comm_Addr_t addr); (Comm_t comm); (Int cix, Comm_Addr_t *src, char *buffer, Int *nbytes); (Int cix, Comm_Addr_t dst, 4 ÁLVAREZ, J.M. Y COL.: IDSP: UN FRAMEWORK DISTRIBUIDO PARA MULTICOMPUTADORES DSP TMS320C6000 char *buffer, Int nbytes); (Int cix, Comm_Addr_t * addr, char *buffer, Int *nbytes); Int COMM_setTimeout (Int cix, Uns timeout); Int COMM_sendrec IV. U SO DE IDSP La Fig. H ilustra la estructura interna de DIARCA, un motor multiusuario de reconocimiento de voz de palabras aisladas robusto al ruido ([5]). La figura muestra a DIARCA como como una aplicación IDSP dispuesta en pipeline aunque en realidad exige una topología más compleja. Cada vez que un usuario se conecta al sevicio de reconocimiento, una nueva instancia de DIARCA, es decir, un nuevo grupo se despliega en el sistema. Las siguientes instrucciones muestran cómo esta tarea se realiza con suma facilidad y en tiempo de ejecución: GROUP_create(& gix, DIARCA_APP, params); GROUP_start ( gix); Fig. I. Módulo multicomputador PCI SMT310Q de Sundance La migración al nuevo sistema resulta relativamente costosa debido a las diferencias existentes, no sólo en el entorno de dispositivos externos que incorporan ambos sistemas, sino también entre los propios procesadores 'C6711 y 'C6201. A pesar de pertenecer a familias aparentemente cercanas de DSP, sorprenden algunas diferencias radicales, como la que supone que las arquitecturas 'C6x1x dispongan únicamente del dispositivo de acceso a memoria EDMA, no presente en los 'C6x0x, que, a cambio, disponen de otro dispositivo más simple, el DMA. También se observan grandes diferencias en la organización de la memoria, la cache, etc. Una primera versión del sistema portado está ya en funcionamiento. Trabaja en un único procesador, aunque utiliza los dispositivos de comunicación (comm-ports) para el intercambio e invocación entre tareas (realimentado hacia el mismo procesador). El paso a 2 procesadores se prevé bastante sencillo Fig. H. El motor de reconocimiento de voz DIARCA VI. CONCLUSIONES Y TRABAJO FUTURO V. DETALLES DEL HARDWARE OBJETIVO IDSP se ha implementado y probado con éxito sobre un módulo DSK (Dsp Starter Kit) TMS320C6711 [6], utilizando un codificador de audio conectado al puerto serie MCBSP y la aplicación de voz DIARCA [5], un sistema de reconocimiento de voz. El DSK TMS320C6711 únicamente dispone de un DSP 'C6711. Las pruebas del sistema de red se han hecho simulando la comunicación entre procesadores mediante el uso del puerto serie MCBSP realimentado (loopback), asistido por el EDMA de la arquitectura TMS320C6x1x. Esta misma configuración se ha probado con éxito para construir un sistema formado por dos módulos DSK idénticos. Actualmente nos encontramos portando IDSP a una arquitectura multicomputador. Concretamente estamos utilizando una tarjeta multicomputador PCI SMT310Q ([2]) de Sundance con 4 módulos SMT335 ([1]) basados en el DSP TI TMS320C6201. Este hardware, que podemos ver en la Fig. I., nos facilita diversas soluciones avanzadas para la comunicación entre procesadores. De entre ellas hemos elegido los puertos de comunicación de Sundance (comm-ports) debido a la flexibilidad de interconexión que proporcionan y a la simplicidad de su interfaz. IDSP es el primer intento conocido de desarrollar un framework distribuido para multicomputadores DSP con transparencia a la ubicación. IDSP demuestra ser un sistema eficiente para DSP en tiempo real [5]. Introduce muy poca sobrecarga y, a cambio, proporciona un conjunto de servicios indispensables para la programación de aplicaciones distribuidas de forma sencilla y fiable. La migración a entornos hardware distintos a los utilizados durante el diseño inicial es una tarea dura, pero la rapidez con que se está logrando demuestra que es un sistema bien diseñado y bien construido. Cuando se culmine la migración al sistema multicomputador, IDSP servirá como base para la construcción de un mecanismo de memoria compartida distribuida, que a su vez, apoyará una máquina virtual Java distribuida para procesadores DSP. También está previsto integrar IDSP con PONNHI ([7]). PONNHI es un núcleo POSIX para procesadores DSP 'C6000 que proporcionará una gestión más sencilla de las tareas IDSP de lo que actualmente proporciona DSP/BIOS. VII. A GRADECIMIENTOS Este trabajo está financiado por los proyectos IPR00C032 de la Junta de Extremadura y CICYT TIC99-0609 (DIARCA). VIII. REFERENCIAS [1] Sundance Multiprocessor Technology Ltd., SMT335-SMT375 User Manual (QCF42), Sundance Multiprocessor Technology Ltd., February 2001. XIV JORNADAS DE PARALELISMO—LEGANÉS, SEPTIEMBRE 2003 [2] Sundance Multiprocessor Technology Ltd., SMT310Q User Manual (QCF42), Sundance Multiprocessor Technology Ltd., November 2000. [3] www.sundance.com [4] www.ti.com [5] Díaz Martin, JC. Garcia Zapata, JL. Rodriguez Garcia, J.M., Alvarez Salgado, J.F., Espada Bueno, P. Gómez Vilda, P., DIARCA: A Component Approach to Voice Recognition, Proc. of 7th European Conference on Speech Communication and Technology, Eurospeech 2001, Aalborg, Denmark, 2001, V4, pp. 2393-2396 [6] Texas Instruments Inc., TMS320C6000 DSP/BIOS Application Programming Interface (API) Reference Guide, Application Report SPRU403D, Texas Instruments Inc., November 2001. [7] www.templario.unex.es/ponnhi [8] http://www.transtech-dsp.com/software/virtuoso.htm [9] http://www.hunteng.co.uk/ [10] http://mcg.motorola.com/us/general/CPCIC6400.pdf [11] http://www.ose.com/downloads/pdfs/products/OSEck_Final.pdf 5