INTRODUCCIÓN A LA PROGRAMACIÓN PARALELA … · PARALELA Y COMPUTACIÓN EN CLUSTER UAM+CSIC....

of 46/46
INTRODUCCIÓN A LA PROGRAMACIÓN PARALELA Y COMPUTACIÓN EN CLUSTER UAM+CSIC
  • date post

    01-Oct-2018
  • Category

    Documents

  • view

    218
  • download

    0

Embed Size (px)

Transcript of INTRODUCCIÓN A LA PROGRAMACIÓN PARALELA … · PARALELA Y COMPUTACIÓN EN CLUSTER UAM+CSIC....

  • INTRODUCCIN A LA PROGRAMACIN

    PARALELA Y COMPUTACIN EN CLUSTER

    UAM+CSIC

  • PROGRAMA

    Proyectos de cdigo paralelo Libreras y herramientas Lenguajes, compiladores y entornos de

    desarrollo Comunicacin y transmisin de datos entre

    procesos El sistema de archivos Lustre

  • Proyectos de cdigo paralelo

    1. Decisiones de diseo2. Entornos de desarrollo y ejecucin3. Organizacin de archivos y directorios4. Copias de seguridad5. Sistemas de construccin, compilacin y control de versiones

  • Proyectos de cdigo paralelo/Diseo

    Diseo de cdigo en paralelo => descomponer los problemas para su ejecucin simultnea en bloques: Lo ms independientes entre s Que necesiten transmitir la mnima

    informacin entre ellos Que no dependan de los mismos recursos

    Ncleos de CPU Posiciones de memoria Mismas zonas fsicas en los ficheros

  • Proyectos de cdigo paralelo/Diseo

    Tipos de paralelismo Multihilo: un nico proceso a nivel lgico, con una

    regin de memoria que se comparte entre los varios hilosde ejecucin. Los hilos pueden acceder directamente a la regin de memoria. Todos los hilos deben pertenecer a la misma CPU.

    Multiproceso: varios procesos, con regiones de memoria independiente. Deben disponer de mecanismos de comunicacin para transmitir informacin. Pueden residir en distintas CPUs.

  • Proyectos de cdigo paralelo/Diseo

    Se suelen clasificar en tres tipos de diseos: Embarazosamente paralelos => Apenas hay dependencias o

    transmisin de informacin entre los distintos subprocesos. No es necesaria coordinacin entre ellos o es muy ligera.

    Paralelismo de grano grueso => Hay poca transferencia de informacin entre lo procesos, pero existe algn tipo de coordinacin, establecimiento de condiciones iniciales, control de concurrencia, etc.

    Paralelismo de grano fino => Hay una necesidad de coordinacin grande, se transmiten cantidades significativas de informacin entre los procesos y/o necesitan un alto grado de coordinacin entre ellos.

  • EJEMPLOS

    Embarazosamente paralelos:Simulaciones, frmulas que actan de forma independiente sobre una matriz de puntos que se pueden dividir en regiones.Clculo de trayectorias independientes

  • Proyectos de cdigo paralelo/Diseo

    Algunos aspectos de diseo sobre los que pensar: Cmo se ejecutarn los procesos?

    En la misma CPU, diferentes ncleos (compartirn CPU y cach)

    En la misma mquina, diferentes CPUs (compartirn memoria)

    En diferentes mquinas, diferentes CPUs (compartirn red y acceso a disco)

    Cmo se comunicarn los procesos entre s? Condiciones iniciales (parmetros de inicio) Estados intermedios (estructuras de datos comunes) Resultados del procesamiento (lo que producen

    realmente)

  • Proyectos de cdigo paralelo/Diseo (cont.)

    Cmo se coordinarn los procesos? Mediante uno de ellos que acta como coordinador De forma totalmente distribuida

    Cmo se comunicarn los procesos entre s? Estructuras compartidas de datos (OpenMP) Paso de mensajes (MPI) A travs de ficheros (testigos, buzones, etc.) A travs de mecanismos de red (sockets, etc.) A travs de otros sistemas proporcionados por el sistema

    operativo: semforos, tuberas, colas de mensajes, segmentos de memoria compartida, etc.

  • EJEMPLO: Fractal de Julia

  • Proyectos de cdigo paralelo/Diseo (cont.)

    Algoritmo:

    Para cada coordenada (x,y) de la imagen asociamos un nmero imaginario z cuya parte real corresponde con el eje de abscisas y la parte imaginaria corresponde con el eje de ordenadas p(x,y) -> z(re,im).

    Calculamos z

  • Proyectos de cdigo paralelo/Diseo (cont.)

    Opcin 1: paralelismo de grano grueso (parfor)- Todos los subprocesos trabajan sobre la misma regin de memoria (donde

    escriben los resultados)- Son dependientes entre s, comparten un recurso (una regin de memoria

    comn).- No requieren programacin especial para la coordinacin, pero deben hacerlo

    para escribir en la misma regin de la memoria.- Se ejecutan dentro de la misma mquina (hasta 16 hilos o el mximo de cores

    que establezcamos)- Corresponde al equivalente en MATLAB a parallel for.- Ms sencillo de programar, pero menos efectivo (la escritura sobre las zonas

    de memoria comunes hace de cuello de botella).- Normalmente limitado al nmero de ncleos con acceso a la misma regin de

    memoria, o que puedan comunicarse de forma eficiente => el coste de transmisin de datos entre procesos + el coste de generacin de procesos < beneficio ganado del paralelismo.

  • Proyectos de cdigo paralelo/Diseo (cont.)Opcin 1: paralelismo de grano grueso (parfor threads o hilos)

    Inicio

    Inicializacin de variables comunes

    PARFOR DISTRIBUCIN DEL TRABAJO

    P1 P2 P3 P4 Pn

    Consolidacin del resultado

    FIN

    1

    1 Memoria compartida por todos los hilos

    2

    2 El hilo principal distribuye el trabajo entre un pool de hilos de trabajo.

    3

    3 Los hilos de trabajo pueden tener zonas privadas de memoria. No se comunican entre s normalmente.

    4 El resultado se consolida en una zona comn de memoria del programa.

    4

  • Proyectos de cdigo paralelo/Diseo (cont.)

    Opcin 2: paralelismo de grano fino (MPI)- Todos los subprocesos trabajan sobre su propia regin de memoria. Para

    compartir informacin, deben de enviarse mensajes entre s.- Son independientes entre s, pueden ejecutarse en mquinas distintas o en la

    misma mquina, con la misma o diferente arquitectura, sistema operativo, etc.

    - Requieren programacin especial para la coordinacin, bien mediante uno de ellos que acta como coordinador o en algoritmos totalmente distribuidos.

    - Se ejecutan dentro de la misma mquina u otras.- Menos sencillo de programar, pero ms efectivo al ser procesos

    independientes. Ms flexible en cuanto al nmero de procesos y su ubicacin en ejecucin.

    - El paralelismo normalmente est limitado a que puedan comunicarse de forma eficiente => el coste de transmisin de datos entre procesos + el coste de generacin de procesos < beneficio ganado del paralelismo.

    - El planificador del cluster tiene opciones para indicar la afinidad de los suprocesos (a la CPU, al socket, al servidor, )

  • Proyectos de cdigo paralelo/Diseo (cont.)Opcin 2: paralelismo de grano fino (paso de mensajes - MPI)

    Inicio

    Inicializacin de variables comunes

    P1 P2 P3 P4 P(i)

    Consolidacin del resultado

    FIN

    P0

    1

    1

    Coordinador (Rank 0)

    2

    2

    Trabajadores (Rank 1..i)

    3

    3 Comunicacin (ambas direcciones)

    4

    4 Acceso al estado inicial (memoria privada)

    5

    5 Comunicacin entre los trabajadores (opcional)

    6 El coordinador suele consolidar el resultado

    6

  • Proyectos de cdigo paralelo/Diseo (cont.)

    Opcin 3: embarazosamente paralelos (embarrasingly parallel)- Todos los subprocesos son totalmente independientes, no se comunican entre

    s.- No requieren programacin especial para la coordinacin, nicamente en algn

    caso para consolidar los resultados. - Es el ms sencillo de programar, y el ms efectivo al ser procesos

    independientes. - El paralelismo normalmente est limitado nicamente a la disponibilidad de

    recursos.- No todos los problemas son susceptibles de este esquema.

  • Proyectos de cdigo paralelo/Diseo (cont.)Opcin 3: embarazosamente paralelos

    Inicio

    VariablesLocales 1

    P1 P2 P3 P4 Pj

    FIN

    VariablesLocales 2

    VariablesLocales 3

    VariablesLocales 4

    VariablesLocales (j)

    Resultado 1

    Resultado 2

    Resultado 3

    Resultado 4

    Resultado j

    Consolidacin del resultado

  • Proyectos de cdigo paralelo

    1. Decisiones de diseo2. Entornos de desarrollo y ejecucin3. Organizacin de archivos y directorios4. Copias de seguridad5. Sistemas de construccin, compilacin y control de versiones

  • Proyectos de cdigo paralelo/entonos

    Recomendaciones- Utilizar un entorno de desarrollo en local (PC), con una configuracin

    similar (arquitectura, software, libreras, sistema operativo, etc.) o al menos compatible.

    - Si no disponis de uno, solicitadlo, es posible utilizar algunos entornos disponibles (Everest.icmat.es)

    - Disponibilidad de entorno grfico, herramientas de desarrollo (editores, compiladores, depuradores)

    - Herramientas de gestin de versiones, de sincronizacin de cdigo o de acceso remoto a ficheros (GIT, CVS, rsync, SSHFS, SFTP, etc.)

  • EJEMPLO

    C/C++/FORTRAN PYTHON R MATLAB

    EDITOR/IDE Visual Studio CodeAtomSublime TextQt Creator

    IpythonJupyter

    R studio Matlab

    Compiladores / intrpretes

    GCC (6.3.0)Intel compiler

    Anaconda R Matlab compiler

    Libreras esenciales

    OMP, OpenMPI, EigenBoost

    Pillow, Numpy, ScyPy, mpi4py

    Ggplot2parallel

    (*)

    (*) Matlab tiene un soporte pobre para la ejecucin de cdigo paralelo en clusters. Requiere adems la instalacin de productos adicionales para gestionar los diferentes procesos, con un coste adicional. Veremos alguna tcnica para superar alguna de estas limitaciones.

    https://code.visualstudio.com/https://atom.io/https://www.sublimetext.com/https://www.qt.io/ide/https://ipython.org/https://jupyter.org/https://www.rstudio.com/https://gcc.gnu.org/https://software.intel.com/en-us/intel-compilershttps://www.continuum.io/downloads
  • EJEMPLO CDIGO PARALELO

    1) Paralelismo multihilo Julia set (OMP) C++2) Multiprogramacin: Mandelbrot set (MPI)

    Python3) Multiprogramacin: MATLAB y procesos en

    cluster

  • Proyectos de cdigo paralelo

    1. Decisiones de diseo2. Entornos de desarrollo y ejecucin3. Organizacin de archivos y directorios4. Copias de seguridad5. Sistemas de construccin, compilacin y control de versiones

  • Proyectos de cdigo paralelo/organizacinRecomendaciones- Decidir por un mtodo de organizacin y mantenerlo en la medida de

    lo posible. - Ahorra tiempo, evita problemas (ej. Borrado accidental)- Algunas ideas:

    - Un directorio por proyecto/programa.- Dentro de ste:

    - /bin: para los binarios y scripts directamente ejecutables- /src: para los ficheros fuente y directorios intermedios de

    construccin.- /data: para los ficheros de datos, tanto de entrada como de

    salida- /etc: para los ficheros de configuracin

    - ste modelo se integra bien con sistemas de gestin de versiones (GIT, SVN, CVS)

    - Permite la sincronizacin remota mediante rsync

  • Proyectos de cdigo paralelo

    1. Decisiones de diseo2. Entornos de desarrollo y ejecucin3. Organizacin de archivos y directorios4. Copias de seguridad5. Sistemas de construccin, compilacin y control de versiones

  • Proyectos de cdigo paralelo/copias de seguridadRecomendaciones- Disponer del cdigo en ms de una ubicacin- Realizar copias o sincronizaciones automticas del cdigo (rsync, tar, sftp,

    scp)- Programar procesos mediante crontab:

    - Generar un script que haga las copias- Programarlo mediante crontab e- Revisar el log y las copias de vez en cuando

  • EJEMPLO RSYNC programado mediante CRONTAB

  • Proyectos de cdigo paralelo

    1. Decisiones de diseo2. Entornos de desarrollo y ejecucin3. Organizacin de archivos y directorios4. Copias de seguridad5. Sistemas de construccin, compilacin y control de versiones

  • Proyectos de cdigo paralelo/control de versionesRecomendaciones- Son ms tiles cuando tenemos ms de una de estas condiciones:

    - Proyectos complejos, con varios componentes desarrollados de forma independiente (ejecutables, libreras) pero dependientes entre s.

    - Gran nmero de ficheros fuente (50+).- Desarrollados por ms de una persona en simultneo.- Desarrollados en ms de una ubicacin.

    - Herramientas:- Git: https://git-scm.com/- Subversion: https://subversion.apache.org/- CVS: http://www.nongnu.org/cvs/

    - Ventajas:- Ms de una copia de los fuentes- Consolidacin de cambios entre varios orgenes- Posibilidad de revertir cambios y de hacer variantes del cdigo

    (versiones/ramas).

    https://git-scm.com/https://subversion.apache.org/http://www.nongnu.org/cvs/
  • Proyectos de cdigo paralelo/herramientas de construccin de cdigo y compilacin

    Recomendaciones

    - Son ms tiles cuando tenemos ms de una de estas condiciones:- Proyectos complejos, con varios componentes desarrollados de forma

    independiente (ejecutables, libreras) pero dependientes entre s.- Gran nmero de ficheros fuente (50+).- Necesidad de compilacin en varios entornos diferentes.- Dependencias con varias libreras y versiones.

    - Herramientas:- CMAKE: https://cmake.org/- Unix make

    - Ventajas:- Ahorro en tiempos de construccin: slo se compilan los cambios- Facilidad de uso: definir una vez y ejecutar varias veces- No slo para la construccin: tambin para el despliegue, instalacin,

    desinstalacin, sincronizacin, copia remota

    https://cmake.org/
  • Libreras y herramientas de programacin

    1. Compiladores y entornos de ejecucin2. Depuradores y anlisis de rendimiento

  • Libreras y herramientas de programacin/compiladores

    [[email protected] ~]$ module avail------------------------ /usr/share/Modules/modulefiles ------------------------dot module-git module-info modules null use.own

    ---------------------------- /LUSTRE/apps/Modules/ -----------------------------Anaconda matlab/2010bcdo matlab/2012bcmake/3.7.1 matlab/2014acompilers/gcc/4.4.7 matlab/2014bcompilers/gcc/6.3.0 matlab/2015acompilers/gcc/binutils/2.28 matlab/2016acompilers/intel/15.0.3 matlab/2016bcompilers/nvidia/7.5 mpi/intelgnuplot mpi/mpich-x86_64Julia mpi/openmpilibs/Boost openfoam-4.1libs/nag openfoam-v1612+Mathematica

  • Libreras y herramientas de programacin/compiladores

    PYTHON: Componentes

    Anaconda: distribucin de Python que incluye las libreras ms frecuentes y orientadas al clculo y uso cientfico. module load Anaconda -> prepara el entorno de Python

    Ipython -> Intrprete interactivo en modo consola: Autocompletar Ayuda en lnea Ejecucin paso a paso

    ipyparallel -> librera de ejecucin en paralelo y en cluster: permite paralelizar trabajos desde Python que se ejecuten en un nmero de nodos. (WIP), as como la ejecucin en varios hilos.

    Jupyter notebooks -> Permite la ejecucin visual desde un navegador de los comandos lanzados en Python. Tambin permite la paralelizacin mediante ipyparallel.

  • Libreras y herramientas de programacin/compiladores

    PYTHON: Configuracin del entorno en Linux/Mac/Windows

    - Opcin A) Instalacin desde un bundle como Anaconda: https://www.continuum.io/downloads (Windows, Mac, Linux)

    - Opcin B) Instalacin manual de paquetes y libreras

    En Ubuntu:

    $ sudo apt-get install python[3]$ sudo apt-get install jupyter-notebook$ sudo apt-get install python[3]-pip$ sudo apt-get install python[3]-numpy$ sudo apt-get install python[3]-scipy$ sudo apt-get install python[3]-mpi4py$ sudo apt-get install python[3]-matplotlib

    https://www.continuum.io/downloads
  • Libreras y herramientas de programacin/compiladores

    PYTHON: Ejecucin de programas con paralelismo en PYTHON

    Python no soporta de forma sencilla los hilos de ejecucin. Algunas libreras como NumPy permite la ejecucin de operaciones de lgebra lineal utilizando paralelismo de forma transparente.

    Mpi4py permite la utilizacin del estndar de MPI para la comunicacin de procesos en la misma o diferentes mquinas.

    Tambin es posible la aproximacin de la ejecucin de mltiples procesos independientes en Python sin comunicacin mediante subtareas.

  • Libreras y herramientas de programacin/compiladores

    MATLAB: Componentes

    - La versin 2010b es completa y consta del intrprete, con interfaz grfico opcional, los toolboxes licenciados y el compilador.

    - Del resto, se encuentra instalado el runtime nicamente, que permite la ejecucin de programas compilados en otros entornos.

    - Distributed Computing Toolbox est licenciado, pero MATLAB no permite la ejecucin de procesos en distintos nodos sin una licencia adicional, y est limitado a 8 ncleos por programa.

    - Puede superarse esta limitacin:- Dividiendo el problema en subproblemas- Compilando el programa en Matlab para no tener problemas de licencia- Utilizar el runtime y el planificador del cluster para lanzar n procesos

    con un parmetro que los diferencie, u otro mecanismo de coordinacin (ficheros de sincronizacin, variables de entorno, )

  • Libreras y herramientas de programacin/compiladores

    MATLAB: Subprocesos

    Desarrollar una funcin en MATLAB que reciba una serie de parmetros, preferentemente un entero que indique al subproceso la parte del trabajo que le toca realizar.

    Compilamos la funcin: $ mcc m func.m o func

    Creamos un trabajo con subtareas para lanzar con qsub

    #!/bin/bash#$ -q all.q#$ -l h_vmem=1G#$ -j y#$ -t 1-20#$ -tc 5#$ -cwd./func $SGE_TASK_ID

  • Libreras y herramientas de programacin

    1. Compiladores y entornos de ejecucin2. Depuradores y anlisis de rendimiento

  • Libreras y herramientas de programacin/herramientas de depuracin y anlisis

    - Fundamentalmente, para lenguajes compilados (C, C++, FORTRAN)- En GCC tenemos GDB (ejecucin paso a paso) y GPROF (profiling)- Permiten, el primero, inspeccin de variables y ejecucin paso a paso y el

    segundo, anlisis de rendimiento.- En los lenguajes interpretados (MATLAB, R, PYTHON), tenemos herramientas

    similares para la depuracin. - La depuracin y anlisis de rendimiento conviene realizarla sobre las

    versiones serie, y una vez libres de errores y optimizadas, sobre las versiones en paralelo slo si es necesario.

  • Transmisin de datos entre nodos: Altas prestaciones para proceso de informacin distribuido

    1. La red Infiniband e IpoIB2. Como utilizar la red Ib para la comunicacin entre procesos

  • Transmisin de datos entre nodos/red IB

    La red Infiniband es una red alternativa a Ethernet que ofrece baja latencia y altas tasas de transferencia.Permite velocidades ms altas de transmisin con bajo consumo de CPU evitanto el acceso al kernel.Dispone de una API, pero es complicada de programar. Salvo necesidades muy especficas, es mejor utilizar utilidades y APIs que ofrecen mayor facilidad de uso.Se utiliza la red Infiniband de forma sencilla y transparente:Al acceder al sistema de archivos LUSTRE (a travs de LNET)Al comunicarse con otros procesos locales o remotos a travs de OpenMPI (Send, Recv)Al utilizar cualquiera de los servicios de IP overInfiniband

  • Transmisin de datos entre nodos/red IB

    Ejemplo:Prueba de transmisin de datos entre nodosServicios de IpoIB: la red IP interna del cluster

  • El sistema de archivos Lustre

    1. Caractersticas del sistema de archivos Lustre2. Comandos de gestin del sistema de archivos

  • El sistema de archivos Lustre/Caractersticas

    * Ofrece una alta disponibilidad y redundancia de los datos (RAID-6)* Ofrece baja latencia en los accesos, paralelizacin en los accesos y altas

    tasas de transferencia* Ofrece un sistema de cach para asegurar el mximo uso de los datos en

    memoria* Permite operaciones avanzadas como *STRIPING* de ficheros para aumentar el

    rendimiento* Es altamente escalable y puede alcanzar Petabytes o Exabytes de tamao de

    ficheros* Se encuentra montado en todos los nodos en modo de lectura/escritura en la

    ruta /LUSTRE* /LUSTRE/users contiene los $HOME de los usuarios. * Cualquier cambio en cualquiera de los nodos es directamente observable desde

    cualquier otro nodo.* Dispone de 4 servidores OSS, permitiendo escrituras en paralelo de entre 1 y

    4 nodos (stripe 1 a 4).* La comunicacin y transmisin de datos se realiza de forma transparente a

    travs de Infiniband.* Documentacin: http://lustre.org/documentation/* Cumple es estndar POSIX, todos los comandos y funciones estndar de UNIX

    aplican de forma transparente a LUSTRE.

    http://lustre.org/documentation/
  • El sistema de archivos Lustre/Comandos

    # LUSTRE en LOVELACE

    * Se forma por dos servidores de metadatos (MDS) en alta disponibilidad y 4 servidores de datos (OSS) balanceados.* Funciona de forma transparente al sistema operativo y a las aplicaciones, cuando se trabaja en el sistema de ficheros (/LUSTRE)* Dispone de una lnea de comandos para operaciones especiales:

    $ lfs help

  • El sistema de archivos Lustre/Comandos

    $ lfs df -> Visualizar la ocupacin de los OSTs.$ lfs osts -> Obtener informacin de los OSTs.$ lfs find -> Buscar ficheros de forma ms eficiente que GNU find.$ lfs quota -> Obtener informacin del uso de la cuota asignada.$ lfs getstripe -> Obtener informacin del stripe de un archivo.$ lfs rgetfacl -> Obtener informacin acerca de las listas de acceso.$ lfs setstripe -> Establecer el nivel de stripe de un fichero.$ lfs getstripe -> Obtener el nivel de stripe de un fichero.