Introducción a la Programación Paralela

of 59/59
Tipos de Programaci ´ on Paralela Paradigmas de Programaci´ on Paralela Entornos de Programaci ´ on Paralela Proyecto Universidad-Secundaria Incorporaci ´ on de contenidos de programaci´ on paralela en la rama de tecnolog´ ıas inform´ aticas Facultad Inform´ atica, Universidad de Murcia e Instituto de Ense ˜ nanza Secundaria Ingeniero Juan de la Cierva Introducci ´ on a la Programaci ´ on Paralela Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnolog´ ıas inform´ aticas
  • date post

    12-Feb-2017
  • Category

    Documents

  • view

    224
  • download

    1

Embed Size (px)

Transcript of Introducción a la Programación Paralela

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Proyecto Universidad-SecundariaIncorporacion de contenidos de programacion paralela en

    la rama de tecnologas informaticas

    Facultad Informatica, Universidad de Murcia eInstituto de Ensenanza Secundaria Ingeniero Juan de la Cierva

    Introduccion a laProgramacion Paralela

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Posible utilizacion

    Modulo de Programacion, primero de Desarrollo deAplicaciones Multiplataforma

    Modulo de Programacion, primero de Desarrollo deAplicaciones Web

    Tecnologas de la Informacion y de las Comunicaciones,primero de Bachillerato

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Contenido

    1 Tipos de Programacion Paralela

    2 Paradigmas de Programacion ParalelaProgramacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    3 Entornos de Programacion ParalelaEjemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Variedad de sistemas computacionales

    Los sistemas computacionales actuales estan constituidos porvarios componentes, por lo que son sistemas paralelos,pero estos componentes estan organizados de formas distintas:

    Sistemas con varios cores y una memoria comun a todos

    Un sistema multicore con una tarjeta grafica con su propiamemoria

    Redes de multicores, cada uno con su memoria yposiblemente su tarjeta grafica

    Varias redes conectadas entre s de forma remota

    etc

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Variedad de estilos de programacion

    Una unica secuencia de ejecucion de las instrucciones(programacion secuencial)

    Una secuencia de ejecucion, con algunas instrucciones quemandan trabajo a realizar a otro componente computacional

    Distintas secuencias que se ejecutaran en elementoscomputacionales distintos colaborando a traves de lamemoria

    Distintas secuencias que se ejecutaran en elementoscomputacionales distintos colaborando intercambiandoinformacion por medio de mensajes

    etc

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Tipos de paralelismo

    Una unica secuencia de ejecucion de las instrucciones(programacion secuencial)

    Una secuencia de ejecucion, con algunas instrucciones quemandan trabajo a realizar a otro componente computacional

    Distintas secuencias que se ejecutaran en elementoscomputacionales distintos colaborando a traves de lamemoria

    Distintas secuencias que se ejecutaran en elementoscomputacionales distintos colaborando intercambiandoinformacion por medio de mensajes

    etc

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Conceptos de Programacion Paralela

    Paralelismo en sistemas secuencialesConcurrencia - Programacion ConcurrenteParalelismo - Programacion ParalelaSistemas de tiempo real - Programacion en tiempo realSistemas multicoreTarjetas graficas, GPUAceleradores: Xeon Phi, FPGA, DSP...Redes de ordenadores, ClustersComputacion heterogeneaSupercomputacionComputacion de Altas Prestaciones, HPCProgramacion adaptativaComputacion distribuidaComputacion en la nube, CloudComputacion ubicuaVirtualizacionOtros tipos: Computacion Cuantica, Biologica...

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Paralelismo en sistemas secuenciales (I)

    Los procesadores actuales consiguen acelerar la ejecucion haciendo uso delparalelismo de forma interna. Ejemplos:

    Segmentacion encauzada (pipeline):division de la ejecucion de las instrucciones en etapasuna instruccion empieza a ejecutarse antes de que hayan terminado las anteriores

    varias instrucciones se procesan simultaneamente

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Paralelismo en sistemas secuenciales (II)

    Division de memoria en bloques:varios procesos pueden acceder a la vez a zonas de memoria distintas

    Jerarqa de memorias:varios niveles de cache,acceso mas rapido a las memorias mas cercanas

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Paralelismo en sistemas secuenciales (III)

    Multiples unidades funcionales

    por ejemplo varios sumadores o multiplicadores

    Unidades vectoriales

    se realizan operaciones simultaneas sobre conjuntos de datos

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Paralelismo en sistemas secuenciales (IV)

    Multithreadingel sistema lanza varios threads (hilos) simultaneamente, quecomparten recursos

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Paralelismo en sistemas secuenciales (y V)

    Paralelismo a nivel de instruccionreordenar las instrucciones para que se puedan ejecutar enparalelo sin afectar al resultado

    Ejecucion fuera de ordense capturan los datos para estar disponibles cuando puedeejecutarse la instruccion

    Especulaciondeterminar que resultados se van a necesitar y generarlosantes

    Coprocesadores de E/Spermiten realizar entrada/salida mientras se computa

    ...

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Concurrencia - Paralelismo

    Concurrencia, Programacion Concurrente

    cuando varios elementos de proceso (hilos,procesos) trabajan de forma conjunta en laresolucion de un problema

    Paralelismo, Programacion Paralela

    lo mismo, pero se usan estos terminos cuando eltrabajo se utiliza para acelerar la resolucion de losproblemas

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Sistemas de tiempo real, Programacion de tiempo real

    Para problemas que requieren respuesta en un espacio corto detiempopara lo que se necesita usar de manera eficiente los recursoscomputacionales,y por tanto realizar computacion paralela.Ejemplos:

    Vdeojuegos, Animaciones, que requieren generar al menos24 imagenes por segundo

    Control, con informacion recogida por sensores, y el sistematiene que dar respuesta rapida

    Robotica

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Multicore

    Los sistemas multicore (multinucleo) contienen varios cores que tienen acceso a unespacio de memoria comun, organizado de forma jerarquica.En la actualidad son los sistemas computacionales estandar, y sistemas mascomplejos se obtienen combinando varios de ellos.Se programan a traves de hilos (threads), que comparten datos en la memoriacomun.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Tarjetas graficas, GPU

    Originariamente para vdeojuegos, en la actualidad tambien para procesamiento deproposito general (GPGPU).Normalmente como coprocesadores con un sistema multicore, que dispone de una ovarias GPUs.El programa se ejecuta en CPU y manda trabajos a la GPU.Programacion dependiente del fabricante (CUDA) y tambien hay software portable(OpenCL).Constan de muchos cores de GPU, organizados en bloques, y con organizacionjerarquica de la memoria.Varios tipos de tarjetas con distintas capacidades computacionales (Gforce, Tesla,Kepler...)

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Otros aceleradores

    Los aceleradores computacionales o coprocesadores se utilizan normalmentemandandoles trabajo desde la CPU para que se encarguen de realizar calculoscomputacionalmente costosos.Ademas de las GPUs hay algunos tipos mas:

    Intel Xeon Phi:

    Contiene hasta 61 cores, y cada core soporta 4 threads por hardware.

    Programacion mas cercana que la de las GPUs a la estandar en paralelo.

    FPGA (Field Programmable Gate Array):

    Similares a circuitos integrados pero reprogramables.

    Programacion distinta a la paralela estandar.

    DSP (Digital Signal Processor):

    Para tratamiento de senales y problemas en tiempo real.

    Normalmente para operaciones matematicas que se repite continuamente.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Clusters, Redes de ordenadores

    Compuestos por varios componentes computacionales(nodos) conectados en red.

    Los nodos pueden estar enrackados o de forma aislada.

    En la actualidad los nodos suelen ser multicoresposiblemente con GPUs.

    Pueden ser desde clusters pequenos formados por unospocos nodos hasta muchos nodos formando unsupercomputador.

    En algunos casos los nodos comparten el sistema deficheros, que tambien puede ser distribuido.

    Se suele usar un sistema de colas para mandar lostrabajos de los usuarios al sistema.

    La programacion estandar es multihilo en los nodos ymultiprocesos entre nodos.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Computacion heterogenea

    Los componentes de un sistema computacional presentandistintas fuentes de heterogeneidad:

    Memorias primarias y secundarias de distinta capacidad ycon distinta organizacion.Componentes computacionales con distinta velocidad.Componentes computacionales de distinta arquitectura(ejemplo, multicore+GPU).Redes de conexion a distinta velocidad....

    lo que hace que haya que programarlos de forma especial paraaprovechar al maximo la capacidad de todos ellos, quizas conprogramacion paralela estandar pero asignacion balanceada detrabajos a los distintos componentes.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Supercomputacion

    La que se realiza en loscomputadores mas potentes pararesolver los problemas cientficos conmayores necesidadescomputacionales (simulacionclimatica, analisis de ADN...)

    Vara historicamente. Lista Top500contiene los 500 mas rapidos delmundo, se actualiza cada seis meses.

    Problemas de gestion, sistemas deenfriamiento, reduccion del consumode energa (Green computing)...

    Tianhe-2en el National Super Computer Center inGuangzhou, ChinaCluster de Intel Xeon + Xeon Phi3120000 corespotencia 17808 kwrendimiento maximo 54902.4 Tflops/seg

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    HPC

    La Computacion de Alto Rendimiento (o Altas Prestaciones,High Performance Computing) consiste en el aprovechamientoal maximo de las capacidades computacionales del sistema.

    Normalmente en supercomputadores, pero tambien enclusters, multicores, y para tiempo real.

    Programacion Adaptativa

    Al compartirse los grandes sistemas o clusters entre variosusuarios las condiciones de los sistemas cambian a lo largodel tiempo.

    Se pueden desarrollar programas que se adapten a lascondiciones del sistema durante su ejecucion.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Computacion Distribuida - Computacion en Grid

    Computacion Distribuida

    Componentes computacionales organizados en red colaboranen la resolucion de un problema.

    Las redes pueden ser geograficamente locales (clusters) odistribuidas.

    Interaccionan con envo de mensajes.

    Computacion en Grid

    Como la distribuida, pero los componentes computacionalesestan mas separados geograficamente, son heterogeneos, sededican a distintas tareas...

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Cloud computing - Virtualizacion

    Computacion en la nube

    Uso de recursos computacionales, de almacenamiento, de servicios... ofrecidos atraves de algun sistema como Internet.

    Normalmente se refiere a la oferta de los servicios. Hay proveedores de espacio yservicios, incluyendo computacion (por ejemplo, Amazon).

    Cuando se ofrece uso de elementos hardware el sistema ofrece esos recursos perono estan siempre asignados fsicamente al mismo hardware.

    Virtualizacion

    Consiste en la oferta y uso de entornos virtuales, ya sea de hardware, sistemas,redes...

    Puede permitir un mayor aprovechamiento de los recursos, pues varias maquinasvirtuales pueden estar usando la misma maquina real disminuyenso as los puntosmuertos.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Computacion ubicua - Computacion voluntaria

    Computacion ubicua

    Se realiza en cualquier momento y con cualquier tipo de dispositivo (moviles,sensores, portatiles, clusters, supercomputadores...)

    Puede incluir sistemas con autonoma, por ejemplo, frigorficos poniendoseen contacto directamente con la tienda.

    Algunos conceptos relacionados: pervasive computing, computacion movil,Internet de las cosas...

    Computacion voluntaria

    Cuando los usuarios ofrecen sus recursos computacionales(almacenamiento y capacidad de computo) para la resolucion de problemas.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Computacion no convencionalExisten otros tipos de computacion no convencionales que no estan totalmentedesarrollados y que intrnsecamente incluyen paralelismo.

    Computacion cuantica

    Basada en las propiedades de la fsica cuantica.

    Podran realizarse multiples operaciones de forma simultanea.

    Requiere forma de programacion distinta a la actual.

    Hay ya algunos computadores cuanticos, de alto coste y poca capacidad de computoen terminos cuanticos, pero que resuelven algunos problemas determinados de formamucho mas rapida que con la computacion convencional.

    Computacion biologica

    Basada en la capacidad de elementos biologicos (moleculas, protenas, ADN...) paraalmacenar y procesar datos.

    Se usa en algunas aplicaciones biologicas y de medicina, pero esta lejos de podertener un uso generalizado.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    Consideramos tres paradigmas basicos que se pueden considerarlos estandares actuales:

    Programacion con Memoria Compartida.

    Programacion con Paso de Mensajes.

    Simple Instruccion Multiple Dato (SIMD).

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    MC- Sistemas

    Los sistemas donde se realiza permitenver la memoria compartida por losdistintos elementos de computacion: losdistintos procesos o hilos,independientemente del procesador onucleo donde esten, tienen acceso directoa todas las posiciones de memoria.

    Tpicamente son sistemas multicore, conmemoria dividida en bloques y organizadajerarquicamente, pero en el programa seconsidera la memoria comun, aunquehabra distinto coste de acceso a los datosdependiendo de donde se encuentren.

    Problemas de:coherencia de datos (resuelto por el sistemaoperativo)

    y contencion (empeoran el tiempo de

    ejecucion).

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    MC- Hilos

    Los elementos logicos de computacionson los hilos (threads).

    Se asocian a elementos fsicos decomputacion, que son los nucleos(cores).

    La asociacion hilos-cores se puederealizar de distintas formas.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    MC- Modelo programa

    Modelo fork-join:

    un hilo genera nuevos hilos (fork)

    y los espera para sincronizarse (join)

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    MC- Regiones crticasCuando los hilos acceden a zonas comunes de datos para variarlos es necesariasincronizacion. Los entornos de programacion en memoria compartida proporcionanherramientas:

    Seccion crtica: solo un hilo puede estar ejecutando esa parte del codigo en unmomento dado.Llaves, semaforos: se puede acceder a esa zona de codigo cuando se cumple unacondicion.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    Entornos de programacion en Memoria Compartida

    C, C++: tienen llamadas a rutinas del sistema, fork, join yotras.

    Java: tiene bibliotecas de concurrencia.

    Pthreads: interface de programacion (API) para trabajo conhilos.

    OpenMP: especificacion de API para programacion paralelaen Memoria Compartida. Se puede considerar el estandarpara computacion en MC.Se encuentra en implementaciones de lenguajes, como gcc.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    PM- Sistemas

    En los sistemas donde se realiza esta programacion no sepuede acceder a todas las posiciones de memoria desdetodos los elementos de proceso.Cada nodo o procesador tiene asociados unos bloques dememoria, a los que puede acceder directamente.Un proceso asignado a un procesador, para poder acceder adatos en bloques de memoria no accesibles desde eseprocesador, tiene que comunicarse con procesos enprocesadores a los que esta asociada esa memoria.Son redes (clusters) de ordenadores, formados por nodosmulticore conectados en red, sistemas distribuidos..., perotambien se puede usar programacion por paso de mensajesen sistemas de memoria compartida.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    PM- Procesos

    Programa:

    Puede haber un unico programa y ponerse en marcha variosprocesos con el mismo codigo. Modelo Simple ProgramaMultiple Dato (SPMD).Aunque sea el mismo programa los codigos que se ejecutanpueden ser distintos si se compila para arquitecturas distintas.Puede haber varios programas y generarse procesos concodigos distintos.

    Generacion de procesos:

    Generadion estatica: todos los procesos se ponen en marchaal mismo tiempo.Generacion dinamica: unos procesos ponen en marcha otrosdurante la ejecucion.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    PM- Memoria

    Generacion estatica

    Generacion dinamica

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    PM- Mensajes

    Los procesos se comunican con mensajes, que pueden ser:

    Segun el numero de procesos:Punto a punto: un proceso enva y otro recibe.Globales: intervienen varios procesos, posiblemente unoenviando o recibiendo datos de todos los demas.

    Segun la sincronizacion:

    Sncronos: los procesos que intervienen se bloquean hastaque se realiza la comunicacion.Asncronos: los procesos no se bloquean. El que envamanda los datos y sigue trabajando, el que recibe, si no estandisponibles los datos continua con su trabajo.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    Entornos de programacion por Paso de Mensajes

    Java: tiene bibliotecas de paso de mensajes.

    MPI (Message Passing Interface): especificacion de API paraprogramacion con Paso de Mensajes. Se puede considerar elestandar para computacion en sistemas distribuidos.API para varios lenguajes: C/C++, Fortran...Varias implementaciones gratuitas: MPICH, LAMMPI,OpenMPI...

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    SIMD- Sistemas

    Modelo SIMD: muchas unidades de proceso, cada unarealizando la misma operacion (SI) y cada una sobre susdatos (MD).

    En la actualidad podemos considerar sistemas SIMDcoprocesadores como:

    tarjetas graficas (GPU), hasta 2500 cores. En los sistemaspara graficos, se pueden programar para proposito general.Intel Xeon Phi, entre 57 y 61 cores, cada uno hasta 4 threadspor hardware.

    pero tambien hacen computacion de forma asncrona,normalmente trabajo en CPU y se manda parte delprocesamiento al coprocesador.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    GPU- Estructura

    Constan de varios Streaming Multiprocessors (SMs), cada unocon varios Streaming Processors (SPs):

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    GPU- Memoria

    Memorias independientes en CPU y GPU.Con jerarqua de memoria en cada una.Mas compleja la de GPU: optimizar su uso para tener buenas prestaciones.Y necesario minimizar copias entre memorias de CPU y GPU, o solapar las copiascon computacion.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    GPU- Modelo programacion

    Los procesadores (SPs) de un SM ejecutan hilos independientes, pero encada instante ejecutan la instruccion leda por la Instruction Unit (IU).

    En cada SM los hilos los gestiona el hardware: bajo coste.

    kernel es la parte de codigo en la CPU que lanza ejecucion a GPU:

    Descompone un problema ensubproblemas y lo mapea sobre un grid,que es un vector 1D o 2D de bloques dehilos.

    Cada bloque es un vector 1D, 2D o 3D dehilos.

    Los hilos usan su identificador de threaddentro de un bloque y de bloque dentro delgrid para determinar el trabajo que tienenque hacer.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Programacion con Memoria CompartidaProgramacion con Paso de MensajesSimple Instruccion Multiple Dato (SIMD)

    Entornos de programacion de sistemas SIMD

    Programacion de GPU es programacion especfica:

    CUDA para tarjetas NVIDIAOpenCL es estandar para tarjetas de diferentes fabricantes.

    En Intel Xeon Phi se puede usar OpenMP y MPI,con compilando diferenciada para CPU y para el Xeon Phi,peropudiendo trabajar de forma conjunta.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Veremos ejemplos basicos de programacion paralela en:

    C/C++ con fork-join

    Java

    Pthreads

    OpenMP

    MPI

    CUDA

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Un proceso puede crear un proceso hijo con la funcion fork.

    fork devuelve al proceso que lo llama el identificador delproceso hijo, y al hijo el valor cero.

    El proceso hijo tiene una copia de las variables del procesopadre.

    y ejecuta el mismo codigo del padre a partir de la zona enque se ha creado.

    El padre puede usar la funcion wait para esperar que el hijoacabe.

    Para que padre e hijo trabajen con datos compartidos hayque utilizar funciones de comparticion de memoria, como porejemplo la mmap.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion con dos procesos

    El programa en programas/C/ejemplofork.cpp realiza unaordenacion con dos procesos.Trabajar con el:

    Compilarlo con y sin la opcion -D DEBUG. Si se quiereoptimizar el codigo hay que incluir la opcion -O3 en lacompilacion.

    Entender su funcionamiento.

    Explicar el trabajo de las funciones fork, wait y mmap.

    Explicar los tiempos de ejecucion que se obtienen.

    Hacer la reserva de espacio para los datos sin usar mmap yanalizar lo que ocurre en ese caso.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Se crea una clase (threadordenar) que implementaRunnable.

    el metodo run llama a ordenar la segunda mitad del array.

    Los datos y su tamano se declaran globales para que puedanacceder los dos hilos.

    Se declara un hilo de esa clase: Thread t = newThread(new threadordenar());

    y se inicia su ejecucion con t.start().

    El hilo maestro espera mientras el hilo esclavo esta activo:t.isAlive().

    En Java hay muchas otras posibilidades de gestionar laconcurrencia.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion con dos hilos

    El programa en programas/Java/ejemplojava.java realiza unaordenacion con dos hilos.Trabajar con el:

    Compilarlo con javac.

    Entender su funcionamiento.

    Explicar el trabajo con hilos: run, start y isAlive.

    Explicar los tiempos de ejecucion que se obtienen.

    Comparar los tiempos con los obtenidos con C.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Se usa la librera pthreads.h

    Se declara un array de hilos:pthread t threads[NUM THREADS]

    Los hilos se ponen en marcha conpthread create

    que recibe la direccion del hilo (&threads[i]), la direccion dememoria de la funcion que ejecuta el hilo, y la direccion de laestructura que contiene los parametros que se pasan a lafuncion ((void *) &thread data array[i])

    Se espera a que acaben los hilos conpthread join(threads[i], &status)

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion con varios hilos

    El programa en programas/Pthreads/ejemplopthreads.cpprealiza una ordenacion con varios hilos.Trabajar con el:

    Compilarlo cong++ -O3 ejemplofork.cpp -fpermissive -lpthread.

    Entender su funcionamiento.

    Explicar el trabajo con hilos: pthread create y pthread join.

    Variar el valor de NUM THREADS y explicar los tiempos deejecucion que se obtienen.

    Comparar los tiempos con los obtenidos con C y Java.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Se usa la librera omp.h

    Hay funciones para establecer el numero de hilos a poner enmarcha en una region paralela (omp set num threads) ypara que cada hilo obtenga su numero dentro de una regionparalela (omp get thread num)

    Los hilos se ponen en marcha con#pragma omp parallel

    Todos los hilos (incluido el maestro) ejecutan el mismo codigodentro de la region paralela, pero cada hilo hace cosasdistintas utilizando su identificador.

    Los hilos se sincronizan al acabar la region paralela. A partirde ese punto sigue trabajando solo el hilo maestro.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion con varios hilos

    El programa enprogramas/OpenMP/ejemploOMPordenacion.cpp realiza unaordenacion con varios hilos.Trabajar con el:

    Compilarlo cong++ -O3 ejemploOMPordenacion.cpp -fopenmp.Entender su funcionamiento.Explicar el uso de las funciones de OpenMP y del constructorparallel.Variar el valor de NUM THREADS y explicar los tiempos deejecucion que se obtienen.Comparar los tiempos con los obtenidos con C, Java ypthreads.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion por mezcla

    El programa en programas/OpenMP/codigo6-15.c es del libro de Introduccion a laProgramacion Paralela, de Almeida, Gimenez, Mantas y Vidal, Paraninfo 2008(http://www.paraninfo.es/catalogo/9788497326742/introduccion-a-la-programacion-paralela).Realiza una ordenacion con varios hilos con la tecnica mergesort, que es mas rapida quela utilizada hasta ahora.Trabajar con el:

    Compilarlo y entender su funcionamiento.

    Antes de ejecutar hay que establecer el numero de hilos que se van a usar en lasregiones paralelas con:export OMP NUM THREADS=nhilos (nhilos representa el numero de hilos)

    Explicar las nuevas caractersticas de OpenMP que aparecen en el programa.

    Variar el numero de hilos y explicar los tiempos de ejecucion que se obtienen.

    Comparar los tiempos con los obtenidos con el programa de ordenacion anterior.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: multiplicacion de matrices

    El paralelismo en OpenMP se consigue muchas vecesdistribuyendo entre varios hilos el trabajo de un bucle.El programa en programas/OpenMP/codigo6-6.c (del librode IPP) muestra una multiplicacion de matrices entre varioshilos.Se ejecuta pasando como argumentos al programa trestamanos, el primero es el de la primera multiplicacion arealizar, el tercero el incremento de tamano y el segundo eltamano maximo.Compilarlo y entender su funcionamiento.Analizar la estructura del constructor parallel forVariar el numero de hilos y analizar los tiempos de ejecucionque se obtienen.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Problemas en el Concurso de Programacion Paralela

    El Concurso de Programacion Paralela se celebra desde hace tres anos, yconsiste en realizar programas paralelos a partir de solucionessecuenciales.

    En la pagina del concurso (luna.inf.um.es) se ha creado una pruebapara practicar con los ejemplos de OpenMP, MPI y CUDA de estapresentacion.Se entra al concurso desde Mooshak, seleccionando el PP FP2014.Hay que solicitar una cuenta a traves de alguno de los profesoresparticipantes en este proyecto UMU-IES.

    Se puede practicar con los ejemplos de OpenMP (problemas A y B), MPI(C y D) y CUDA (E y F) de ordenacion (A, C y E) y multiplicacion dematrices (B, D y F).

    La explicacion de como trabajar se da en un fichero al que se accededesde cada uno de los problemas de la prueba.

    Ademas de estos problemas de ejemplo se pueden consultar los deediciones pasadas y sus records en la pagina del concurso.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Se usa la librera mpi.h

    Es un programa C con llamadas a la librera MPI.

    Las funciones empiezan con MPI .... Hay funciones de:

    inicializacion (MPI Init) y finalizacion (MPI Finalize),para obtener el numero de procesos (MPI Comm size) y elidentificador de proceso (MPI Comm rank),de sincronizacion (MPI Barrier),de envo (MPI Send) y recepcion (MPI Recv)y otras...

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion por mezcla con varios procesos

    El programa en programas/MPI/codigo6-16.c (del libro IPP) realiza unaordenacion con varios procesos.Trabajar con el:

    Compilarlo (hay que tener instalado algun MPI, como openmpi, mpich...)conmpicc -O3 codigo6-16.c

    Se ejecuta conmpirun -np X ./a.out tam

    donde X indica el numero de procesos a usar, y tam el numero de datos aordenar.

    Entender su funcionamiento.

    Explicar el uso de las funciones de MPI.

    Variar el numero de procesos y explicar los tiempos de ejecucion que seobtienen.

    Comparar los tiempos con los obtenidos con OpenMP.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: multiplicacion de matrices

    El programa en programas/MPI/codigo6-10.c (del libro de IPP)muestra una multiplicacion de matrices con varios procesos.

    Se ejecuta pasando como argumento el tamano de las matrices amultiplicar.

    Ademas de las funciones anteriores utiliza la funcion MPI Bcast,para mandar datos de un proceso a todos los demas.

    Compilarlo, ejecutarlo y entender su funcionamiento.

    Variar el numero de procesos y analizar los tiempos de ejecucionque se obtienen.

    Para los ejemplos de MPI se pueden utilizar los problemascorrespondientes de la prueba PP FP2014 del concurso de programacionparalela.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Se pueden encontrar ejemplos de programas en CUDA enNVIDIA GPU Computing SDK.Ah hay, entre otros, ejemplos de ordenacion y multiplicacionde matrices.

    La programacion de GPUs es mas compleja que la vistahasta ahora con OpenMP y MPI, por lo que veremos un parde ejemplos simplificados que incluyen ordenacion ymultiplicacion de matrices pero que son ligeramente distintosde los vistos hasta ahora.

    Utilizamos ejemplos que estan en la lista de records delConcurso de Programacion Paralela, y se puede usar laprueba PP FP2014 para experimentar con ellos.

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: ordenacion en CUDA

    El programa en programas/CUDA/ordenacionCUDA.cu corresponde alproblema B del concurso de programacion paralela de 2012.El problema consiste en ordenar los datos de cada una de las filas deuna matriz y a continuacion los datos en cada una de las columnas.La solucion utiliza un metodo de ordenacion llamado radixsort.Trabajar con el:

    Mandarlo al concurso PP FP2014 y comprobar su funcionamiento.

    Identificar en el las funciones de CUDA (empiezan por cuda) y sufuncionamiento.

    Identificar como se lanzan ejecuciones a la tarjeta grafica.

    Analizar su tiempo de ejecucion viendo como vara al variar eltamano de bloque, y comparar con soluciones que no utilizanCUDA (hay soluciones OpenMP y MPI+OpenMP en la tabla derecords del concurso).

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

  • Tipos de Programacion ParalelaParadigmas de Programacion Paralela

    Entornos de Programacion Paralela

    Ejemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA

    Ejemplo: multiplicacion de matrices

    El programa en programas/CUDA/multiplicacionCUDA.cu corresponde alproblema D del concurso de programacion paralela de 2011.El problema consiste en multiplicar cuatro matrices.Se van multiplicando dos a dos, por lo que el paralelismo se encuentra en lamultiplicacion de dos matrices.Cada hilo CUDA multiplica una fila de una matriz por una columna de otra. Losnumeros de fila y columna se obtienen en funcion de los identificadores del hiloCUDA.Trabajar con el:

    Mandarlo al concurso PP FP2014 y comprobar su funcionamiento.

    Analizar su tiempo de ejecucion viendo como vara al variar losThreadsPerBlock.

    Comparar con soluciones que no utilizan CUDA (hay soluciones OpenMP yMPI+OpenMP en la tabla de records del concurso).

    Univ de Murcia-IES Ing. de la Cierva Paralelismo en la rama de tecnologas informaticas

    Tipos de Programacin ParalelaParadigmas de Programacin ParalelaProgramacin con Memoria CompartidaProgramacin con Paso de MensajesSimple Instruccin Mltiple Dato (SIMD)

    Entornos de Programacin ParalelaEjemplo de fork-join en CEjemplo de uso de hilos en JavaEjemplo de paralelismo con PthreadsEjemplos de paralelismo con OpenMPEjemplos de paralelismo con MPIEjemplos de CUDA