Поделиться через


2.3 Конструкция parallel

Следующая директива указывает параллельной области, которая область программы, которая должна выполняться несколькими потоками одновременно. Это базовая структура, которая запускает параллельное выполнение.

#pragma omp parallel [clause[ [, ]clause] ...] new-line 
   structured-block

предложение одно из следующих действий:

если (скаляр-выражение)

private (список переменных)

(firstprivateсписок переменных**)**

общее значение по умолчанию | нет)

shared (список переменных)

(copyinсписок переменных**)**

снижение (Оператор. список переменных**)**

(num_threadsцелое число-выражение**)**

При обнаружении потока параллельной конструкции, команда потоков создана, если одно из следующих вариантов условий:

  • Нет If предложение отсутствует.

  • If выражение оценивается как значение значению.

Этот поток будет мастерским потоком группы, с номером потока 0, и все потоки в рабочей группе, в том числе главный поток, область выполняются параллельно. Если значение If выражение равно нулю, область сериализовано.

Запрашивается указанное количество потоков, которые следующие правила будут учитываться, что в указанном порядке. Первое правило будет применено условие которого выполняется.

  1. Если num_threads предложение присутствует, то значение выражения целого числа запрошенное число потоков.

  2. Если omp_set_num_threads функция библиотеки была вызвана, тогда значение аргумента в последнем вызове выполненном запрошенное число потоков.

  3. Если переменная среды OMP_NUM_THREADS определяет, а затем значение этой переменной среды запрошенное число потоков.

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

Если num_threads предложение присутствует затем он заменяет запрошенное число потоков omp_set_num_threads функция библиотеки или OMP_NUM_THREADS переменная среды только для параллельной области она применяется. Последующие параллельные области не повлияет на них.

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

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

omp_set_dynamic функция библиотеки и OMP_DYNAMIC переменная среды можно использовать для включения и отключения динамическую корректировку числа потоков.

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

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

Неявный барьера в конце параллельной области. Только главный поток продолжает выполнение команды в конце параллельной области.

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

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

  • Максимум одно If предложение может появиться в директиву.

  • Он не определен ли все побочные эффекты в если выражение или num_threads выражение.

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

  • Только одного num_threads предложение может появиться в директиву. Num_threads выражение вычисляется вне контекста параллельной области и должен иметь значение, являющееся положительным целым числом.

  • Порядок вычисления If и num_threads предложения неспецифицированны.

Перекрестные ссылки:

  • private" firstprivate" значение по умолчанию" shared" copyinи сокращение предложения см. в разделе Раздел 2.7.2 на странице 25.

  • OMP_NUM_THREADS переменная среды Раздел 4.2 на странице 48.

  • omp_set_dynamic функция библиотеки см. в разделах Раздел 3.1.7 на странице 39.

  • OMP_DYNAMIC переменная среды выполнения, см. в разделе Шаг 4.3 на странице 49.

  • omp_set_nested функция см. в разделе Раздел 3.1.9 на странице 40.

  • OMP_NESTED переменная среды выполнения, см. в разделе Раздел 4.4 на странице 49.

  • omp_set_num_threads функция библиотеки см. в разделах Раздел 3.1.1 на странице 36.