Introducción
A lo largo de la historia de la
industria de los ordenadores, la tendencia mayormente adoptada para conseguir
un aumento de prestaciones, ha sido el incremento de la complejidad de las
instrucciones. Es lo que se ha denominado "computación con conjuntos de
instrucciones complejas" o CISC (Complexa Instrucción Set Computing).
Sin embargo, la tendencia actual, se
esfuerza en conseguir procesadores con conjuntos de instrucciones de
complejidad reducida o RISC (Reducid Instrucción Set Computing). La idea es que
un conjunto de instrucciones poco complejas son simples, y por tanto de más
rápida ejecución, lo que permite crear un código más "aerodinámico".
Tanto la tecnología CISC como la RISC
son acreditadas a IBM, aunque sus antecesores bien pueden ser John von Neumman
(inventor del primer programa de ordenador almacenado, y que promovía la
velocidad inherente a conjuntos de instrucciones reducidas), Maurice Wilkes
(padre de la microprogramación y de muchos conceptos de los diseños RISC) y
Seymour Cray (primeros supercomputadores, empleando principios RISC).
Los inicios de la tecnología RISC
también surgen en el ambiente académico, ya que en 1980, la Universidad de
Berkeley (California), el Dr. David A. Patterson inició un proyecto denominado
RISC I, que obtuvo resultados en tan solo 19 meses, seguido por RISC II, SOAR
(Smalltalk on a RISC) y SPUR (Symbolic Processing on a RISC). El resultado
directo, además de la educación en la ingeniería y los fundamentos del diseño
de microprocesadores, fue la creación de una máquina que fuese capaz de mayores
velocidades de ejecución a menores velocidades de reloj y que requiriese
menores esfuerzos de diseño.
Casi simultáneamente, en la Universidad
de Stanford, el Dr. John Hennesy inició también un proyecto de implementación
RISC, denominado MIPS, seguido por el sistema MIPS-XMP, enfocados hacia el
proceso simbólico, demostrando las capacidades de velocidad de la arquitectura
RISC.
Ambos profesores se vieron envueltos
rápidamente, en proyectos de productos comerciales, y en concreto, Hennesy fue
uno de los fundadores de MIPS Computer Systems, mientras Patterson actuaba de
asesor durante el desarrollo del primer SPARC.
Las características
comunes a todos los procesadores RISC, fuente de sus capacidades de altas
prestaciones son:
1. Modelo de conjunto de
instrucciones Load/Store (Cargar/Almacenar). Sólo las instrucciones
Load/Store acceden a memoria; las demás operaciones en un RISC, tienen lugar en
su gran conjunto de registros. Ello simplifica el direccionamiento y acorta los
tiempos de los ciclos de la CPU, y además facilita la gestión de los fallos de
páginas (page faults) en entornos de memoria virtual. Además, permite un
elevado nivel de concurrencia a consecuencia de la independencia de las
operaciones de Load/Store de la ejecución del resto de las instrucciones.
2. Arquitectura no destructiva
de tres direcciones. Los procesadores CISC destruyen: La información que existe en alguno de los registros, como consecuencia
de la ejecución normal de instrucciones; esto es debido a su arquitectura de
dos direcciones, por la cual el resultado de una operación sobrescribe uno de
los registros que contenía a los operando. Por contra, las instrucciones RISC,
con tres direcciones, contienen los campos de los dos operando y de su
resultado. Por lo tanto, tanto los operando origen como el destino, son mantenidos
en los registros tras haber sido completada la operación. Esta arquitectura
"no destructiva" permite a los compiladores organizar las
instrucciones de modo que mantengan llenos los conductos (pipelines) del chip y
por tanto reutilizar los operando optimizando la concurrencia.
3. Instrucciones simples con formato fijo y con pocos
modos de direccionamiento. Las instrucciones simples reducen de
manera muy significativa el esfuerzo para su descodificación, y favorecen su
ejecución en pipelines. Las instrucciones de longitud fija, con formatos fijos,
implican que los campos de códigos de operación y de los operando que están
siempre codificados en las mismas posiciones, permitiendo el acceso a los
registros al mismo tiempo que se está descodificando el código de operación.
Todas las instrucciones tienen una longitud equivalente a una palabra y están
alineadas en la memoria en límites de palabra (Word boundaries), ya que no
pueden ser repartidas en pedazos que puedan estar en diferentes páginas.
4. Ausencia de microcódigo. El microcódigo no se presta a la ejecución en ciclos únicos, ya
que requiere que el hardware sea dedicado a su interpretación dinámica. La
programación en microcódigo no hace que el software sea más rápido que el
programado con un conjunto de instrucciones simples. Todas las funciones y el
control, en los procesadores RISC, están "cableados" para lograr una
máxima velocidad y eficiencia.
5. Ejecución en conductos
(pipelined). Las instrucciones simples, de
formato fijo y ciclo único permiten que las diferentes etapas de los ciclos de
ejecución (búsqueda o fetch, descodificación, ejecución y escritura del
resultado o result write-back) para instrucciones múltiples, se puedan realizar
simultáneamente, de un modo más simple y eficaz.
6. Ejecución en ciclos únicos
(single-cycle). El resultado directo de los
conjuntos de instrucciones que ofrecen los procesadores RISC, es que cada
instrucción puede ser ejecutada en un único ciclo de la CPU. Esto invalida la
creencia de que las microinstrucciones en microcódigo, creadas para ser
ejecutadas en un solo ciclo de procesador, son más rápidas que las
instrucciones del lenguaje ensamblador. Ya que el caché está construido
partiendo de la misma tecnología que el almacenamiento de control del
microprograma, una única instrucción puede ser ejecutada a la misma velocidad
que una microinstrucción. La ejecución en ciclos únicos también simplifica la
gestión de las interrupciones y los conductos (pipelines).
RISC frente a CISC:
Existen varios mitos que contraponen
las ventajas de la tecnología RISC frente a la CISC, que es importante
descalificar:
-Los procesadores
RISC ofrecen peor soporte para los lenguajes de alto nivel o HLL (High Level
Language) que lo CISC. Esta creencia se argumenta en que un conjunto de
instrucciones de "alto nivel" (CISC) es mejor soporte para lenguajes
de alto nivel. Sin embargo, la característica fundamental de los lenguajes de
alto nivel, implica que el programador sólo interacciona con el ordenador a
través del propio lenguaje de alto nivel (programación, depuración, mensajes
del sistema, etc.), por lo que todos los problemas a "bajo nivel",
deben de ser transparentes y desconocidos para él. Por ello, son de nulas
consecuencias para el programador y los lenguajes de alto nivel, como se
implementan las funciones, en función del tipo de CPU.
-Es
más complicado escribir compiladores RISC que CISC. Dado que los procesadores
CISC tienen un mayor número de instrucciones y modos de direccionamiento,
existen por tanto más formas de hacer la misma tarea, lo que puede confundir
tanto al compilador como al que lo escribe. Por ello, subjetivamente es posible
escoger una forma de hacerlo poco adecuada, por el tipo de instrucciones o por
el tiempo de ejecución que requieren. En cambio, en un procesador RISC, hay
menos opciones, por lo que el compilador es más simple, aunque se genere, habitualmente,
un 20-30% más código; a cambio, se consigue un incremento de la velocidad de
hasta un 500%.
-Un programa es más rápido cuanto más pequeño.
La velocidad a la que un programa puede ser ejecutado no depende en absoluto de
su tamaño, sino del tiempo de ejecución de cada una de sus instrucciones. Dado
que las instrucciones RISC son más rápidas, y admiten mejor los pipelines,
puede haber mayor paralelismo y simultaneidad en la ejecución de pequeñas
secciones de código. Dichas secciones de código pueden ser ejecutadas en una
fracción del tiempo que requiere una sola instrucción CISC.
Autor: Jordi Palet.
Procesadores RISC.
Un procesador RISC es el resultado de las
investigaciones hechas por Paterson y Hennessy en Berkeley y Stanford
respectivamente, a inicios y mediados de la década de 1980.Estas investigaciones
fueron los primeros trabajos que se hicieron en forma sistemática y analítica
sobre los procesadores y como se puede mejorar sustancialmente el rendimiento
(performace) de los mismos.
El resultado de esas investigaciones es la
conceptualización de una nueva arquitectura de procesadores:
- Con pipelines
- Superescalares
- Con lógica de predicción de salto
- Juego de instrucciones simples, etc.
La consecuencia del uso de dicha arquitectura
implicó la reingeniería del juego de instrucciones y de sus características
implementarías (y de esto sale el nombre), así como también la reingeniería de
parte del Hardware y del microcódigo de las instrucciones.
- El procesador consta de unas pocas instrucciones muy simples y altamente optimizadas (realizan tareas básicas).
- La mayoría de las instrucciones se ejecutan en un ciclo de reloj.
- Todas las instrucciones tienen la misma longitud (esto es lo que hace posible la existencia del pipeline).
- Solamente las instrucciones de transferencia de datos usan memoria.
- Las instrucciones permitidas son aquellas que están optimizadas para performace/espacio/pipeline.
- Las instrucciones se implementan mediante el hardware del sistema y no por microcódigo.
- Tiene un gran numero de registros para disminuir el acceso a memoria.
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 más 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.
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.
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.
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 máquinas, 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 operando
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 más 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 arquitecturas RISC y las implicaciones que estas tienen.
Autores:
José Ignacio Vega Luna
Profesor Investigador de la UAM / Azcapotzalco
DCBI / Departamento de Electrónica
Roberto Sánchez GonzálezProfesor Investigador de la UAM / Azcapotzalco
DCBI / Departamento de Electrónica
Profesor Investigador de la UAM / Azcapotzalco
DCBI / Departamento de Electrónica
Gerardo Salgado Guzmán
Profesor Investigador de la UAM / Azcapotzalco
DCBI / Departamento de Electrónica
Publicado por: Aracelys Suárez.
0 comentarios:
Publicar un comentario