277 Castellón, Septiembre 2008 Una Implementación Eficiente de Algoritmos de Encaminamiento Distribuido para Redes dentro del Chip Samuel Rodrigo, José Flich y José Duato1 Resumen— El diseño de redes dentro del chip para procesadores con varios núcleos introduce nuevas limitaciones como el área, consumo de energı́a y latencias bajı́simas. Aunque el uso de topologı́as regulares (como las mallas bidimensionales) está extendido, varias causas como errores de fabricación, problemas de fiabilidad o la necesidad de particionamiento (virtualización, dominios de coherencia) y aislamiento del tráfico, pueden inducir topologı́as irregulares. En estas situaciones se necesita un encaminamiento eficiente. Aunque el uso de tablas de encaminamiento es flexible, esta solución incrementa drásticamente el consumo de energı́a, el área y la latencia. En este artı́culo proponemos el LBDR (Logic-Based Distributed Routing) como un método de encaminamiento para el cual no hace falta el uso de tablas de encaminamiento. LBDR permite aplicar la mayorı́a de algoritmos de encaminamiento usando para ello una lógica mı́nima en topologı́as irregulares (y regulares, por supuesto). Los resultados de las evaluaciones muestran que con LBDR los algoritmos de encaminamiento consiguen el mismo rendimiento que cuando se usan tablas de encaminamiento con un coste menor en area, consumo de energı́a y latencias. Palabras clave— Redes dentro del chip, Encaminamiento distribuido, Lógica, Chips multinúcleo. I. Introducción L AS arquitecturas de procesadores con varios núcleos comienzan a ser de uso generalizado para el diseño de procesadores en varios mercados. Al encontrarse con limitaciones de rendimiento en soluciones de un sólo núcleo, la industria está cambiando al paradigma de diseño de varios núcleos integrados en un mismo chip. Aunque el número de núcleos en los diseños actuales es bastante pequeño (de 2 a 8 núcleos por chip) se prevee una tendencia al alza. Un ejemplo es el chip Teraflop de Intel, anunciado recientemente, que contiene hasta 80 núcleos [1]. Tal cantidad de núcleos en la arquitectura requiere una red de interconexión de alto rendimiento para ofrecer una comunicación eficiente entre todos los núcleos y sus respectivos dispositivos de memoria. Las implementaciones actuales están basadas en estructuras de anillo o bus (por ejemplo, el procesador Cell [2]). Sin embargo, estas topologı́as resultan ineficaces al convertirse en cuellos de botella del sistema mientras la cantidad de núcleos siga incrementando. Para arquitecturas con un gran número de núcleos homogéneos, una topologı́a de malla bidimensional (ver Figura 1.a) es adecuada debido a su 1 Grupo de Arquitecturas Paralelas, Dpto. de Informática de Sistemas y Computadores, Universidad Politécnica de Valencia, e-mail: [email protected], {jflich, jduato}@disca.upv.es. distribución directa en la superficie plana del chip. Éste es el caso del chip Teraflop de Intel. Se ha investigado mucho en redes fuera del chip y la mayor parte de los mecanismos, técnicas y métodos se pueden aplicar a redes dentro del chip. Sin embargo existen restricciones fı́sicas que no se tenı́an en cuenta en el dominio de las redes fuera del chip. En particular, cuando se afronta el diseño de una red dentro del chip hay que tener en cuenta los requerimientos de área, consumo y latencia. Por ejemplo, el rendimiento de la red se mide normalmente en términos de latencia del paquete y productividad de la red. Dentro del contexto de las redes dentro del chip, se requiere unos valores de latencia lo más bajos posibles ası́ que cada etapa se ha de optimizar con mucho cuidado. Para ello, se suele usar encaminamiento basado en lógica (por ejemplo, Dimension-Order-Routing, DOR) como la solución preferida para encaminar paquetes con un retraso mı́nimo. En general, la soluciones basadas en mallas bidimensionales y este tipo de encaminamiento ofrecen buenos resultados en latencia, consumo y área requerida. Pero nos enfrentamos también a un tema que adquiere mayor importancia en redes dentro del chip y arquitecturas multiprocesador, la tolerancia a fallos. Debido a la gran escala de integración, pueden aparecer varios problemas relacionados con la fiabilidad en la comunicación. Problemas como el ruido proveniente de la fuente de alimentación o interferencia de señales son sólo algunos de los inconvenientes a superar. Además hay que tener en cuenta los defectos de fabricación, como por ejemplo, núcleos, cableado o conmutadores no operativos. En todos estos casos, aun a pesar de tener componentes no funcionales dentro del chip (de forma temporal o permanente), el resto todavı́a sigue siendo funcional. Además a diferencia de las redes fuera del chip, no es posible reemplazar la parte afectada. Desde el punto de vista de la red, nos enfrentamos a una topologı́a irregular en vez de la regular original y la capa de encaminamiento debe tener esto en cuenta. Podemos ver ejemplos de estas topologı́as en las Figuras 1.b y 1.c. Las arquitecturas multiprocesador ofrecen a su vez nuevos caminos a explorar. Para poder aprovechar la gran cantidad de núcleos dentro del chip y dado que las aplicaciones no suelen aprovechar el paralelismo, la solución pasa por la virtualización del chip. En un sistema virtualizado los recursos se reparten entre las Actas de las XIX Jornadas de Paralelismo, pp. 277-282, 2008. ISBN: 978-84-8021-676-0 278 XIX Jornadas de Paralelismo Fig. 1. Ejemplo de topologı́as regulares (a) e irregulares (b-d). diferentes máquinas virtuales. Aunque el concepto de virtualización no es precisamente nuevo, su aplicación en redes dentro del chip y multiprocesadores se convierte en un reto. La red debe garantizar el aislamiento del tráfico entre regiones lo que conlleva a la aparición de subregiones con topologı́a irregular dentro de la malla original. Como ejemplo podemos ver la Figura 1.d donde 3 regiones diferentes conviven en una misma malla. El encaminamiento puede implementarse de dos formas diferentes: encaminamiento fuente y distribuido. En el encaminamiento fuente, el nodo emisor calcula el camino a seguir y lo guarda en la cabecera del paquete. Como la cabecera se debe transmitir por la red, consume ancho de banda. El chip Teraflop de Intel usa este tipo de encaminamiento. En el encaminamiento distribuido, sin embargo, cada conmutador decide el próximo salto que debe realizar el paquete mientras viaja por la red. La cabecera del paquete, en este caso, sólo contiene el nodo destino. El encaminamiento distribuido se puede implementar de diversas formas. En topologı́as regulares se usa un encaminamiento basado en circuiterı́a con lógica combinacional, que calcula el puerto de salida en función de los nodos fuente y destino y el estado de los puertos de salida. La implementación es muy eficiente en términos de área y latencia, pero el algoritmo es totalmente dependiente de la topologı́a y la estrategia de encaminamiento usadas. Para tratar con topologı́as irregulares existe una solución propuesta, las tablas de encaminamiento implementadas en los conmutadores. La función de cada tabla es guardar para cada nodo destino un puerto de salida relacionado. Esta técnica puede ser extendida para encaminamiento adaptativo, donde se guardan varias salidas en cada entrada de la tabla. La ventaja del encaminamiento basado en tablas es que puede ser implementado en cualquier topologı́a con cualquier algoritmo de encaminamiento, incluidos algoritmos orientados a tolerancia a fallos. Sin embargo, la mayor desventaja es que esta solución está implementada en memorias, no siendo posible escalar en términos de latencia, consumo de energı́a y área, siendo impracticables para las redes dentro del chip. Es posible reducir el tamaño de la tabla de encaminamiento en algunos entornos, como por ejemplo, el caso de sistemas embebidos o de aplicaciones especı́ficas, donde el patrón de comunicación y el tráfico se pueden predecir de antemano. No obstante, esto no es posible aplicarlo en procesadores de propósito general. En este artı́culo, proponemos un mecanismo simple que permite la implementación de algoritmos de encaminamiento distribuido en topologı́as irregulares sin necesidad de utilizar tablas de encaminamiento en los conmutadores o nodos fuente. Este mecanismo, que llamamos LBDR, consiste en el uso de 3 bits por puerto de salida y una lógica implementada a base de varias puertas lógicas en cada conmutador. El resto del artı́culo se organiza de esta forma. La siguiente sección, II, nos describe el entorno del sistema donde se puede aplicar el mecanismo. Seguidamente, en la sección III, se describe el mecanismo a fondo. Luego, en la sección IV, se presentan los resultados de las evaluaciones que han sido realizadas y por último se concluye el artı́culo con un apartado de conclusiones, en la sección V. II. Entorno El mecanismo LBDR se puede aplicar en redes que utilizen cualquier mecanismo de conmutación wormhole o virtual-cut through. Además no hay necesidad de canales virtuales, aunque son perfectamente aplicables en aquellas situaciones que lo necesiten. No obstante, y para simplificar, nos vamos a centrar en una red que asume conmutación wormhole sin canales virtuales. Los mensajes (o paquetes en conmutación virtual cut-through) se encaminan en base a las coordenadas X e Y del destino final incluidos en la cabecera del mensaje (Xdst y Ydst ), y cada conmutador, a su vez, conoce sus propias coordenadas X e Y (guardadas en los registros Xcurr y Ycurr en cada conmutador). El mecanismo LBDR se puede aplicar a una combinación de topologı́as y algoritmos de encaminamiento con las siguientes caracterı́sticas que detallamos a continuación. Como ya se avanzó en la introducción, la topologı́a tı́pica donde se aplica la red es una malla bidimensional, originalmente una topologı́a regular, pero que puede derivar en topologı́as irregulares debido a ciertas causas. Todas estas topologı́as comparten una misma propiedad: todos los nodos (asumiendo que hay un nodo por cada conmutador) se pueden comunicar con el resto de nodos a través de una ruta 279 Castellón, Septiembre 2008 Fig. 2. Algoritmos de encaminamiento representados en malla 2D y topologı́a irregular. mı́nima definida en la topologı́a original de malla (ver Figura 1.a). El mecanismo LBDR se puede aplicar en todas las topologı́as que cumplan esta propiedad. En el caso de que exista una ruta no mı́nima entre cualquier par de nodos, el mecanismo no es aplicable. Un algoritmo de encaminamiento determinista (o parcialmente adaptativo) sin dependencias cı́clicas entre sus enlaces o buffers intermedios se puede representar como un conjunto de restricciones de encaminamiento. Como ejemplo, en la Figura 2 podemos ver las restricciones de encaminamiento definidas para los algoritmos de encaminamiento XY y U D (up*/down*) [4] en una topologı́a de malla bidimensional y una topologı́a irregular con forma de p. Cada flecha indica una restricción y básicamente, prohibe el uso de dos canales consecutivos a cualquier paquete de forma que las rutas empleadas por cada par de nodos nunca pasarán por una restricción de encaminamiento. Para su simplicidad, los puertos se etiquetan como N (Norte), E (Este), W (Oeste) y S (Sur). Ası́, por ejemplo, en el primer conmutador situado en la esquina izquierda superior de la Figura 2.a hay una restricción SE, es decir, se prohibe usar el canal del puerto E si el paquete viene del puerto S. Como también se puede apreciar en la Figura 2.b, el algoritmo de encaminamiento XY sólo es aplicable en una topologı́a regular, ya que hay algunos pares de nodos que no se pueden comunicar. Algoritmos de encaminamiento, que en cambio, son independientes de la topologı́a aplicada como U D, son perfectamente aplicables. Llegados a este punto hay que aclarar, que si bien el mecanismo LBDR se puede aplicar con cualquier algoritmo de encaminamiento que se pueda representar con las restricciones formadas a partir de dos canales consecutivos, todas estas restricciones deben contener un canal de cada uno de estos dos conjuntos: {N,S} y {E,W}. Por ejemplo, no está permitido el uso de una restricción EW . En otras palabras, las restricciones de encaminamiento sólo impiden algunos cambios de dirección. La razón es que permitir el uso de restricciones como W E, EW , N S, SN , SS o N N fuerzan la necesidad de una ruta no mı́nima. En cambio, si nos fijamos en los algoritmos de encaminamiento representados en la Figura 2, todos cumplen esta condición. Otros algoritmos de encaminamiento como SRh [3], SRv [3], FX [5] o Turn Model [6] también cumplen estas condiciones, ası́ que son perfectamente aplicables. III. Descripción del LBDR Las Figuras 3.a y 3.b nos muestran los detalles del LBDR. Se utilizan 3 bits por cada puerto de salida en el conmutador, haciendo un total de 12 bits. El valor de estos bits depende de la topologı́a y el algoritmo de encaminamiento implementado. Los bits se agrupan en dos conjuntos: bits de encaminamiento y bits de conectividad. Los bits de encaminamiento determinan las opciones de encaminamiento que pueden tomarse, mientras que los bits de conectividad indican como se conecta un conmutador a sus vecinos. Si nos centramos en los bits de encaminamiento, por ejemplo, para el puerto de salida E, tenemos los bits Ren y Res . Estos bits indican si los paquetes que se encaminen por el puerto de salida E, luego pueden encaminarse, respectivamente, bien por el puerto de salida N o S en el próximo conmutador. De esta forma, para el puero de salida N etiquetaremos los bits como Rne y Rnw , para el puerto de salida W tenemos Rwn y Rws , y para el puerto de salida S, los bits Rse y Rsw . En cuanto a los bits de conectividad, cada puerto de salida tiene un sólo bit, definido como Cx , que indica si existe conectividad en el conmutador por el puerto x. Se etiquetan como Cn , Ce , Cw y Cs . La lógica de encaminamiento del LBDR se divide en 2 partes (mirar Figura 3). La primera parte calcula la posición relativa al destino del paquete. Para ello, se compara Xcurr y Ycurr , que indican las coordenadas actuales, con Xdst y Ydst , que indican las coordenadas del nodo destino. A la salida de esta lógica se obtiene como mucho dos señales activas (por ejemplo, si el paquete va destinado al cuadrante N W entonces las salidas N ′ and W ′ se activan). Cabe observar que se excluye de la lógica los paquetes destinados al puerto local del conmutador. Una vez se han calculado las señales N ′ , E ′ , W ′ y ′ S entra en juego la segunda parte de la lógica. Consiste en cuatro unidades lógicas, una por cada puerto de salida, compuestas cada una por dos inversores, cuatro puertas AND y una puerta OR. Como to- 280 XIX Jornadas de Paralelismo Fig. 3. El mecanismo LBDR. das son similares, vamos a centrarnos en describir la lógica para el puerto de salida N . El puerto de salida N se puede considerar como opción de encaminamiento si una de las tres condiciones siguientes se cumple (adicionalmente, el bit de conectividad Cn se consulta para filtrar el puerto N ): • • • El destino del paquete está en la misma columna (N ′ × E ′ × W ′ ). El destino del paquete está en el cuadrante N E y el paquete se podrı́a encaminar por el puerto E en el próximo conmutador accesible por el puerto N (N ′ × E ′ × Rne ). El destino del paquete está en el cuadrante N W y el paquete se podrı́a encaminar por el puerto W en el próximo conmutador accesible por el puerto N (N ′ × W ′ × Rnw ). Se puede observar, por ejemplo, que a la salida las señales N y E pueden estar activas al mismo tiempo. Dado este caso, es tarea del conmutador y su unidad de control decidir que opción escoger, dependiendo de la adaptividad permitida o si el algoritmo de encaminamiento es determinista. El mecanismo LBDR consigue los mismos resultados de rendimiento con la mayorı́a de algoritmos de encaminamiento, como por ejemplo, XY y U D. Sin embargo, hay situaciones con algoritmos de encaminamiento más avanzados (como SR) donde se han detectado ineficiencias. Podemos ver un ejemplo en la Figura 3.c. Pongamos como caso, que un paquete se envı́a desde el nodo 1 al nodo 8. El conmutador en el nodo 1 decide descartar el puerto de salida S porque el bit Rsw no está activo (hay una restricción N W en el próximo conmutador si se encamina por el puerto S). Sin embargo, en este caso, la ruta 1-59-8 es válida, pero estamos reduciendo la adaptatividad. Aunque el mecanismo LBDR funciona correctamente se produce una pérdida de prestaciones que puede ser inaceptable. Para ello, en la siguiente subsección, proponemos una extensión del mecanismo para poder solucionar este problema. Sin embargo, hay que tener en cuenta, que usando un algoritmo de encaminamiento como U D, este problema desaparece. También es importante incidir que sólo los bits que se refieren a restricciones de encaminamiento existentes se ponen a cero y el resto a uno, incluso para aquellos conmutadores que no existen realmente en la topologı́a. El bit de conectividad, en estos casos, sirve de filtro, como se ha dicho anteriormente, para no incurrir en rutas no válidas. El mecanismo es libre de bloqueos si y sólo si el algoritmo de encaminamiento representado lo es. Si el paquete no atraviesa ninguna restricción de encaminamiento no se formarán ciclos. Los bits de encaminamiento Rxy aseguran que no se atraviesa ninguna restricción. La conectividad, a su vez, está garantizada ya que que el mecanismo LBDR usa cualquier ruta mı́nima que el algoritmo de encaminamiento permita. A. LBDRe, el mecanismo extendido En la extensión a nuestro mecanismo, denominada LBDRe, se mantienen los mismos bits tanto de conectividad como de encaminamiento anteriores. Sin embargo, se añaden 4 nuevos bits por puerto de salida. Los 2 primeros bits se etiquetan como R2xy e indican si el paquete puede encaminarse por la dirección y dos conmutadores más alla del actual si se encamina por la dirección x. Por ejemplo, el bit R2ne nos indica si podemos hacer un cambio de dirección al E en el conmutador localizado a dos saltos más allá en la dirección N . Estos bits tienen un significado parecido a los que se usan en LBDR, sólo que gracias a estos se permite una visibilidad de dos saltos al conmutador actual. Sin embargo, al contrario que los bits anteriores, no deben estar activos si se refieren a un conmutador inexistente. Los siguientes bits se etiquetan como RRxy e indican si existe una restricción de encaminamiento entre los canales x y y en el conmutador actual. Estos bits se necesitan para evitar la formación de ciclos, como se detalla en un ejemplo más adelante. Adicionalmente, el conmutador necesita cinco señales internas etiquetadas como ipN , ipE, ipW , ipS y ipL para indicar el puerto de entrada por donde el paquete ha sido encaminado. La primera parte de la lógica ha aumentado un poco comparada con la del mecanismo. En particular, basándose en las coordenadas X e Y del conmutador actual y el destino del paquete se calculan las direcciones relativas N ′ , E ′ , W ′ y S ′ . Además, se calculan 4 señales adicionales: N 2, E2, W 2 y S2. Estas señales se activan si el destino del paquete está a dos saltos más allá de la dirección correspondiente 281 Castellón, Septiembre 2008 Fig. 4. Análisis comparativos de área, consumo de energı́a y latencia. (si se activa N 2 debemos hacer dos saltos en la dirección N para acercarnos a nuestro destino). Esta parte también es responsable de invalidar los posibles puertos de salida que tengan una restricción de encaminamiento. Aquı́ es donde entran en juego los bits RRxy . La lógica requiere 2 inversores, 3 puertas AND y una puerta OR por cada puerto de salida. Las señales a la salida se etiquetan como N ′′ , E ′′ , W ′′ y S ′′ . La segunda parte evalúa las opciones de encaminamiento tanto en el próximo conmutador como 2 saltos más allá. Como ejemplo, para el caso del puerto de salida N , será una opción válida si se cumple alguna de las siguientes condiciones: • • • • • El destino del paquete está en la misma columna (N ′ × E ′ × W ′ ). El destino del paquete está en el cuadrante N E y el paquete se podrı́a encaminar por el puerto E en el próximo conmutador accesible por el puerto N (N ′ × E ′ × Rne ). El destino del paquete está en el cuadrante N W y el paquete se podrı́a encaminar por el puerto W en el próximo conmutador accesible por el puerto N (N ′ × W ′ × Rnw ). El destino del paquete está en el cuadrante N E y el paquete se podrı́a encaminar por el puerto E en el conmutador 2 saltos más allá, accesible por el puerto N (N 2 × E ′ × R2ne ). El destino del paquete está en el cuadrante N W y el paquete se podrı́a encaminar por el puerto W en el conmutador 2 saltos más allá, accesible por el puerto N (N 2 × W ′ × R2nw ). Finalmente, el bit de conectividad Cn y el filtro de restricción de encaminamiento (N ′′ ) se usan para filtrar este puerto. Para el resto de puertos, el funcionamiento es similar. Gracias a esta extensión se resuelve el problema de ineficiencia encontrado en el mecanismo LBDR. Si nos fijamos en la Figura 3.c, ahora existen dos posibles rutas desde el nodo 1 al nodo 8. En el conmutador del nodo 1, ahora, el puerto de salida S es una opción válida ya que el bit R2sw está activo por lo tanto la señal S2 se activará. También se aprecia que el conmutador del nodo 5 tendrá el bit RRnw activo, impidiendo que se pueda tomar el puerto de salida W que podrı́a llevar a un bloqueo. IV. Resultados y Evaluaciones A. Rendimiento Nuestro primer objetivo es comprobar si con el mecanismo los algoritmos de encaminamiento se comportan con el mismo rendimiento que usando tablas de encaminamiento. Para ello hemos usado el simulador Noxim [7]. En todas las simulaciones se asume conmutación wormhole, con buffers de 4 flits y paquetes de 32 flits. Cada flit tiene un tamaño de un byte. Se han evaluado los algoritmos de encaminamiento XY , U D, y SRh en un malla bidimensional 8 × 8 mesh y con diferentes topologı́as irregulares. Se ha utilizado tráfico uniforme. Fig. 6. Rendimiento de varios algoritmos de encaminamiento en una malla. En la Figuras 6 y 7 podemos ver el rendimiento obtenido para algunos de los casos analizados. Se puede extraer conclusiones para todos los casos evaluados. Se puede ver que tanto para el algoritmo XY (en la malla completa) como para U D y SRh (en la malla regular y topologı́as irregulares) se consigue un rendimiento que iguala al obtenido con la implementación tradicional con tablas de encaminamiento. Cabe destacar el caso del algoritmo SRh con 282 XIX Jornadas de Paralelismo Fig. 5. Análisis comparativos de área, consumo de energı́a y latencia. V. Conclusiones Fig. 7. Rendimiento de varios algoritmos de encaminamiento en topologı́a irregular. LBDR, pero con la extensión se consigue igualar las prestaciones. B. Área, Consumo de Energı́a y Latencia El segundo objetivo de nuestra evaluación es analizar el impacto en el área, consumo de energı́a y la latencia del mecanismo comparado con el uso de tablas de encaminamiento. Para la evaluación los módulos se han diseñado y sintetizado usando Synopsys Design Compiler en una librerı́a de tecnologı́a de 90nm de TSMC [8]. Se ha considerado una malla de 8 × 8. Podemos ver los análisis comparativos en las Figuras 4 y 5. Como era de esperar, LBDR, ofrece un ahorro en términos de área, consumo de energı́a y latencia comparado con tablas de encaminamiento (RT). De hecho, LBDR consume un total del 5% del área original consumida por las tablas de encaminamiento y consume aproxidamente 20 veces menos energı́a. En términos de latencia, los factores no son tan grandes, pero a media que aumenta el número de nodos el ahorro puede ser importante. En el impacto sobre el conmutador se puede observar que en términos de área y consumo de energı́a el mecanismo representa un tanto por cien bastante pequeño respecto del total. En este artı́culo se ha presentado el mecanismo LBDR como un sustituto eficiente para la implementación de la mayorı́a de algoritmos de encaminamiento distribuido en topologı́as irregulares (y regulares) sin tener que usar tablas de encaminamiento en redes dentro del chip. Además se ha analizado el mecanismo con más bits de visibilidad adicionales, no obteniendo una ganancia aparente con cualquier algoritmo. Aunque la extensión, LBDRe, saca el potencial al máximo de los algoritmos en topologı́as irregulares, se aconseja usar el mecanismo, LBDR, debido a su mayor simplicidad. Con el algoritmo de encaminamiento adecuado (XY y/o U D) las pérdidas en rendimiento no existen. Agradecimientos El presente trabajo ha sido financiado mediante el proyecto CONSOLIDER-INGENIO 2010 con registro CSD2006-00046, el proyecto CICYT con registro TIN2006-15516-C04-01 y por la Junta de Comunidades de Castilla-La Mancha con registro PCC080078. Agradecimientos también a Maurizio Palesi por su ayuda prestada en las evaluaciones. Referencias [1] Y. Hoskote, S. Vangal, A. Singh, N. Borkar y S. Borkar, A 5-GHz Mesh Interconnect for a Teraflops Processor, IEEE Micro Magazine, Sept-Oct. 2007, pp. 51-61. [2] J.A. Kahle, M.N. Day, H.P. Hofstee, C.R. Johns, T.R. Maeurer y D. Shippy, Introduction to the Cell multiprocessor, IBM Journal of Research and Development, Volumen 49, Números 4/5, 2005. [3] J. Flich, A. Mejı́a, P. López y J. Duato, Region-Based Routing: An Efficient Routing Mechanism to Tackle Unreliable Hardware in Networks on Chip, First International Symposium on Networks on Chip (ISNOC), 2007. [4] D. Gelernter, A DAG-based algorithm for prevention of store-and-forward deadlock in packet networks, IEEE Transactions on Computers, 30(10):709-715, Oct. 1981. [5] J.C. Sancho, A. Robles y J. Duato, A Flexible Routing Schemes for Networks of Workstations, Third International Symposium on High Performance Computing (ISHPC), 2000. [6] C. Glass y L. Ni, The Turn Model for Adaptive Routing, International Conference on Computer Architecture (ISCA), 1992. [7] Noxim: Simulador de Redes dentro del chip, http://noxim.sourceforge.net. [8] Librerı́a 90nm de TSMC, http://www.tsmc.com.