Está en la página 1de 4

Sistematización Paralela

Índice

1. Introducción/Filosofía
2. Historia
3. Ventajas y desventajas
4. Conceptos clave
5. Concurrencia vs Paralelismo
Introducción
La computación paralela es el uso de múltiples recursos computacionales para resolver un
problema. Se distingue de la computación secuencial en que varias operaciones pueden
ocurrir simultáneamente.

El paralelismo clásico, o puesto de otra manera, el clásico uso del paralelismo, es el de


diseño de programas eficientes en el ámbito científico. La simulación de problemas
científicos es un área de gran importancia, los cuales requieren de una gran capacidad de
procesamiento y de espacio de memoria, debido a las complejas operaciones que se deben
realizar.

Otro uso clásico es el de las gráficas generadas por computadora. La generación de


fotogramas requiere de una gran cantidad de cálculos matemáticos. Esto supone una tarea
muy compleja para un solo procesador, luego es necesario que haya algún tipo de
paralelismo, para distribuir la tarea para que esta sea realizada eficiente y eficazmente.

Filosofía
¿Que es computación paralela?

En el sentido más simple, la computación paralela es el uso simultáneo de múltiples


recursos computacionales para resolver un problema computacional:

 Un problema se divide en partes discretas que se pueden resolver simultáneamente


 Cada parte se descompone en una serie de instrucciones
 Las instrucciones de cada parte se ejecutan simultáneamente en diferentes
procesadores
 Se emplea un mecanismo global de control/coordinación

Historia
 El interés por la computación paralela se remonta a finales de los años 50. Este
interés se vio expresado en forma de supercomputadores, que aparecieron en los
años 60 y 70. Estos computadores tenían procesadores de memoria compartida, con
múltiples procesadores trabajando lado a lado con datos compartidos.
 A mediados de los 80, un nuevo tipo de computador paralelo fue creado cuando el
proyecto “Concurrent Computation” de Caltech construyó un supercomputador para
aplicaciones científicas. El sistema mostró que se podría lograr un rendimiento
extremo usando microprocesadores regulares, disponibles en el mercado.
 Empezando a los finales de los 80, los clusters surgieron para competir y con los
MPP. Un cluster es un tipo de computador paralelo, construido usando múltiples
computadores “off-the-shelf”, conectados usando una red “off-the-shelf”. Hoy en
día, los clusters son la arquitectura dominante en los datacenters.
 Para los MPP y clusters surgió el estándar MPI a mediados de los 90, que convergió
de otras API. Para los multiprocesadores con memoria compartida, un proceso de
convergencia similar se observó a finales de los 90, con el surgimiento de pthreads
y OpenMP.
 En la actualidad, la computación paralela se ha vuelto mainstream prácticamente,
con la llegada de los procesadores de varios núcleos casi por defecto en la mayoría
de dispositivos computacionales.
 El software ha sido una parte activa en la evolución de la programación paralela.
Los programas paralelos son más difíciles de escribir que los programas
secuenciales, ya que se requiere que haya una comunicación y sincronización entre
las tareas que se han paralelizado.

Ventajas
 Resuelve problemas que no se podrían realizar en una sola CPU
 Resuelve problemas que no se pueden resolver en un tiempo razonable
 Permite ejecutar problemas de un orden y complejidad mayor
 Permite ejecutar código de manera más rápida (aceleración)
 Permite ejecutar en general más problemas
 Obtención de resultados en menos tiempo
 Permite la ejecución de varias instrucciones en simultáneo
 Permite dividir una tarea en partes independientes

Desventajas
 Mayor consumo de energía
 Mayor dificultad a la hora de escribir programas
 Dificultad para lograr una buena sincronización y comunicación entre las tareas
 Retardos ocasionados por comunicación ente tareas
 Número de componentes usados es directamente proporcional a los fallos
potenciales
 Condiciones de carrera
o Múltiples procesos se encuentran en condición de carrera si el resultado de
los mismos depende del orden de su llegada
o Si los procesos que están en condición de carrera no son correctamente
sincronizados, puede producirse una corrupción de datos
Conceptos clave

 Tarea: La descomposición de las tareas puede ser una tarea complicada, ya que
suelen haber varias formas de descomponer el mismo algoritmo. Definir las tareas
para una aplicación apropiadamente es una del trabajo más difícil en el proceso de
creación de un programa paralelizable, y difícil de automatizar.
 Hilo: Un proceso pesado puede convertirse en varios procesos livianos ejecutados
de manera concurrente. Cada uno de estos procesos se conoce como hilos. Se
comunican entre ellos a través de la memoria global
 Granularidad: El tamaño de cada tarea, en término del número de instrucciones.
Cada tarea puede tener un tamaño diferente.
 Scheduling: Las tareas de una aplicación son asignadas a procesos o hilos, que a su
vez son asignados a unidades de procesamiento. El proceso mediante el cual las
tareas son asignadas a los procesos o hilos, y se les da un orden de ejecución. Este
puede ser especificado en el código, en tiempo de compilación o dinámicamente en
tiempo de ejecución. El proceso de scheduling debe tener en cuenta la dependencia
entre tareas, ya que, aunque muchas pueden ser independientes, otras pueden
requerir los datos producidos por otras tareas.
 Mapping: Es la asignación de procesos e hilos a unidades de procesamiento,
procesadores o núcleos. Usualmente el mapping se hace por el sistema en tiempo de
ejecución, aunque en ocasiones puede ser influenciado por el programador.

 Sincronización y cooperación: Los programas en paralelo necesitan la


sincronización y la coordinación de procesos e hilos, para que haya una ejecución
correcta. Los métodos de coordinación y sincronización en la programación paralela
están fuertemente asociados a la manera en que los procesos o hilos intercambian
información, y esto depende de cómo está organizada la memoria en el hardware.
 Pipelining: Ruptura de una tarea en pasos realizados por diferentes unidades de
procesador, con entradas de flujo a través de cada unidad de proceso, Un tipo de
computación paralela.
 Speedup: Es un proceso para aumentar el rendimiento entre dos sistemas
procesando el mismo problema. Es la mejora en la velocidad de ejecución de una
tarea ejecutada en dos arquitecturas similares con diferentes recursos.
 Parallel overhead: Es la cantidad de tiempo requerido para coordinar tareas
paralelas, en lugar de hacer un trabajo útil. incluye factores como:
o Tiempo de inicio de la tarea
o Sincronización
o Comunicaciones de datos
o Sobrecarga de software impuesta por lenguajes paralelos, bibliotecas,
sistema operativo, etc.
o Tiempo de terminación de la tarea

Concurrencia vs Paralelismo
Concurrencia
Capacidad de operar actividades al mismo tiempo. Es decir se pueden tener varios procesos
corriendo cada uno en un procesador o puede haber varios proceso que corran solo en un
procesador

Paralelismo

Son muchas actividades teniendo lugar al mismo tiempo, “la cualidad o el estado de ser
paralelo”. El hecho de ser paralelo implica que solo se pueden tener varios procesos
corriendo cada uno en un procesador.