lunes, 22 de abril de 2013

RISC vs. PROCESADORES VECTORIALES


INTRODUCCION
La tendencia histórica era diseñar procesadores cada vez más complejos y potentes, que pudieran ejecutar muchas instrucciones diferentes, con muchos operandos y muchos modos de direccionamiento. El objetivo de estos juegos de instrucciones complejos era:

·         Facilitar el desarrollo de compiladores eficientes
·         Mejorar la eficiencia de la ejecución, pues las instrucciones complejas se podían implementar por microcódigo.
·         Dar soporte a lenguajes de alto nivel más sofisticados.
·         Permitir la compatibilidad entre familias de mainframes de un mismo fabricante.


DESARROLLO

IBM, tras analizar y estudiar programas reales compilados, se dio cuenta que la mayoría de las instrucciones de un programa son sencillas (asignaciones, operaciones aritméticas básicas...) por lo que propusieron una arquitectura de procesador sencilla con muchos registros de propósito general. Los ordenadores RISC, que ejecutara eficientemente las instrucciones sencillas que son las más habituales, y las complejas las descompusiera el compilador en operaciones más sencillas.
Una de las principales características de los RISC es que las instrucciones son fácilmente segmentables, por lo que se consigue finalizar una instrucción por ciclo de CPU. Pero existen límites en la mejora del rendimiento que la segmentación puede conseguir:

·         Duración del ciclo de reloj: El ciclo de reloj se puede reducir aumentando el número de etapas, pero ello implica aumentar las dependencias, y con ello el CPI.
·         Velocidad de búsqueda y decodificación de instrucciones: (cuello de botella de Flynn) Sólo se pueden buscar unas pocas instrucciones por ciclo de reloj.
·         Cache hits rate: Los programas científicos tienen con frecuencia conjuntos de datos activos muy grandes, accedidos a menudo, con baja localidad, lo que da un rendimiento bajo en la jerarquía de memoria, con muchas pérdidas en caché.

Los procesadores escalares tienen un bajo rendimiento para ciertos tipos de problemas matemáticos y de ingeniería donde los problemas se resuelven con operaciones matriciales y vectoriales. Por ejemplo para multiplicar un vector de 64 elementos por un escalar, un procesador escalar deberá hacer 64 operaciones dentro de un bucle. Claramente se observa que esta operación se puede realizar de forma paralela para cada uno de los elementos del vector. Un procesador vectorial podría realizar la operación sobre los vectores en una sola instrucción sin necesidad de bucles.

 Ahi es donde entran los procesadores vectoriales que es una CPU que ejecuta instrucciones que operan sobre un array unidimensional de datos (un vector).
Una máquina vectorial consta de una unidad escalar segmentada y una unidad vectorial. La unidad vectorial dispone de M registros vectoriales de N elementos y de unidades funcionales vectoriales (de suma, resta, multiplicación, división, de carga/almacenamiento, etc) que trabajan sobre registros de ese tipo.

El juego de instrucciones de este tipo de procesadores es evidentemente también vectorial. Un ejemplo de instrucción vectorial sería addv v1,v2,v3, es decir, una operación vectorial que equivalen a un bucle escalar completo que processaria los N elementos del registro vectorial.
La gran utilidad de crear CPUs que tratan con vectores de datos radica en la optimización de las tareas que tiende a requerir una misma operación al ser realizado con un gran conjunto de datos (por ejemplo, una suma o un producto escalar).

Mientras que una CPU escalar debe completar todo el proceso de leer, decodificar y ejecutar cada instrucción y valor con un conjunto de datos, una CPU vectorial puede realizar una simple operació con un conjunto relativamente grande de datos en una sola instrucción. Se disminuye así tanto el ancho de banda de instrucciones requerido como el tiempo de decodificación.

Los procesadores vectoriales son ampliamente utilizados actualmente en computación científica (donde se demandan velocidades de cómputo muy elevadas), en aplicaciones de predicción (meteorológica, de terremotos, de dinámica de fluídos, etc) así como en las tarjetas gráficas que a su vez están incluidas en las consolas de videojuegos más modernas de hoy en día. 


Ventajas del procesamiento vectorial:
  • Permiten una gran segmentación pues los cálculos con cada elemento del vector suelen ser independientes.
  • Cada instrucción vectorial equivale a un bucle, con los procesadores vectorial se evita tener que controlar el bucle.
  • Las instrucciones vectoriales que acceden a memoria tienen un patrón de acceso predecible. Se puede organizar los datos en memoria entrelazadas para obtener un buen rendimiento de acceso a los datos.



Características específicas de las máquinas vectoriales.
  • Instrucciones especiales para operar vectores, incluidas dentro del juego de instrucciones del procesador.
  • Registros separados para vectores y para escalares. Los procesadores vectoriales suelen tener un registro especial para indicar el número de elementos que componen el vector.
  • Ejecución de las operaciones a través de segmentación, no hay varias unidades de ejecución paralelas.
  • Necesidad de sistemas de memoria con un gran ancho de banda.


Fig.1, 2  RISC vs PROCESADOR VECTORIAL
Fuente: (Callicó, 2004)

Fuente: (Callicó, 2004)


BIBLIOGRAFÍA Y PÁGINAS WEB
  • Arquitectura de Computadoras y Procesamiento Paralelo. Kai Hwang y Fayé A. Briggs. McGraw-Hill, 1987.
  • Computer Architecture, single and parallel systems. Mehdi R. Zargham. Prentice-Hall, 1996.
  • Computer architecture: pipelined and parallel processor design. Michael J. Flynn. Jones and Bartlett, 1995.
  • Organización y Arquitectura de Computadores, diseño para optimizar prestaciones. William Stallings. Prentice Hall, cuarta edición, 1996.
  • See MIPS Run. D. Sweetman. Morgan Kaufmann Publications, 2002.
  • Parallel Vector Processing; http://www.epcc.ed.ac.uk/HPCinfo/hware-pvp.html (HPC Info)
  • Arquitectura de computadores; Julio Ortega, Mancia Anguita y Alberto Prieto (Thomson, 2004)


PROCESADORES VECTORIALES


LOS PROCESADORES VECTORIALES
Para poder entender mucho mejor sobre lo que es y cómo funciona un procesador vectorial, es necesario tomar en cuenta las siguientes definiciones.
Se llama vector a una secuencia de datos escalares del mismo tipo almacenados en memoria, normalmente en posiciones contiguas, aunque no siempre.

Un procesador vectorial es un conjunto de recursos para efectuar operaciones sobre vectores. Estas operaciones consistirán en funciones aritméticas y lógicas aplicadas sobre los componentes de los vectores. La diferencia entre un procesador vectorial y uno escalar estriba en que el procesador vectorial puede decodificar instrucciones cuyos operandos son vectores completos. La conversión de un programa correspondiente a un procesador escalar a otro vectorial se llama vectorización.

PROCESAMIENTO VECTORIAL
Un operando vectorial contiene una secuencia de n elementos, llamados componentes, donde n es la longitud del vector. Cada componente del vector es un escalar de cualquier tipo (entero, punto flotante, etc.). Los operadores vectoriales pueden tener cinco formas, ver Fig.1.

Fig.1. Ejemplos de operadores vectoriales.


Fuente:(Bastida, 2006)

Las máquinas vectoriales proporcionan operaciones que trabajan sobre vectores. Una instrucción vectorial es equivalente a  un bucle completo de instrucciones ordinarias, donde cada iteración trabaja sobre cada una de las componentes del vector. Las operaciones vectoriales tiene algunas ventajas sobre las escalares:

- En las operaciones vectoriales, cada resultado es independiente de los  anteriores.
- Una simple instrucción vectorial sustituye a muchas escalares, teniendo un cuello de botella pequeño.
- Las instrucciones vectoriales que precisan acceder a memoria, lo hacen con un patrón de acceso fijo (normalmente serán adyacentes). Esto facilitará su lectura paralela mediante una memoria entrelazada.
- Si se utiliza una instrucción vectorial, evitaremos el riesgo de control de salto de bucle.
Por todas estas razones, las operaciones vectoriales pueden ejecutarse de forma rápida que la secuencia de instrucciones equivalentes sobre el mismo conjunto de datos.


ARQUITECTURA DE LOS PROCESADORES VECTORIALES.

PROCESADOR VECTORIAL MEMORIA-MEMORIA.
Es capaz de extraer dos vectores de memoria y operar sobre ellos. El inconveniente de este tipo de máquinas sería el cuello de botella que supondrían los accesos de memoria
Para mejorar se debe aumentar el ancho debanda de la memoria, esto se consigue entrelazando memorias, de modo que se tenga varios módulos y se pueda acceder de manera simultánea a varias posiciones consecutivas que se hallen en módulos diferentes. Además de añadir una memoria intermedia de mayor velocidad entre la memoria y el procesador.


Fig.2. Procesador vectorial memoria-memoria.
Fuente:(Bastida, 2006)


Fig.3. Procesador vectorial registro-registro

Fuente:(Bastida, 2006)


PROCESADOR VECTORIAL REGISTRO-REGISTRO.
Son procesadores vectoriales que dispongan de un banco o registros vectoriales que hagan de memoria intermedia, generalmente los procesadores vectoriales actúan como coprocesadores de procesadores escalares que trata las instrucciones no vectoriales. Los computadores vectoriales se pueden considerar cómo computadoras del tipo SIMD de Flynn, sin embargo hay que tener en cuenta, que si bien los procesadores vectoriales ejecutan la misma instrucción sobre datos diferentes, estos datos forman parte del mismo flujo, por eso se los llama máquinas SIMD vectoriales.

PROBLEMAS DE LOS PROCESADORES VECTORIALES.
1. El problema de la longitud de los vectores, mesto en los procesadores vectoriales del tipo registro – registro, ya que la capacidad de almacenamiento de los registros vectoriales es limitada.
2. Otro problema es el proceso de vectores cuyas componentes no son adyacentes a memoria. Este es el caso de la multiplicación de matrices, que se puede convertir en multiplicación de vectores.
3. Finalmente se puede plantear el problema de dependencia de datos entre los diferentes vectores que intervienen en el cálculo, pero esto resuelve con el encadenamiento, que consiste en imponer solo dos condiciones para comenzar la operación vectorial.

RENDIMIENTO DE LOS PROCESADORES VECTORIALES.
Para el cálculo del rendimiento de los procesadores vectoriales debemos tomar en cuenta:
1. El tiempo necesario para procesar cada componente en una pasada del bucle.
2. El tiempo de inicialización de cada bucle provocado por el seccionamiento.
3. El tiempo ocupado por el arranque del programa, carga inicial de los vectores en los registros, etc (BASTIDA, 2006).


BIBLIOGRAFÍA Y PÁGINAS WEB
  • BASTIDA, Javier Ibañez (2006). Arquitectura de Computadores. Universidad de Valladolid. España.











jueves, 11 de abril de 2013

ARQUITECTURA PARALELA VS SEGMENTADA


ARQUITECTURAS PARALELAS


Un computador paralelo es un conjunto de elementos de proceso que se comunican y cooperan para resolver rápidamente grandes problemas, se puede decir que la arquitectura paralela es la unión de la arquitectura convencional y la arquitectura de comunicación.

El procesamiento paralelo es un término que se usa para denotar un grupo de técnicas significativas que se usan para proporcionar tareas simultáneas de procesamiento de datos con el fin de aumentar la velocidad computacional de un sistema de computadoras. En lugar de procesar cada instrucción en forma secuencial como es una computadora convencional, un sistema de procesamiento paralelo puede ejecutar procesamiento concurrente de datos para conseguir un menor tiempo de ejecución. Por ejemplo, cuando se ejecuta una instrucción en la ALU, puede leerse la siguiente instrucción de la memoria.

“La arquitectura paralela o de líneas paralelas (pipe-line) es una técnica en la que se descompone un proceso secuencial en sub operaciones, y cada subproceso se ejecuta en un segmento dedicado especial que opera en forma concurrente con los otros segmentos” (Morris, Pág. 322.)

El procesamiento paralelo puede considerarse de diversos niveles de complejidad. En el nivel mas bajo, distinguimos entre operaciones seriales y paralelas mediante el tipo de registros que utilizan. Los registros de corrimiento operan en forma serial un bit a la vez, mientras que los registros con carga paralela operan con todos los bits de la palabra en forma simultanea.

ARQUITECTURA DE FLYNN

La taxonomía de Flynn es una clasificación de arquitecturas de computadoras propuesta por Michael J. Flynn. En 1972.Las cuatro clasificaciones definidas por Flynn se basan en el número de instrucciones concurrentes (control) y en los flujos de datos disponibles en la arquitectura.

En 1966, Flynn propuso un sencillo modelo de organización de computadores que aun en la actualidad se utilizan conforme fue propuesto. Flynn Escrutó los componentes mas decisivos de la maquina, contando el numero de instrucciones paralelas y su flujo de datos, clasificando a posteriori los sistemas de información de las siguiente forma:

A.      SISD: Single Instruction; Single Data.
B.      SIMD: Single Instruction; Multiple Data.
C.      MISD: Multiple Instruction, Single data.
D.     MIMD: Multiple Instruction; Multiple Data

Las maquinas utilizadas por Flynn fueron los IBM 740 y 7090, modelos SISD de la época; Hoy en día podríamos utilizar los MIPS R2000 y R3000 como modelos SISD. Proponemos pues como arquitecturas para este tema, los SIMD y los MIMD.

·     Los computadores SIMD operan perfectamente sobre arrays (Vectores de datos). SIMD posee múltiples unidades funcionales para paralelizar el trabajo. Su virtud es que todas estas unidades funcionales de ejecución en paralelo están sincronizadas y todas responden adecuadamente a una sola instrucción que proviene de un único contador de programa.

Si analizamos las maquinas del tipo MIMD, encontraremos una idea de diseño bastante utópica; es llamado “El Dorado” de los computadores: Diseñar computadores potentes y mediante la conexión de otros de menor tamaño.

ARQUITECTURAS SEGMENTADAS

La segmentación (pipelining) es una técnica de implementación de procesadores que desarrolla el paralelismo a nivel de intrainstrucción. Mediante la segmentación se puede solapar la ejecución de múltiples instrucciones. El procesamiento segmentado aprovecha la misma filosofía de trabajo de fabricación en cadena, donde cada etapa de la segmentación completa una parte (subtarea) de la tarea total. Los segmentos están conectados cada uno con el siguiente, que forma de la salida de uno pasa a ser la entrada de la siguiente. Así los segmentos configuran un cauce a través del proceso de la tarea deseada, los procesadores segmentados también se conocen como procesadores encauzados. Una gran contribución de la segmentación es la posibilidad de comenzar una nueva tarea sin tener que acabar una anterior. La medida de eficacia de un procesador segmentado no es el tiempo transcurrido desde que comienza y termina una tarea, sino el tiempo máximo que puede pasar entre la finalización de dos tareas consecutivas.

Evidentemente no es posible la segmentación sin el incremento de recursos de procesos.

Fig.1. Tarea procesada secuencialmente.



Fuente:(Bastida, 2006).

Fig.2. Tarea ejecutada mediante un procesador segmentado.




Fuente:(BASTIDA, 2006).

Al número de segmentos del procesador, se le llama profundidad de la segmentación. Para que el tiempo de latencia de un procesador segmentado sea mínimo el procesador debe estar equilibrado, es decir que todas las tareas divididas tarden el mismo tiempo.

CLASIFICACIÓN

Puede establecerse una clasificación de los procesadores segmentados atendiendo al uso que se da a la segmentación. Esta clasificación fue propuesta por Handler (1977):
  •            Segmentación Aritmética.
  •      Segmentación de instrucciones.
  •      Segmentación de procesadores.

CONFLICTOS Y SUS TIPOS

Hay circunstancias que pueden disminuir el rendimiento de un procesador segmentado debido a que provocan la detención del cauce. Estas circunstancias se denominan riesgos o conflictos, existiendo tres tipos:
  • Conflictos estructurales.
  • Conflictos por dependencia de datos.
  • Conflictos de control (BASTIDA, 2006).
BIBLIOGRAFÍA
  • BASTIDA, Javier Ibañez (2006). Arquitectura de Computadores. Universidad de Valladolid. España.
  • M. Morris Mano (1994), Arquitectura de computadoras 3 Edicion. Editorial: Phyllis Morgan.