Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. Ошибки при многопоточном программировании
Содержание
- 2. OpenMP Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. Ошибки при многопоточном программировании. Презентация
- 3. 1. Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. 1.1. Время вычислений в параллельном
- 4. Потоки в современных Windows Процесс представляет выполняющийся экземпляр программы. Он имеет собственное адресное пространство, где содержаться
- 5. Классы потоков. Потоки OpenMP
- 6. Основные состояния потока. «Накладные расходы»
- 7. Неизбежные «накладные расходы» в многопоточной программе с несколькими параллельными регионами Создание потоков – самые большие «накладные
- 8. 1. 1. Время вычислений в параллельном регионе должно быть больше, чем время, затраченное на создание параллельного
- 9. 1.2. При входе в первый параллельный регион «накладные расходы» намного больше, чем при входах в следующие
- 10. Тестируемый код – проект time_parallel – ускорение как функция полного времени работы программы – последовательный код
- 11. Тестируемый код – проект time_parallel – ускорение как функция полного времени работы программы – параллельный код
- 12. Тестируемый код – проект time_parallel – ускорение как функция полного времени работы программы – параллельный код
- 13. Требования на выбор предельных значений переменных внешнего и внутреннего цикла 1. Внутренний цикл: treeData.N определяется из
- 14. Задание 1. Проект time_paral. Зависимость ускорения от M 1. Для запуска последовательного варианта аргументы в командной
- 15. Задание 2. Проект time_paral. Зависимость ускорения от M Демонстрация того, что все «накладные расходы» сосредоточены в
- 16. 2. Ошибки при многопоточном программировании 1. Конфликты «запись - запись» - два потока пишут в одну
- 17. Ошибки, которые находит ThreadChecker при программировании в OpenMP 1. Конфликты «запись - запись» - два потока
- 18. 3. Презентация материалов по OpenMP 3.1. Курс Гергеля 3.2. Материалы тренингов Intel
- 19. 3.1. Курс Гергеля Обзор методов многопоточного программирования для простейших алгоритмов умножение вектора на вектор матрицы на
- 20. 3.2. Материалы тренингов Intel Преобладающая особенность – все показывается на одной задаче Параллельный алгоритм Параллельные конструкции
- 21. 4. Распределение заданий между потоками По материалам тренинга Intel, проведенного для преподавателей вузов в апреле 2006
- 22. Цели и задачи Научиться технике распараллеливания последовательного кода на основе OpenMP Применять в цикле разработки инструменты
- 23. Содержание Стандартный цикл разработки Изучаемый пример: генерация простых чисел Как повысить эффективность вычислений
- 24. Определение параллелелизма Два или более процесса или потока выполняются одновременно Виды параллелелизма для архитектур, поддерживающих потоки
- 25. Закон Амдала Оценка «сверху» для ускорения параллельной программы по закону Амдала
- 26. Процессы и потоки
- 27. Потоки – «плюсы» и «минусы» «Плюсы» Позволяют повысить производительность и полнее использовать системные ресурсы Даже в
- 28. Генерация простых чисел bool TestForPrime(int val) { // let’s start checking from 3 int limit, factor
- 29. Задание 1. Выполнить запуски последовательной версии первоначального кода (проект Simple_number) Установить однопоточный режим работы (Visual Studio,
- 30. Методика разработки Анализ Определить участок кода с максимальной долей вычислений Проектирование (включить многопоточность) Определить, каким образом
- 31. Рабочий цикл
- 32. Провести анализ работы проекта Simple_number Входные данные: start = 3 end = 1000000 Анализ – «Sampling»
- 33. Анализ – «Sampling» («сэмплирование»)
- 34. Анализ – «Sampling» («сэмплирование»)
- 35. Анализ - Call Graph
- 36. Анализ Параллельная работа потоков будет эффективна в FindPrimes() Аргументы в пользу распараллеливания Мало внутренних взаимозависимостей Возможен
- 37. Задание 2 Выполните запуск с параметрами ‘1 5000000’ (границы диапазона поиска простых чисел) Цель запуска -
- 38. Метод проектирования Фостера Необходимо выполнить 4 шага: Разбить задачу на максимальное число подзадач Установить связи «данные
- 39. Проектирование многопоточной программы «Дробление» Разбить исходную задачу на подзадачи «Связи» Определить типы и количество связей между
- 40. Модели параллельного программирования Функциональная декомпозиция Параллельное выполнение разных подзадач Разделение на различные подзадачи, но обработка общих
- 41. Способы декомпозиции Функциональная декомпозиция Сфокусирована на методах обработки данных, выявляя структуру задачи
- 42. Аналогии для функциональной декомпозиции и декомпозиции по данным Независимые этапы вычислений Функциональная декомпозиция Задача потока связана
- 43. Проектирование Ожидаемый выигрыш Как бы его достичь минимальными усилиями? Долго ли это - распараллелить? Сразу получится
- 44. OpenMP «Вилочный» параллелелизм: «Мастер» - поток создает команду потоков Последовательная программа преображается в параллельную
- 45. Проектирование #pragma omp parallel for for( int i = start; i if( TestForPrime(i) ) globalPrimes[gPrimesFound++] =
- 46. Задание 3 Выполнить запуск версии кода с OpenMP Включите библиотеки OpenMP и установите многопоточный режим MultyThreaded
- 47. Проектирование А каков был ожидаемый выигрыш? А как его достичь ? А как долго ? А
- 48. Тестирование правильности работы программы по ее результатам Результаты неправильные Каждый запуск – свой результат…
- 49. Тестирование правильности работы Intel® Thread Checker может определить ошибки типа «гонки данных» или «конфликты запись-запись, чтение
- 50. Thread Checker – окно результатов после выполнения анализа
- 51. Thread Checker Двойной щелчок «мыши» - находим локализацию ошибки в коде
- 52. Thread Checker – локализация ошибки в коде
- 53. Задание 4 Примените Thread Checker для анализа правильности выполнения Создать Thread Checker activity Запуск приложения с
- 54. Тестирование правильности работы Сколько попыток еще предпринять? Как долго трудиться над этим распараллеливанием? Thread Checker обнаружил
- 55. Тестирование правильности работы #pragma omp parallel for for( int i = start; i if( TestForPrime(i) )
- 56. Задание 5 Модифицируйте версию кода с OpenMP Добавьте прагму критической секции в код Откомпилируйте код Проверьте
- 57. Correctness Работает-то правильно, да ускорение низкое…~1.33X Разве это предел, к которому мы стремились? Нет! По закону
- 58. Задачи повышения производительности Параллельный «оверхед» (оverhead) «Накладные расходы» на создание потоков, организацию «расписания» их работы …
- 59. Измерение производительности Thread Profiler определяет «узкие места» - участки кода многопоточной области, где работа потоков происходит
- 60. Thread Profiler for OpenMP Только для OpenMP приложений Окно результатов «Summary» - появляется сразу после завершения
- 61. Thread Profiler for OpenMP
- 62. Thread Profiler for OpenMP
- 63. Thread Profiler for OpenMP
- 64. Thread Profiler for OpenMP Окно «Regions»: регионы – область кода программы, либо полностью последовательного, либо полностью
- 65. Thread Profiler for OpenMP
- 66. Задание 6. Исследуйте параллельную работу программы Thread Profiler с теми же параметрами, что и базовое измерение
- 67. Диагностика Thread Profiler – большой дисбаланс – потоки «ждали друг друга» Поток 0 Поток 1 Поток
- 68. Определили дисбаланс загрузки Распределим работу более эффективно: не по ¼ от всего цикла сразу каждому потоку,
- 69. Борьба с дисбалансом – перераспределение заданий потокам Новое «распределение работы» по сравнению со старым будет следующим
- 71. Скачать презентацию