🗊Презентация Управление центральным процессором. Тенденции развития современных процессоров

Нажмите для полного просмотра!
Управление центральным процессором. Тенденции развития современных процессоров, слайд №1Управление центральным процессором. Тенденции развития современных процессоров, слайд №2Управление центральным процессором. Тенденции развития современных процессоров, слайд №3Управление центральным процессором. Тенденции развития современных процессоров, слайд №4Управление центральным процессором. Тенденции развития современных процессоров, слайд №5Управление центральным процессором. Тенденции развития современных процессоров, слайд №6Управление центральным процессором. Тенденции развития современных процессоров, слайд №7Управление центральным процессором. Тенденции развития современных процессоров, слайд №8Управление центральным процессором. Тенденции развития современных процессоров, слайд №9Управление центральным процессором. Тенденции развития современных процессоров, слайд №10Управление центральным процессором. Тенденции развития современных процессоров, слайд №11Управление центральным процессором. Тенденции развития современных процессоров, слайд №12Управление центральным процессором. Тенденции развития современных процессоров, слайд №13Управление центральным процессором. Тенденции развития современных процессоров, слайд №14Управление центральным процессором. Тенденции развития современных процессоров, слайд №15Управление центральным процессором. Тенденции развития современных процессоров, слайд №16Управление центральным процессором. Тенденции развития современных процессоров, слайд №17Управление центральным процессором. Тенденции развития современных процессоров, слайд №18Управление центральным процессором. Тенденции развития современных процессоров, слайд №19Управление центральным процессором. Тенденции развития современных процессоров, слайд №20Управление центральным процессором. Тенденции развития современных процессоров, слайд №21Управление центральным процессором. Тенденции развития современных процессоров, слайд №22Управление центральным процессором. Тенденции развития современных процессоров, слайд №23Управление центральным процессором. Тенденции развития современных процессоров, слайд №24Управление центральным процессором. Тенденции развития современных процессоров, слайд №25Управление центральным процессором. Тенденции развития современных процессоров, слайд №26Управление центральным процессором. Тенденции развития современных процессоров, слайд №27Управление центральным процессором. Тенденции развития современных процессоров, слайд №28Управление центральным процессором. Тенденции развития современных процессоров, слайд №29Управление центральным процессором. Тенденции развития современных процессоров, слайд №30Управление центральным процессором. Тенденции развития современных процессоров, слайд №31Управление центральным процессором. Тенденции развития современных процессоров, слайд №32Управление центральным процессором. Тенденции развития современных процессоров, слайд №33Управление центральным процессором. Тенденции развития современных процессоров, слайд №34Управление центральным процессором. Тенденции развития современных процессоров, слайд №35Управление центральным процессором. Тенденции развития современных процессоров, слайд №36Управление центральным процессором. Тенденции развития современных процессоров, слайд №37Управление центральным процессором. Тенденции развития современных процессоров, слайд №38Управление центральным процессором. Тенденции развития современных процессоров, слайд №39Управление центральным процессором. Тенденции развития современных процессоров, слайд №40Управление центральным процессором. Тенденции развития современных процессоров, слайд №41Управление центральным процессором. Тенденции развития современных процессоров, слайд №42Управление центральным процессором. Тенденции развития современных процессоров, слайд №43Управление центральным процессором. Тенденции развития современных процессоров, слайд №44Управление центральным процессором. Тенденции развития современных процессоров, слайд №45Управление центральным процессором. Тенденции развития современных процессоров, слайд №46Управление центральным процессором. Тенденции развития современных процессоров, слайд №47Управление центральным процессором. Тенденции развития современных процессоров, слайд №48Управление центральным процессором. Тенденции развития современных процессоров, слайд №49Управление центральным процессором. Тенденции развития современных процессоров, слайд №50Управление центральным процессором. Тенденции развития современных процессоров, слайд №51Управление центральным процессором. Тенденции развития современных процессоров, слайд №52Управление центральным процессором. Тенденции развития современных процессоров, слайд №53Управление центральным процессором. Тенденции развития современных процессоров, слайд №54Управление центральным процессором. Тенденции развития современных процессоров, слайд №55

Содержание

Вы можете ознакомиться и скачать презентацию на тему Управление центральным процессором. Тенденции развития современных процессоров. Доклад-сообщение содержит 55 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Управление центральным процессором…
Тенденции развития современных процессоров
Описание слайда:
Управление центральным процессором… Тенденции развития современных процессоров

Слайд 2





AMD Opteron серии 6200
AMD Opteron серии 6200
6284 SE 16 ядер @ 2,7 ГГц, 16 МБ L3 Cache
6220 8 ядер @ 3,0 ГГц, 16 МБ L3 Cache
6204 4 ядра @ 3,3 ГГц, 16 МБ L3 Cache
встроенный контроллер памяти (4 канала памяти DDR3)
4 канала «точка-точка» с использованием HyperTransport 3.0
Описание слайда:
AMD Opteron серии 6200 AMD Opteron серии 6200 6284 SE 16 ядер @ 2,7 ГГц, 16 МБ L3 Cache 6220 8 ядер @ 3,0 ГГц, 16 МБ L3 Cache 6204 4 ядра @ 3,3 ГГц, 16 МБ L3 Cache встроенный контроллер памяти (4 канала памяти DDR3) 4 канала «точка-точка» с использованием HyperTransport 3.0

Слайд 3


Управление центральным процессором. Тенденции развития современных процессоров, слайд №3
Описание слайда:

Слайд 4





Intel Core i7-3960X  Extreme Edition  
Intel Core i7-3960X  Extreme Edition  
3,3 ГГц (3,9 ГГц)
6 ядeр
12 потоков с технологией Intel Hyper-Threading 
15 МБ кэш-памяти Intel Smart Cache 
встроенный контроллер памяти (4 канала памяти DDR3 1066/1333/1600 МГц )
технология Intel QuickPath Interconnect
Описание слайда:
Intel Core i7-3960X Extreme Edition Intel Core i7-3960X Extreme Edition 3,3 ГГц (3,9 ГГц) 6 ядeр 12 потоков с технологией Intel Hyper-Threading 15 МБ кэш-памяти Intel Smart Cache встроенный контроллер памяти (4 канала памяти DDR3 1066/1333/1600 МГц ) технология Intel QuickPath Interconnect

Слайд 5





IBM Power7
IBM Power7
3,5 - 4,0 ГГц
8 ядер x 4 потока Simultaneuos MultiThreading
L1 64КБ
L2 256 КБ
L3 32 МБ
встроенный контроллер памяти
Описание слайда:
IBM Power7 IBM Power7 3,5 - 4,0 ГГц 8 ядер x 4 потока Simultaneuos MultiThreading L1 64КБ L2 256 КБ L3 32 МБ встроенный контроллер памяти

Слайд 6





Тенденции развития современных процессоров
Темпы уменьшения латентности памяти гораздо ниже темпов ускорения процессоров + прогресс в технологии изготовления кристаллов => CMT (Chip MultiThreading).
Опережающий рост потребления энергии при росте тактовой частоты + прогресс в технологии изготовления кристаллов => CMP (Chip MultiProcessing, многоядерность).
И то и другое требует более глубокого распараллеливания для эффективного использования аппаратуры.
Описание слайда:
Тенденции развития современных процессоров Темпы уменьшения латентности памяти гораздо ниже темпов ускорения процессоров + прогресс в технологии изготовления кристаллов => CMT (Chip MultiThreading). Опережающий рост потребления энергии при росте тактовой частоты + прогресс в технологии изготовления кристаллов => CMP (Chip MultiProcessing, многоядерность). И то и другое требует более глубокого распараллеливания для эффективного использования аппаратуры.

Слайд 7





Виды распараллеливания
На уровне задач
На уровне данных 
На уровне алгоритмов
На уровне инструкций
Описание слайда:
Виды распараллеливания На уровне задач На уровне данных На уровне алгоритмов На уровне инструкций

Слайд 8





Распараллеливание на уровне задач
Распараллеливание на этом уровне является самым простым и при этом самым эффективным. Такое распараллеливание возможно в тех случаях, когда решаемая задача естественным образом состоит из независимых подзадач, каждую из которых можно решить отдельно. 
Распараллеливание на уровне задач нам демонстрирует операционная система, запуская на многоядерной машине программы на разных процессорах.
Описание слайда:
Распараллеливание на уровне задач Распараллеливание на этом уровне является самым простым и при этом самым эффективным. Такое распараллеливание возможно в тех случаях, когда решаемая задача естественным образом состоит из независимых подзадач, каждую из которых можно решить отдельно. Распараллеливание на уровне задач нам демонстрирует операционная система, запуская на многоядерной машине программы на разных процессорах.

Слайд 9





Распараллеливание на уровне данных
Название модели «параллелизм данных» происходит оттого, что параллелизм заключается в применении одной и той же операции к множеству элементов данных. 
Данная модель широко используется при решении задач численного моделирования.
Описание слайда:
Распараллеливание на уровне данных Название модели «параллелизм данных» происходит оттого, что параллелизм заключается в применении одной и той же операции к множеству элементов данных. Данная модель широко используется при решении задач численного моделирования.

Слайд 10





Распараллеливание отдельных процедур и алгоритмов
Следующий уровень, это распараллеливание отдельных процедур и алгоритмов. 
Сюда можно отнести алгоритмы параллельной сортировки, умножение матриц, решение системы линейных уравнений.
Подобный принцип организации параллелизма получил наименование «вилочного» (fork-join) параллелизма. 
Описание слайда:
Распараллеливание отдельных процедур и алгоритмов Следующий уровень, это распараллеливание отдельных процедур и алгоритмов. Сюда можно отнести алгоритмы параллельной сортировки, умножение матриц, решение системы линейных уравнений. Подобный принцип организации параллелизма получил наименование «вилочного» (fork-join) параллелизма. 

Слайд 11





Параллелизм на уровне инструкций
Наиболее низкий уровень параллелизма, осуществляемый на уровне параллельной обработки процессором нескольких инструкций. На этом же уровне находится пакетная обработка нескольких элементов данных одной командой процессора (MMX, SSE, SSE2 и так далее). 
Программа представляет собой поток инструкций выполняемых процессором. Можно изменить порядок этих инструкций, распределить их по группам, которые будут выполняться параллельно, без изменения результата работы всей программы. Это и называется параллелизмом на уровне инструкций. Для реализации данного вида параллелизма используется несколько конвейеров команд, такие технологии как предсказание команд, переименование регистров.
Описание слайда:
Параллелизм на уровне инструкций Наиболее низкий уровень параллелизма, осуществляемый на уровне параллельной обработки процессором нескольких инструкций. На этом же уровне находится пакетная обработка нескольких элементов данных одной командой процессора (MMX, SSE, SSE2 и так далее). Программа представляет собой поток инструкций выполняемых процессором. Можно изменить порядок этих инструкций, распределить их по группам, которые будут выполняться параллельно, без изменения результата работы всей программы. Это и называется параллелизмом на уровне инструкций. Для реализации данного вида параллелизма используется несколько конвейеров команд, такие технологии как предсказание команд, переименование регистров.

Слайд 12





Управление центральным процессором…
Реализация многопоточности с использованием технологии OpenMP
Описание слайда:
Управление центральным процессором… Реализация многопоточности с использованием технологии OpenMP

Слайд 13





Стандарт OpenMP
Стандарт OpenMP был разработан в 1997г. как API, ориентированный на написание портируемых многопоточных приложений. Сначала он был основан на языке Fortran, но позднее включил в себя и C/C++. Последняя версия OpenMP - 3.1.
http://www.microsoft.com/Rus/Msdn/Magazine/2005/10/OpenMP.mspx
Описание слайда:
Стандарт OpenMP Стандарт OpenMP был разработан в 1997г. как API, ориентированный на написание портируемых многопоточных приложений. Сначала он был основан на языке Fortran, но позднее включил в себя и C/C++. Последняя версия OpenMP - 3.1. http://www.microsoft.com/Rus/Msdn/Magazine/2005/10/OpenMP.mspx

Слайд 14





История стандарта OpenMP
Описание слайда:
История стандарта OpenMP

Слайд 15





Достоинства OpenMP
Целевая платформа является многопроцессорной или многоядерной. Если приложение полностью использует ресурсы одного ядра или процессора, то, сделав его многопоточным при помощи OpenMP, вы почти наверняка повысите его быстродействие.
Выполнение циклов нужно распараллелить. Весь свой потенциал OpenMP демонстрирует при организации параллельного выполнения циклов. Если в приложении есть длительные циклы без зависимостей, OpenMP – идеальное решение.
Перед выпуском приложения нужно повысить его быстродействие. Так как технология OpenMP не требует переработки архитектуры приложения, она прекрасно подходит для внесения в код небольших изменений, позволяющих повысить его быстродействие.
Приложение должно быть кроссплатформенным. OpenMP  – кроссплатформенный и широко поддерживаемый API.
Описание слайда:
Достоинства OpenMP Целевая платформа является многопроцессорной или многоядерной. Если приложение полностью использует ресурсы одного ядра или процессора, то, сделав его многопоточным при помощи OpenMP, вы почти наверняка повысите его быстродействие. Выполнение циклов нужно распараллелить. Весь свой потенциал OpenMP демонстрирует при организации параллельного выполнения циклов. Если в приложении есть длительные циклы без зависимостей, OpenMP – идеальное решение. Перед выпуском приложения нужно повысить его быстродействие. Так как технология OpenMP не требует переработки архитектуры приложения, она прекрасно подходит для внесения в код небольших изменений, позволяющих повысить его быстродействие. Приложение должно быть кроссплатформенным. OpenMP  – кроссплатформенный и широко поддерживаемый API.

Слайд 16





Вопрос
Для каких видов распараллеливания может быть использован OpenMP ?
Описание слайда:
Вопрос Для каких видов распараллеливания может быть использован OpenMP ?

Слайд 17





OpenMP и параллелизм
Описание слайда:
OpenMP и параллелизм

Слайд 18





Активизация OpenMP
Прежде чем заниматься кодом, вы должны знать, как активизировать реализованные в компиляторе средства OpenMP.  Для этого служит появившийся в Visual C++ 2005 параметр компилятора /openmp.
Встретив параметр /openmp, компилятор определяет символ _OPENMP, с помощью которого можно выяснить, включены ли средства OpenMP. Для этого достаточно написать #ifndef _OPENMP.
Описание слайда:
Активизация OpenMP Прежде чем заниматься кодом, вы должны знать, как активизировать реализованные в компиляторе средства OpenMP. Для этого служит появившийся в Visual C++ 2005 параметр компилятора /openmp. Встретив параметр /openmp, компилятор определяет символ _OPENMP, с помощью которого можно выяснить, включены ли средства OpenMP. Для этого достаточно написать #ifndef _OPENMP.

Слайд 19





Параллельная обработка в OpenMP
Работа OpenMP-приложения начинается с единственного потока (основного). В приложении могут содержаться параллельные регионы, входя в которые, основной поток создает группы потоков (включающие основной поток). 
В конце параллельного региона группы потоков останавливаются, а выполнение основного потока продолжается. 
В параллельный регион могут быть вложены другие параллельные регионы, в которых каждый поток первоначального региона становится основным для своей группы потоков. Вложенные регионы могут в свою очередь включать регионы более глубокого уровня вложенности.
Описание слайда:
Параллельная обработка в OpenMP Работа OpenMP-приложения начинается с единственного потока (основного). В приложении могут содержаться параллельные регионы, входя в которые, основной поток создает группы потоков (включающие основной поток). В конце параллельного региона группы потоков останавливаются, а выполнение основного потока продолжается. В параллельный регион могут быть вложены другие параллельные регионы, в которых каждый поток первоначального региона становится основным для своей группы потоков. Вложенные регионы могут в свою очередь включать регионы более глубокого уровня вложенности.

Слайд 20





Иллюстрация модели программирования OpenMP
Fork-join («разветвление-соединение») программирование:
основной поток порождает группу дополнительных потоков;
в конце параллельной области все потоки соединяются в один.
Описание слайда:
Иллюстрация модели программирования OpenMP Fork-join («разветвление-соединение») программирование: основной поток порождает группу дополнительных потоков; в конце параллельной области все потоки соединяются в один.

Слайд 21





Компоненты OpenMP
Директивы pragma 
Функции исполняющей среды OpenMP
Переменные окружения
Описание слайда:
Компоненты OpenMP Директивы pragma Функции исполняющей среды OpenMP Переменные окружения

Слайд 22





Директивы pragma
Директивы pragma, как правило, указывают компилятору реализовать параллельное выполнение блоков кода. Все эти директивы начинаются с #pragma omp. 
Как и любые другие директивы pragma, они игнорируются компилятором, не поддерживающим технологию OpenMP.
Описание слайда:
Директивы pragma Директивы pragma, как правило, указывают компилятору реализовать параллельное выполнение блоков кода. Все эти директивы начинаются с #pragma omp. Как и любые другие директивы pragma, они игнорируются компилятором, не поддерживающим технологию OpenMP.

Слайд 23





Функции run-time OpenMP
Функции библиотеки run-time OpenMP позволяют:
контролировать и просматривать параметры параллельного приложения (например, функция omp_get_thread_num возвращает номер потока, из которого вызвана);
использовать синхронизацию (например, omp_set_lock устанавливает блокировку доступа к критической секции).
Чтобы задействовать эти функции библиотеки OpenMP периода выполнения (исполняющей среды), в программу нужно включить заголовочный файл omp.h. Если вы используете в приложении только OpenMP-директивы pragma, включать этот файл не требуется.
Описание слайда:
Функции run-time OpenMP Функции библиотеки run-time OpenMP позволяют: контролировать и просматривать параметры параллельного приложения (например, функция omp_get_thread_num возвращает номер потока, из которого вызвана); использовать синхронизацию (например, omp_set_lock устанавливает блокировку доступа к критической секции). Чтобы задействовать эти функции библиотеки OpenMP периода выполнения (исполняющей среды), в программу нужно включить заголовочный файл omp.h. Если вы используете в приложении только OpenMP-директивы pragma, включать этот файл не требуется.

Слайд 24





Переменные окружения
Переменные окружения контролируют поведение приложения.
Например, переменная OMP_NUM_THREADS задает количество потоков в параллельном регионе.
Описание слайда:
Переменные окружения Переменные окружения контролируют поведение приложения. Например, переменная OMP_NUM_THREADS задает количество потоков в параллельном регионе.

Слайд 25





Формат директивы pragma
Для реализации параллельного выполнения блоков приложения нужно просто добавить в код директивы pragma и, если нужно, воспользоваться функциями библиотеки OpenMP периода выполнения. 
Директивы pragma имеют следующий формат:
	#pragma omp <директива> [раздел [ [,] раздел]...]
Описание слайда:
Формат директивы pragma Для реализации параллельного выполнения блоков приложения нужно просто добавить в код директивы pragma и, если нужно, воспользоваться функциями библиотеки OpenMP периода выполнения. Директивы pragma имеют следующий формат: #pragma omp <директива> [раздел [ [,] раздел]...]

Слайд 26





Директивы pragma
OpenMP поддерживает директивы parallel, for, parallel for, section, sections, single, master, critical, flush, ordered и atomic, которые определяют или механизмы разделения работы или конструкции синхронизации.
Далее мы рассмотрим простейший пример с использованием директив parallel, for, parallel for.
Описание слайда:
Директивы pragma OpenMP поддерживает директивы parallel, for, parallel for, section, sections, single, master, critical, flush, ordered и atomic, которые определяют или механизмы разделения работы или конструкции синхронизации. Далее мы рассмотрим простейший пример с использованием директив parallel, for, parallel for.

Слайд 27





Реализация параллельной обработки
Самая важная и распространенная директива - parallel. Она создает параллельный регион для следующего за ней структурированного блока, например:
	
	#pragma omp parallel [раздел[ [,] раздел]...] структурированный блок
Описание слайда:
Реализация параллельной обработки Самая важная и распространенная директива - parallel. Она создает параллельный регион для следующего за ней структурированного блока, например: #pragma omp parallel [раздел[ [,] раздел]...] структурированный блок

Слайд 28





Реализация параллельной обработки
Директива parallel сообщает компилятору, что структурированный блок кода должен быть выполнен параллельно, в нескольких потоках. 
Создается набор (team) из N потоков; исходный поток программы является основным потоком этого набора (master thread) и имеет номер 0. 
Каждый поток будет выполнять один и тот же поток команд, но не один и тот же набор команд - все зависит от операторов, управляющих логикой программы, таких как if-else.
Описание слайда:
Реализация параллельной обработки Директива parallel сообщает компилятору, что структурированный блок кода должен быть выполнен параллельно, в нескольких потоках. Создается набор (team) из N потоков; исходный поток программы является основным потоком этого набора (master thread) и имеет номер 0. Каждый поток будет выполнять один и тот же поток команд, но не один и тот же набор команд - все зависит от операторов, управляющих логикой программы, таких как if-else.

Слайд 29





Пример параллельной обработки (1)
В качестве примера рассмотрим классическую программу «Hello World»:
	
	#pragma omp parallel 
	{ 
		printf("Hello World\n"); 
	}
Описание слайда:
Пример параллельной обработки (1) В качестве примера рассмотрим классическую программу «Hello World»: #pragma omp parallel { printf("Hello World\n"); }

Слайд 30





Пример параллельной обработки (2)
В двухпроцессорной системе вы, конечно же, рассчитывали бы получить следующее:
	Hello World Hello World
Тем не менее, результат мог быть другим:
	HellHell oo WorWlodrl d
Второй вариант возможен из-за того, что два выполняемых параллельно потока могут попытаться вывести строку одновременно.
Описание слайда:
Пример параллельной обработки (2) В двухпроцессорной системе вы, конечно же, рассчитывали бы получить следующее: Hello World Hello World Тем не менее, результат мог быть другим: HellHell oo WorWlodrl d Второй вариант возможен из-за того, что два выполняемых параллельно потока могут попытаться вывести строку одновременно.

Слайд 31





Директива #pragma omp for
Директива #pragma omp for сообщает, что при выполнении цикла for в параллельном регионе итерации цикла должны быть распределены между потоками группы.
Следует отметить, что в конце параллельного региона выполняется барьерная синхронизация (barrier synchronization). Иначе говоря, достигнув конца региона, все потоки блокируются до тех пор, пока последний поток не завершит свою работу.
Описание слайда:
Директива #pragma omp for Директива #pragma omp for сообщает, что при выполнении цикла for в параллельном регионе итерации цикла должны быть распределены между потоками группы. Следует отметить, что в конце параллельного региона выполняется барьерная синхронизация (barrier synchronization). Иначе говоря, достигнув конца региона, все потоки блокируются до тех пор, пока последний поток не завершит свою работу.

Слайд 32





Директива 
#pragma omp parallel for 
#pragma omp parallel + #pragma omp for
= 
#pragma omp parallel for
Описание слайда:
Директива #pragma omp parallel for #pragma omp parallel + #pragma omp for = #pragma omp parallel for

Слайд 33





Примеры параллельной обработки в цикле
	#pragma omp parallel 
	{ 
		#pragma omp for 
		for(int i = 1; i < size; ++i) 
			x[i] = (y[i-1] + y[i+1])/2; 
	}
Описание слайда:
Примеры параллельной обработки в цикле #pragma omp parallel { #pragma omp for for(int i = 1; i < size; ++i) x[i] = (y[i-1] + y[i+1])/2; }

Слайд 34





Распараллеливание при помощи директивы sections
При помощи директивы sections выделяется программный код, который далее будет разделен на параллельно выполняемые секции. 
Директивы section определяют секции, которые могут быть выполнены параллельно.
#pragma omp sections [<параметр> ...] 
{ 
	#pragma omp section <блок_программы> 
	#pragma omp section <блок_программы> 
}
Описание слайда:
Распараллеливание при помощи директивы sections При помощи директивы sections выделяется программный код, который далее будет разделен на параллельно выполняемые секции. Директивы section определяют секции, которые могут быть выполнены параллельно. #pragma omp sections [<параметр> ...] { #pragma omp section <блок_программы> #pragma omp section <блок_программы> }

Слайд 35





Директива single
При выполнении параллельных фрагментов может оказаться необходимым реализовать часть программного кода только одним потоком (например, открытие файла). 
Данную возможность в OpenMP обеспечивает директива single.
	#pragma omp single [<параметр> ...] <блок_программы>
Описание слайда:
Директива single При выполнении параллельных фрагментов может оказаться необходимым реализовать часть программного кода только одним потоком (например, открытие файла). Данную возможность в OpenMP обеспечивает директива single. #pragma omp single [<параметр> ...] <блок_программы>

Слайд 36





Пример некорректного распараллеливания
#pragma omp parallel 
{ 
	if(omp_get_thread_num() > 3) 
	{ 
		#pragma omp single
		x++; 
	} 
}
Описание слайда:
Пример некорректного распараллеливания #pragma omp parallel { if(omp_get_thread_num() > 3) { #pragma omp single x++; } }

Слайд 37





Задание числа потоков
Чтобы узнать или задать число потоков в группе, используйте функции omp_get_num_threads и omp_set_num_threads. 
Первая возвращает число потоков, входящих в текущую группу потоков. Если вызывающий поток выполняется не в параллельном регионе, эта функция возвращает 1.
Метод omp_set_num_thread задает число потоков для выполнения следующего параллельного региона, который встретится текущему выполняемому потоку (статическое планирование).
Описание слайда:
Задание числа потоков Чтобы узнать или задать число потоков в группе, используйте функции omp_get_num_threads и omp_set_num_threads. Первая возвращает число потоков, входящих в текущую группу потоков. Если вызывающий поток выполняется не в параллельном регионе, эта функция возвращает 1. Метод omp_set_num_thread задает число потоков для выполнения следующего параллельного региона, который встретится текущему выполняемому потоку (статическое планирование).

Слайд 38





Область видимости переменных
Общие переменные (shared) – 
доступны всем потокам.
Частные переменные (private) –  
создаются для каждого потока только на время его выполнения.
Описание слайда:
Область видимости переменных Общие переменные (shared) – доступны всем потокам. Частные переменные (private) – создаются для каждого потока только на время его выполнения.

Слайд 39





Область видимости переменных (Пример 1)
Описание слайда:
Область видимости переменных (Пример 1)

Слайд 40





Директивы указания области видимости переменных
Для явного указания области видимости используются следующие параметры директив:
shared(имя_переменной, …)
общие переменные
private(имя_переменной, …) 
частные переменные
Примеры:
#pragma omp parallel shared(buf)
#pragma omp for private(i, j)
Описание слайда:
Директивы указания области видимости переменных Для явного указания области видимости используются следующие параметры директив: shared(имя_переменной, …) общие переменные private(имя_переменной, …) частные переменные Примеры: #pragma omp parallel shared(buf) #pragma omp for private(i, j)

Слайд 41





Область видимости переменных (Пример 2)
Описание слайда:
Область видимости переменных (Пример 2)

Слайд 42





Локализация переменных
Модификация общей переменной в параллельной области должна осуществляться в критической секции (critical/atomic/omp_set_lock).
Если локализовать данную переменную (например, private(var)), то можно сократить потери на синхронизацию потоков.
Описание слайда:
Локализация переменных Модификация общей переменной в параллельной области должна осуществляться в критической секции (critical/atomic/omp_set_lock). Если локализовать данную переменную (например, private(var)), то можно сократить потери на синхронизацию потоков.

Слайд 43





Алгоритмы планирования (1)
По умолчанию в OpenMP для планирования параллельного выполнения циклов for применяется алгоритм, называемый статическим планированием.
При статическом планировании все потоки из группы выполняют одинаковое число итераций цикла. 
Кроме того OpenMP поддерживает и другие механизмы планирования: 
динамическое планирование (dynamic scheduling); 
планирование в период выполнения (runtime scheduling);
управляемое планирование (guided scheduling);
автоматическое планирование (OpenMP 3.0) (auto).
Описание слайда:
Алгоритмы планирования (1) По умолчанию в OpenMP для планирования параллельного выполнения циклов for применяется алгоритм, называемый статическим планированием. При статическом планировании все потоки из группы выполняют одинаковое число итераций цикла. Кроме того OpenMP поддерживает и другие механизмы планирования: динамическое планирование (dynamic scheduling); планирование в период выполнения (runtime scheduling); управляемое планирование (guided scheduling); автоматическое планирование (OpenMP 3.0) (auto).

Слайд 44





Алгоритмы планирования (2)
Чтобы задать один из этих механизмов планирования, используйте раздел schedule в директиве #pragma omp for или #pragma omp parallel for. 
Формат этого раздела выглядит так:
	schedule(алгоритм планирования[, число итераций])
Описание слайда:
Алгоритмы планирования (2) Чтобы задать один из этих механизмов планирования, используйте раздел schedule в директиве #pragma omp for или #pragma omp parallel for. Формат этого раздела выглядит так: schedule(алгоритм планирования[, число итераций])

Слайд 45





Динамическое планирование
При динамическом планировании каждый поток выполняет указанное число итераций (по умолчанию равно 1). 
После того как поток завершит выполнение заданных итераций, он переходит к следующему набору итераций. Так продолжается, пока не будут пройдены все итерации. 
Последний набор итераций может быть меньше, чем изначально заданный.
Описание слайда:
Динамическое планирование При динамическом планировании каждый поток выполняет указанное число итераций (по умолчанию равно 1).  После того как поток завершит выполнение заданных итераций, он переходит к следующему набору итераций. Так продолжается, пока не будут пройдены все итерации. Последний набор итераций может быть меньше, чем изначально заданный.

Слайд 46





Управляемое планирование
При управляемом планировании число итераций, выполняемых каждым потоком, определяется по следующей формуле:
	число_выполняемых_потоком_итераций = max (
		число_нераспределенных_итераций/
		omp_get_num_threads(), 
		число итераций)
Описание слайда:
Управляемое планирование При управляемом планировании число итераций, выполняемых каждым потоком, определяется по следующей формуле: число_выполняемых_потоком_итераций = max ( число_нераспределенных_итераций/ omp_get_num_threads(), число итераций)

Слайд 47





Примеры задания алгоритмов планирования
#pragma omp parallel for schedule(dynamic, 15) 
	for(int i = 0; i < 100; ++i) ... 
	
#pragma omp for schedule(guided, 10)
	for(int i = 0; i < 100; ++i) ...
Описание слайда:
Примеры задания алгоритмов планирования #pragma omp parallel for schedule(dynamic, 15) for(int i = 0; i < 100; ++i) ... #pragma omp for schedule(guided, 10) for(int i = 0; i < 100; ++i) ...

Слайд 48





Пример динамического планирования
#pragma omp parallel for schedule(dynamic, 15)
   for(int i = 0; i < 100; i++)

Пусть программа запущена на 4-х ядерном процессоре:
Поток 0 получает право на выполнение итераций 1-15.
Поток 1 получает право на выполнение итераций 16-30.
Поток 2 получает право на выполнение итераций 31-45.
Поток 3 получает право на выполнение итераций 46-60.
Поток 3 завершает выполнение итераций.
Поток 3 получает право на выполнение итераций 61-75.
Поток 2 завершает выполнение итераций.
Поток 2 получает право на выполнение итераций 76-90.
Поток 0 завершает выполнение итераций.
Поток 0 получает право на выполнение итераций 91-100.
Описание слайда:
Пример динамического планирования #pragma omp parallel for schedule(dynamic, 15) for(int i = 0; i < 100; i++) Пусть программа запущена на 4-х ядерном процессоре: Поток 0 получает право на выполнение итераций 1-15. Поток 1 получает право на выполнение итераций 16-30. Поток 2 получает право на выполнение итераций 31-45. Поток 3 получает право на выполнение итераций 46-60. Поток 3 завершает выполнение итераций. Поток 3 получает право на выполнение итераций 61-75. Поток 2 завершает выполнение итераций. Поток 2 получает право на выполнение итераций 76-90. Поток 0 завершает выполнение итераций. Поток 0 получает право на выполнение итераций 91-100.

Слайд 49





Примеры задания алгоритмов планирования
#pragma omp parallel for schedule(dynamic, 15) 
	for(int i = 0; i < 100; ++i) ... 
	
#pragma omp for schedule(guided, 10)
	for(int i = 0; i < 100; ++i) ...
Описание слайда:
Примеры задания алгоритмов планирования #pragma omp parallel for schedule(dynamic, 15) for(int i = 0; i < 100; ++i) ... #pragma omp for schedule(guided, 10) for(int i = 0; i < 100; ++i) ...

Слайд 50





Пример управляемого планирования
#pragma omp parallel for schedule(guided, 10)
   for(int i = 0; i < 100; i++)

Пусть программа запущена на 4-х ядерном процессоре. 
Поток 0 получает право на выполнение итераций 1-25.
Поток 1 получает право на выполнение итераций 26-44.
Поток 2 получает право на выполнение итераций 45-59.
Поток 3 получает право на выполнение итераций 60-69.
Поток 3 завершает выполнение итераций.
Поток 3 получает право на выполнение итераций 70-79.
Поток 2 завершает выполнение итераций.
Поток 2 получает право на выполнение итераций 80-89.
Поток 3 завершает выполнение итераций.
Поток 3 получает право на выполнение итераций 90-99.
Поток 1 завершает выполнение итераций.
Поток 1 получает право на выполнение 99 итерации.
Описание слайда:
Пример управляемого планирования #pragma omp parallel for schedule(guided, 10) for(int i = 0; i < 100; i++) Пусть программа запущена на 4-х ядерном процессоре. Поток 0 получает право на выполнение итераций 1-25. Поток 1 получает право на выполнение итераций 26-44. Поток 2 получает право на выполнение итераций 45-59. Поток 3 получает право на выполнение итераций 60-69. Поток 3 завершает выполнение итераций. Поток 3 получает право на выполнение итераций 70-79. Поток 2 завершает выполнение итераций. Поток 2 получает право на выполнение итераций 80-89. Поток 3 завершает выполнение итераций. Поток 3 получает право на выполнение итераций 90-99. Поток 1 завершает выполнение итераций. Поток 1 получает право на выполнение 99 итерации.

Слайд 51





Вопрос
Какой вид планирования Вам кажется более эффективным (dynamic или guided) ?
Описание слайда:
Вопрос Какой вид планирования Вам кажется более эффективным (dynamic или guided) ?

Слайд 52





Сравнение динамического и управляемого планирования
Динамическое и управляемое планирование хорошо подходят, если при каждой итерации выполняются разные объемы работы или если одни процессоры более производительны, чем другие. 
При статическом планировании нет никакого способа, позволяющего сбалансировать нагрузку на разные потоки.
Как правило, при управляемом планировании код выполняется быстрее, чем при динамическом, вследствие меньших издержек на планирование.
Описание слайда:
Сравнение динамического и управляемого планирования Динамическое и управляемое планирование хорошо подходят, если при каждой итерации выполняются разные объемы работы или если одни процессоры более производительны, чем другие. При статическом планировании нет никакого способа, позволяющего сбалансировать нагрузку на разные потоки. Как правило, при управляемом планировании код выполняется быстрее, чем при динамическом, вследствие меньших издержек на планирование.

Слайд 53





Планирование в период выполнения
Планирование в период выполнения – это способ динамического выбора в ходе выполнения одного из трех описанных ранее алгоритмов.
Планирование в период выполнения дает определенную гибкость в выборе типа планирования, при этом по умолчанию применяется статическое планирование.
Если в разделе schedule указан параметр runtime, исполняющая среда OpenMP использует алгоритм планирования, заданный для конкретного цикла for при помощи переменной OMP_SCHEDULE. 
Переменная OMP_SCHEDULE имеет формат «тип[,число итераций]», например:
	set OMP_SCHEDULE=dynamic,8
Описание слайда:
Планирование в период выполнения Планирование в период выполнения – это способ динамического выбора в ходе выполнения одного из трех описанных ранее алгоритмов. Планирование в период выполнения дает определенную гибкость в выборе типа планирования, при этом по умолчанию применяется статическое планирование. Если в разделе schedule указан параметр runtime, исполняющая среда OpenMP использует алгоритм планирования, заданный для конкретного цикла for при помощи переменной OMP_SCHEDULE. Переменная OMP_SCHEDULE имеет формат «тип[,число итераций]», например: set OMP_SCHEDULE=dynamic,8

Слайд 54





Автоматическое планирование
Способ распределения итераций цикла между потоками определяется реализацией компилятора.
На этапе компиляции программы или во время ее выполнения определяется оптимальный способ распределения.
	
	#pragma omp parallel for schedule (auto)
   for(int i = 0; i < 100; i++)
Описание слайда:
Автоматическое планирование Способ распределения итераций цикла между потоками определяется реализацией компилятора. На этапе компиляции программы или во время ее выполнения определяется оптимальный способ распределения. #pragma omp parallel for schedule (auto) for(int i = 0; i < 100; i++)

Слайд 55





Дополнительная литература
Стандарт OpenMP 3.1 
http://www.openmp.org/mp-documents/OpenMP3.1.pdf
Антонов А.С. Параллельное программирование с использованием технологии OpenMP: Учебное пособие.-М.: Изд-во МГУ, 2009.
http://parallel.ru/info/parallel/openmp/OpenMP.pdf
Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ-Петербург, 2002.
Презентация ftp://ftp.keldysh.ru/K_student/MSU2012/MSU2012_MPI_OpenMP.ppt
Описание слайда:
Дополнительная литература Стандарт OpenMP 3.1 http://www.openmp.org/mp-documents/OpenMP3.1.pdf Антонов А.С. Параллельное программирование с использованием технологии OpenMP: Учебное пособие.-М.: Изд-во МГУ, 2009. http://parallel.ru/info/parallel/openmp/OpenMP.pdf Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ-Петербург, 2002. Презентация ftp://ftp.keldysh.ru/K_student/MSU2012/MSU2012_MPI_OpenMP.ppt



Похожие презентации
Mypresentation.ru
Загрузить презентацию