Articulo de referencia

Encanto++

Charm++ es un paradigma de programación paralela orientada a objetos basado en C++ y desarrollado en el Laboratorio de Programación Paralela de la Universidad de Illinois en Urb...

Charm++ es un paradigma de programación paralela orientada a objetos basado en C++ y desarrollado en el Laboratorio de Programación Paralela de la Universidad de Illinois en Urbana-Champaign . Charm++ está diseñado para mejorar la productividad del programador al proporcionar una abstracción de alto nivel de un programa paralelo , a la vez que ofrece un buen rendimiento en una amplia variedad de plataformas de hardware. Los programas escritos en Charm++ se descomponen en varios objetos cooperativos controlados por mensajes llamados chares . Cuando un programador invoca un método en un objeto, el sistema de tiempo de ejecución de Charm++ envía un mensaje al objeto invocado, que puede residir en el procesador local o en un procesador remoto en una computación paralela. Este mensaje activa la ejecución del código dentro del chare para procesar el mensaje de forma asíncrona.

Los caracteres pueden organizarse en colecciones indexadas llamadas matrices de caracteres , y los mensajes pueden enviarse a caracteres individuales dentro de una matriz de caracteres o a toda la matriz de caracteres simultáneamente.

Los caracteres de un programa se asignan a procesadores físicos mediante un sistema de ejecución adaptativo. Esta asignación es transparente para el programador, y permite que el sistema de ejecución modifique dinámicamente la asignación de caracteres a procesadores durante la ejecución del programa para admitir funcionalidades como el equilibrio de carga basado en mediciones, la tolerancia a fallos, la creación automática de puntos de control y la capacidad de reducir o ampliar el conjunto de procesadores utilizados por un programa paralelo.

Entre las aplicaciones implementadas con Charm++ se incluyen NAMD (dinámica molecular) y OpenAtom (química cuántica), ChaNGa y SpECTRE (astronomía), EpiSimdemics (epidemiología) y Cello/Enzo-E (refinamiento adaptativo de malla). Todas estas aplicaciones han alcanzado una escala de hasta cien mil núcleos o más en sistemas de petaescala.

Adaptive MPI (AMPI) [ 1 ] es una implementación del estándar Message Passing Interface sobre el sistema de tiempo de ejecución Charm++ y proporciona las capacidades de Charm++ en un modelo de programación MPI más tradicional. AMPI encapsula cada proceso MPI dentro de un hilo migrable a nivel de usuario que está vinculado dentro de un objeto Charm++. Al integrar cada hilo en un chare, los programas AMPI pueden aprovechar automáticamente las características del sistema de tiempo de ejecución Charm++ con pocos o ningún cambio en el programa MPI.

Charm4py permite escribir aplicaciones Charm++ en Python , admitiendo objetos Python migrables e invocación asíncrona de métodos remotos.

Ejemplo

Aquí hay algo de código Charm++ a modo de demostración: [ 2 ]

Archivo de cabecera ( hello.h )
clase Hello : public CBase_Hello { public : Hello (); // Constructor de C++void sayHi ( int from ); // Método de entrada "invocable remotamente" };
Archivo de interfaz Charm++ ( hello.ci )
módulo hola { array [ 1 D ] Hola { entrada Hola (); entrada void decirHola ( int ); }; };
Archivo fuente ( hello.cpp )
#incluir "hello.decl.h" #incluir " hello.h "externo CProxy_Main mainProxy ; extern int numElementos ;Hola :: Hola () { // No hay variables miembro que inicializar en este sencillo ejemplo }void Hola :: decirHola ( int desde ) {// Este objeto chare saluda al usuario. CkPrintf ( "Hola desde chare # %d en el procesador %d (indicado por %d) \n " , thisIndex , CkMyPe (), from );// Indica al siguiente objeto chare en este array de objetos chare // que también diga hola. Si este es el último objeto chare en // el array de objetos chare, entonces indica al objeto chare principal // que salga del programa. if ( thisIndex < ( numElements - 1 )) { thisProxy [ thisIndex + 1 ]. sayHi ( thisIndex ); } else { mainProxy . done (); } }# incluir "hello.def.h"

MPI adaptativo (AMPI)

Adaptive MPI es una implementación de MPI (como MPICH, OpenMPI, MVAPICH, etc.) sobre el sistema de ejecución de Charm++. Los usuarios pueden tomar aplicaciones MPI preexistentes, recompilarlas usando los envoltorios del compilador de AMPI y comenzar a experimentar con la virtualización de procesos, el equilibrio de carga dinámico y la tolerancia a fallos. AMPI implementa los "rangos" de MPI como hilos a nivel de usuario (en lugar de procesos del sistema operativo). Estos hilos permiten un cambio de contexto rápido, por lo que se pueden programar varios de ellos en el mismo núcleo según la disponibilidad de mensajes. Los rangos de AMPI, y todos los datos que poseen, también se pueden migrar en tiempo de ejecución entre los diferentes núcleos y nodos de una tarea. Esto es útil para el equilibrio de carga y para esquemas de tolerancia a fallos basados ​​en puntos de control/reinicio. Para obtener más información sobre AMPI, consulte el manual: http://charm.cs.illinois.edu/manuals/html/ampi/manual.html

Charm4py

Charm4py [ 3 ] es un marco de computación paralela en Python construido sobre el entorno de ejecución Charm++ de C++, que utiliza como biblioteca compartida. Charm4py simplifica el desarrollo de aplicaciones Charm++ y optimiza partes del modelo de programación. Por ejemplo, no es necesario escribir archivos de interfaz (.ci) ni usar SDAG, y no se requiere compilar programas. Los usuarios aún pueden acelerar su código de nivel de aplicación con tecnologías como Numba . Las versiones binarias estándar listas para usar se pueden instalar en Linux, macOS y Windows con pip .

También es posible escribir programas híbridos Charm4py y MPI. [ 4 ] Un ejemplo de un escenario compatible es un programa Charm4py que utiliza las bibliotecas mpi4py para partes específicas del cálculo.

Véase también

Referencias

  1. "Laboratorio de Programación Paralela" . charm.cs.illinois.edu . Consultado el 12 de diciembre de 2018 .
  2. "Array "Hola Mundo": Un programa "Hola Mundo" ligeramente más avanzado: Código Array "Hola Mundo" . PPL - LABORATORIO DE PROGRAMACIÓN PARALELA DE UIUC . Consultado el 8 de mayo de 2017 .
  3. "Charm4py — Documentación de Charm4py 1.0.0" . charm4py.readthedocs.io . Consultado el 11 de septiembre de 2019 .
  4. "Ejecución de programas híbridos mpi4py y Charm4py (interoperabilidad mpi)" . Foro de Charm++ y Charm4py . 30 de noviembre de 2018. Consultado el 11 de diciembre de 2018 .
  • El lenguaje y sistema de programación paralela Charm: Parte I - Descripción de las características del lenguaje , archivo PDF
  • El lenguaje y sistema de programación paralela Charm: Parte II - El sistema de ejecución , archivo pdf
  • El Laboratorio de Programación Paralela (PPL) de la UIUC
  • El sistema de programación Charm++
  • Charmworks Inc.: Soporte comercial para Charm++ y herramientas relacionadas.
  • Foro de Charm++, AMPI y Charm4py