stringtranslate.com

Arquitectura activada por el transporte

En arquitectura informática , una arquitectura activada por transporte ( TTA ) es un tipo de diseño de procesador en el que los programas controlan directamente los buses de transporte internos de un procesador. La computación ocurre como un efecto secundario de los transportes de datos: escribir datos en un puerto de activación de una unidad funcional hace que la unidad funcional inicie un cálculo. Esto es similar a lo que sucede en una matriz sistólica . Debido a su estructura modular, TTA es una plantilla de procesador ideal para procesadores de conjuntos de instrucciones de aplicaciones específicas ( ASIP ) con ruta de datos personalizada pero sin la inflexibilidad y el costo de diseño de los aceleradores de hardware de función fija.

Normalmente, un procesador activado por transporte tiene múltiples buses de transporte y múltiples unidades funcionales conectadas a los buses, lo que brinda oportunidades para el paralelismo a nivel de instrucción . El paralelismo lo define estáticamente el programador. En este sentido (y obviamente debido al gran ancho de palabra de instrucción), la arquitectura TTA se parece a la arquitectura de palabra de instrucción muy larga (VLIW). Una palabra de instrucción TTA se compone de múltiples ranuras, una ranura por bus, y cada ranura determina el transporte de datos que tiene lugar en el bus correspondiente. El control detallado permite algunas optimizaciones que no son posibles en un procesador convencional. Por ejemplo, el software puede transferir datos directamente entre unidades funcionales sin utilizar registros.

La activación del transporte expone algunos detalles de microarquitectura que normalmente están ocultos a los programadores. Esto simplifica enormemente la lógica de control de un procesador, porque muchas decisiones que normalmente se toman en tiempo de ejecución se fijan en tiempo de compilación . Sin embargo, también significa que un binario compilado para un procesador TTA no se ejecutará en otro sin volver a compilarlo si hay incluso una pequeña diferencia en la arquitectura entre los dos. El problema de la incompatibilidad binaria, además de la complejidad de implementar un cambio de contexto completo, hace que los TTA sean más adecuados para sistemas integrados que para computación de propósito general.

De todas las arquitecturas de computadora con un conjunto de instrucciones , la arquitectura TTA es una de las pocas que ha construido procesadores basados ​​​​en ella, y la única que tiene procesadores basados ​​​​en ella vendidos comercialmente.

Beneficios en comparación con las arquitecturas VLIW

Los TTA pueden verse como arquitecturas VLIW de "ruta de datos expuesta". Mientras que VLIW se programa mediante operaciones, TTA divide la ejecución de la operación en múltiples operaciones de movimiento . El modelo de programación de bajo nivel permite varios beneficios en comparación con el VLIW estándar. Por ejemplo, una arquitectura TTA puede proporcionar más paralelismo con archivos de registro más simples que con VLIW. Como el programador tiene el control de la sincronización de los transportes de datos de operandos y resultados, la complejidad (el número de puertos de entrada y salida) del archivo de registro (RF) no necesita escalarse de acuerdo con el peor escenario de emisión/finalización del múltiples instrucciones paralelas.

Una optimización de software única e importante habilitada por la programación de transporte se llama omisión de software . En caso de omisión del software, el programador omite la reescritura del archivo de registro moviendo los datos directamente a los puertos de operandos de la siguiente unidad funcional. Cuando esta optimización se aplica agresivamente, el movimiento original que transporta el resultado al archivo de registro se puede eliminar por completo, reduciendo así la presión del puerto del archivo de registro y liberando un registro de propósito general para otras variables temporales. La presión de registro reducida , además de simplificar la complejidad requerida del hardware de RF, puede generar importantes ahorros de energía de la CPU , un beneficio importante especialmente en sistemas integrados móviles. [1] [2]

Estructura

Los procesadores TTA están construidos con unidades de función independientes y archivos de registro , que están conectados con buses y enchufes de transporte .

Partes de la arquitectura desencadenada por el transporte

Unidad de función

Cada unidad de función implementa una o más operaciones , que implementan funcionalidades que van desde una simple suma de números enteros hasta un cálculo complejo y arbitrario específico de la aplicación definido por el usuario. Los operandos para operaciones se transfieren a través de puertos de unidades de función .

Cada unidad de función puede tener un canal independiente . En caso de que una unidad de función esté completamente canalizada , en cada ciclo de reloj se puede iniciar una nueva operación que requiere varios ciclos de reloj para finalizar. Por otro lado, una canalización puede ser tal que no siempre acepte nuevas solicitudes de inicio de operación mientras una anterior todavía se está ejecutando.

El acceso a la memoria de datos y la comunicación con el exterior del procesador se maneja mediante unidades de funciones especiales. Las unidades de funciones que implementan operaciones de acceso a la memoria y se conectan a un módulo de memoria a menudo se denominan unidades de carga/almacenamiento .

Unidad de control

La unidad de control es un caso especial de unidades funcionales que controla la ejecución de programas. La unidad de control tiene acceso a la memoria de instrucciones para recuperar las instrucciones a ejecutar. Para permitir que los programas ejecutados transfieran la ejecución (salto) a una posición arbitraria en el programa ejecutado, la unidad de control proporciona operaciones de flujo de control. Una unidad de control suele tener un canal de instrucciones , que consta de etapas para buscar, decodificar y ejecutar instrucciones del programa.

Registrar archivos

Los archivos de registro contienen registros de propósito general , que se utilizan para almacenar variables en programas. Al igual que las unidades funcionales, también los archivos de registro tienen puertos de entrada y salida. La cantidad de puertos de lectura y escritura, es decir, la capacidad de poder leer y escribir múltiples registros en un mismo ciclo de reloj, puede variar en cada archivo de registro.

Autobuses de transporte y enchufes.

La arquitectura de interconexión consta de buses de transporte que están conectados a los puertos de las unidades funcionales mediante enchufes . Debido al gasto de conectividad, es habitual reducir el número de conexiones entre unidades (unidades de función y ficheros de registro). Se dice que un TTA está completamente conectado en caso de que haya una ruta desde el puerto de salida de cada unidad hasta los puertos de entrada de cada unidad.

Los sockets proporcionan medios para programar procesadores TTA al permitir seleccionar qué conexiones de bus a puerto del socket están habilitadas en cualquier momento. Por lo tanto, los transportes de datos que tienen lugar en un ciclo de reloj se pueden programar definiendo la conexión de puerto/zócalo de origen y destino que se habilitará para cada bus.

Ejecución condicional

Algunas implementaciones de TTA admiten la ejecución condicional .

La ejecución condicional se lleva a cabo con la ayuda de guardias . Cada transporte de datos puede ser condicionado por una guarda, que está conectada a un registro (a menudo un registro condicional de 1 bit ) y a un bus. En caso de que el valor del registro protegido se evalúe como falso (cero), el transporte de datos programado para el bus al que está conectado el guardia se aplasta , es decir, no se escribe en su destino. Los transportes de datos incondicionales no están conectados a ninguna guardia y siempre se ejecutan.

Sucursales

Todos los procesadores, incluidos los procesadores TTA, incluyen instrucciones de flujo de control que alteran el contador del programa, que se utilizan para implementar subrutinas , if-then-else , for-loop , etc. El lenguaje ensamblador para los procesadores TTA generalmente incluye instrucciones de flujo de control como incondicionales. ramas (JUMP), ramas relativas condicionales (BNZ), llamada a subrutina (CALL), retorno condicional (RETNZ), etc. que tienen el mismo aspecto que las instrucciones correspondientes en lenguaje ensamblador para otros procesadores.

Como todas las demás operaciones en una máquina TTA, estas instrucciones se implementan como instrucciones de "mover" a una unidad de función especial.

Las implementaciones de TTA que admiten la ejecución condicional, como sTTAck y el primer prototipo MOVE, pueden implementar la mayoría de estas instrucciones de flujo de control como un movimiento condicional al contador del programa. [3] [4]

Las implementaciones de TTA que solo admiten transportes de datos incondicionales, como Maxim Integrated MAXQ, [5] generalmente tienen una unidad de función especial estrechamente conectada al contador del programa que responde a una variedad de direcciones de destino. Cada una de estas direcciones, cuando se utiliza como destino de un "movimiento", tiene un efecto diferente en el contador del programa: cada instrucción de "rama relativa <condición>" tiene una dirección de destino diferente para cada condición; y se utilizan otras direcciones de destino CALL, RETNZ, etc.

Programación

En arquitecturas de procesadores más tradicionales, un procesador generalmente se programa definiendo las operaciones ejecutadas y sus operandos. Por ejemplo, una instrucción de suma en una arquitectura RISC podría verse como la siguiente.

sumar r3, r1, r2

Esta operación de ejemplo suma los valores de los registros de propósito general r1 y r2 y almacena el resultado en el registro r3. En términos generales, la ejecución de la instrucción en el procesador probablemente da como resultado la traducción de la instrucción a señales de control que controlan las conexiones de la red de interconexión y las unidades funcionales. La red de interconexión se utiliza para transferir los valores actuales de los registros r1 y r2 a la unidad de función que es capaz de ejecutar la operación de suma, a menudo llamada ALU como en Unidad Aritmético-Lógica. Finalmente, una señal de control selecciona y activa la operación de suma en ALU, cuyo resultado se transfiere de nuevo al registro r3.

Los programas TTA no definen las operaciones, sino sólo los transportes de datos necesarios para escribir y leer los valores de los operandos. La operación en sí se activa escribiendo datos en un operando desencadenante de una operación. Por lo tanto, se ejecuta una operación como efecto secundario del transporte de datos desencadenante. Por lo tanto, ejecutar una operación de suma en TTA requiere tres definiciones de transporte de datos, también llamadas movimientos . Un movimiento define puntos finales para un transporte de datos que tiene lugar en un bus de transporte. Por ejemplo, un movimiento puede indicar que un transporte de datos desde la unidad de función F, puerto 1, al archivo de registro R, índice de registro 2, debe tener lugar en el bus B1. En caso de que haya varios buses en el procesador de destino, cada bus se puede utilizar en paralelo en el mismo ciclo de reloj. Por tanto, es posible explotar el paralelismo a nivel de transporte de datos programando varios transportes de datos en la misma instrucción.

Se puede ejecutar una operación de suma en un procesador TTA de la siguiente manera:

r1 -> ALU.operando1r2 -> ALU.añadir.disparadorALU.resultado -> r3

El segundo movimiento, una escritura en el segundo operando de la unidad funcional llamada ALU, desencadena la operación de suma. Esto hace que el resultado de la suma esté disponible en el puerto de salida 'resultado' después de la latencia de ejecución del 'agregar'.

Los puertos asociados con la ALU pueden actuar como un acumulador , permitiendo la creación de macroinstrucciones que abstraen el TTA subyacente:

ldar1 ;"cargar ALU": mover valor al operando 1 de ALU agregar r2 ; agregar: mover valor para agregar el disparador star r3 ; "almacenar ALU": mover valor del resultado de ALU      

Latencia de operación visible del programador

La filosofía principal de los TTA es trasladar la complejidad del hardware al software. Debido a esto, se presentan varios peligros adicionales al programador. Uno de ellos son las ranuras de retardo , la latencia de operación visible del programador de las unidades de función. El tiempo es completamente responsabilidad del programador. El programador debe programar las instrucciones de manera que el resultado no se lea ni demasiado pronto ni demasiado tarde. No hay detección de hardware para bloquear el procesador en caso de que se lea un resultado demasiado pronto. Considere, por ejemplo, una arquitectura que tiene una operación add con latencia de 1 y una operación mul con latencia de 3. Al activar la operación add , es posible leer el resultado en la siguiente instrucción (siguiente ciclo de reloj), pero en En el caso de mul , hay que esperar dos instrucciones antes de poder leer el resultado. El resultado está listo para la tercera instrucción después de la instrucción de activación.

Leer un resultado demasiado pronto da como resultado la lectura del resultado de una operación activada previamente o, en caso de que no se haya activado ninguna operación previamente en la unidad funcional, el valor leído no está definido. Por otro lado, el resultado debe leerse con suficiente antelación para garantizar que el resultado de la siguiente operación no sobrescriba el resultado aún no leído en el puerto de salida.

Debido a la abundancia de contexto de procesador visible para el programador que prácticamente incluye, además del contenido del archivo de registro, también el contenido del registro de canalización de la unidad de función y/o puertos de entrada y salida de la unidad de función, los guardados de contexto necesarios para el soporte de interrupciones externas pueden volverse complejos y costosos de realizar. implementar en un procesador TTA. Por lo tanto, los procesadores TTA generalmente no admiten interrupciones, pero su tarea se delega a un hardware externo (por ejemplo, un procesador de E/S) o se evita su necesidad mediante el uso de un mecanismo alternativo de sincronización/comunicación como el sondeo.

Implementaciones

Ver también

Referencias

  1. ^ V. Guzma, P. Jääskeläinen, P. Kellomäki y J. Takala, "Impacto de la omisión de software en el paralelismo a nivel de instrucción y el tráfico de archivos de registro"
  2. ^ Johan Janssen. "Estrategias de compilador para arquitecturas activadas por transporte". 2001. pág. 168.
  3. ^ Henk Corporal. "Arquitecturas activadas por transporte examinadas para aplicaciones de propósito general". pag. 6.
  4. ^ Aliaksei V. Chapyzhenka. "sTTAck: arquitectura activada por transporte de pila".
  5. ^ ab "Guía del usuario de la familia MAXQ". Máxima Integrada . Sección "1.1 Conjunto de instrucciones". Una arquitectura basada en registros y activada por transporte permite codificar todas las instrucciones como operaciones de transferencia simples. Todas las instrucciones se reducen a escribir un valor inmediato en un registro de destino o ubicación de memoria o a mover datos entre registros y/o ubicaciones de memoria.
  6. ^ Catsoulis, John (2005), Diseño de hardware integrado (2 ed.), O'Reilly Media , págs. 327–333, ISBN 978-0-596-00755-3
  7. ^ "Introducción a la Arquitectura MAXQ". Máxima Integrada . Acceso centralizado a recursos (incluye diagrama de mapa de transferencia).
  8. ^ Artículo del Dr. Dobb con CPU FPGA de 32 bits en Verilog
  9. ^ Sitio web con más detalles sobre la CPU del Dr. Dobb Archivado el 18 de febrero de 2013 en archive.today

enlaces externos