Está en la página 1de 11

Unidad 4

1 //Escenario
Escenario27
Lectura fundamental
Fundamental

Etapas de un plan de comunicación


estratégica Paralela
Computación

Contenido

1 Arquitecturas paralelas

2 Tipos y niveles de paralelismo

3 Relación entre el software y el hardware para el procesamiento paralelo

4 Programación vectorial

Palabras clave: computación paralela, pipeline, programación paralela, Programación Vectorial


1. Arquitecturas paralelas
De acuerdo con Culler (1999), la evolución de la arquitectura del computador se puede resumir
en dos grandes conceptos: paralelismo y localidad. El paralelismo, sin importar su nivel, se refiere
al procesamiento de varias tareas, instrucciones o datos a la vez, utilizando distintos recursos de
hardware. La localidad se refiere a facilitar el acceso a instrucciones o datos, para que se puedan leer o
escribir en memoria más rápidamente.

Debido a las muchas estrategias que se han desarrollado para lograr el procesamiento en paralelo de la
información, se ha creado una nueva rama denominada “Computación Paralela”, que será introducida
en este escenario. La computación paralela se refiere al estudio de los procesos en los que se computa
información de forma concurrente (a la vez) (Aguilar & Leiss, 2004).

¡RECUERDA!...
La evolución de la arquitectura del computadorha sido
marcada por dos grandes hitos:paralelismo y localidad.

La necesidad de crear sistemas de hardware y software capaces de ejecutar tareas en paralelo, está
estrechamente ligada con la de reducir el tiempo de ejecución de las tareas. Según Hoeger (n.d.), la
eficiencia de un computador se mide en términos del tiempo que tarda el computador en ejecutar
una instrucción simple y el número de instrucciones simples que se pueden ejecutar a la vez. Lograr
la ejecución de tareas de forma paralela, se ha conseguido a través de mejoras en la estructura del
computador haciendo uso de tecnologías existentes, y a través de la investigación en física y química,
que ha permitido el avance tecnológico, por ejemplo, en la integración de circuitos embebidos con
más transistores en un mismo encapsulado.

En la Figura 1, modificada de Hoeger (n.d.), se observa la evolución de los computadores en


términos de su eficiencia. La figura se divide en las siguientes categorías: Supercomputadores,
mainframes, minicomputadores y microprocesadores. Esta lista se encuentra ordenada, según la
capacidad de procesamiento, de mayor a menor. Como se observa, la curva de crecimiento de los
pequeños computadores ha sido mucho más pronunciada, pues en décadas anteriores, solo las
grandes computadoras incluían sistemas de procesamiento en paralelo. Solo hasta hace poco, las
computadoras de casa y personales, empezaron a incluir procesamiento en paralelo a través de
múltiples núcleos y procesadores.

POLITÉCNICO GRANCOLOMBIANO 2
2. Tipos y niveles de paralelismo

2.1. Clasificación de Flynn

Existen muchas formas de clasificar la computación paralela. Una de las más clásicas, es la
clasificación de Flynn, que se basa en el flujo de instrucciones y cantidad de datos que pueden
ser procesados a la vez (Aguilar & Leiss, 2004). En esta clasificación se encuentran las siguientes
categorías:

2.1.1. SISD (Single Instruction Single Data)

Este es el caso de las computadoras clásicas, en el que un programa es ejecutado usando solamente
el conjunto de datos que corresponde a él. Se pueden ejecutar programas en paralelo, a través de una
forma concurrente especial, que funciona por turnos. Así, se ejecuta una tarea de un programa, luego
otra de otro programa, etc.

2.1.2. SIMD (Single Instruction Multiple Data)

Este caso corresponde a los arreglos de procesadores. Aquí, una instrucción es enviada por la unidad
de control, a múltiples procesadores configurados en forma de arreglo, que actúan como esclavos.
Los datos procesados se encuentran en una memoria compartida, o puede manejarse una unidad de
memoria por cada procesador del arreglo. Es fundamental la sincronización para poder ejecutar un
programa correctamente.

2.1.3. MISD (Multiple Instruction Single Data)

Esta categoría corresponde a los computadores en los que existen múltiples unidades de
procesamiento, cada una encargado de ejecutar una tarea distinta. En este caso, los datos que se van
a procesar se envían como paquete a cada procesador, para que pueda hacer su tarea.

POLITÉCNICO GRANCOLOMBIANO 3
2.1.4. MIMD (Multiple Instruction Multiple Data)

Es considerado el modelo de paralelismo más general. Son múltiples unidades de procesamiento,


que pueden ejecutar tareas distintas con datos distintos, o tareas diferentes con el mismo conjunto
de datos. Es fundamental la sincronización, cuando se ejecutan tareas múltiples sobre un mismo
conjunto de datos. El acoplamiento de un computador de esta categoría es fuerte, si las unidades de
procesamiento interactúan frecuentemente entre sí.

EN SÍNTESIS...
La clasificación de Flynn para procesamiento en paralelo de información identifica cuatro grandes
categorías: SISD (Una instrucción, Un Dato), SIMD (Una instrucción, Múltiples Datos), MISD (Múltiples
Instrucciones, Un Dato), MIMD (Múltiples Instrucciones, Múltiples Datos).

2.2. Paralelismo según el nivel

Otra forma común para clasificar el procesamiento en paralelo es según el nivel en el que ocurre. De
acuerdo con esta clasificación, se tienen las siguientes categorías:

1. A nivel de trabajo: Cuando dos o más programas distintos se ejecutan a la vez

2. A nivel de tarea: Una tarea se entiende como una parte de un programa particular; a este nivel
se pueden ejecutar varias tareas de un mismo programa en concurrencia

3. A nivel de proceso: se pueden ejecutar a la vez varios procesos que componen una misma tarea.

4. A nivel de instrucción: Cuando una instrucción se segmenta en varias etapas, y el hardware del
computador puede ejecutar a la vez etapas distintas de instrucciones diferentes. Finalmente:

5. A nivel de bit: que se ejecuta en todas las computadoras hoy en día, corresponde a la operación
de varios bits a la vez; este paralelismo depende esencialmente del tamaño de la palabra (32bits
y 64bits son los tamaños más comunes hoy en día).

POLITÉCNICO GRANCOLOMBIANO 4
2.2.1. Pipeline

El pipeline se refiere a las etapas por las que pasa una instrucción, desde que inicia hasta que finaliza
su ejecución. La cantidad y propósito de las etapas depende del computador específico; sin embargo,
hoy en día la mayoría de computadores cuentan con pipelines de 4 o 5 etapas. Entonces, por ejemplo,
un pipeline clásico de 4 etapas tiene: Lanzamiento de instrucción, Decodificación de instrucción,
Disposición de operandos y Ejecución.

El pipeline permite la ejecución de varias instrucciones a la vez, siempre y cuando la arquitectura del
hardware permita recursos de hardware distintos para cada una de las etapas. De manera similar a
como ocurre un proceso en serie, por ejemplo, de ensamble de autos, la unidad de control podría
lanzar la primera instrucción y cuando ésta pase a la segunda etapa (decodificación), ir lanzando la
segunda instrucción. Adicionalmente, para que el paralelismo funcione correctamente, es necesario
que todas las etapas duren exactamente el mismo tiempo.

Todas las arquitecturas modernas implementan paralelismo a nivel de instrucción usando pipeline.
Realmente no es que cada instrucción se ejecute más rápido, sino que se pueden ejecutar más
instrucciones en menos tiempo.

2.2.2. Procesadores superescalares

Este tipo de procesadores ejecutan varias instrucciones en un mismo ciclo de reloj, mientras que
los procesadores escalares solo ejecutan una instrucción en cada ciclo de reloj. El procesador
superescalar clásico tiene 6 etapas de pipeline: lanzamiento (L), decodificación (D), disposición
de operandos (O), ejecución (E), escritura (W) y finalización (F). Para lograr la ejecución de las
diferentes etapas, la ALU, Unidad de lectura/escritura de la memoria RAM, Unidad de punto flotante,
entre otras, deben ser unidades de hardware independientes. Adicionalmente, para ejecutar más de
una instrucción a la vez, las instrucciones deben ser independientes entre sí. Es decir, no debe haber
relación entre ellas. Cuando se relacionan, se habla de un “hazard”, por ejemplo, cuando el resultado
de una es el operando de la siguiente, o cuando la instrucción es un condicional y no se sabe qué
instrucción sigue sino hasta que se termine de ejecutar la condición.

Una de las ventajas de este tipo de procesadores es que permiten la ejecución masiva de instrucciones
en paralelo; sin embargo, hay problemas de secuencialidad, es difícil determinar qué instrucciones son
paralelizables y puede ser más costoso, en términos de tiempo, deshacer una instrucción en caso de
que se haya iniciado incorrectamente su ejecución (Tosini, 2015).

POLITÉCNICO GRANCOLOMBIANO 5
2.2.3. Paralelismo de datos

Este tipo de paralelismo se utiliza en los casos en los que se debe aplicar un mismo conjunto de
operaciones a diferentes datos. Por ejemplo cuando se ejecutan operaciones sobre vectores y
matrices (Computación gráfica) en los que se deben realizar las mismas tareas, pero con datos
diferentes. Bajo este paradigma de paralelismo, un conjunto de datos se subdivide en subconjuntos,
cada uno de los cuales es entregado a un procesador distinto. Cada procesador ejecuta exactamente
la misma tarea, pero sobre su subconjunto de datos (Aguilar & Leiss, 2004).

2.2.4. Paralelismo de tareas

A diferencia del paralelismo de datos, en este caso se entrega una tarea distinta a cada procesador, de
manera que cada uno ejecuta una secuencia de instrucciones diferente. Al paralelizar tareas es posible
que operen sobre el mismo conjunto de datos, o sobre conjuntos de datos diferentes. Generalmente,
las tareas se distribuyen y ejecutan de acuerdo a lo que se define en un grafo de tareas. La práctica
de programación que divide grandes tareas en pequeñas sub-tareas (divide y vencerás) está
estrechamente ligada a esta técnica de paralelismo (Aguilar & Leiss, 2004).

POLITÉCNICO GRANCOLOMBIANO 6
3. Relación entre el software y el hardware para el procesamiento
paralelo.
Uno de los principales problemas en el desarrollo de software es lograr el aprovechamiento al máximo
de los recursos del hardware que ejecutará dicho software. Si bien se puede desarrollar una aplicación
que corra en un computador de múltiples núcleos, si la aplicación no fue desarrollada adecuadamente,
entonces sólo correrá en uno de los núcleos o procesadores y será desaprovechado el recurso
de hardware disponible. Es por lo anterior que el desarrollo de lenguajes de programación, APIs,
bibliotecas, entre otros, propios para la programación paralela, ha sido fundamental y ha ocurrido casi
al tiempo que la evolución a nivel de hardware para el procesamiento paralelo de información.

3.1. Programación paralela

La necesidad de producir software adecuado para los diferentes tipos de procesadores paralelos,
ha derivado en un campo del conocimiento y área de investigación asociado al software de
la computación paralela. Entre otros, este campo del conocimiento ha generado un área
correspondiente al diseño de algoritmos paralelos, que incluyen:

A. Particionamiento: Consiste en descomponer las tareas en sub-tareas.

B. Comunicación: El particionamiento genera un conjunto de sub-tareas que se pueden ejecutar


al tiempo (concurrentemente), pero no de manera independiente. La fase de comunicación se
refiere a permitir que se puedan comunicar los resultados entre tareas, en el momento en que se
requiera.

C. Aglomeración: Tras determinar las sub-tareas y formas de comunicación entre ellas, se realiza
una evaluación de cómo sería su desempeño. En la etapa de aglomeración se busca mejorar el
rendimiento, por ejemplo, re-agrupando sub-tareas en tareas más grandes.

D. Mapeo: Corresponde a la asignación de las tareas generadas en la etapa de aglomeración, a los


procesadores que las ejecutarán.

SABÍA QUE...
El diseño de algoritmos paralelos se divide en 4 grandes etapas:
Particionamiento, Comunicación, Aglomeración y Mapeo.

POLITÉCNICO GRANCOLOMBIANO 7
Al hablar de programación paralela, aparecen dos conceptos que es importante comprender:
concurrencia y sincronización.

3.1.1. Concurrencia

Es una propiedad en los sistemas de cómputo, que refiere a la ejecución de múltiples procesos a la
vez, que pueden interactuar entre sí. La concurrencia es un concepto amplio que aplica tanto para el
procesamiento sobre procesadores físicamente distintos, como a la virtualización, cuando se tienen
hilos de ejecución separados.

3.1.2. Sincronización

En el caso de la computación paralela, la sincronización ocurre cuando más de un proceso ocurre a


la vez, completando cada uno una parte de una gran tarea, y es necesario hacer coincidir los distintos
resultados para evitar desembocar en estados indeterminados. Cuando se requiere iniciar un proceso
partiendo de los resultados de otros procesos, que se ejecutan de forma independiente, se crea una
“condición de carrera” cuando los procesos parámetro no están disponibles a tiempo. Las condiciones
de carrera se traducen en bugs que pueden generar estados no deseados o indeterminados como
resultado del proceso.

4. Programación vectorial
Este tipo de programación está íntimamente relacionada con el concepto de vector. Una
forma sencilla de entender un vector, es como un conjunto de datos ordenados linealmente. La
programación vectorial, ejecutada sobre procesadores vectoriales y a diferencia de la programación
escalar, permite que las instrucciones se ejecuten sobre datos estructurados en forma de vector.
Esto quiere decir que se puede actuar sobre más de un dato a la vez a nivel de hardware: cada
instrucción vectorial, sobre conjuntos de vectores de tamaño n, es equivalente a un ciclo de n
instrucciones escalares. Adicionalmente, este tipo de programación impide la interdependencia entre
datos escalares, pues todos los escalares de un mismo vector, se procesan a la vez. Finalmente, la
programación vectorial puede acceder más rápidamente a datos de memoria, dado que siguen un
patrón fijo, permitiendo mayor velocidad en el procesamiento general de los datos. A continuación se
presentan algunas ventajas de la programación vectorial (Valdazo, R., Vilaboa, A., n.d.):

POLITÉCNICO GRANCOLOMBIANO 8
• Cada resultado es independiente de los anteriores. Es el compilador quien define qué datos son
independientes para armar el vector, por lo que en tiempo de ejecución no hay conflictos por
dependencia de datos.

• Cada instrucción vectorial reemplaza un ciclo de instrucciones escalares, disminuyendo el


tiempo de ejecución.

• Generalmente los datos vectorizados se organizan de forma consecutiva en la memoria,


haciendo los tiempos de lectura y escritura menores.

POLITÉCNICO GRANCOLOMBIANO 9
Referencias
Aguilar, J. & Leiss, E. (2004) Introducción a la Computación Paralela. Universidad de los Andes,
Mérida, Venezuela. Recuperado de: http://www.ing.ula.ve/~aguilar/publicaciones/objetos/libros/ICP.
pdf Septiembre de 2017.

Culler, D.E.; Singh, J.P.; Gupta, A. (1999). Parallel Computer Architecture. A Hardware/Software
Approach. Morgan Kaufmann Pub. Inc.

Patterson, D. A. & Hennessy, J.L. (1998) Computer Organization & Design.2nd ed. Morgan
Kaufmann Publishers: San Francisco.

Tosini, M. (2015) Introducción a las Arquitecturas Paralelas. Arquitectura de Computadoras II,


Recuperado de: http://www.exa.unicen.edu.ar/catedras/arqui2/arqui2/filminas/Introduccion%20
a%20las%20arquitecturas%20Paralelas.pdf Septiembre de 2017

Valdazo, R. & Vilaboa, A. (n.d.). Programación Vectorial. Recuperado de: http://www.atc.uniovi.es/


inf_superior/4atc/trabajos/paralelas/3-Programacion%20Vectorial-memoria.pdf Septiembre 2017.

POLITÉCNICO GRANCOLOMBIANO 10
INFORMACIÓN TÉCNICA

Módulo: Arquitectura del Computador


Unidad 4: Computación Paralela
Escenario 7: Computación Paralela

Autor: Laura Juliana Cortés Rico

Asesor Pedagógico: Edwin Alcides Mojica Quintero


Diseñador Gráfico: Carlos Montoya
Asistente: Ginna Quiroga

Este material pertenece al Politécnico Grancolombiano. Por


ende, es de uso exclusivo de las Instituciones adscritas a la Red
Ilumno. Prohibida su reproducción total o parcial.

POLITÉCNICO GRANCOLOMBIANO 11

También podría gustarte