Читаем Описание языка PascalABC.NET полностью

<p>OpenMP</p><p>OpenMP: обзор</p>

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

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

В системе PascalABC.NET реализованы следующие элементы OpenMP:

* Конструкции для создания и распределения работы между потоками (директивы parallel for и parallel sections)

* Конструкции для синхронизации потоков (директива critical)

Директивы имеют следующий вид:

{$omp directive-name [опция[[,] опция]...]}

Здесь $omp означает то, что это директива OpenMP, directive-name – имя директивы, например parallel, после чего могут быть опции. Директива относится к тому оператору, перед которым она находится.

Примеры использования OpenMP находятся в папке Samples/OMPSamples

Ниже приводится описание директив.

Директива parallel for

Редукция в директиве parallel for

Параллельные секции и директива parallel sections

Синхронизация и директива critical

<p>Директива parallel for</p>

Директива parallel for обеспечивает распараллеливание следующего за ней цикла.

{$omp parallel for}

forvar i: integer:=1 to 10 do

тело цикла

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

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

Опция private позволяет переменные, описанные вне цикла, сделать частными. Опция записывается так:

{$omp parallel for private(список переменных)}

Список переменных – одна или несколько переменных через запятую.

var a,b: integer;

{$omp parallel for private(a, b)}

forvar i: integer:=1 to 10 do

a := ...

В этом случае переменные a и b будут частными, и присваивание этим переменным в одном потоке не будет влиять на другие потоки.

Ограничение: счетчики распараллеливаемого цикла и вложенных циклов должны быть объявлены в заголовке цикла.

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

{$omp parallel for}

forvar i:=1 to 2 do

a[i] := a[i+1];

Здесь на первой итерации происходит чтение второго элемента массива, а на второй итерации – запись этого же элемента. Если первая итерация выполнится раньше второй – в первый элемент массива запишется значение из второго, а если позже – то из третьего элемента массива.

var a:integer;

{$omp parallel for}

forvar i:=1 to 10 do

begin

a := i;

... := a; //к этому моменту a может быть изменено другим потоком

end;

Значение переменной a после этого цикла может быть любым в диапазоне от 1 до 10.

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

Пример параллельного перемножения матриц

Перемножение матриц - классический пример иллюстрации параллельности. Вычисление различных элементов матрицы происходит независимо, поэтому не надо предусматривать никаких средств синхронизации.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных