Очарование++
Парадигма | на основе сообщений Параллельное программирование , мигрируемые объекты, объектно-ориентированное , асинхронная многозадачность |
---|---|
Разработано | Лакшмикант Кале |
Разработчик | Лаборатория параллельного программирования |
Впервые появился | конец 1980-х |
Стабильная версия | 7.0.0
/ 25 октября 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пи
[ редактировать ]Шарм4пи [ 3 ] Python — это платформа параллельных вычислений , построенная на основе среды выполнения Charm++ C++, которую она использует в качестве общей библиотеки. Charm4py упрощает разработку приложений Charm++ и оптимизирует части модели программирования. Например, нет необходимости записывать файлы интерфейса (файлы .ci) или использовать SDAG, а также нет необходимости компилировать программы. Пользователи по-прежнему могут ускорять свой код на уровне приложения с помощью таких технологий, как Numba . Стандартные готовые к использованию бинарные версии можно установить в Linux, macOS и Windows с помощью pip .
Также возможно писать гибридные программы Charm4py и MPI. [ 4 ] Примером поддерживаемого сценария является программа Charm4py, использующая библиотеки mpi4py для определенных частей вычислений.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Лаборатория параллельного программирования» . charm.cs.illinois.edu . Проверено 12 декабря 2018 г.
- ^ «Массив «Hello World»: немного более продвинутая программа «Hello World»: код массива «Hello World» . PPL-UIUC ЛАБОРАТОРИЯ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ . Проверено 8 мая 2017 г.
- ^ «Charm4py — документация Charm4py 1.0.0» . charm4py.readthedocs.io . Проверено 11 сентября 2019 г.
- ^ «Запуск гибридных программ mpi4py и Charm4py (взаимодействие mpi)» . Форум Charm++ и Charm4py . 30 ноября 2018 г. Проверено 11 декабря 2018 г.