lec06_v2.pptx
- Количество слайдов: 30
Вопросы 2 основных способа (разновидности) передачи данных м/у CPU Чему равно время передачи данных, согласно модели Хокни? Перечислите основные этапы разработки параллельных алгоритмов 1
Технологии параллельного программирования Для выполнения параллельных вычислений выполняются следующие шаги: Анализ задачи для выделения подзадач, которые могут выполняться одновременно Изменение структуры задачи для эффективного выполнения подзадач: найти зависимости между подзадачами, организовать исходный код для эффективного управления. Реализация параллельного алгоритма в исходном коде с помощью технологий параллельного программирования 2
Технологии параллельного программирования Для реализации параллельного алгоритма может использоваться: Язык параллельного программирования. Библиотека - прикладной программный интерфейс (API – Application Program Interface), реализованный с помощью библиотечного интерфейса. Расширение существующего языка последовательного программирования 3
Пример технологий ПП Open. MP: директивы компилятора для простого параллельного программирования. MPI: библиотечные подпрограммы для реализации высокоэффективной переносимости. Java: параллельность заложена в языке программирования на основе встроенных типов данных. 4
Open. MP – технология параллельного программирования для компьютеров с общей памятью. Стандарт 3. 1 принят в 2011 году. Один вариант программы для параллельного и последовательного выполнения. Любой процесс состоит из нескольких нитей управления, которые имеют общее адресное пространство, но разные потоки команд и раздельные стеки. 5
Определение Open. MP (Open Multi-Processing) — открытый развивающийся стандарт для распараллеливания программ на языках С, С++, Fortran, включает описание директив компилятора, библиотечных функций, переменных окружения (среды , environment). Обеспечивает программирование многопоточных приложений для МВС с общей памятью (имеется версия и для кластеров). Наиболее популярная задача для Open. MP —написание программ, ориентированных на циклы 6
Модель программирования Open. MP – технологии разработки параллельных программ для МВС с общей памятью Разветвление-объединение (fork-join) Работа программы начинается с одного (корневого) потока, или нити, треда (thread – нить). Для добавления в программу параллелизма выполняется разветвление (fork) на несколько тредов, создается группа. Треды группы выполняются параллельно в рамках фрагмента кода, т. наз. параллельной области. В конце параллельной области все треды синхронизируются и заканчивают свою работу (join), оставив корневой. После этого корневой тред продолжает выполняться до тех пор, пока не начнется следующая параллельная область (или не наступит конец программы). 7
Модель программирования Open. MP • Программа Open. MP начинается как единственный начальный корневой тред выполнения (номер =0). • Встретив в коде параллельную конструкцию, он создает новую группу тредов (порожденных). • После параллельной конструкции выполнение кода продолжает только корневой тред. 8
Из Open. Mp Tutorial computing. llnl. gov/tutorials/open. MP/ 9
Выполнение Open. MP-программы Параллельные области 10
Терминология Поток (выполнения), или нить, или тред (thread of the execution) – последовательность выполняющихся команд. Программа, или приложение, или процесс – может состоять из нескольких потоков Не путать с потоками данных (stream). 11
Синтаксис и семантика Open. MP Директива компилятора – указание компилятору на особенности обработки исходного кода при компиляции. Языковые конструкции в Open. MP определены как директивы компилятора, сообщающие компилятору, что cделать для реализации параллелизма. В C и C++ такие директивы называются прагмы (pragmatic information - полезная информация, ЯП Ada). Синтаксис прагмы #pragma omp имя [опции] Пример – указание на распараллеливание: #pragma omp parallel {… } 12
Синтаксис и семантика Open. MP Библиотечные функции – позволяют: получать сведения (get) о параметрах тредов в программе и изменять их значения (set), выполнять блокировку выполнения для синхронизации тредов. Синтаксис: omp_имя() Пример – определение номера треда (по месту вызова функции): i = omp_get_thread_num(); 13
Синтаксис и семантика Open. MP Переменные окружения – переменные среды выполнения хранят данные о ее настройках, позволяют управлять поведением программы (в нашем случае - параллелизмом) во время ее выполнения (run-time). Синтаксис: OMP_имя Пример – переменная, задающая максимально возможное количество тредов: OMP_NUM_THREADS Ее значение изменяет функция void omp_set_num_threads (int n); !!!Функции set (назначения параметров) имеют приоритет над соответствующими переменными окружения 14
Структура программы Open. MP int main () { //последовательная область, выполняется корневой тред. . . //Начало параллельной области #pragma omp parallel … { //операторы выполняются всеми тредами. . . //все треды завершают работу, остается только корневой тред } //последовательная область, выполняется корневой тред. . . } 15
Простейшая программа. Настройки для работы с Open. MP. Создать новый проект по шаблону «Консольное приложение Win 32» 16
Простейшая программа. Настройки для работы с Open. MP. В Мастере выбрать «Пустой проект» 17
Простейшая программа. Настройки для работы с Open. MP. Выбрать Проект – Добавить новый элемент 18
Текст программы: 19
Дальнейшая настройка 20
Дальнейшая настройка (1 -й вариант) 21
Дальнейшая настройка (2 -й вариант) 22
Новый результат: Что будет если: 1) изменить параметр, например omp_set_num_threads( 10 ); 2) Закомментировать эту строку. Какие будут результаты? 23
Результат 24
Пример: вывод номера треда 25
Переменные. Локализация (область видимости) Модель данных в Open. MP: общая область памяти - для всех тредов, локальные области памяти - для каждого треда. Соответственно, переменные, использующиеся в параллельных областях программы, разделяются на два основных класса: shared – общие все треды видят одну и ту же переменную; private - локальные каждый тред видит свой экземпляр данной переменной, создаются для каждого треда только на время его выполнения. Правила видимости переменных: все переменные, определенные вне параллельной области – общие; все переменные, определенные внутри параллельной области – локальные 26
Пример: локализация переменных 27
Пример: общие переменные 28
Пример: общие переменные 29
Пример: общие переменные 30
lec06_v2.pptx