Введение

Charm++ - параллельная объектно-ориентированная парадигма программирования, основанная на C++ и разработанная в лаборатории параллельного программирования Университета Иллинойса в Урбана-Шампейн. Charm++ разработан с целью повышения производительности программиста, обеспечивая высокий уровень абстракции параллельной программы, в то же время обеспечивая хорошую производительность на широком спектре базовых аппаратных платформ. Программы, написанные на Charm ++, декомпонируются на ряд взаимодействующих объектов, управляемых сообщениями, называемых chares. Когда программист вызывает метод на объекте, система выполнения Charm++ отправляет сообщение вызываемому объекту, который может находиться на локальном процессоре или на удаленном процессоре в параллельном вычислении. Это сообщение запускает исполнение кода в chare для асинхронной обработки сообщения. Чары могут быть организованы в индексированные коллекции, называемые массивами чаров, и сообщения могут быть отправлены отдельным чарам в массиве чаров или всему массиву чаров одновременно. Части программы соотносятся с физическими процессорами адаптивной системой времени выполнения. Картографирование схем процессорам прозрачно для программиста, и эта прозрачность позволяет системе во время выполнения динамически изменять назначение схем процессорам во время выполнения программы для поддержки таких возможностей, как балансировка нагрузки на основе измерений, отказоустойчивость, автоматическая проверка и возможность уменьшать и расширять набор процессоров, используемых параллельной программой. Приложения, реализованные с использованием Charm ++, включают NAMD (молекулярная динамика) и OpenAtom (квантовая химия), ChaNGa и SpECTRE (астрономия), EpiSimdemics (эпидемиология), Cello / Enzo E (адаптивное усовершенствование сетки) и ROSS (параллельное дискретное моделирование событий). Все эти приложения масштабировались до ста тысяч ядер или более на петамасштабных системах. Adaptive MPI (AMPI) - это реализация стандарта Message Passing Interface на вершине системы времени выполнения Charm++ и обеспечивает возможности Charm++ в более традиционной модели программирования MPI. AMPI инкапсулирует каждый процесс MPI в миграционной нитке на уровне пользователя, которая связана с объектом Charm ++. Встраивая каждую нить в chare, программы AMPI могут автоматически использовать функции системы времени выполнения Charm ++, практически не изменяя программу MPI. Charm4py позволяет писать Charm++ приложения на Python, поддерживая переносимые объекты Python и асинхронное вызов удаленных методов.

Адаптируемый МПИ (AMPI)

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