1.1.1
Arquitecturas Clásicas.
Estas
arquitecturas se desarrollaron en las primeras computadoras electromecánicas y
de tubos de vacío. Aun son usadas en procesadores empotrados de gama baja y son
la base de la mayoría de las arquitecturas modernas.
Arquitectura
Mauchly-Eckert (Von Newman)
Esta
arquitectura fue utilizada en la computadora ENIAC. Consiste en una unidad
central de proceso que se comunica a través de un solo bus con un banco de
memoria en donde se almacenan tanto los códigos de instrucción del programa,
como los datos que serán procesados por este.
Esta
arquitectura es la más empleada en la actualidad ya, que es muy versátil.
Ejemplo de esta versatilidad es el funcionamiento de los compiladores, los
cuales son programas que toman como entrada un archivo de texto conteniendo
código fuente y generan como datos de salida, el código máquina que corresponde
a dicho código fuente (Son programas que crean o modifican otros programas).
Estos datos de salida pueden ejecutarse como un programa posteriormente ya que
se usa la misma memoria para datos y para el código del programa.
Figura
1.1.1.2 Diagrama a bloques de la arquitectura Von Newman.
La
principal desventaja de esta arquitectura, es que el bus de datos y direcciones
único se convierte en un cuello de botella por el cual debe pasar toda la
información que se lee de o se escribe a la memoria, obligando a que todos los
accesos a esta sean secuenciales. Esto limita el grado de paralelismo (acciones
que se pueden realizar al mismo tiempo) y por lo tanto, el desempeño de la
computadora. Este efecto se conoce como el cuello de botella de Von Newman.
En esta
arquitectura apareció por primera vez el concepto de programa almacenado.
Anteriormente la secuencia de las operaciones era dictada por el
alambrado de la unidad de control, y cambiarla implicaba un proceso de
recableado laborioso, lento (hasta tres semanas) y propenso a errores. En esta
arquitectura se asigna un código numérico a cada instrucción. Dichos códigos se
almacenan en la misma unidad de memoria que los datos que van a procesarse,
para ser ejecutados en el orden en que se encuentran almacenados en memoria.
Esto permite cambiar rápidamente la aplicación de la computadora y dio origen a
las computadoras de propósito general.
Mas a
detalle, el procesador se subdivide en una unidad de control (C.U.), una unidad
lógica aritmética (A.L.U.) y una serie de registros. Los registros sirven para
almacenar internamente datos y estado del procesador. La unidad aritmética
lógica proporciona la capacidad de realizar operaciones aritméticas y lógicas.
La unidad de control genera las señales de control para leer el código de las
instrucciones, decodificarlas y hacer que la ALU las ejecute.
Arquitectura
Harvard
Esta
arquitectura surgió en la universidad del mismo nombre, poco después de que la
arquitectura Von Newman apareciera en la universidad de Princeton. Al igual que
en la arquitectura Von Newman, el programa se almacena como un código
numérico en la memoria, pero no en el mismo espacio de memoria ni en el mismo
formato que los datos. Por ejemplo, se pueden almacenar las instrucciones en
doce bits en la memoria de programa, mientras los datos de almacenan en ocho
bits en una memoria aparte.
Figura
1.1.1.2 Diagrama a bloques de la arquitectura Harvard
El
hecho de tener un bus separado para el programa y otro para los datos permite
que se lea el código de operación de una instrucción, al mismo tiempo se lee de
la memoria de datos los operados de la instrucción previa. Así se evita el
problema del cuello de botella de Von Newman y se obtiene un mejor desempeño.
En la
actualidad la mayoría de los procesadores modernos se conectan al exterior de
manera similar a a la arquitectura Von Newman, con un banco de memoria masivo
único, pero internamente incluyen varios niveles de memoria cache con bancos
separados en cache de programa y cache de datos, buscando un mejor desempeño
sin perder la versatilidad.
1.1.2
Arquitecturas Segmentadas.
Las
arquitecturas segmentadas o con segmentación del cauce buscan mejorar el
desempeño realizando paralelamente varias etapas del ciclo de instrucción al
mismo tiempo. El procesador se divide en varias unidades funcionales
independientes y se dividen entre ellas el procesamiento de las
instrucciones.
Para
comprender mejor esto, supongamos que un procesador simple tiene un ciclo
de instrucción sencillo consistente solamente en una etapa de búsqueda del
código de instrucción y en otra etapa de ejecución de la instrucción. En un
procesador sin segmentación del cauce, las dos etapas se realizarían de manera
secuencial para cada una de las instrucciones, como lo muestra la siguiente
figura.
Figura
1.1.2.1 Búsqueda y ejecución en secuencia de tres instrucciones en un
procesador sin segmentación del cause
En un
procesador con segmentación del cauce, cada una de estas etapas se asigna a una
unidad funcional diferente, la búsqueda a la unidad de búsqueda y la ejecución
a la unidad de ejecución. Estas unidades pueden trabajar en forma paralela en
instrucciones diferentes. Estas unidades se comunican por medio de una cola de
instrucciones en la que la unidad de búsqueda coloca los códigos de instrucción
que leyó para que la unidad de ejecución los tome de la cola y los ejecute.
Esta cola se parece a un tubo donde las instrucciones entran por un extremo y
salen por el otro. De esta analogía proviene el nombre en inglés: Pipelining o
entubamiento.
Figura
1.1.2.3 Comunicación entre las unidades en un procesador con segmentación de
cauce.
Completando
el ejemplo anterior, en un procesador con segmentación, la unidad de búsqueda
comenzaría buscando el código de la primera instrucción en el primer ciclo de
reloj. Durante el segundo ciclo de reloj, la unidad de búsqueda obtendría el
código de la instrucción 2, mientras que la unidad de ejecución ejecuta la
instrucción 1 y así sucesivamente. La siguiente figura muestra este proceso.
En este
esquema sigue tomando el mismo número de ciclos de reloj (el mismo tiempo),
pero como se trabaja en varias instrucciones al mismo tiempo, el número
promedio de instrucciones por segundo se multiplica. La mejora en el
rendimiento no es proporcional al número de segmentos en el cauce debido a que
cada etapa no toma el mismo tiempo en realizarse, además de que se puede
presentar competencia por el uso de algunos recursos como la memoria principal.
Otra razón por la que las ventajas de este esquema se pierden es cuando se
encuentra un salto en el programa y todas las instrucciones que ya se buscaron
y se encuentran en la cola, deben descartarse y comenzar a buscar las
instrucciones desde cero a partir de la dirección a la que se saltó. Esto reduce
el desempeño del procesador y aún se investigan maneras de predecir los saltos
para evitar este problema.
Figura
1.1.2.4 Consecuencias de la competencia por un recurso.
1.1.3
Arquitecturas de Multi-procesamiento.
Cuando se desea incrementar el desempeño más aya de lo que permite la técnica de segmentación del cauce (limite teórico de una instrucción por ciclo de reloj), se requiere utilizar más de un procesador para la ejecución del programa de aplicación.
Las CPU
de multiprocesamiento se clasifican de la siguiente manera (Clasificación de
Flynn):
●
SISO – (Single Instruction, Single Operand)
computadoras Monoprocesador
●
SIMO – (Single Instruction, Multiple Operand) procesadores
vectoriales, Exenciones MMX
●
MISO – (Multiple Instruction, Single Operand) No
implementado
●
MIMO – (Multiple Instruction, Multiple Operand) sistemas SMP, Clusters,
GPUs
Procesadores
vectoriales – Son computadoras pensadas para aplicar un mismo algoritmo
numérico a una serie de datos matriciales, en especial en la simulación de
sistemas físicos complejos, tales como simuladores para predecir el clima,
explosiones atómicas, reacciones químicas complejas, etc., donde los datos son
representados como grandes números de datos en forma matricial sobre los que se
deben se aplicar el mismo algoritmo numérico.
La
mayoría de los procesadores modernos incluye algunas instrucciones de tipo
vectorial, tales como las extensiones al conjunto de instrucciones tales como
MMX y SSE. Estas instrucciones les permiten procesar flujos multimedia más
eficientemente.
Los
Procesadores Digitales de Señales (DSP), son procesadores especializados en el
procesamiento de señales tales como audio, vídeo, radar, sonar, radio, etc.
Cuentan con instrucciones tipo vectorial que los hace muy aptos para dicha
aplicación. Suelen utilizarse en conjunto con un microcontrolador en
dispositivos como reproductores de audio, reproductores de dvd y Blueray,
teléfonos celulares, sistemas de entretenimiento, sistemas de adquisición de
datos, instrumentos médicos, controles industriales, etc.
En los
sistemas SMP (Simetric Multiprocesesors), varios procesadores comparten la
misma memoria principal y periféricos de I/O, Normalmente conectados por un bus
común. Se conocen como simétricos, ya que ningún procesador toma el papel de
maestro y los demás de esclavos, sino que todos tienen derechos similares en
cuanto al acceso a la memoria y periféricos y ambos son administrados por el
sistema operativo.
Pueden
formarse con varios núcleos en un solo circuito integrado o con varios
circuitos integrados en una misma tarjeta madre. La primera opción ha sido
popularizada al hacerse más económicos los procesadores multinucleo de los
principales fabricantes y con su uso en sistemas de gama media y baja, e
inclusive en teléfonos celulares y tabletas. La segunda opción fue la que se
uso en un principio y sigue siendo usada en en estaciones de trabajo y en
servidores de alto rendimiento debido a que incrementa el poder computacional del
sistema, pero también incrementa considerablemente el costo del sistema.
Figura
1.1.3.1 Diagrama a bloques de un sistema multi-procesador simétrico.
Los
Clústers son conjuntos de computadoras independientes conectadas en una red de
área local o por un bis de interconexión y que trabajan cooperativamente para
resolver un problema. Es clave en su funcionamiento contar con un sistema
operativo y programas de aplicación capaces de distribuir el trabajo entre las
computadoras de la red. Este tipo de computadora paralela se ha vuelto muy
popular por que permite usar los avances en los procesadores comerciales que
tienen una muy buena relación costo rendimiento y se puede incorporar
rápidamente los avances que proporciona las nuevas tecnologías en cuanto es
económicamente viable.
Sin
embargo, se debe tener cuidado al implementar la aplicación, ya que si los
datos que hay que pasar de un procesador a otro son demasiados, el tiempo
empleado en pasar información de un nodo a otro puede sobrepasar a la ganancia
que se tiene al dividir el trabajo entre varios procesadores.
Figura
1.1.3.2 Diagrama a bloques de un cluster.
Las
unidades de procesamiento gráfico (Graphics Processing Unit GPU) –
sistemas diseñados originalmente para el procesamiento de Gráficos, con
múltiples procesadores vectoriales sencillos compartiendo la misma memoria, la
cual también puede ser accedida por el CPU. Por la gran cantidad de núcleos con
los que cuenta, logran un excelente desempeño al ejecutar algoritmos que se
adaptan a ser paralelizados, a tal grado que muchas de las supercomputadoras
más rápidas de la actualidad utilizan estos procesadores, y los fabricantes de
tarjetas gráficas producen versiones de sus productos especializadas en
acelerar los cálculos de propósito general.
Figura 1.1.3.3
Diagrama a bloques de una unidad de procesamiento gráfico.