BMDFM

редактировать
BMDFM, работающий в Linux BMDFM, работающий в Windows 10 BMDFM, работающий на MacOS BMDFM, работающий на Android

BMDFM («двоичный модульный поток данных машина ») - это программное обеспечение, которое позволяет запускать приложение параллельно на симметричных мультипроцессорах с общей памятью (SMP ) с использованием несколько процессоров для ускорения выполнения отдельных приложений. BMDFM автоматически определяет и использует параллелизм из-за статического и, главным образом, ДИНАМИЧЕСКОГО РАСПИСАНИЯ последовательностей команд потока данных, полученных из ранее последовательной программы.

Подсистема динамического планирования BMDFM выполняет SMP эмуляцию Tagged-Token Dataflow Machine для обеспечения семантики прозрачного потока данных для приложений. Никаких директив для параллельного выполнения не требуется.

Содержание
  • 1 Предпосылки
  • 2 Семантика прозрачного потока данных BMDFM
  • 3 Архитектура BMDFM
  • 4 Поддерживаемые платформы
  • 5 Резюме
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Предпосылки

В настоящее время симметричные мультипроцессоры (SMP) с параллельной общей памятью представляют собой сложные машины, на которых необходимо одновременно решать большое количество архитектурных аспектов для достижения высокой производительности. Современные машины SMP для технических вычислений могут иметь много тесно связанных ядер (хорошие примеры - машины SMP на основе многоядерных процессоров Intel или многоядерных процессоров IBM POWER). Согласно обнародованным планам компаний-производителей компьютеров, количество ядер на SMP-узел, вероятно, удвоится в ближайшие пару лет.

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

  • Там много операций, которые требуют недетерминированного количества времени, что затрудняет точное определение того, когда определенные фрагменты данных станут доступными.
  • Иерархия памяти с многоуровневыми кэшами имеет непредсказуемые задержки доступа к памяти.
  • В многопользовательском режиме чужие коды могут использовать ресурсы или замедлять часть вычислений таким образом, который компилятор не может учесть.
  • Межпроцедурные и перекрестные условные оптимизации во время компиляции сложны (очень часто невозможны), потому что компиляторы не могут понять, в каком направлении пойдет условное выражение, или не могут оптимизировать вызов функции.
Семантика прозрачного потока данных BMDFM

Новый BMDFM (двоичный модульный поток данных Machine) в основном использует динамическое планирование для использования параллелизма прикладной программы, поэтому BMDFM позволяет избежать упомянутых недостатков методов времени компиляции. BMDFM - это среда параллельного программирования для многоядерного SMP, которая обеспечивает:

  • Обычную парадигму программирования, не требующую директив для параллельного выполнения.
  • Прозрачное (неявное) использование параллелизма естественным и сбалансированным образом с использованием всех доступных многоядерные процессоры в системе автоматически.

BMDFM объединяет преимущества известных архитектурных принципов в единую гибридную архитектуру, которая может использовать неявный параллелизм приложений с незначительными накладными расходами на динамическое планирование и отсутствием узких мест. В основном используется базовый принцип потока данных. Принцип потока данных гласит: «Команда или функция могут быть выполнены, как только будут готовы все ее аргументы. Машина потока данных управляет тегами для каждой части данных во время выполнения. Данные помечаются тегом готовности, когда данные были вычислены. Инструкции с готовыми аргументами выполняются с пометкой их данных результата как готовые ".

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

Предположим, у нас есть фрагмент кода, показанный ниже:

(setq a (foo0 i)) # a = foo0 (i); (setq b (foo1 (+ i 1))) # b = foo1 (i + 1); (setq b (++ b)) # b ++; (outf "a =% d \ n" a) # printf ("a =% d \ n", a); (outf "b =% d \ n" b) # printf ("b =% d \ n", b);

Два первых оператора независимы, поэтому механизм потока данных BMDFM может запускать их на разных процессорах или ядрах процессора. Два последних оператора также могут выполняться параллельно, но только после вычисления «a» и «b». Механизм потока данных автоматически распознает зависимости благодаря своей способности динамически строить граф потока данных во время выполнения. Кроме того, механизм потока данных правильно приказывает выходному потоку выводить результаты последовательно. Таким образом, даже после обработки вне очереди результаты будут отображаться естественным образом.

Предположим, что приведенный выше фрагмент кода теперь вложен в цикл:

(для i 1 1 N (progn # for (i = 1; i <= N; i++) { (setq a (foo0 i)) # a = foo0(i); (setq b (foo1 (+ i 1))) # b = foo1(i + 1); (setq b (++ b)) # b++; (outf "a = %d\n" a) # printf("a = %d\n", a); (outf "b = %d\n" b) # printf("b = %d\n", b);)) # }

) Механизм потока данных BMDFM сохранит переменные "a "и" b "в уникальных контекстах для каждой итерации. Фактически, это разные копии переменных. Переменная контекста существует до тех пор, пока на нее не обратятся потребители инструкций. Позже контексты, на которые нет ссылок, будут собираться мусором во время выполнения. Следовательно, поток данных движок может использовать как локальный параллелизм внутри итерации, так и глобальный параллелизм, а также выполнять несколько итераций одновременно.

Архитектура BMDFM

Базовая концепция BMDFM показана на следующем рисунке. Предлагаемый подход основан на на базовом серийном SMP-оборудовании, которое доступно на рынке. Обычно поставщики SMP предоставляют свою собственную операционную систему (ОС) SMP с интерфейсом SVR4 / POSIX UNIX (Linux, HP-UX, SunOS / Solaris, Tru64OSF1, IRIX, AIX, BSD, MacOS и т. Д.). Помимо ОС SMP, среда выполнения многопоточного потока данных eng ine выполняет программную эмуляцию машины потока данных. Такая виртуальная машина имеет интерфейсы к языку виртуальной машины и к C, обеспечивая семантику прозрачного потока данных для обычного программирования.

Базовая концепция BMDFM

Как видно, BMDFM построен как гибрид нескольких архитектурных принципов:

  • MIMD (несколько потоков инструкций, несколько потоков данных), который поддерживается стандартным SMP.
  • Неявное параллельное выполнение обеспечивается эмуляцией потока данных.
  • Вычислительный принцип Фон-Неймана хорош для реализации виртуальной машины внешнего управления.

На следующем рисунке представлено более подробное представление об архитектуре BMDFM. :

Архитектура 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;
  • Alpha : 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;
  • ARM : Linux / 32, Linux / 64, FreeBSD / 64, Android / 32, Android / 64;
  • ARMbe : Linux / 64;
  • RISC-V : Linux / 64;
  • и ограниченная однопоточная версия для x86 : Win / 32.
Резюме

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

BMDFM - это удобная среда параллельного программирования и эффективный механизм выполнения для многоядерного SMP благодаря унификации MIMD нескольких архитектурных парадигм (фон-Неймана, SMP и поток данных):

  • Во-первых, это эмулятор гибридного потока данных, работающий в многопоточном режиме на стандартном SMP. SMP обеспечивает MIMD, в то время как поток данных использует неявный параллелизм.
  • Во-вторых, это гибридный многопоточный механизм выполнения потока данных, управляемый виртуальной виртуальной машиной фон-Неймана. Средство выполнения потока данных выполняет контекстные параллельные инструкции с тегами с токенами (в отличие от парадигмы ограниченного fork-join), в то время как интерфейсная виртуальная машина фон-Неймана инициализирует контексты и передает механизму времени выполнения потока данных маршалированные кластеры инструкций.
  • В-третьих, это гибрид статического и динамического распараллеливания. Внешняя виртуальная машина фон-Неймана пытается статически разделить приложение на параллельные маршалированные кластеры инструкций, в то время как механизм выполнения потока данных динамически дополняет методы статического распараллеливания.

BMDFM предназначен для использования в роли механизма параллельного выполнения (вместо этого стандартной библиотеки времени выполнения fork-join), способной автоматически запускать нерегулярные приложения параллельно. Благодаря прозрачной семантике потока данных, BMDFM - это простой метод распараллеливания для прикладных программистов и, в то же время, намного лучшая технология параллельного программирования / компиляции для многоядерных компьютеров SMP.

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-11 03:39:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте