Очарование ++ - Charm++

Очарование ++
ПарадигмаУправляемый сообщениями параллельное программирование, переносимые объекты, Объектно-ориентированный, асинхронная многозадачность
РазработаноЛаксмикант Кале
РазработчикЛаборатория параллельного программирования
Впервые появилсяконец 1980-х (конец 1980-х)
Стабильный выпуск
6.10.2 / 4 августа 2020 г.; 3 месяца назад (2020-08-04)
Язык реализацииC ++, Python
ПлатформаCray XC, XK, XE, IBM Blue Gene / Q, Infiniband, TCP, UDP, MPI, OFI
Операционные системыLinux, Windows, macOS
Интернет сайтhttp://charmplusplus.org

Очарование ++ это параллель объектно-ориентированного программирования парадигма, основанная на C ++ и разработан в Лаборатории параллельного программирования Университет штата Иллинойс в Урбане-Шампейн. Charm ++ разработан с целью повышения производительности программистов путем предоставления высокоуровневой абстракции параллельная программа в то же время обеспечивая хорошую производительность на широком спектре базовых аппаратных платформ. Программы, написанные на Charm ++, разлагаются на несколько взаимодействующих объектов, управляемых сообщениями, которые называются chares. Когда программист вызывает метод объекта, исполняющая система Charm ++ отправляет сообщение вызванному объекту, который может находиться на локальном процессоре или на удаленном процессоре при параллельном вычислении. Это сообщение запускает выполнение кода внутри chare для асинхронной обработки сообщения.

Чары могут быть организованы в индексированные коллекции, называемые массивы chare и сообщения могут быть отправлены на отдельные chare в пределах массива chare или на весь массив chare одновременно.

Части в программе отображаются на физические процессоры с помощью адаптивной системы времени выполнения. Отображение chares процессорам прозрачно для программиста, и эта прозрачность позволяет системе времени выполнения динамически изменять назначение chares процессорам во время выполнения программы для поддержки таких возможностей, как балансировка нагрузки на основе измерений, отказоустойчивость, автоматическая установка контрольных точек и возможность сокращать и расширять набор процессоров, используемых параллельной программой.

Приложения, реализованные с использованием Charm ++, включают NAMD (молекулярная динамика) и OpenAtom (квантовая химия), Чанга и Spectre (астрономия), EpiSimdemics (эпидемиология), Cello / Enzo-P (адаптивное уточнение сетки) и ROSS (параллельное моделирование дискретных событий). Все эти приложения масштабируются до ста тысяч ядер или более в петафокальных системах.

Адаптивный MPI (AMPI)[1] это реализация Интерфейс передачи сообщений стандарт поверх исполняющей системы Charm ++ и предоставляет возможности Charm ++ в более традиционной модели программирования MPI. AMPI инкапсулирует каждый процесс MPI в переносимый поток на уровне пользователя, связанный с объектом Charm ++. Встраивая каждый поток в chare, программы AMPI могут автоматически использовать преимущества системы времени выполнения Charm ++ с небольшими изменениями программы MPI или без них.

Charm4py позволяет писать приложения Charm ++ на Python, поддерживающих переносимые объекты Python и вызов асинхронного удаленного метода.

Пример

Вот код Charm ++ для демонстрационных целей:[2]

Заголовочный файл (привет.h)
учебный класс Привет : общественный CBase_Hello { общественный:  Привет(); // Конструктор C ++  пустота скажи привет(int из); // Удаленно вызываемый "метод входа"};
Файл интерфейса Charm ++ (hello.ci)
модуль Привет {  множество [1D] Привет {    Вход Привет();    Вход пустота скажи привет(int);  };};
Исходный файл (hello.cpp)
# включить "hello.decl.h"# включить "hello.h"внешний CProxy_Main mainProxy;внешний int numElements;Привет::Привет() {  // В этом простом примере нет переменных-членов для инициализации}пустота Привет::скажи привет(int из) {  // Пусть этот chare-объект поприветствует пользователя.  CkPrintf("Привет от chare #% d на процессоре% d (сообщил% d)",           thisIndex, CkMyPe(), из);  // Сообщаем следующему объекту chare в этом массиве объектов chare  // также поздороваться. Если это последний объект chare в  // массив объектов chare, затем сообщаем основному chare  // объект для выхода из программы.  если (thisIndex < (numElements - 1)) {    thisProxy[thisIndex + 1].скажи привет(thisIndex);  } еще {    mainProxy.сделано();  }}# включить "hello.def.h"

Адаптивный MPI (AMPI)

Адаптивный MPI - это реализация MPI (например, MPICH, OpenMPI, MVAPICH и т. Д.) Поверх системы времени выполнения Charm ++. Пользователи могут взять уже существующие приложения MPI, перекомпилировать их с помощью оболочек компилятора AMPI и начать экспериментировать с виртуализацией процессов, динамической балансировкой нагрузки и отказоустойчивостью. AMPI реализует MPI «ранжирование» как потоки пользовательского уровня (а не процессы операционной системы). Эти потоки быстро переключаются между контекстами, поэтому несколько из них могут быть совместно запланированы на одном ядре в зависимости от доступности сообщений для них. Ранги AMPI и все данные, которыми они владеют, также можно переносить во время выполнения между различными ядрами и узлами задания. Это полезно для балансировки нагрузки и для схем отказоустойчивости на основе контрольных точек / перезапуска. Для получения дополнительной информации об AMPI см. Руководство: http://charm.cs.illinois.edu/manuals/html/ampi/manual.html

Charm4py

Charm4py[3]- это среда параллельных вычислений Python, построенная на основе среды выполнения Charm ++ C ++, которую он использует в качестве разделяемой библиотеки. Charm4py упрощает разработку приложений Charm ++ и оптимизирует части модели программирования. Например, нет необходимости писать файлы интерфейса (файлы .ci) или использовать SDAG, и нет необходимости компилировать программы. Пользователи по-прежнему могут ускорять свой код на уровне приложения с помощью таких технологий, как Нумба. Стандартные готовые к использованию двоичные версии могут быть установлены в Linux, macOS и Windows с пип.

Также возможно писать гибридные программы Charm4py и MPI.[4] Примером поддерживаемого сценария является программа Charm4py, использующая библиотеки mpi4py для определенных частей вычислений.

Смотрите также

Рекомендации

  1. ^ «Лаборатория параллельного программирования». charm.cs.illinois.edu. Получено 2018-12-12.
  2. ^ «Массив« Hello World »: немного более продвинутая программа« Hello World »: код для массива« Hello World ». http://charmplusplus.org/: PPL - ЛАБОРАТОРИЯ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ UIUC. Получено 2017-05-08.
  3. ^ «Charm4py - документация Charm4py 1.0.0». charm4py.readthedocs.io. Получено 2019-09-11.
  4. ^ «Запуск гибридных программ mpi4py и Charm4py (взаимодействие mpi)». Форум Charm ++ и Charm4py. 2018-11-30. Получено 2018-12-11.

внешняя ссылка