Procesador vectorial.
Ventajas:
- Disminuye el riesgo de dependencias de datos. El
cálculo de resultados es independiente de los resultados anteriores, por lo que
se puede aumentar en grado de segmentación sin generar dependencias de datos.
La ausencia de riesgos es determinada por el compilador cuando decide usar
instrucciones vectoriales.
- Reducción del cuello de botella de Flynn. Una
instrucción vectorial especifica una gran cantidad de trabajo (equivale a un
bucle completo) por lo que ahorra ancho de banda de instrucciones.
- Disminución de latencia en el acceso a memoria.
Las instrucciones vectoriales que acceden a memoria tienen un patrón conocido
(a menudo adyacentes). La alta latencia de iniciar un acceso a memoria
principal se amortiza (en comparación con acceder a una caché) porque se inicia
un acceso para el vector completo y no para un solo elemento del vector.
- Disminución de las dependencias. Al sustituir todo
un bucle por una operación vectorial, los riesgos de control que podrían surgir
del salto del bucle son inexistentes.
- Al vectorizar, cada dato es independiente del anterior,
eso permite aumentar el pipeline y en consecuencia la frecuencia de reloj.
Arquitectura Vectorial Básica
Máquina vectorial = Unidad escalar
segmentada + unidad vectorial segmentada.
Existen dos tipos básicos:
1. Procesador vectorial memoria-memoria: (Ej: CDC)
Todas las
operaciones vectoriales son de memoria a memoria (en desuso).
2. Procesador vectorial con registros. (Ej: CRAY-1, CRAY-2,
X-MP, Y-MP, NEC SX/2, Fujitsu VP200, Hitachi S820, ConvexC1 y C2).
Todas las operaciones
vectoriales (excepto las de load/store) operan con vectores en registros.
1º Registros Vectoriales: Cada registro
vectorial es un banco de longitud fija que contiene un solo vector. DLXV tiene
8 registros vectoriales de 64 dobles palabras (32 bits). Dos accesos de lectura
y uno de escritura para aumentar el grado de solapamiento.
2º Unidades funcionales vectoriales: Están totalmente
segmentadas y pueden comenzar una operación nueva cada ciclo de reloj.
Hace falta una unidad de control para detectar
riesgos:
-
Estructurales: conflictos en las unidades funcionales.
-
Dependencias de datos: conflictos sobre los accesos
a registros.
3º Unidades load/store vectoriales: Carga
y/o almacena vectores a/desde memoria. La unidad está segmentada para que las
palabras puedan ser transferidas con un ancho de banda de una palabra por ciclo
de reloj, después de una latencia inicial.
4º Registros escalares: Pueden proporcionar
datos a las unidades vectoriales así como calcular direcciones para la unidad
de load/store. En DLXV hay 32 de propósito general y 32 de coma flotante.
Tiempo de Arranque y Velocidad de Iniciación.
El tiempo de arranque depende de la
latencia de las etapas de la operación vectorial. Es igual al número de etapas
de la unidad funcional utilizada.
• Velocidad de iniciación es el tiempo por resultado
una vez que la operación vectorial está en ejecución (normalmente uno).
• Tiempo total para completar la operación vectorial
de longitud ‘n’ es:
tiempo de
arranque + n · velocidad de iniciación
RISC
Computadoras con un conjunto de instrucciones reducido.
Arquitecturas RISC.
Buscando aumentar la velocidad del procesamiento se descubrió en base a experimentos que, con una determinada arquitectura de base, la ejecución de programas compilados directamente con microinstrucciones y residentes en memoria externa al circuito integrado resultaban ser mas eficientes, gracias a que el tiempo de acceso de las memorias se fue decrementando conforme se mejoraba su tecnología de encapsulado.
Debido a que se tiene un conjunto de instrucciones simplificado, éstas se pueden implantar por hardware directamente en la CPU, lo cual elimina el microcódigo y la necesidad de decodificar instrucciones complejas.
En investigaciones hechas a mediados de la década de los setentas, con respecto a la frecuencia de utilización de una instrucción en un CISC y al tiempo para su ejecución, se observó lo siguiente:
- Alrededor del 20% de las instrucciones ocupa el 80% del tiempo total de ejecución de un programa.
- Existen secuencias de instrucciones simples que obtienen el mismo resultado que secuencias complejas predeterminadas, pero requieren tiempos de ejecución más cortos.
Las características esenciales de una arquitectura RISC pueden resumirse como sigue:
Estos microprocesadores siguen tomando como base el esquema moderno de Von Neumann.
Las instrucciones, aunque con otras características, siguen divididas en tres grupos:
a) Transferencia.
b) Operaciones.
c) Control de flujo.
Reducción del conjunto de instrucciones a instrucciones básicas simples, con la que pueden implantarse todas las operaciones complejas.
Arquitectura del tipo load-store (carga y almacena). Las únicas instrucciones que tienen acceso a la memoria son 'load' y 'store'; registro a registro, con un menor número de acceso a memoria.
Casi todas las instrucciones pueden ejecutarse dentro de un ciclo de reloj. Con un control implantado por hardware (con un diseño del tipo load-store), casi todas las instrucciones se pueden ejecutar cada ciclo de reloj, base importante para la reorganización de la ejecución de instrucciones por medio de un compilador.
Pipeline (ejecución simultánea de varias instrucciones). Posibilidad de reducir el número de ciclos de máquina necesarios para la ejecución de la instrucción, ya que esta técnica permite que una instrucción puede empezar a ejecutarse antes de que haya terminado la anterior.
El hecho de que la estructura simple de un procesador RISC conduzca a una notable reducción de la superficie del circuito integrado, se aprovecha con frecuencia para ubicar en el mismo, funciones adicionales:
Unidad para el procesamiento aritmético de punto flotante.
Unidad de administración de memoria.
Funciones de control de memoria cache.
Implantación de un conjunto de registros múltiples.
La relativa sencillez de la arquitectura de los procesadores RISC conduce a ciclos de diseño más cortos cuando se desarrollan nuevas versiones, lo que posibilita siempre la aplicación de las más recientes tecnologías de semiconductores. Por ello, los procesadores RISC no solo tienden a ofrecer una capacidad de procesamiento del sistema de 2 a 4 veces mayor, sino que los saltos de capacidad que se producen de generación en generación son mucho mayores que en los CISC.
Por otra parte, es necesario considerar también que:
La disponibilidad de memorias grandes, baratas y con tiempos de acceso menores de 60 ns en tecnologías CMOS.
Módulos SRAM (Memoria de acceso aleatorio estática) para memorias cache con tiempos de acceso menores a los 15 ns.
Tecnologías de encapsulado que permiten realizar más de 120 terminales.
Esto ha hecho cambiar, en la segunda mitad de la década de los ochentas, esencialmente las condiciones técnicas para arquítecturas RISC.
Principios de Diseño De Las Maquinas RISC
Resulta un tanto ingenuo querer abarcar completamente los principios de diseño de las máquinas RISC, sin embargo, se intentará presentar de una manera general la filosofía básica de diseño de estas maquinas, teniendo en cuenta que dicha filosofía puede presentar variantes. Es muy importante conocer estos principios básicos, pues de éstos se desprenden algunas características importantes de los sistemas basados en microprocesadores RISC.
En el diseño de una máquina RISC se tienen cinco pasos:
Analizar las aplicaciones para encontrar las operaciones clave.
Diseñar un bus de datos que sea óptimo para las operaciones clave.
Diseñar instrucciones que realicen las operaciones clave utilizando el bus de datos.
Agregar nuevas instrucciones sólo si no hacen más lenta a la máquina.
Repetir este proceso para otros recursos.
El primer punto se refiere a que el diseñador deberá encontrar qué es lo que hacen en realidad los programas que se pretenden ejecutar. Ya sea que los programas a ejecutar sean del tipo algorítmicos tradicionales, o estén dirigidos a robótica o al diseño asistido por computadora.
La parte medular de cualquier sistema es la que contiene los registros, el ALU y los 'buses' que los conectan. Se debe optimar este circuito para el lenguaje o aplicación en cuestión. El tiempo requerido, (denominado tiempo del ciclo del bus de datos) para extraer los operandos de sus registros, mover los datos a través del ALU y almacenar el resultado de nuevo en un registro, deberá hacerse en el tiempo mas corto posible.
El siguiente punto a cubrir es diseñar instrucciones de máquina que hagan un buen uso del bus de datos. Por lo general se necesitan solo unas cuantas instrucciones y modos de direccionamiento; sólo se deben colocar instrucciones adicionales si serán usadas con frecuencia y no reducen el desempeño de las más importantes.
Siempre que aparezca una nueva y atractiva característica, deberá analizarse y ver la forma en que se afecta al ciclo de bus. Si se incrementa el tiempo del ciclo, probablemente no vale la pena tenerla.
Por último, el proceso anterior debe repetirse para otros recursos dentro del sistema, tales como memoria cache, administración de memoria, coprocesadores de punto flotante, etcétera.
Una vez planteadas las características principales de la arquitectura RISC así como la filosofía de su diseño, podríamos extender el análisis y estudio de cada una de las características importantes de las arquítecturas RISC y las implicaciones que estas tienen.
Papel De Los Compiladores En Un Sistema Risc
El compilador juega un papel clave para un sistema RISC equilibrado.
Todas las operaciones complejas se trasladan al microprocesador por medio de conexiones fijas en el circuito integrado para agilizar las instrucciones básicas más importantes. De esta manera, el compilador asume la función de un mediador inteligente entre el programa de aplicación y el microprocesador. Es decir, se hace un gran esfuerzo para mantener al hardware tan simple como sea posible, aún a costa de hacer al compilador considerablemente más complicado. Esta estrategia se encuentra en clara contra posición con las máquinas CISC que tienen modos de direccionamiento muy complicados. En la práctica, la existencia en algunos modos de direccionamiento complicados en los microprocesadores CISC, hacen que tanto el compilador como el microprograma sean muy complicados.
No obstante, las máquinas CISC no tienen características complicadas como carga, almacenamiento y salto que consumen mucho tiempo, las cuales en efecto aumentan la complejidad del compilador.
Para suministrar datos al microprocesador de tal forma que siempre esté trabajando en forma eficiente, se aplican diferentes técnicas de optimización en distintos niveles jerárquicos del software.
Los diseñadores de RISC en la empresa MIP y en Hewlett Packard trabajan según la regla siguiente:
Una instrucción ingresa en forma fija en el circuito integrado del procesador (es decir, se alambra físicamente en el procesador) si se ha demostrado que la capacidad total del sistema se incrementa en por lo menos un 1%.
En cambio, los procesadores CISC, han sido desarrollados por equipos especializados de las empresas productoras de semiconductores y con frecuencia el desarrollo de compiladores se sigue por separado. Por consiguiente, los diseñadores de los compiladores se encuentran con una interfaz hacia el procesador ya definido y no pueden influir sobre la distribución óptima de las funciones entre el procesador y compilador.
Las empresas de software que desarrollan compiladores y programas de aplicación, tienden por razones de rentabilidad, a utilizar diferentes procesadores como usuarios de su software en lugar de realizar una optimización completa, y aprovechar así las respectivas características de cada uno. Lo cual también genera otros factores negativos de eficiencia. Esta limitación de las posibilidades de optimización del sistema, que viene dada a menudo por una obligada compatibilidad, se superó con los modernos desarrollos RISC.