Diseño y construcción de computadoras paralelas mexicanas Adolfo Guzmán Arenas Centro de Investigación en Computación, Instituto Politécnico Nacional, México a.guzman@acm.org RESUMEN. He tenido la suerte de participar en el diseño y manufactura de máquinas que contienen varios procesadores, llamadas por eso multiprocesadores o computadoras paralelas, puesto que ejecutan al mismo tiempo varios programas. La construcción exitosa de estos equipos sigue ciertos principios y reglas, y requiere de simulación y depuración cuidadosas. En el desarrollo he descubierto cómo resolver ciertos problemas: el de paralelizar un programa simbólico, o el de convertir un multiprocesador de tipo “todos hacen lo mismo” (SIMD) en otro de tipo “cada quien hace algo distinto” (MIMD) sin necesidad de cambiar el hardware (la electrónica). La narración es descriptiva, parca en detalles técnicos. 1. EL MULTIPROCESADOR AHR Y SUS DESCENDIENTES Alrededor de la década de 1971, varios grupos en México buscaron construir una computadora, es decir, un sistema con procesador, memoria, periféricos, sistema operativo y canales de comunicación, que fuese de propósito general. Un intento exitoso que conozco es el de la computadora IPN-32, que Miguel Lindig construyó en UPIICSA basado en el chip (circuito integrado de alta densidad) Intel 80286. Es esencialmente una PC que usa Unix como sistema operativo. Ha habido otros intentos en México, los que no mencionaré. 1.1 Multiprocesadores y la necesidad de paralelizar programas Estas máquinas con un solo procesador se llaman por eso monoprocesadores, y ejecutan un solo programa a la vez. Un multiprocesador puede ejecutar varios programas simultáneamente, uno por cada procesador que tenga.1 Para esto, hay dos maneras de proceder: (1) todos los procesadores ejecutan el mismo programa, pero sobre diferentes conjuntos de datos. Imagine una parte de una obra de ballet donde las bailarinas ejecutan los mismos movimientos: todas ellas levantan la pierna izquierda; luego, todas giran a su derecha... Se les conoce como del tipo SIMD («single instruction, multiple data»). (2) Cada procesador ejecuta un programa distinto. Imagine una parte del ballet donde una bailarina brinca, otra gira mientras que una tercera permanece inmóvil... Se les conoce como del tipo MIMD («multiple instruction, multiple data»). Estas máquinas son más versátiles que las del tipo MIMD, se usan en mayor número de problemas, pero requieren que el programador escriba varios programas y los sincronice para que el resultado de su ejecución sea el deseado. Es más fácil escribir la coreografía de una obra donde las diez bailarinas hacen lo mismo, que una coreografía donde cada quien ejecuta distin1 Una máquina paralela con n procesadores es más rápida que una con un solo procesador. Esta es su principal ventaja. Pero raras veces es n veces más rápida. Su ganancia en rapidez es menor que n. Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 1 de 9 tos movimientos: habrá que describir (documentar) diez ejecuciones individuales, y añadir puntos de sincronización de modo que cuando dos brinquen las otras ocho se agachen... Esto hace que el trabajo del programador se vuelva muy pesado, pues crece proporcionalmente con el número de procesadores que va a usar simultáneamente. Una manera de sacarle buen provecho a un procesador tipo MIMD, es inventar un método o algoritmo que tome un solo programa (no muchos como en (2) arriba) escrito por alguien, y lo reparta de alguna manera (lo paralelice) entre los varios procesadores del multiprocesador. En 1976, Cook [1] en Illinois inventó un método útil en muchos casos para programas numéricos, repetitivos, que trabajan con matrices y vectores. Es útil para programas que repiten los mismos cálculos sobre muchos datos, como la iteración o repetición de operaciones que indica el postulado DO del lenguaje Fortran. Mediante un análisis cuidadoso de los índices de arreglos y matrices que aparecen en el programa a paralelizar, es posible decidir qué partes del programa pueden repartirse entre cuáles procesadores, los que entonces realizan cálculos de manera independiente, con escasa comunicación entre ellos. Pero no se conocía algoritmo alguno para paralelizar programas que carecieran de índices. Ni para programas que operaran sobre objetos simbólicos,2 no numéricos. Este no se resolvió sino hasta 1976 [1] como describo a continuación. 1.2 Cómo paralelizar un programa simbólico Cuando los cálculos sobre datos simbólicos2 son extensos, conviene usar un multiprocesador. Esto requiere paralelizar el programa que hace los cálculos. El problema en general es que un procesador i va a requerir para continuar su trabajo, de algunos resultados parciales calculados por otros procesadores j, k,.. Si el procesador i ya acabó su trabajo antes de j, k,..., debe esperar a que todos ellos acaben. Es tiempo desperdiciado: el procesador i no puede continuar porque otros se lo impiden. Este problema lo resuelve la máquina AHR (§1.3) donde ningún procesador espera. La solución se revela en el siguiente ejemplo. 1.2.1 Ejemplo: un edificio en construcción con un pizarrón Un proceso paralelo generalmente usa un árbitro o “director ejecutivo” que distribuye trabajo. En una obra en construcción, podría ser el arquitecto responsable. Llegan a él los albañiles, carpinteros y otros trabajadores especializados en busca de trabajo. Él los dirige y les dice qué hacer. Esto es un sistema jerárquico, donde hay un “director de orquesta” que dice a cada quien qué hacer cuándo. El problema con sistemas jerárquicos es que el director de orquesta puede ser un cuello de botella, si varias peticiones de trabajo le llegan casi simultáneamente. Tiene que atender cada petición en secuencia (serializa las peticiones). ¿Es posible eliminar al director de orquesta, y diseñar otro sistema donde la construcción proceda aunque el director de orquesta (arquitecto responsable) esté ausente? ¿Puede haber una orquesta sin director de orquesta? ¿Una iglesia católica sin Papa? Se tendría entonces un sistema heterárquico (sin jerarquía), donde “cada quien hace lo que es menester” y no hay retrasos. La respuesta es “sí”, y la encontré en 1973 y publiqué en 1976 [4]. La explico: Para el caso de la obra en construcción, el arquitecto responsable diseña la construcción de la obra, dividiéndola en trabajos elementales3 donde se especifica claramente qué hay 2 La mayoría de los objetos que las computadoras manejan son simbólicos, no numéricos: la dirección (URL) de una página Web, el nombre de un cliente, su religión, su dirección, sus aficiones, los guisos en un restaurante... Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 2 de 9 que hacer (resultados a obtener) y qué datos o condiciones ya deben estar disponibles. Por ejemplo, para el trabajo elemental ‘colocación de puertas’ el resultado es ‘puertas colocadas’ y los prerrequisitos son ‘paredes terminadas y enyesadas o aplanadas.’ Para el trabajo elemental ‘colocar muebles de baño’ el prerrequisito es ‘tuberías y drenaje ya instalados.’ El arquitecto escribe estos trabajos elementales en tarjetas o fichas que coloca en la obra en un tablero o pizarrón. Además, cada tarjeta señala a las otras tarjetas que están esperando el resultado de esta tarjeta; o sea, que tienen como prerrequisito el resultado de esta tarjeta. Por ejemplo, la tarjeta ‘instalar tuberías de agua’ señala a la tarjeta ‘colocar muebles de baño’, porque esta segunda tarjeta requiere de la instalación de tuberías para poder proceder. También la tarjeta ‘instalar drenaje’ apunta a la tarjeta ‘colocar muebles de baño’ por la misma razón. Este trabajo de convertir un programa a otro “con tarjetas de trabajo elemental” lo realiza en la máquina AHR un compilador (realmente, un lector o cargador) cuando el programa que especifica los cálculos entra por primera vez al multiprocesador. Hecho esto, el arquitecto le dice a cada trabajador: “ve al pizarrón y busca algún trabajo (alguna tarjeta) listo para llevarse a cabo, retira la tarjeta y hazlo. Cuando lo termines, irás a las otras tarjetas apuntadas por tu tarjeta, y señalarás en ellas que tu trabajo ya ha sido hecho. Y buscarás más trabajo que puedas hacer. Eso es todo.” Y el arquitecto se retira a descansar (o se dedica a otras tareas distintas de administrar la construcción).4 En la máquina AHR se hizo otra extensión importante: cada procesador puede ejecutar cualquier operación elemental. Es como si los trabajadores de una construcción fueran universales: cualquiera puede realizar cualquier trabajo elemental: hacer zanjas, colocar puertas... Llegan los trabajadores (universales), el terreno está virgen, no hay construcción aún. Van al pizarrón y buscan trabajos. Los únicos trabajos listos para hacer son ‘cavado de zanjas’ puesto que tienen como prerrequisito ‘nada.’ Conforme alguien termina de cavar la zanja norte, indica en las tarjetas ‘colocar cimiento de la sala’ y ‘colocar cimiento del comedor’ la condición ‘ya hecha: zanja norte’. De modo que el trabajo ‘colocar cimiento del comedor’ ya puede realizarse. Por alguien más. O por el mismo trabajador que acaba de terminar su cavado de la zanja norte. Según este régimen de operación, ningún trabajador espera. Todos toman trabajo que están seguros de poder realizar, pues los prerrequisitos de estos trabajos están satisfechos. Nótese que si algún trabajador está inactivo, es porque en realidad no hay trabajo por hacer. La construcción termina cuando todos los trabajadores se aglomeran en el pizarrón, y éste está vacío, sin tarjetas: el trabajo ha concluido. El pizarrón elimina el sistema operativo. No hay director de orquesta. El sistema funciona de modo heterárquico. Una vez que entendimos cómo se podía paralelizar un programa simbólico, quisimos ser los primeros en el mundo en hacerlo, y construimos el multiprocesador del §1.3. 3 Un trabajo elemental puede considerarse indivisible, y será ejecutado por un solo procesador (un carpintero, digamos) 4 Las referencias al fin de este articulo describen cómo se maneja la recursión: cuando la ejecución de un trabajo requiere solicitar trabajo adicional. Por ejemplo, un trabajador que coloca un mueble de baño necesita que alguien más levante un muro (que no estaba explícitamente contemplado en el diseño original que el arquitecto escribió en el pizarrón). Este nuevo “muro que surge de necesidades” se especifica en una nueva tarjeta el colocador de muebles de baño, y la agrega al pizarrón, “para que alguien más lo construya.” Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 3 de 9 1.3 La construcción de un multiprocesador que usa Lisp como lenguaje principal: la máquina AHR La máquina AHR [5, 6, 7], propuesta en 1973 en México, D. F. y operacional en 1981, proporcionó datos que ayudaron a establecer que sería práctico construir computadoras paralelas para procesamiento no numérico. Su nombre es un acrónimo de Arquitecturas Heterárquicas Reconfigurables, enfatizando su arquitectura reconfigurable y de un solo nivel (heterárquica). AHR ejecuta Lisp puro en paralelo. Cada microprocesador puede ejecutar cualquier primitiva de Lisp, y la computadora puede tener hasta 64 microprocesadores del tipo Z80A. Cada uno tiene su memoria privada, y todos comparten acceso a tres memorias comunes: (1) la parrilla, donde reside el programa Lisp que se está ejecutando; (2) la memoria pasiva, que contiene datos, y (3) la memoria de variables, donde se tienen las variables y sus valores, en forma de una lista (Alist, o «association list»). Un pizarrón, implementado como un FIFO, despacha trabajos a los procesadores que lo solicitan. Al usar Lisp puro, el programador no necesita percatarse de que el programa que él escribe se estará ejecutando en paralelo. No es necesario escribir comandos paralelos explícitamente. Toda la comunicación con el usuario es a través de una máquina anfitriona, para la cual AHR es un procesador de fondo («background processor»). La arquitectura de AHR se basa en varias premisas. El sistema operativo es pequeño debido a la sincronización entre procesos que el mismo hardware realiza, mediante simples contadores. Ningún proceso se necesita comunicar explícitamente con algún otro. Un procesador nunca se bloquea mientras aún haya trabajo por hacer. Un procesador puede proceder sin desperdiciar tiempo alguno. Además, un proceso mismo nunca se bloquea: o bien no ha empezado, o si está ejecutando, corre hasta completar. Finalmente, la arquitectura AHR se construyó (figuras xx y zz), y trabajó según se predijo [8]. 1.3.1 Descendientes del multiprocesador AHR La máquina PS-2000*. Durante la construcción de AHR tuvimos la suerte de que el Prof. Kemer B. Norkin, del afamado Instituto de Ciencias del Control (Institute of Control Sciences) nos visitara, se interesara y participara en la construcción de AHR. Terminada, surgió la posibilidad de transplantar este diseño a la Unión Soviética. De modo que en 1982 visitamos Moscú Miguel Gerzso y yo, para adaptar una computadora que ellos ya habían construido (la PS-2000), a fin de hacerla trabajar según el régimen de AHR. Esto dio origen a la máquina del §1.4. Las arquitecturas paralelas de MCC. En 1981 comenzó el Proyecto Japonés de la Quinta Generación, que buscaba construir máquinas muy avanzadas, paralelas, y que hicieran cálculos simbólicos y lógicos. Las empresas estadounidenses se preocuparon, por lo que fundaron el centro de investigación privado MicroElectronics and Computer Corporation en Austin, TX, para hacer investigación avanzada y atrevida sobre hardware y software, capaz de producir máquinas que compitiesen con las de quinta generación japonesas. Dada mi experiencia con AHR, me invitaron a colaborar con ellos. De suerte que en 1986 empecé a trabajar en MCC en un nuevo multiprocesador (§1.5). En el CINVESTAV hubo un nuevo diseño heterárquico [11] en 1985, que no se construyó. Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 4 de 9 1.4 En Moscú: Conversión de una multiprocesador SIMD en otro MIMD Estamos en 1982. El procesador soviético PS-2000 consta de 64 computadoras del tipo de la DEC PDP-11 (lo que se llamaba entonces una minicomputadora). La meta era convertirlo en un multiprocesador heterárquico, como AHR, al que llamo PS-2000*. A nuestra llegada al Instituto de Ciencias de Control en Moscú ese verano, la sorpresa fue que la PS2000 era una computadora del tipo SIMD, donde cada procesador ejecuta en todo momento la misma instrucción. ¿Cómo convertirla en un procesador del tipo MIMD, donde cada procesador ejecuta una instrucción distinta? Parecía imposible, sin modificar extensamente el hardware. Pero precisamente un señalamiento del Prof. Norkin decía “no podrán modificar la electrónica ni los canales de comunicación.” Parecía que nuestra visita en el verano sería poco productiva técnicamente. Sin embargo, encontramos la solución. La solución [9, 10] consiste en desmenuzar el programa (como en §1.2.1) en sus operaciones elementales.3 Se tendrá en la parrilla (§1.3) un programa en forma de árbol donde cada nodo es una operación elemental. Entonces, el programa que reside en la unidad de control (procesador escalar) de la PS-2000 busca en su memoria (ahí coloqué la parrilla) 64 nodos que estén listos para ejecutar la operación elemental del tipo A (digamos, sen x), y despacha estos trabajos a cada uno de los procesadores vectoriales. Cuando haya menos de 64 operaciones del tipo A por hacer, algunos procesadores vectoriales ejecutarán ‘no-op’ (nada, o ‘paso esta vez’). De nuevo, se requiere que cada operación q elemental terminada indique a las operaciones que apuntan a q que el resultado ya está listo. Así se generarán nuevas tareas elementales listas para ejecutarse,5 aunque no necesariamente del tipo A que estamos ejecutando ahora. Cuando haya pocas instrucciones tipo A listas a ejecutarse (de modo que una gran mayoría de los 64 procesadores ejecutan ‘no-op’), entonces el procesador escalar procede a buscar en la parrilla operaciones elementales de tipo B, etcétera. El proceso termina cuando el procesador escalar no encuentra operación a ejecutar. De hecho, el programa “se consume” y al final, ya no existe (como es Lisp puro, el programa se convierte en el resultado). Por eso le llamamos la parrilla: es como si un pedazo de carne cruda se convirtiera en paralelo en un bistec. De esta manera cada procesador ejecuta la misma operación, pero al mismo tiempo cada procesador “hace algo distinto”, en el sentido de que esa operación pertenece a una parte distinta del programa. Así es como la PS-2000, una máquina SIMD, emula la AHR, una máquina MIMD. Esta solución permeó el software que convierte la PS-2000 en la PS-2000*. Regresamos a México en Sept. 1982 (concluido el diseño). Nuestros colegas en Moscú terminaron la programación un tiempo después. 1.5 En Texas: La máquina paralela de MCC MCC desarrolló investigación en máquins paralelas para manipular datos no numéricos. Mi trabajo (19866-88) en MCC [12, 13, 14] se abocó a simular en máquinas de Lisp varias arquitecturas donde variaba la jerarquía (distribución) de memorias. Se contaba con un poderoso simulador que tomaba un programa de Lisp, lo compilaba a instrucciones de máquina y simulaba éstas, en paralelo, tomando en cuenta tiempos de conexión, etc. Desafortunadamente, el apoyo económico a MCC de sus socios fundadores menguó, y MCC canceló la División de Procesamiento Paralelo. La máquina no se construyó. 5 Una instrucción elemental está lista para ejecutarse cuando todos sus argumentos ya están evaluados.. Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 5 de 9 1.6 En EEUU: Máquinas de Lisp con un solo procesador Cerca de 1980, más o menos simultáneamente con la construcción de la máquina AHR, Richard Greenblatt y otros [2] estaban construyendo en MIT una máquina de Lisp de un solo procesador, basado en un chip que contiene un procesador de Lisp. De aquí salieron las máquinas de Lisp de las empresas Symbolics, Lambda Machines y Texas Instruments, que tuvieron un cierto éxito comercial pero luego decayeron sin dejar descendientes. De hecho las simulaciones en MCC (§1.5) fueron hechas en máquinas Lambda y Symbolics. 1.6.1 ¿Por qué no tu vieron éxito las máquinas de Lisp? “La moneda mala substituye del mercado a la buena”, dice la Ley de Gresham en Economía. De la misma manera, “para que una máquina especializada compita con éxito con una máquina general, la primera debe ser un orden de magnitud más rápida, o más económica, o menos consumidora de energía, o algo” parece ser una ley que rige para máquinas especiales. Por ese tiempo (1987) apareció el compilador de Kyoto Common Lisp, de distribución gratuita, que hizo que las estaciones de trabajo Sun pudiesen ejecutar bien Lisp. Entraron a competir contra las máquinas de Lisp. Aunque éstas fueron especialmente diseñadas para ejecutar Lisp, la ley anterior causó que Sun las hiciera obsoletas. 1.6.2 Diseño y construcción de chips especializados en México La máquina de Lisp (§1.6) de un solo procesador tenía a éste en un solo chip, al igual que la AHR (§1.3), donde el procesador de Lisp era la microcomputadora Z80A con hardware adicional hecho por nosotros. Esta tarea de construir circuitos integrados específicos, especiales, continúa en nuestra industria. En México, el CINVESTAV-Guadalajara ha elaborado un buen número de chips, casi todos ellos para firmas de alta tecnología. 2. OTRAS MÁQUINAS PARALELAS MEXICANAS Describo brevemente otros proyectos de máquinas paralelas en los que he participado. 2.1 La máquina 1-CIC-16: un cluster de estaciones de trabajo En 2001 decidimos sustituir la computadora paralela IBM SP-2 del CIC por otra de diseño más reciente, más poderosa. Una alternativa a comprar un equipo comercial era diseñar y construir nuestra máquina. El Laboratorio de Electrónica Digital del CIC apoyaba esta opción. La decisión se inclinó por construir un cluster de 16 estaciones de trabajo (servidores PC con bastante memoria y disco), unidas por un conmutador («switch») de alta velocidad que efectuaba la transmisión de mensajes (datos) de un procesador a otro. Este conmutador no se accedía mediante operaciones de entrada y salida (las que generan interrupciones que sacan de memoria principal6 al proceso que solicita transmitir datos). En vez de operaciones de E/S, se usa el canal de acceso directo a la memoria (DMA) del procesador. El conmutador roba ciclos de memoria al procesador, éste se queda “congelado” mientras 6 Sacar un proceso de memoria principal a memoria secundaria («swapping») y restaurarlo después toma de 50 a 100 milisegundos, por lo que el conmutador descrito ahorra gran cantidad de tiempo y resulta muy rápido en la transmisión de información. Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 6 de 9 el conmutador hace la transferencia entre la memoria del procesador congelado y la de algún otro procesador, al que también congela. No hay interrupción a los procesadores involucrados. La ventaja de esto es que Unix no saca de memoria principal a los procesos implicados. Antes de construir el nuestro, fuimos al Laboratorio de Investigación NEC en Princeton, NJ, cuyo subdirector entonces era David Waltz (anterior Director General de Connection Machine Co.) quien nos dio acceso al diseño de sus clusters para entenderlos mejor. La máquina se construyó en 2002 en el CIC (Osvaldo Espinosa) con 16 procesadores, y actualmente se encuentra en operación (ver figura xx). 2.2 En Querétaro; Medidores precisos de flujo En 2003 tuve el agrado de participar en el diseño de una máquina rápida y precisa para medir la cantidad de líquidos y gases que pasa por un tubo grande (como un oleducto). Estas máquinas ya existían en el mercado, y de hecho Pemex las usa bastante. El CIATEQ deseaba un producto mexicano que fuese una alternativa a los existentes. El líder fue el Dr. José Pineda: comunicación de datos, medición y sensores, electrónica de acoplamiento, y diseño de la arquitectura de cómputo (que me tocó a mí). Los programas que calculan el flujo ya estaban hechos. Se usó el procesador digital de señales DSP TMS320C5509 “A” de Texas Instruments, y de hecho necesitamos dos, por razones de redundancia y confiabilidad [16]. El CIATEQ está evaluando la conveniencia de construirlo. 2.3 Principales aportaciones de este trabajo A. Paralelización del trabajo simbólico sin necesidad de árbitro (§1.2). Es posible construir un multiprocesador sin administrador central de las tareas a realizar. B. Construcción de un multiprocesador (§1.3) que opera según (A). C. Cómo convertir un multiprocesador tipo SIMD en otro tipo MIMD sin necesidad de modificar el hardware (§1.4). 2.4 Conclusiones Es factible construir máquinas paralelas, pero debemos atender la ley del §1.6.1. Las computadoras aún procesan datos no simbólicos con menos generalidad, eficiencia y con mucho menos hardware especializado que para procesar números. Hay bastante brecha que cerrar. Los procesadores más rápidos del mundo son actualmente los paralelos. El procesador IBM Blue Gene L tiene un desfogue de 70.72 teraflops (trillones de operaciones de punto flotante por segundo; marzo 2005), con 32,768 procesadores [3] y 8 terabytes de memoria. El segundo más rápido es el Columbia de Silicon Graphics, con 51.87 teraflops. El tercero es el Simulador de la Tierra de NEC, con 35.86 teraflops. Mateo Valero está construyendo en España el computador xxx que desfoga xxx teraflops. 2.5 Referencias Mis trabajos, como {30}, pueden consultarse en http://alum.mit.edu/www/aguzman 1. Cook. University of Illinois. Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 7 de 9 2. Máquina de Lisp de R Greenblatt u otros. 3. IEEE Spectrum, Feb. 2005, página 15. El multiprocesador mexicano AHR para Lisp 4. {30} Guzmán, A. and Segovia, Raymundo. A Parallel Reconfigurable LISP Machine. (1976) Proceedings of the International Conference on Information Science and Systems, 207-211. August 19-24. University of Patras, Greece. Describe la estructura y características de un nuevo tipo de computadora que utiliza LISP como su lenguaje máquina y realiza tanto procesamiento en paralelo como es posible. 5. {47} Guzmán A. A Parallel Heterarchical Machine for High Level Language Processing. (1981) In Languages and Architectures for Image Processing. M. J. B. Duff y S. Levialdi (eds). Academic Press. 230-244. Also: Proc. 1981 International Conference on Parallel Processing, 64-71. 6. {51} Guzmán, A. Computadora Mexicana de Procesamiento en Paralelo. Información Científica y Tecnológica, Vol. 3, No. 48, 42-43. 1982. Artículo de divulgación. 7. {67} Guzmán A. AHR: A Parallel Computer for Pure Lisp. (1988) In Parallel Computation and Computers for Artificial Intelligence, J. S. Kowalik (ed.), 201-222. Kluwer. Also: MCC Technical Report PP 355 86, MCC. 8. {53} Norkin, Kemer y Guzmán, Adolfo. Diseño y Construcción de una Máquina Paralela Heterárquica: Reporte final del proyecto AHR. (1982) Reporte técnico AHR 82 21, Laboratorio AHR, IIMAS-UNAM. (En inglés) Trabajos sobre el multiprocesador soviético PS-2000* 9. {56} Guzmán A., Gerzso, M., Norkin, K. B., and Vilenkin, S. Y. The Conversion via Software of a SIMD Processor into a MIMD Processor. PS2000, an Array Processor, becomes AHR, a general purpose LISP machine. (1985) In Computer Architectures for Spatially Distributed Data, H. Freeman y G. Pieroni (eds), Springer-Verlag. 121-137. 10. {63} Guzmán A.; Gerzso, M.; Norkin, K.; Logunova, N.; Vilenkin, S.; y Kuprianov, B. Diseño Funcional de un Intérprete Lisp para la Computadora PS-2000 SIMD. (1983) Reporte Técnico AHR 83 24, IIMAS. En inglés. Diseño de un nuevo procesador mexicano heterárquico 11. {61} Norkin, K. B., y Guzmán A. Especificaciones Funcionales y Diseño Preliminar de HECTOR, una Heterarquía de Microprocesadores. (1985) Reporte Técnico. Departamento de Ingeniería Eléctrica, CINVESTAV. Arquitecturas paralelas en EE.UU 12. {68} McGehearty, P., and Guzmán A. Hierarchical Parallel Architectures for Symbolic Processing. (1986) MCC. Technical Report PP-387-86. 13. {69} Guzmán A., Krall, E., McGehearty, P., and Bagherzadeh, N. Measurement of Symbolic Applications on a Parallel Architecture. (1987) Tech. Rep. PP-076-87, MCC. 14. {70} Guzmán A., Krall, E. J., McGehearty, P. F., and Bagherzadeh, N. Performance of Symbolic Applications on a Parallel Architecture. (1987) Technical Report PP-163-87, MCC. Also: International Journal of Parallel Programming, 16, 3, June. La construcción de un multiprocesador con Unix como sistema operativo 15. (LA CONSTRUCCION DEL 1-CIC-16 CLUSTER DE PCS) Diseño de un multiprocesador para medir flujo de hidrocarburos Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 8 de 9 16. {157} Adolfo Guzmán. (2003) Computador de flujo con dos procesadores DSP “Texas Instruments” modelo TMS320C5509A. Informe AGA 03.06.26, Proyecto 280157. Reemplaza al Informe AGA 03.06.05. CIATEQ-CONACYT, Querétaro, México. Diseño y construcción de computadoras paralelas mexicanas. Adolfo Guzmán Arenas. 13 nov. 15 9 de 9