BMDFM - BMDFM
BMDFM ("Бинарный модульный Поток данных Машина") - это программное обеспечение, которое позволяет запускать приложение параллельно на симметричных мультипроцессорах с общей памятью (SMP ) с использованием нескольких процессоров для ускорения выполнения отдельных приложений. BMDFM автоматически определяет и использует параллелизм благодаря статическому и в основном ДИНАМИЧЕСКОМУ РАСПИСАНИЮ последовательностей команд потока данных, полученных из ранее последовательной программы.
Подсистема динамического планирования BMDFM выполняет SMP подражание Tagged-Token Поток данных Машина для обеспечения прозрачной семантики потока данных для приложений. Никаких директив для параллельного выполнения не требуется.
Задний план
В настоящее время симметричные мультипроцессоры (SMP) с параллельной общей памятью представляют собой сложные машины, на которых необходимо одновременно решать большое количество архитектурных аспектов для достижения высокой производительности. Современные машины SMP для технических вычислений могут иметь много тесно связанных ядер (хорошими примерами являются машины SMP на базе многоядерных процессоров Intel или многоядерных процессоров IBM POWER). Согласно обнародованным планам компаний-производителей компьютеров, количество ядер на SMP-узел, вероятно, удвоится в ближайшие пару лет.
Многоядерные процессоры предназначены для использования параллелизма на уровне потоков, определяемого программным обеспечением. Следовательно, самая сложная задача - найти эффективный способ использования мощности многоядерных процессоров для параллельной обработки прикладной программы. Существующая парадигма статического распараллеливания OpenMP с библиотекой времени выполнения fork-join очень хорошо работает только для регулярных вычислений на основе массивов с интенсивным циклом, однако методы распараллеливания во время компиляции в целом слабые и почти неприменимы для нестандартных приложений:
- Есть много операций, которые требуют недетерминированного количества времени, что затрудняет точное определение того, когда определенные фрагменты данных станут доступны.
- Иерархия памяти с многоуровневыми кэшами имеет непредсказуемые задержки доступа к памяти.
- В многопользовательском режиме чужие коды могут использовать ресурсы или замедлять часть вычислений таким образом, что компилятор не может учесть их.
- Межпроцедурная и кросс-условная оптимизация во время компиляции сложна (очень часто невозможна), потому что компиляторы не могут определить, в каком направлении пойдет условное выражение, или не могут оптимизировать вызов функции.
Семантика прозрачного потока данных BMDFM
Новая технология BMDFM (двоичная модульная машина потока данных) в основном использует динамическое планирование для использования параллелизма прикладной программы, таким образом, BMDFM позволяет избежать упомянутых недостатков методов времени компиляции. [1] [2] BMDFM - это среда параллельного программирования для многоядерного SMP, которая обеспечивает:
- Обычная парадигма программирования, не требующая директив для параллельного выполнения.
- Прозрачное (неявное) использование параллелизма естественным образом и с балансировкой нагрузки с использованием всех доступных многоядерных процессоров в системе автоматически.
BMDFM объединяет преимущества известных архитектурных принципов в единую гибридную архитектуру, которая может использовать неявный параллелизм приложений, имеющих незначительные накладные расходы на динамическое планирование и отсутствие узких мест. В основном используется базовый принцип потока данных. Принцип потока данных гласит: «Команда или функция могут быть выполнены, как только будут готовы все ее аргументы. Машина потока данных управляет тегами для каждой части данных во время выполнения. Данные помечаются тегом готовности, когда данные были вычислены. Инструкции с готовыми аргументами выполняются с пометкой их данных результата как готовые ".
Основная особенность BMDFM - предоставить обычную парадигму программирования на верхнем уровне, так называемую семантику прозрачного потока данных. Пользователь понимает BMDFM как виртуальную машину, которая выполняет все операторы прикладной программы параллельно, при этом все механизмы распараллеливания и синхронизации полностью прозрачны. Операторы прикладной программы - это обычные операторы, из которых может состоять любая однопоточная программа - они включают присвоение переменных, условную обработку, циклы, вызовы функций и т. Д.
Предположим, у нас есть фрагмент кода, показанный ниже:
(setq а (foo0 я)) # а = foo0(я);(setq б (foo1 (+ я 1))) # б = foo1(я+1);(setq б (++ б)) # б++;(экипировка "a =% d п" а) # printf("a =% d п", а);(экипировка "b =% d п" б) # printf("b =% d п", б);
Два первых оператора независимы, поэтому механизм потока данных BMDFM может запускать их на разных процессорах или ядрах процессора. Два последних оператора также могут выполняться параллельно, но только после вычисления «a» и «b». Механизм потока данных автоматически распознает зависимости благодаря своей способности динамически строить граф потока данных во время выполнения. Кроме того, механизм потока данных правильно приказывает выходному потоку выводить результаты последовательно. Таким образом, даже после обработки вне очереди результаты будут отображаться естественным образом.
Предположим, что приведенный выше фрагмент кода теперь вложен в цикл:
(для я 1 1 N (прогноз # для (я = 1; я <= N; я++) { (setq а (foo0 я)) # а = foo0(я); (setq б (foo1 (+ я 1))) # б = foo1(я + 1); (setq б (++ б)) # б++; (экипировка "a =% d п" а) # printf("a =% d п", а); (экипировка "b =% d п" б) # printf("b =% d п", б);)) # }
Механизм потока данных BMDFM будет хранить переменные «a» и «b» в уникальных контекстах для каждой итерации. Собственно, это разные копии переменных. Переменная контекста существует до тех пор, пока на нее не обратятся потребители инструкций. Позже контексты, на которые нет ссылок, будут собираться мусором во время выполнения. Следовательно, механизм потока данных может использовать как локальный параллелизм в рамках итерации, так и глобальный параллелизм, а также выполнять несколько итераций одновременно.
Архитектура БМДФМ
Основная концепция BMDFM показана на следующем рисунке. Предлагаемый подход основан на доступном на рынке товарном SMP-оборудовании. Обычно поставщики SMP предоставляют свою собственную операционную систему (ОС) SMP с интерфейсом SVR4 / POSIX UNIX (Linux, HP-UX, SunOS / Solaris, Tru64OSF1, IRIX, AIX, BSD, MacOS и т. Д.). Поверх ОС SMP механизм выполнения многопоточного потока данных выполняет программную эмуляцию машины потока данных. Такая виртуальная машина имеет интерфейсы к языку виртуальной машины и к C, обеспечивая семантику прозрачного потока данных для обычного программирования.
Как видно, BMDFM построен как гибрид нескольких архитектурных принципов:
- MIMD (несколько потоков инструкций, несколько потоков данных), поддерживаемый стандартным SMP.
- Неявное параллельное выполнение обеспечивается эмуляцией потока данных.
- Вычислительный принцип Фон-Неймана хорош для реализации виртуальной машины внешнего управления.
На следующем рисунке представлен более подробный вид архитектуры BMDFM:
Прикладная программа (входная последовательная программа) обрабатывается в три этапа: предварительная реорганизация кода (реорганизатор кода), статическое планирование операторов (статический планировщик) и компиляция / загрузка (компилятор, загрузчик). Результатом после этапов статического планирования является поток нескольких кластеров, который питает многопоточный механизм через интерфейс, спроектированный таким образом, чтобы избежать узких мест. Поток нескольких кластеров можно рассматривать как скомпилированную входную программу, разделенную на маршалированные кластеры, в которых все адреса разрешаются и расширяются контекстной информацией. Разделение на маршалированные кластеры позволяет загружать их в многопоточном режиме. Контекстная информация позволяет обрабатывать итерации параллельно. Поток слушателя упорядочивает выходной поток после обработки вне очереди.
Подсистема динамического планирования BMDFM - это эффективный эмулятор SMP машины потока данных с тегами. Пул общей памяти разделен на три основные части: порт кольцевого буфера ввода / вывода (IORBP), буфер данных (DB) и очередь операций (OQ). Виртуальная машина внешнего управления статически планирует программу ввода данных и помещает сгруппированные инструкции и данные программы ввода в IORBP. Сервисные процессы кольцевого буфера (IORBP PROC) перемещают данные в DB, а инструкции - в OQ. Процессы обслуживания очереди операций (OQ PROC) помечают инструкции как готовые к выполнению, если требуемые данные операндов доступны. Процессы выполнения (CPU PROC) выполняют инструкции, которые помечаются как готовые, и выводят вычисленные данные в базу данных или в IORBP. Кроме того, IORBP PROC и OQ PROC отвечают за освобождение памяти после обработки контекстов. Контекст - это специальный уникальный идентификатор, представляющий копию данных в различных телах итерации в соответствии с архитектурой потока данных с тегами. Это позволяет динамическому планировщику обрабатывать несколько итераций параллельно.
Процессы, выполняемые под ОС SMP, занимают все доступные процессоры и ядра процессора. Чтобы позволить нескольким процессам обращаться к одним и тем же данным одновременно, динамический планировщик BMDFM блокирует объекты в пуле разделяемой памяти с помощью операций семафоров SVR4 / POSIX. Политика блокировки обеспечивает множественный доступ только для чтения и эксклюзивный доступ для изменения.
Поддерживаемые платформы
Каждая машина поддерживает ANSI C и POSIX / SVR4 может работать BMDFM.
BMDFM предоставляется в виде полных многопоточных версий для:
- x86: Linux / 32, FreeBSD / 32, OpenBSD / 32, NetBSD / 32, MacOS / 32, SunOS / 32, UnixWare / 32, Minix / 32, Android / 32, Win-Cygwin / 32, Win-UWIN / 32, Win -SFU-SUA / 32;
- x86-64: Linux / 64, FreeBSD / 64, OpenBSD / 64, NetBSD / 64, MacOS / 64, SunOS / 64, Android / 64, Win-Cygwin / 64;
- VAX: Ultrix / 32;
- Альфа: Tru64OSF1 / 64, Linux / 64, FreeBSD / 64, OpenBSD / 64;
- IA-64: HP-UX / 32, HP-UX / 64, Linux / 64, FreeBSD / 64;
- XeonPhiMIC: Linux / 64;
- МЦСТ-Эльбрус: Linux / 32, Linux / 64;
- PA-RISC: HP-UX / 32, HP-UX / 64, Linux / 32;
- SPARC: SunOS / 32, SunOS / 64, Linux / 32, Linux / 64, FreeBSD / 64, OpenBSD / 64;
- MIPS: IRIX / 32, IRIX / 64, Linux / 32, Linux / 64;
- MIPSel: Linux / 32, Linux / 64, Android / 32, Android / 64;
- PowerPC: AIX / 32, AIX / 64, MacOS / 32, MacOS / 64, Linux / 32, Linux / 64, FreeBSD / 32, FreeBSD / 64;
- PowerPCle: Linux / 32, Linux / 64;
- S / 390: Linux / 32, Linux / 64;
- M68000: Linux / 32;
- РУКА: Linux / 32, Linux / 64, FreeBSD / 64, Android / 32, Android / 64;
- ARMbe: Linux / 64;
- RISC-V: Linux / 64;
- и ограниченная однопоточная версия для x86: Победа / 32.
Резюме
На этот раз, вероятно, стоит еще раз взглянуть на системы потока данных. Сообщество прошло цикл реализации оборудования совместно-распределенного-общего доступа с момента пика активности потока данных, и применение некоторых из того, что было изучено за это время, к программным системам кажется целесообразным.
BMDFM - это удобная среда параллельного программирования и эффективный механизм выполнения для многоядерного SMP благодаря унификации MIMD нескольких архитектурных парадигм (фон-Неймана, SMP и поток данных):
- Во-первых, это эмулятор гибридного потока данных, работающий в многопоточном режиме на стандартном SMP. SMP обеспечивает MIMD, в то время как поток данных использует неявный параллелизм.
- Во-вторых, это гибридный многопоточный механизм выполнения потока данных, управляемый виртуальной виртуальной машиной фон-Неймана. Механизм выполнения потока данных выполняет контекстные параллельные инструкции с тегами-токенами (в отличие от парадигмы ограниченного fork-join), в то время как интерфейсная виртуальная машина фон-Неймана инициализирует контексты и передает механизму времени выполнения потока данных маршалированные кластеры инструкций.
- В-третьих, это гибрид статического и динамического распараллеливания. Внешняя виртуальная машина фон-Неймана пытается статически разделить приложение на параллельные маршалированные кластеры инструкций, в то время как механизм выполнения потока данных динамически дополняет методы статического распараллеливания.
BMDFM предназначен для использования в роли механизма параллельного выполнения (вместо обычной библиотеки времени выполнения fork-join), способного автоматически запускать нерегулярные приложения параллельно. Благодаря прозрачной семантике потока данных, BMDFM - это простой метод распараллеливания для прикладных программистов и, в то же время, намного лучшая технология параллельного программирования / компиляции для многоядерных компьютеров SMP.
Смотрите также
использованная литература
- ^ «BMDFM: среда параллелизации гибридного потока данных для мультипроцессоров с общей памятью». Технический университет Мюнхена (TUM), Германия. 25 февраля 2006 г.
- ^ "urn: nbn: de: bvb: 91-dis20060316-1748151609". URN NBN Resolver для Германии и Швейцарии. 22 марта 2006 г.