Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 //Escenario
Escenario27
Lectura fundamental
Fundamental
Contenido
1 Arquitecturas paralelas
4 Programación vectorial
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.
POLITÉCNICO GRANCOLOMBIANO 2
2. Tipos y niveles de paralelismo
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:
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.
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.
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)
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).
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:
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.
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).
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.
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:
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.
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
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.
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.
POLITÉCNICO GRANCOLOMBIANO 10
INFORMACIÓN TÉCNICA
POLITÉCNICO GRANCOLOMBIANO 11