Чт. Апр 25th, 2024

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

Библиотека openmp в многоядерных процессорах

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

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

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

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

В OpenMP входят три основных компонента:

  • Директивы компилятора.
  • Библиотека времени выполнения подпрограмм.
  • Переменные среды.

Цели технологии OpenMP:

  • Предоставить единый стандарт среди разнообразия разделяемой памяти архитектур/платформ (этот стандарт совместно определен и одобрен группой тех самых производителей компьютерного оборудования и программного обеспечения).
  • Создание простого и ограниченного набора директив для программирования общей памяти машины.
  • Распараллеливание может быть реализовано с помощью всего 3 или 4 директив.
  • Простота в использовании.

Портативность:

OpenMP работает с программными языками C/C++ и Фортран, реализован на основных платформах, таких как Unix, Linux и Windows.

История релизов:

OpenMP продолжает развиваться, получая новые функции. Изначально спецификация API была выпущена отдельно для языков C и Fortran. Начиная с 2005 года, версии были объедены.

Ниже представлена история издания OpenMP:

Октябрь 1997 — Fortran 1.0
Октябрь 1998 — СИ/СИ++ 1.0
Ноябрь 1999 — Fortran 1.1
Ноябрь 2000 — Fortran 2.0
Март 2002 — СИ/СИ++ 2.0
Май 2005 — OpenMP 2.5
Май 2008 — OpenMP 3.0
Июль 2011- OpenMP 3.1
Июль 2013- OpenMP 4.0

Общая модель памяти:

OpenMP предназначена для многопроцессорных машин (ядер), общей памяти. Лежащая в основе архитектура может быть распределена по «равномерному доступу к памяти» UMA или по «неравномерному доступу к памяти» NUMA.

Равномерный доступ к памяти при помощи библиотеки openmp
Равномерный доступ к памяти
Библиотека OpenMP numa
Не равномерный доступ к памяти

Параллельные вычисления реализуются с помощью многопоточности:

Программы в OpenMP достигают распараллеливания исключительно за счет использования потоков.
Поток является наименьшей единицей обработки, который планируется с помощью операционной системы. Количество потоков не обязательно должно соответствует количеству процессоров (ядер).
OpenMP предлагает программисту полный контроль над распараллеливанием.

Модель распараллеливания главного потока.

OpenMP использует модель параллельного вычисления примерно так. Все программы в OpenMP начинают работать как единый поток, называемый главным потоком.

Библиотека OpenMP распараллеливает основной поток

Основной поток распределяется на несколько параллельных потоков для выполнения параллельного блока кода. В конце эти потоки синхронизируются и снова объединяются в один главный поток. Количество параллельных потоков произвольно.

По ссылке представлена более подробная информация о библиотеке OpenMP.

 

От Pavel

Мне нравиться пользоваться Linux.

Добавить комментарий