Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.

Презентация:



Advertisements
Похожие презентации
OpenMP. Различие между тредами и процессами ПроцессыТреды.
Advertisements

Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей.
OpenMPOpenMPРазличие между тредами и процессами ПроцессыТреды.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 2 Томский политехнический.
Основы OpenMP Nikita Panov
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Нижегородский государственный университет им. Н.И.Лобачевского Факультет Вычислительной математики и кибернетики Введение в OpenMP Гергель В.П., Сысоев.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
Программирование многоядерных архитектур (слайды для лекции 2013/04/20) Киреев С.Е., Маркова В.П., Остапкевич М.Б., Перепелкин В.А. МО ВВС ИВМиМГ СО РАН.
МГУ им. М.В. Ломоносова, Москва, 21 октября 2011г. КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ Курс: «Технология параллельного программирования OpenMP» Лабораторная.
Е.Ю. Алексеева Механико-математический факультет Южно-Уральского государственного университета.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
Е.Ю. Алексеева Механико-математический факультет Южно-Уральского государственного университета.
Вложенные параллельные области Если переменная среды OMP_NESTED имеет значение true, то любая нить параллельной области может породить новую параллельную.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
Интернет Университет Суперкомпьютерных технологий Система поддержки выполнения OpenMP- программ. Переменные окружения, управляющие выполнением OpenMP-
Intel® Cilk TM Plus Введение Лекция 2. Многопоточный параллелизм – от OpenMP к Intel® Cilk TM Plus Немнюгин Сергей Андреевич.
Отладка эффективности OpenMP- программ. Параллельное программирование с OpenMP Бахтин Владимир Александрович Ассистент кафедры системного программированния.
Интернет Университет Суперкомпьютерных технологий Отладка эффективности OpenMP- программ. Учебный курс Параллельное программирование с OpenMP Бахтин В.А.,
Транксрипт:

Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Используемые средства Intel C++ Compiler Оптимизирующий компилятор OpenMP, Intel Threading Building Blocks Средства распараллеливания для систем с общей памятью

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Intel C++ Compiler Архитектуры процессоров IA-32, x86-64 (Intel 64 and AMD64), IA-64, Xscale Операционные системы Microsoft Windows, Linux, Mac OS Основные возможности Высокоуровневая оптимизация Межпроцедурная оптимизация Автоматическое распараллеливание кода: Векторизация Разделение циклов по нескольким нитям Профилирующая оптимизация Интеграция с VisualStudio

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО OpenMP Распараллеливание на системах с общей памятью Стандарт для языков C/С++, Fortran Использование директив для распараллелива Поддержка компиляторами Intel, Microsoft, GCC и т.п. Расширение для разделенной памяти Cluster OpenMP

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Преимущества OpenMP Поэтапное (инкрементальное) распараллеливание Можно распараллеливать последовательные программы поэтапно, не меняя их структуру Единственность разрабатываемого кода Нет необходимости поддерживать последовательный и параллельный вариант программы, поскольку директивы игнорируются обычными компиляторами (в общем случае) Эффективность Учет и использование возможностей систем с общей памятью Стандартизованность (переносимость), поддержка в наиболее распространенных языках (C/C++, Fortran) и платформах (Windows, Unix)

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Принцип организации параллелизма Использование потоков (общее адресное пространство) Пульсирующий (вилочный, fork-join) параллелизм

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Состав библиотеки Набор директив компилятора #pragma omp Библиотека функций omp_...() Набор переменных окружения

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Использование OpenMP Использование директивы parallel #include main () { int nthreads, tid; #pragma omp parallel private(nthreads, tid) { tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); }

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Способы распараллеливания Распараллеливание цикла #pragma omp for Распараллеливание секциями #pragma omp sections { #pragma omp section {... } #pragma omp section {... } Выполнение кода одним потоком #pragma omp master #pragma omp single

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Расписание (schedule) Распределение итераций в директиве for регулируется параметром (clause) schedule static – итерации делятся на блоки по chunk итераций и статически разделяются между потоками; если параметр chunk не определен, итерации делятся между потоками равномерно и непрерывно dynamic – распределение итерационных блоков осуществляется динамически (по умолчанию chunk=1) guided – размер итерационного блока уменьшается экспоненциально при каждом распределении; chunk определяет минимальный размер блока (по умолчанию chunk=1) runtime – правило распределения определяется переменной OMP_SCHEDULE (при использовании runtime параметр chunk задаваться не должен)

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Задача Нахождение суммы тригонометрического ряда double summ = 0; for (int k = 0; k < N; k++) { double ind = k; summ += ((k & 1) ? -1 : 1) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)); }

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Реализация распараллеливания Добавление директивы OpenMP double summ = 0; #pragma omp parallel for for (int k = 0; k < N; k++) { double ind = k; summ += ((k & 1) ? -1 : 1) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)); }

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Организация синхронной работы потоков Параллельный доступ к переменным double summ = 0; #pragma omp parallel for reduction (+:summ) for (int k = 0; k < N; k++) { double ind = k; summ += ((k & 1) ? -1 : 1) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)); }

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Intel Threading Building Blocks Высокоуровневая библиотека для разработки параллельных программ для систем с общей памятью Реализована на языке C++ в форме классов и шаблонов Поддерживаемые ОС: Microsoft Windows, Linux, Mac OS

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Возможности Intel TBB Решение типичных задач параллельного программирования распараллеливание циклов с известным числом повторений; распараллеливание циклов с известным числом повторений с редукции; распараллеливание циклов с условием; распараллеливание рекурсии. Кроме того, содержит потокобезопасные контейнеры; аллокаторы, операторы выделения динамической памяти; примитивы синхронизации.

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Пример кода с использованием Intel TBB int main() { task_scheduler_init init; string str[N] = { string(a), string(b) }; for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2]; string &to_scan = str[N-1]; size_t *max = new size_t[to_scan.size()]; size_t *pos = new size_t[to_scan.size()]; parallel_for( blocked_range (0, to_scan.size(), 100), SubStringFinder( to_scan, max, pos ) ); for (size_t I = 0; I < to_scan.size(); ++i) cout

НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Ссылки Intel OpenMP Intel TBB