Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_Kolesnikov.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
613.39 Кб
Скачать
  1. В яких спосіб реалізовано взаємодію процесів у mpi програмах?

Наиболее распространенной технологией программирования для параллельных компьютеров с распределенной памятью в настоящее время является MPI. Основным способом взаимодействия параллельных процессов в таких системах является передача сообщений друг другу. Это и отражено в названии данной технологии — Message Passing Interface (интерфейс передачи сообщений). Стандарт MPI фиксирует интерфейс, который должен соблюдаться как системой программирования на каждой вычислительной платформе, так и пользователем при создании своих программ. Современные реализации, чаще всего, соответствуют стандарту MPI версии 1.1. В 1997—1998 годах появился стандарт MPI-2.0, значительно расширивший функциональность предыдущей версии. Однако до сих пор этот вариант MPI не получил широкого распространения и в полном объеме не реализован ни на одной системе. Везде далее, если иного не оговорено, мы будем иметь дело со стандартом MPI-1.1.

  1. Директива #pragma omp task. Призначення, опції, приклади застосування

Директива task применяется для выделения отдельной независимой задачи.

#pragma omp task опция[[[,] опция] ...]структурированный  блок

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

Возможные опции:

  • if (условие) – порождение новой задачи только при выполнении некоторого условия; если условие не выполняется, то задача будет выполнена текущей нитью и немедленно;

  • untied – опция означает, что в случае откладывания задача может быть продолжена любой нитью из числа выполняющих данную параллельную область; если данная опция не указана, то задача может быть продолжена только породившей её нитью;

  • default(shared|none) – всем переменным в задаче, которым явно не назначен класс, будет назначен класс shared; none означает, что всем переменным в задаче класс должен быть назначен явно;

  • private (список) – задаёт список переменных, для которых порождается локальная копия в каждой нити; начальное значение локальных копий переменных из списка не определено;

  • firstprivate (список) – задаёт список переменных, для которых порождается локальная копия в каждой нити; локальные копии переменных инициализируются значениями этих переменных в нити-мастере;

  • shared (список) – задаёт список переменных, общих для всех нитей.

Следующий пример показывает как пройти древовидную структуру используя директиву task. Отметим, что функция траверс (traverse) должна быть вызвана из параллельной области для различных указанных задач, которые будут выполняться параллельно. Также отметим, что задачи выполняются не в указанном порядке, поскольку здесь не используются директивы синхронизации. Таким образом, предположение, что обход будет сделан в том же порядке, что и в последовательном коде, является неверным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]