Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемМарина Барановская
1 Интернет Университет Суперкомпьютерных технологий Отладка эффективности OpenMP- программ. Учебный курс Параллельное программирование с OpenMP Бахтин В.А., кандидат физ.-мат. наук, заведующий сектором, Институт прикладной математики им. М.В.Келдыша РАН
2 Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А. 2 из 19 Содержание Основные характеристики производительности Стратегии распределения витков цикла между нитями (клауза schedule) Отмена барьерной синхронизации по окончании выполнения цикла (клауза nowait) Локализация данных Задание поведения нитей во время ожидания (переменная OMP_WAIT_POLICY) Оптимизация OpenMP-программы при помощи Intel Thread Profiler
3 Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А. 3 из 19 Основные характеристики производительности Полезное время - время, которое потребуется для выполнения программы на однопроцессорной ЭВМ. Общее время использования процессоров равно произведению времени выполнения программы на многопроцессорной ЭВМ (максимальное значение среди времен выполнения программы на всех используемых ею процессорах) на число используемых процессоров. Главная характеристика эффективности параллельного выполнения - коэффициент эффективности равен отношению полезного времени к общему времени использования процессоров. Разница между общим временем использования процессоров и полезным временем представляет собой потерянное время. Существуют следующие составляющие потерянного времени: накладные расходы на создание группы нитей; потери из-за простоев тех нитей, на которых выполнение программы завершилось раньше, чем на остальных (несбалансированная нагрузка нитей); потери из-за синхронизации нитей (например, из-за чрезмерного использования общих данных); потери из-за недостатка параллелизма, приводящего к дублированию вычислений на нескольких процессорах (недостаточный параллелизм).
4 Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А. 4 из 19 Накладные расходы на создание группы нитей void work(int i, int j) {} for (int i=0; i < n; i++) { for (int j=0; j < n; j++) { work(i, j); } #pragma omp parallel for for (int i=0; i < n; i++) { for (int j=0; j < n; j++) { work(i, j); } for (int i=0; i < n; i++) { #pragma omp parallel for for (int j=0; j < n; j++) { work(i, j); }
5 Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А. 5 из 19 Алгоритм Якоби for (int it=0;it
6 Балансировка нагрузки нитей. Клауза schedule Клауза schedule: schedule(алгоритм планирования[, число_итераций]) Где алгоритм планирования один из: schedule(static[, число_итераций]) - статическое планирование; schedule(dynamic[, число_итераций]) - динамическое планирование; schedule(guided[, число_итераций]) - управляемое планирование; schedule(runtime) - планирование в период выполнения; schedule(auto) - автоматическое планирование (OpenMP 3.0). #pragma omp parallel for schedule(static) for(int i = 0; i < 100; i++) A[i]=0.; Москва, 2009 г. 6 из 19 Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
7 Балансировка нагрузки нитей. Клауза schedule #pragma omp parallel for schedule(dynamic, 15) for(int i = 0; i < 100; i++) Результат выполнения программы на 4-х ядерном процессоре может быть следующим: Поток 0 получает право на выполнение итераций Поток 1 получает право на выполнение итераций Поток 2 получает право на выполнение итераций Поток 3 получает право на выполнение итераций Поток 3 завершает выполнение итераций. Поток 3 получает право на выполнение итераций Поток 2 завершает выполнение итераций. Поток 2 получает право на выполнение итераций Поток 0 завершает выполнение итераций. Поток 0 получает право на выполнение итераций Москва, 2009 г. 7 из 19 Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
8 Балансировка нагрузки нитей. Клауза schedule число_выполняемых_потоком_итераций = max(число_нераспределенных_итераций/omp_get_num_threads(), число_итераций) #pragma omp parallel for schedule(guided, 10) for(int i = 0; i < 100; i++) Пусть программа запущена на 4-х ядерном процессоре. Поток 0 получает право на выполнение итераций Поток 1 получает право на выполнение итераций Поток 2 получает право на выполнение итераций Поток 3 получает право на выполнение итераций Поток 3 завершает выполнение итераций. Поток 3 получает право на выполнение итераций Поток 2 завершает выполнение итераций. Поток 2 получает право на выполнение итераций Поток 3 завершает выполнение итераций. Поток 3 получает право на выполнение итераций Поток 1 завершает выполнение итераций. Поток 1 получает право на выполнение 99 итерации. Москва, 2009 г. 8 из 19 Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
9 Балансировка нагрузки нитей. Клауза schedule #pragma omp parallel for schedule(runtime) for(int i = 0; i < 100; i++) /* способ распределения витков цикла между нитями будет задан во время выполнения программы*/ При помощи переменных среды: csh: setenv OMP_SCHEDULE "dynamic,4 ksh: export OMP_SCHEDULE="static,10 Windows: set OMP_SCHEDULE=auto или при помощи функций системы поддержки: void omp_set_schedule(omp_sched_t kind, int modifier); Москва, 2009 г. 9 из 19 Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
10 Балансировка нагрузки нитей. Клауза schedule #pragma omp parallel for schedule(auto) for(int i = 0; i < 100; i++) Способ распределения витков цикла между нитями определяется реализацией компилятора. На этапе компиляции программы или во время ее выполнения определяется оптимальный способ распределения. Москва, 2009 г. 10 из 19 Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
11 Балансировка нагрузки нитей. Клауза schedule Москва, 2009 г. 11 из 19 #pragma omp parallel for private(tmp) shared (a) schedule (runtime) for (int i=0; i
12 Отмена барьерной синхронизации по окончании выполнения цикла. Клауза nowait void example(int n, float *a, float *b, float *z, int n) { int i; #pragma omp parallel { #pragma omp for schedule(static) nowait for (i=0; i
13 Локализация данных #pragma omp parallel shared (var) { { var = … } Модификация общей переменной в параллельной области должна осуществляться в критической секции (critical/atomic/omp_set_lock). Если локализовать данную переменную (например, private(var)), то можно сократить потери на синхронизацию нитей. Москва, 2009 г. 13 из 19 Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
14 14 из 27 Переменная OMP_WAIT_POLICY. Москва, 2009 г. Подсказка OpenMP-компилятору о желаемом поведении нитей во время ожидания. Значение переменной можно изменить: setenv OMP_WAIT_POLICY ACTIVE setenv OMP_WAIT_POLICY active setenv OMP_WAIT_POLICY PASSIVE setenv OMP_WAIT_POLICY passive IBM AIX SPINLOOPTIME= YIELDLOOPTIME=40000 Sun Studio setenv SUNW_MP_THR_IDLE SPIN setenv SUNW_MP_THR_IDLE SLEEP setenv SUNW_MP_THR_IDLE SLEEP(2s) setenv SUNW_MP_THR_IDLE SLEEP(20ms) setenv SUNW_MP_THR_IDLE SLEEP(150mc) Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
15 15 из 19 Оптимизация для DSM-систем Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А. #pragma omp parallel for for (int i=1; i
16 16 из 19 Intel Thread Profiler Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А. Предназначен для анализа производительности OpenMP- приложений или многопоточных приложений с использованием потоков Win32 API и POSIX. Визуализация выполнения потоков во времени помогает понять их функции и взаимодействие. Инструмент указывает на узкие места, снижающие производительность. Инструментация программы: Linux: -g [-openmp_profile] Windows: /Zi [/-Qopenmp_profile], link with /fixed:no
17 17 из 19 Спасибо за внимание! Вопросы? Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
18 18 из 19 Использование OpenMP на кластере. Следующая тема Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
19 19 из 19 Бахтин В.А., кандидат физ.-мат. наук, заведующий сектором, Институт прикладной математики им. М.В.Келдыша РАН Контакты Москва, 2009 г. Параллельное программирование с OpenMP: Отладка эффективности OpenMP-программ © Бахтин В.А.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.