Está en la página 1de 23

INTRODUCCION A LA COMPUTACION PARALELA

Dr. Pablo Guilln CESIMO

Introduccin

Definiciones

Conceptos y Terminologa

Arquitectura de la Memoria en Computadores Paralelos

Paradigmas de la Programacin Paralela

Diseo de Programas Paralelos

Diseo y consideraciones de ejecucin

Ejemplo Paralelo

Introduccin
Esta presentacin cubre los aspectos bsicos de la computacin en paralelo. Se comienza con definiciones, conceptos y terminologas asociadas con la computacin en paralelo. Seguidamente los tpicos concernientes a tipos de arquitecturas y modelos de programacin son presentados. Estos tpicos son relacionados al diseo de programas paralelos y finalmente se examinan diferentes estrategias para paralelizar programas secuenciales.

Definiciones Qu es Computacin Paralela?

Tradicionalmente, los programas han sido escritos para cmputo secuencial (serial): o Para ser ejecutados en un nico computador que posee un nico CPU. o Los problemas son resueltos por una serie de instrucciones ejecutada una despus de la otra por el CPU. Slo una instruccin puede ser ejecutada en un instante de tiempo. La computacin paralela es el uso simultneo de mltiples recursos computacionales para resolver un problema computacional. Los recursos computacionales pueden incluir: o Un nico computador con mltiples procesadores o Un nmero arbitrario de computadores conectados por una red o Una combinacin de ambos. El problema computacional posee caractersticas tales como: o Ser particionado en partes discretas de trabajo que pueden ser resultas simultneamente o Ejecutar mltiples instrucciones del programa en cualquier instante de tiempo o Ser resuelto en un menor tiempo con mltiples recursos computacionales que con un nico recurso computacional. Tradicionalmente, la computacin paralela ha sido motivada por simulaciones numricas de sistemas complejos, tales como: o Modelaje de clima o Reacciones qumicas y nucleares o Bioinformtica y genoma humano o Geologa y Ssmica o Petrleo o Biomedicina o Manufactura

En la actualidad, aplicaciones comerciales requieren el desarrollo de computadores ms rpidos. Estas aplicaciones requieren el procesamiento de grandes cantidades de datos de diferentes maneras. Ejemplos: o Base de datos paralelas, minera de datos o Exploracin de crudo o Servicios de negocios basados en la WEB o Diagnstico asistido por computador o Computacin grfica

Definiciones Porqu usar Cmputo en Paralelo?

Existen dos razones primarias para usar computacin paralela: o Ahorro en tiempo o Resolver problemas grandes Otras razones: o Tomar ventaja de recursos no locales usar recursos computacionales disponibles en una red. o Ahorro en costos el uso de mltiples recursos computacionales ms econmicos en vez de pagar tiempo en un supercomputador. o Limitacin en memoria un solo computador tiene recursos de memoria finita. Para problemas grandes, usar la memoria de mltiples computadores puede corregir este obstculo. El futuro sugiere que el paralelismo es el futuro del cmputo.

Conceptos y Terminologa Arquitectura de Von Neumann

Un computador de Von Neumann usa el concepto de programa-almacenamiento. El CPU ejecuta un programa que especfica una secuencia de operaciones de lectura y escritura en la memoria.

Diseo Bsico: o Memoria es usada para almacenar el programa y las instrucciones sobre los datos o Instrucciones del Programa son datos codificados que le dice al computador que hacer o Los datos es simplemente informacin a ser usada por el programa o La unidad de procesamiento central (CPU) obtiene instrucciones y/o datos de la memoria, decodifica las instrucciones y secuencialmente ejecuta stas.

Conceptos y Terminologa Taxonoma de Flynn


Existen diferentes maneras para clasificar los computadores paralelos. La clasificacin ms usada desde 1966 es llamada taxonoma de Flynn. La taxonoma de Flynn distingue la arquitectura computacional de los multiprocesadores de acuerdo a como stos pueden ser clasificados a travs de dimensiones independientes de Instrucciones y Datos. Cada una de estas dimensiones puede tener slo uno de dos posibles estados: Single o Multiple. La siguiente matriz define las cuatro posibles clasificaciones de acuerdo a Flynn. SISD Single Instruction, Single Data MISD SIMD Single Instruction, Multiple Data MIMD

Multiple Instruction, Single Data Multiple Instruction, Multiple Data

Single Instruction, Single Data (SISD):


Un computador serial (no-paralelo) Single instruction: Slo un flujo de instruccin est actuando en el CPU durante cualquier ciclo de reloj Single data: Slo un flujo de dato est siendo usado como entrada durante cualquier ciclo de reloj Ejecucin Determnistica Ejemplos: muchos PCs y workstations de un slo CPU

Single Instruction, Multiple Data (SIMD):


Un tipo de computador paralelo Single instruction: Todas las unidades de procesamiento ejecutan la misma instruccin en cualquier ciclo de reloj Multiple data: Cada unidad de procesamiento puede operar en datos diferentes Conveniente para problemas caracterizados por un alto grado de regularidad, tal como procesamiento de imgenes Dos variedades: Arreglo de Procesadores y Vectorial Ejemplos: o Arreglo de Procesadores: Connection Machine CM-2, Maspar MP-1, MP2 o Vectorial: IBM 9000, Cray C90, Fujitsu VP, NEC SX-2, Hitachi S820

Multiple Instruction, Single Data (MISD):


Pocas clases de este tipo de computadores Algunos ejemplos: o Filtros de mltiple frecuencia operando en una nica seal o Mltiples algoritmos de criptografa actuando en un mensaje codificado.

Multiple Instruction, Multiple Data (MIMD):


Actualmente, el tipo ms comn de computador paralelo Multiple Instruction: cada procesador puede ejecutar un flujo de instruccin diferente Multiple Data: cada procesador puede estar trabajando con un flujo de datos diferentes Ejemplos: supercomputadores actuales, redes de computadoras "grids", multiprocesadores SMP - incluyendo algunos tipos de PCs.

Conceptos y Terminologa Terminologas generales de Paralelismo


Algunos de los trminos ms comnmente usados en computacin paralela: Tarea (Task) Una seccin lgicamente discreta de trabajo computacional. Una tarea es un programa o un conjunto de instrucciones que es ejecutada por un procesador. Tarea Paralela (Parallel Task) Una tarea que puede ser ejecutada por mltiples procesadores. Ejecucin Serial (Serial Execution) La ejecucin de un programa secuencialmente. Sin embargo, las tareas paralelas tendrn secciones de un programa paralelo que deben ser ejecutadas serialmente. Ejecucin Paralela (Parallel Execution) La ejecucin de un programa por diferentes tareas, donde cada tarea es capaz de ejecutar la misma o diferente instruccin al mismo instante de tiempo. Memoria Compartida (Shared Memory) Describe una arquitectura computacional donde todos los procesadores tienen acceso directo a una memoria fsica comn. Desde el punto de vista de programacin, describe un modelo donde las tareas paralelas pueden directamente direccionar y acceder a las mismas posiciones lgicas de memoria donde la memoria fsica reside. Memoria Distribuida (Distributed Memory) Se refiere a acceder a travs de un canal de comunicacin a memoria fsica que no es comn entre diferentes procesadores. Desde el punto de vista de programacin, las tareas pueden lgicamente ver las memorias locales de otras mquinas y deben usar comunicaciones para acceder a la memoria de otras mquinas donde las tareas se estn ejecutando. Comunicaciones (Communications) Las tareas paralelas necesitan intercambiar datos y existen diferentes maneras para llevar a cabo esto, bien sea a travs de un bus de memoria compartid o sobre una red, sin embargo el evento verdadero de intercambio de datos es comnmente referenciado como consideracin de las comunicaciones del mtodo empleado. Sincronizacin (Synchronization) La coordinacin de las tareas paralelas est asociada con la comunicacin. A menudo se establecen puntos de sincronizacin dentro de una aplicacin donde una tarea puede no proceder hasta que otra(s) tarea(s) alcanzan el mismo lugar (punto lgicamente equivalente). Usualmente la sincronizacin involucra la espera de al menos una tarea, y puede implicar un aumento del tiempo de ejecucin de la aplicacin paralela. Granularidad (Granularity) En computacin paralela, la granularidad es una medida equivalente de la razn cmputo-comunicacin.

Gruesa (Coarse): relativamente grandes cantidades de trabajo computacional son hechas entre eventos de comunicacin. Fina (Fine): relativamente pequeas cantidades de trabajo computacional son hechas entre eventos de comunicacin.

Carga Paralela (Parallel Overhead) La cantidad de tiempo requerido para coordinar las tareas paralelas. La carga puede incluir factores tales como:

Tiempo para arrancar las tareas Sincronizaciones Comunicacin de datos Compiladores paralelos, bibliotecas, SO, etc Tiempo de finalizacin de las tareas

Masivamente Paralelo (Massively Parallel) Hace referencia al hardware que compone un sistema paralelo dado el cual posee muchos procesadores (ms de 1000). Scalability Hace referencia a la capacidad de un sistema paralelo (hardware y/o software) el cual demuestra un aumento proporcionado en la eficiencia paralela con la inclusin de ms procesadores. Los factores que contribuyen a la escalabilidad:

Hardware particularmente ancho de banda y red de comunicacin El algoritmo de aplicacin La codificacin paralela Caractersticas de la aplicacin especfica

Arquitectura de la Memoria en Computadores Paralelos Memoria Compartida (Shared Memory)


Caractersticas generales:

Computadores de memoria compartida tienen en comn la capacidad que todos los procesadores pueden acceder a la memoria como un espacio de direccionamiento global.

Mltiples procesadores operan independientemente pero comparten los mismos recursos de memoria. Cambios en una localizacin de memoria realizados por un procesador son visibles a todos los otros procesadores. La sincronizacin es obtenida controlando la escritura y lectura a la memoria. Las mquinas de memoria compartida pueden ser divididas en dos clases principales basadas en los tiempos de acceso a memoria: UMA y NUMA.

Acceso Uniforme a Memoria (UMA):


Representadas por multiprocesadores simtricos ( Symmetric Multiprocessor machines, SMP) Procesadores idnticos Tiempos de acceso igual a la memoria Algunas veces llamadas CC-UMA - Cache Coherent UMA. Coherencia de cache significa que si un procesador actualiza una posicin en la memoria compartida, todos los otros procesadores conocen acerca de la actualizacin. La coherencia de cache es a nivel de hardware.

Acceso no Uniforme a Memoria (NUMA):


Enlazando fsicamente dos o ms SMPs Un SMP puede directamente acceder a la memoria de otro SMP No todos los procesadores tienen igual tiempo de acceso a toda la memoria El acceso a la memoria es lento Si la coherencia de cache es mantenida, son llamados CC-NUMA - Cache Coherent NUMA

Ventajas:

El espacio de direccionamiento global provee una facilidad de programacin al usuario El intercambio de datos entre las tareas es rpido y uniforme debido a la proximidad de la memoria a los CPUs

Desventajas:

La desventaja primaria es la prdida de escalabilidad entre la memoria y CPUs. Agregar CPUs puede geomtricamente aumentar el trfico en la va memora compartida-CPU, y para sistemas con coherencia de cache, geomtricamente aumenta el trfico asociado con la administracin de cache/memoria. El programador es el responsable para construir la sincronizacin que asegura un correcto acceso a la memoria global. Es costoso disear y producir mquinas de memoria compartida con un gran nmero de procesadores.

Arquitectura de la Memoria en Computadores Paralelos Memoria Distribuida (Distributed Memory)


Caractersticas Generales:

Los sistemas de memoria distribuida requieren una red de comunicacin para conectar la memoria de los procesadores.

Mltiples procesadores operan independientemente pero cada uno tiene su propia memoria La data es compartida a travs de una red de comunicacin usando pases de mensajes El usuario es el responsable de la sincronizacin usando pase de mensajes Ventajas La memoria es escalable al nmero de procesadores. Un aumento de los procesadores, el tamao de la memoria y el ancho de banda aumenta Cada procesador puede rpidamente acceder a su propia memoria sin interferencia Desventajas Dificultad para asignar estructuras de datos existentes a esta organizacin de memoria El usuario es el responsable para enviar y recibir data a travs de los procesadores Ejemplos: nCUBE Hypercube Intel Hypercube TMC CM-5 IBM SP1, SP2 Intel Paragon

Arquitectura de la Memoria en Computadores Paralelos Memoria Compartida-Distribuida

Memoria Distribuida MPP - Massively Parallel Processor Memoria Compartida SMP - Symmetric Multiprocessor Procesadores idnticos Acceso igual a la memoria Algunas veces llamado UMA - Uniform Memory Access o CC-UMA Coherencia de Cache UMA Coherencia de Cache significa que si un procesador actualiza una posicin en la memoria compartida, todos los otros procesadores conocen acerca de la actualizacin NUMA - Non-Uniform Memory Access Algunas veces llamado CC-NUMA - Coherencia de Cache NUMA A menudo hecho enlazando dos o ms SMPs Un SMP puede directamente acceder la memoria de otro SMP No todos los procesadores tienen igual tiempo de acceso a toda la memoria El acceso de memoria a travs del enlace es lento Combinaciones Mltiples SMPs son conectados por una red Los Procesadores dentro de un SMP se comunican va memoria Requieren pase de mensajes entre SMPs Un SMP no puede directamente acceder a la memoria de otro SMP Mltiples procesadores de memoria distribuida conectados a una gran memoria compartida La transferencia de memoria local a memoria compartida es transparente al usuario Diseo del futuro: con diferentes procesadores y su memoria local alrededor de una gran memoria compartida en una simple tarjeta

Paradigmas de la Programacin en Paralelo


Existen muchos mtodos de programacin en computadores paralelos. Lo ms usados son pase de mensajes, paralelismo de datos y hebras: Pase de mensajes el usuario hace llamadas a bibliotecas para explcitamente compartir informacin entre los procesadores. Paralelismo de datos un particionamiento de la data determina el paralelismo Memoria compartida - mltiples procesos comparten un espacio de memoria comn Threads (hebras, hilos)- un proceso teniendo mltiples (concurrentes) trayectorias de ejecucin Modelo combinado compuesto de dos o ms de los presentados anteriormente

Pase de Mensajes
El modelo de pases de mensajes se define como: Un conjunto de procesos usando solo memoria local Los procesos se comunican enviando y recibiendo mensajes La transferencia de data requiere operaciones cooperativas para ser ejecutada por cada proceso (una operacin de envo debe tener una operacin de recepcin) La programacin con pases de mensajes es hecha enlazando y haciendo llamadas a bibliotecas las cuales administran el intercambio de data entre los procesadores.

Implantacin Pase de mensajes: Message Passing Interface (


Message Passing Interface llamado MPI. Una biblioteca portable y estndar de pase de mensajes Disponible para programas en Fortran y C Disponible para diferentes mquinas paralelas La comunicacin entre tareas es por pase de mensajes Todo el paralelismo es explcito: el programador es el responsable del paralelismo del programa y la implantacin de las directivas MPI El modelo de programacin es SPMD (Single Program Multiple Data)

Memoria Compartida Modelo de Hebras


En el modelo de programacin paralela mediante hebras, un nico proceso puede tener mltiples trayectorias de ejecucin concurrentes. La analoga ms simple que puede ser usada para describir las hebras es el concepto de un nico programa que incluye un nmero de subrutinas: o El programa a.out es despachado. o a.out ejecuta algn trabajo serial, y luego crea un nmero de tareas (hebras) que pueden ser despachadas y ejecutadas por el sistema operativo concurrentemente. o Cada hebra tiene datos locales pero comparte los recursos de a.out. o Una hebra puede ser descrita como una subrutina dentro del programa principal. Cualquier hebra puede ejecutar cualquier subrutina al mismo tiempo como las otras hebras. o Las hebras se comunican unas con las otras a travs de la memoria global (actualizando posiciones de direccionamiento). Las hebras estn asociadas con arquitectura de memoria compartida y sistemas operativos.

Implementaciones:

Implementaciones de hebras requieren: o Una biblioteca de subrutinas que son llamadas desde el cdigo fuente paralelo. o Un conjunto de directivas de compilacin dentro del cdigo fuente o Variables de ambiente. POSIX Threads y OpenMP. POSIX Threads o Slo para lenguaje C o Referenciado como Pthreads. OpenMP o Disponible para C/C++ y Fortran.

Diseo de Programas Paralelos Pasos para crear un programa paralelo


1. Si existe un cdigo serial, depure (debug) el cdigo completamente 2. Use opciones de optimizacin 3. Identifique las partes del cdigo que pueden ser ejecutadas concurrentemente: Requiere un buen conocimiento del cdigo Explote cualquier paralelismo inherente que pueda existir Puede requerir reestructurar el programa y/o algoritmo. Puede requerir un nuevo algoritmo. Use tcnicas de Profiling, Optimizacin y de Ejecucin 4. Particionar el programa: Paralelismo funcional Paralelismo de datos Una combinacin de ambos 5. Desarrolle el cdigo: El cdigo puede estar influenciado/determinado por la arquitectura de la mquina Escoja un paradigma de programacin Determine la comunicacin 6. Compile, pruebe y Depure

Diseo de Programas Paralelos Particin


Existen tres mtodos para descomponer un problema en tareas ms pequeas para ser ejecutadas en paralelo: Descomposicin de Dominio, Descomposicin Funcional, o una combinacin de ambos:

Descomposicin de Dominio:

La data asociada con un problema es descompuesta. Cada tarea paralela trabaja en una porcin de la data.

Existen diferentes maneras para particionar la data:

Descomposicin Funcional:

El problema es descompuesto de acuerdo al trabajo que debe ser hecho. Cada tarea ejecuta una porcin de trabajo.

Diseo de Programas Paralelos Comunicaciones


Entender las comunicaciones entre los procesadores es esencial. La comunicacin de pase de mensajes es programada explcitamente. El programador debe entender y codificar la comunicacin. Los compiladores de paralelismo de datos hacen toda la comunicacin transparente. El programador no necesita entender las comunicaciones subyacentes. La buena ejecucin del cdigo va a depender de la escritura del algoritmo con la mejor comunicacin posible.

Las comunicaciones en computadores de memoria distribuida: Punto a Punto De uno a todos De todos a todos Cmputo colectivo

Diseo de Programas Paralelos Balanceo de Carga


El balanceo de carga se refiere a la distribucin de las tareas, de una manera tal, que se asegura ms eficientemente la ejecucin en paralelo Si las tareas no estn distribuidas de una manera balanceada, se podra estar esperando por la culminacin de una tarea, mientras las otras ya han finalizado El performance puede ser incrementado si el trabajo puede ser uniformemente distribuido

Diseo de Programas Paralelos Granularidad


La razn entre cmputo y comunicacin es conocida como la granularidad. Paralelismo de grano fino (Fine-grain parallelism)

Todas las tareas ejecutan un pequeo nmero de instrucciones entre ciclos de comunicacin Es baja la razn cmputo a comunicacin Facilita el balanceo de carga Implica alta comunicacin y menos oportunidad para una mejora de performance Si la granularidad es fina, es posible que el tiempo requerido para la comunicacin y sincronizacin entre las tareas sea mayor que el tiempo de cmputo

Paralelismo de grano grueso (Coarse-grain parallelism)

Definido por grandes cmputos los cuales consisten de un gran nmero de instrucciones entre puntos de comunicacin Es alta la razn cmputo a comunicacin Implica ms oportunidad para una mejora de performance Es ms difcil para balancear la carga eficientemente

La granularidad ms eficiente es dependiente del algoritmo y el hardware en el cual ste se ejecutar

Diseo y consideraciones de ejecucin Lmites y Costos


Ley de Amdahl's:

Ley de Amdahl's postula que la aceleracin del programa es definida por la fraccin del cdigo (P) la cual es paralelizada:

speedup

1 -------1 - P

Si nada del cdigo puede ser paralelizado, f = 0 y la aceleracin = 1 (aceleracin nula). Si todo el cdigo es paralelizado, f = 1 y la aceleracin es infinita (en teora). Si 50% del cdigo puede ser paralelizado, la aceleracin mxima = 2, lo cual significa que el cdigo se ejecutar el doble de rpido. Introduciendo el nmero de procesadores ejecutando la fraccin paralela de trabajo, la relacin puede ser modelada por:

speedup

1 -----------P + S --N

donde P = fraccin paralela, N = nmero de procesadores y S = fraccin serial.

Existen lmites a la escalabilidad del paralelismo. Por ejemplo, con P = .50, .90 y .99 (50%, 90% y 99% del cdigo es paralelizable):

N ----10 100 1000 10000

speedup -------------------------------P = .50 P = .90 P = .99 ------------------1.82 5.26 9.17 1.98 9.17 50.25 1.99 9.91 90.99 1.99 9.91 99.02

Ejemplo Paralelo Clculo de PI


Paralelismo trivial Computacionalmente intensivo Comunicacin mnima Operaciones de I/O mnimas El valor de PI puede ser calculado de muchas maneras, las cuales pueden ser facilmente paralelizables Consideremos el siguiente mtodo de aproximar PI 1. Inscriba un crculo en un cuadrado 2. Genere puntos aleatorios en el cuadrado 3. Determine el nmero de puntos en el cuadrado que estn tambin en el crculo 4. Sea r el nmero de puntos en el crculo dividido por el nmero de puntos en el cuadrado 5. PI ~ 4 r Cdigo serial:
npoints = 10000 circle_count = 0 do j = 1,npoints generate 2 random numbers between 0 and 1 xcoordinate = random1 ; ycoordinate = random2 if (xcoordinate, ycoordinate) inside circle then circle_count = circle_count + 1 end do PI = 4.0*circle_count/npoints

Solucin Paralela: Pase de mensajes


Estrategia de paralelizacin: descomponer el lazo en porciones los cuales pueden ser ejecutados por los procesadores Cada procesador ejecuta su porcin del lazo un nmero de veces Cada procesador puede hacer su trabajo sin requerir alguna informacin de los otros procesadores (no existe dependencia de data). Esta situacin es conocida como paralelismo trivial. Un proceso acta como maestro y colecciona los resultados (modelo SPMD). Pseudo-cdigo: La letras Rojas incluye pase de mensajes

npoints = 10000 circle_count = 0 p = number of tasks num = npoints/p find out if I am MASTER or WORKER do j = 1,num generate 2 random numbers between 0 and 1 xcoordinate = random1 ; ycoordinate = random2 if (xcoordinate, ycoordinate) inside circle then circle_count = circle_count + 1 end do if I am MASTER receive from WORKERS their circle_counts compute PI (use MASTER and WORKER calculations) else if I am WORKER send to MASTER circle_count endif

También podría gustarte