Jump to content

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

Очарование++
Парадигма на основе сообщений Параллельное программирование , мигрируемые объекты, объектно-ориентированное , асинхронная многозадачность
Разработано Лакшмикант Кале
Разработчик Лаборатория параллельного программирования
Впервые появился конец 1980-х ( конец 1980-х )
Стабильная версия
7.0.0 / 25 октября 2021 г .; 2 года назад ( 25.10.2021 )
Язык реализации С++ , Питон
Платформа Cray XC , XK , XE , IBM Blue Gene/Q , Infiniband , TCP , UDP , MPI , OFI
ТЫ Линукс , Виндовс , МакОС
Веб-сайт http://charmplusplus.org

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

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

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

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

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

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

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

Заголовочный файл ( привет.х )
class Hello : public CBase_Hello {
 public:
  Hello(); // C++ constructor

  void sayHi(int from); // Remotely invocable "entry method"
};
Файл интерфейса Charm++ ( hello.ci )
module hello {
  array [1D] Hello {
    entry Hello();
    entry void sayHi(int);
  };
};
Исходный файл ( привет.cpp )
# include "hello.decl.h"
# include "hello.h"

extern CProxy_Main mainProxy;
extern int numElements;

Hello::Hello() {
  // No member variables to initialize in this simple example
}

void Hello::sayHi(int from) {

  // Have this chare object say hello to the user.
  CkPrintf("Hello from chare # %d on processor %d (told by %d)\n",
           thisIndex, CkMyPe(), from);

  // Tell the next chare object in this array of chare objects
  // to also say hello. If this is the last chare object in
  // the array of chare objects, then tell the main chare
  // object to exit the program.
  if (thisIndex < (numElements - 1)) {
    thisProxy[thisIndex + 1].sayHi(thisIndex);
  } else {
    mainProxy.done();
  }
}

# include "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.

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

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

См. также

[ редактировать ]
  1. ^ «Лаборатория параллельного программирования» . charm.cs.illinois.edu . Проверено 12 декабря 2018 г.
  2. ^ «Массив «Hello World»: немного более продвинутая программа «Hello World»: код массива «Hello World» . PPL-UIUC ЛАБОРАТОРИЯ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ . Проверено 8 мая 2017 г.
  3. ^ «Charm4py — документация Charm4py 1.0.0» . charm4py.readthedocs.io . Проверено 11 сентября 2019 г.
  4. ^ «Запуск гибридных программ mpi4py и Charm4py (взаимодействие mpi)» . Форум Charm++ и Charm4py . 30 ноября 2018 г. Проверено 11 декабря 2018 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: db86f5773b328804831c53d8717b9fbc__1699253520
URL1:https://arc.ask3.ru/arc/aa/db/bc/db86f5773b328804831c53d8717b9fbc.html
Заголовок, (Title) документа по адресу, URL1:
Charm++ - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)