lunes, 22 de abril de 2013

Arquitectura Vectorial vs RISC


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.

domingo, 14 de abril de 2013

Algoritmo de Tomasulo


Algoritmo de Tomasulo

El algoritmo de Tomasulo es un algoritmo de planificación dinámica desarrollado en 1967 por Robert Tomasulo de IBM.
Se inventó para la IBM 360/91 cuando no existían las caches para permitir a un procesador ejecutar instrucciones fuera de orden. Este algoritmo difiere del algoritmo de la pizarra ("Scoreboard algorithm") en que este último no dispone de renombrado de registros. En su lugar, el algoritmo de Scoreboard (scoreboarding) resuelve los riesgos Escritura Después de Escritura (EDE o WAW) y Escritura Después de Lectura (EDL o WAR) deteniendo la ejecución, mientras que el algoritmo de Tomasulo permite el lanzamiento de dichas instrucciones. Además, el algoritmo de Tomasulo utiliza un bus de datos común en el que los valores calculados son enviados a todas las estaciones de reserva que los necesite. Esto permite mejorar la ejecución paralela de instrucciones en situaciones en las que el scoreboarding fallaría y provocaría la parada.
El algoritmo de Tomasulo está distribuido, y dividido en tres etapas:
  • Emisión: comprobación de riesgos estructurales por la estación de reserva
  • Ejecución: RAW, comprobación de riesgos estructurales por la UF
  • Escritura de resultados en el CDB: comprobación de riesgos estructurales por el CDB.

Etapas del Algoritmo Tomasulo



Tomasulo solo tiene que hacer frente a riesgos RAW porque evita los riesgos de nombre mediante el nombramiento de registro.

En la actualidad, gran parte de los procesadores hacen uso de variaciones de este algoritmo para la planificación dinámica de instrucciones.

Características:

  • Técnica de planificación dinámica de instrucciones con gestión distribuida. Inicialmente, en el IBM/360 (1967, Robert Tomasulo) era sólo para operaciones de FP. Hoy se aplica a todas las instrucciones, y la mayoría de procesadores avanzados llevan un algoritmo similar al clásico (estudiaremos el clásico pero para todo tipo de instrucciones, porque es el explicado en los libros generalmente).

  • Este algoritmo se puede aplicar a otro tipo de sistemas donde hay ciertos recursos compartidos por diversos agentes, y se quieren gestionar los recursos de forma distribuida. Evidentemente la implementación que veremos aquí es hardware.

  • Durante su ejecución provoca un reordenamiento dinámico en la ejecución (fase EX) de las instrucciones, aunque la emisión sigue siendo en el orden del código original.

  • Permite la ejecución de instrucciones no dependientes de otras anteriores (aunque estas últimas estén bloqueadas esperando por algún operando fuente).

  • Va a realizar un renombrado dinámico de registros para evitar riesgos por dependencias (WAR, WAW) entre instrucciones. Todos los registros de destino se renombran y el nuevo nombre que toman se llama etiqueta (tag)


Definiciones
En este algoritmo se ponen una serie de entradas en cada UF, llamadas estaciones de reserva RS. A éstas llegan las emisiones (IS) de instrucciones con toda la información de la misma, también llegan los valores de los operandos fuente, si han podido leerse, o  cierta información (etiqueta) que indica que operando falta (no se bloquea la cadena).

  • Estación de Reserva (Reservation Stations, R.S.): Lugar dónde esperan las instrucciones emitidas junto a las ALU’s (U.F.), hasta que pueden ejecutarse en la U.F. Esta espera se debe a la no disponibilidad de todos los operandos fuente (hay RAW: una instrucción anterior aún no ha generado algún operando). La R.S. tendrá una serie de campos para anotar el valor de los operandos fuente (y si es necesario el valor del resultado de la operación y la etiqueta asociada al registro destino).

  • Buffers de Memoria: Son las R.S. para instrucciones de carga/almacenamiento. Es el lugar dónde esperan los acceso a memoria emitidos hasta que disponen de todos sus operandos y el bus de memoria (caché) está libre. En el alg. clásico y en general, hay buffers separados para instrucciones de carga y para los de almacenamiento.


  • Bus Común de Datos (Common Data Bus, CDB): Une la salida de las unidades funcionales y la carga de memoria con el fichero de registros, las estaciones de reserva (y los buffers). Las UF mandan el dato de salida a través de él para que lo lean el resto de elementos de la CPU (es decir, se usa en la fase WB, produciéndose un bypass). Se trata de un recurso común por el que hay que competir. En general, las máquinas suelen tener más de un CDB (p.ej. uno para enteros y otro para FP) puesto que el número de WB por cada ciclo puede ser mayor que 1. Cualquier CDB tiene dos buses: uno para el resultado de una operación (32 líneas para INT/float, 64 para double) y otro para la etiqueta asociada al mismo (tamaño log2 del número de etiquetas).

  • Etiqueta (tag): Son identificadores que se asocian a los registros destino cada vez que se emite una instrucción.

Especificación de Arquitectura de Tomasulo

  • Campos de cada Estación de Reserva (según versión, algunos son prescindibles):
ü  Op: operación
ü  Qj, Qk: Etiqueta de los operandos j y k. Si está vacío, el operando está disponible.
ü  Vj, Vk: Valores de los operandos.
ü  Ocupado: Indica que la RS está en uso.
  • Buffer de LD:
ü  Dirección: para el acceso a memoria (etiqueta si oper. no disponible o valor oper.)
ü  Ocupado: Indica que el buffer está en uso.
  • Buffer de ST:
ü  Qi: Etiqueta de la RS que producirá el valor a almacenar en memoria.
ü  Dirección: para el acceso a memoria (etiqueta si oper. no disponible o valor oper.)
ü  Vi: valor a almacenar. Estará vacío cuando Qi esté lleno.
ü  Ocupado: Indica que el buffer está en uso.
  • Fichero de Registros FP. Cada registro tendrá la estructura:
ü  Qi: Etiqueta de la RS que producirá el valor a almacenar en el registro.
ü  Vi: valor del registro.
ü  Ocupado: Indica que el valor actual del registro no es válido (espera por el nuevo).

Tomasulo en procesadores actuales

En general los micros con planificación dinámica son capaces de emitir y ejecutar varias Instrucciones a la vez, y su arquitectura es muy potente.

  • Uno de los primeros microprocesadores con planificación dinámica fue Motorola PowerPC 620 (1995). Es un ejemplo muy bueno: su cadena (4 fases: IF ID IS EX) y arquitectura es muy similar al algoritmo clásico Tomasulo. Poseía unas pocas R.S. por cada UF.

Ø Dos unidades enteras simples (1 ciclo).
Ø Una unidad entera compleja (3 a 20 ciclos) para MULT y DIV enteras.
Ø Una unidad de carga-almacenamiento (1 ciclo si acierta en caché).
Ø Una unidad de punto flotante (31 ciclos DIVFP, 2 ciclos ADDFP y MULTFP).
Ø Y una unidad de saltos, que actualice BTB en caso de fallo de predicción.

  • Pentium Pro (su parte INT es idem que P.II, P.III y similar al P4). Su cadena es de 11 fases. Posee 40 R.S. comunes a todas las UF:
Ø  Dos unidades enteras (1 ciclo). Una de ellas se usan para saltos (actualiza BTB en caso de fallo de predicción). La otra se usa también para multiplicaciones y divisiones enteras.
Ø  Dos unidades FP para multiplicaciones y divisiones de punto flotante. Realmente solo puede empezar en el mismo ciclo una de ellas.
Ø  Una unidad de carga (1 ciclo).
Ø  Una unidad de almacenamiento más compleja (lleva un buffer MOB especial).

  • MIPS R10000 (similar a los actuales). Posee 16 R.S. para INT, 16 para FP y 16 para Ld-St:
Ø  Dos unidades enteras (una también sirve para saltos, y la otra para MULT INT).
Ø  Una unidad para cálculo de direcciones de acceso a memoria (para carga-almacenamiento).
Ø  Una unidad de punto flotante simple (sólo para ADDFP).
Ø  Una unidad de punto flotante compleja (DIV, MULT, SQRT-FP).

Ventajas Algoritmo Tomasulo

  • Disminución costes debido a dependencias de datos
  • Simplificación del compilador
  • Mismo código funciona bien en diferentes segmentaciones

Desventajas Algoritmo Tomasulo

  • Mayor complejidad hardware
  • Terminación fuera de orden à aparecen riegos WAR y WAW
  • Complica el tratamiento de las interrupciones 


Planificación Dinámica vs Estática

PLANIFICACION DINAMICA
PLANIFICACION ESTATICA
Complicación hardware
Menos hardware
Compilador no tiene que optimizar
Compilador más difícil
Trasparente al usuario
Posible problema de herencia (compilador debe conocer endoarquitectura)
El hardware extrae el rendimiento que puede en cada versión
Inconveniente: dependencia compilación – rendimiento
Tamaño de código estático no se toca
Tamaño de código estático puede crecer (mas fallos de cache)
Defecto: ventana de instrucciones limitada (Fase IF) (análisis local)
Ventaja: ventana de instrucciones infinita (análisis global )
En tiempo de ejecución se conoce más:
  • Valores de registro (dir: acceso)
  • Predicción dinámica, etc.
El compilador no puede conocer:
  • Valores de registros (dir acceso)
  • Predicción dinámica, etc.
No puede eliminar instrucciones
Puede eliminar instrucciones (de overhead u otras)
No necesita muchos registros de usuario
Puede necesitar muchos registros de usuario


Representantes comerciales de la arquitectura Superescalar

  • Nvidia (serie GeForce 6, )
  • Sun SPARC
  • AMD (AMD -K5-PR100)
  • INTEL (INTEL PENTIUM)


Bibliografía:



viernes, 12 de abril de 2013

Procesamiento Paralelo Vs Segmentado



PROCESAMIENTO EN PARALELO
Es un proceso empleado para acelerar el tiempo de ejecución de un programa dividiéndolo en múltiples trozos que se ejecutarán al mismo tiempo, cada uno en su propios procesadores.


Fuente: William Stallings, Organización y Arquitectura de
Computadores, 5ta. ed., Capítulo 16: Procesamiento Paralelo.
La razón principal para crear y utilizar computación paralela es que el paralelismo es una de las mejores formas de salvar el problema del cuello de botella que significa la velocidad de un único procesador.
La razón de ser del procesamiento en paralelo es acelerar la resolución de un problema, la aceleración que puede alcanzarse depende tanto del problema en sí como de la arquitectura de la computadora.
CARACTERÍSTICAS
El uso de varios procesadores está motivado por consideraciones relativas a las prestaciones y/o a la fiabilidad, podemos clasificar dichos sistemas como sigue:
Multiprocesadores débilmente acoplados
Consisten en un conjunto de sistemas relativamente autónomos, en los que cada CPU dispone de su propia memoria principal y sus canales de E/S. En este contexto se utiliza frecuentemente el término multicomputador.
Procesadores de Uso Específico
Tales como un procesador de E/S. En este caso, hay un maestro, una CPU de uso general, y los procesadores de uso específico están controlados por la CPU maestra a la que proporcionan ciertos servicios.
Multiprocesadores fuertemente acoplados
Constituidos por un conjunto de procesadores que comparten una memoria principal común y están bajo el control de un mismo sistema operativo.
Procesadores paralelos
Multiprocesadores fuertemente acoplados que pueden cooperar en la ejecución en paralelo de una tarea o un trabajo.



Fuente: http://www.sites.upiicsa.ipn.mx/polilibros/portal/Polilibros/P_terminados/PolilibroFC/Unidad_IV/Unidad%20IV_4.htm
El procesamiento en paralelo se basa principalmente en Multiprocesadores fuertemente acoplados que cooperan para la realización de los procesos, aquí sus características.
  • Posee dos o más procesadores de uso general similares y de capacidades comparables.
  • Todos los procesadores comparten el acceso a una memoria global.            
  • También pueden utilizarse algunas memorias locales (privadas como la cache).     
  • Todos los procesadores comparten el acceso a los dispositivos de E/S, bien a través de los mismos canales bien a través de canales distintos que proporcionan caminos de acceso a los mismos dispositivos.
  • El sistema está controlado por un sistema operativo integrado que permite la interacción entre los procesadores y sus programas en los niveles de trabajo, tarea, fichero, y datos elementales.
VENTAJAS Y DESVENTAJAS
Existen algunos factores que trabajan en contra de la eficiencia del  paralelismo y pueden atenuar tanto la ganancia de velocidad como la ampliabilidad.
Costes de inicio
En una operación paralela compuesta por miles de proceso, el tiempo de inicio puede llegar ser mucho mayor que le tiempo real de procesamiento, lo que influye negativamente en la ganancia de velocidad.
Interferencia
Como lo procesos que se ejecutan en un proceso paralelo acceden con frecuencia a recursos compartidos, pueden sufrir un cierto retardo como consecuencia de la interferencia de cada nuevo proceso en la competencia, este fenómeno afecta tanto la ganancia de velocidad como la ampliabilidad.
Sesgo
Normalmente es difícil dividir una tarea en partes exactamente iguales, entonces se dice que la forma de distribución de los tamaños es sesgada.
El procesamiento paralelo implica una serie de dificultades a nivel programación de software, es difícil lograr una optimización en el aprovechamiento de los recursos de todas las CPU con el que se esté trabajando sin que se formen cuello de botella. En muchas de las ocasiones no es posible el trabajar con equipos multiprocesadores dado el elevado costo que este representa, así que solo se dedica a ciertas áreas de investigación especializada o proyectos gubernamentales o empresariales.
El procesamiento en paralelo ejecuta procesos en donde cada procesador se encarga de uno u otro y aceleran de esta forma el cálculo.

SEGMENTACION (Pipelining)
La velocidad de ejecución de los programas depende de muchos factores. Una forma de aumentar las prestaciones es utilizar una tecnología de circuitos más rápida para construir el procesador y la memoria principal. Otra posibilidad es reorganizar el hardware para que se pueda realizar más de una operación al mismo tiempo. De esta forma se incrementa el número de operaciones realizadas por segundo aunque no cambie el tiempo necesario para realizar una operación determinada.
La segmentación de cauce es una forma particularmente efectiva de organizar la actividad concurrente de un computador. La idea básica es muy simple. Se encuentra con frecuencia en las fábricas donde la segmentación de cauce es comúnmente conocida como fabricación o montaje en cadena.
Puede considerarse entonces, la idea del montaje en cadena en un computador como se observa en la siguiente figura.

Procesamiento segmentado de instrucciones.


 Fuente: https://sites.google.com/site/mimateria20/pipelining

En resumen, las unidades de captación de la figura 1.b constituyen un cauce de dos etapas donde se procesa una instrucción cada ciclo. El buffer B1 entre ambas se necesita para almacenar la información que se pasa de una etapa a la siguiente. Este buffer se carga con una nueva información al final de cada ciclo de reloj. Para el ejemplo anterior se dividió la instrucción en dos etapas, pero también es posible dividirla en más etapas. Si fueran cuatro, dichas etapas podrían ser las siguientes:
  • F Captación (Fetch): la instrucción se lee de memoria.
  • D Decodificación: la instrucción se decodifica y se captan los operandos fuente.
  • E Ejecución: se realiza la operación especificada por la instrucción.
  • W Actualización (Write): El resultado obtenido se escribe en la dirección destino.
La segmentación mejora el rendimiento incrementando la productividad de las instrucciones, en contraposición a la disminución del tiempo de ejecución de una instrucción individual, pero la productividad de las instrucciones es la métrica importante porque los programas reales ejecutan billones de instrucciones.
La segmentación es una técnica que explota el paralelismo entre las instrucciones en un flujo secuencial de instrucciones. Tiene la ventaja sustancial de que puede ser invisible al programador.
Los registros segmentados (buffers) que separan cada etapa de la segmentación. Están etiquetados por las etapas que separan; por ejemplo, el primero está etiquetado como IF/ID porque separa las etapas de busqueda de la instrucción y decodificación de la instrucción. Estos registros deben ser lo suficientemente grandes para almacenar todos los datos correspondientes a las líneas que van a través de ellos. El registro IF/ID debe ser de 64 bits porque debe contener la instrucción de 32 bits buscada en memoria y la dirección incrementada de 32 bits del PC.

BIBLIOGRAFIA
William Stallings, Organización y Arquitectura de Computadores, 5ta. ed., Capítulo 16: Procesamiento Paralelo. 
https://sites.google.com/site/mimateria20/pipelining
http://www.sites.upiicsa.ipn.mx/polilibros/portal/Polilibros/P_terminados/PolilibroFC/Unidad_IV/Unidad%20IV_4.htm