Параллельное программирование с использованием OpenMP. Антонов (2009) (Параллельное программирование с использованием OpenMP. Антонов (2009).pdf)
Описание файла
PDF-файл из архива "Параллельное программирование с использованием OpenMP. Антонов (2009).pdf", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
А.С. АНТОНОВПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕС ИСПОЛЬЗОВАНИЕМ ТЕХНОЛОГИИOpenMPИЗДАТЕЛЬСТВО МОСКОВСКОГО УНИВЕРСИТЕТА2009Московский государственный университет имени М.В. ЛомоносоваНаучно-исследовательский вычислительный центрА.С. АнтоновПараллельное программированиес использованием технологииOpenMPИЗДАТЕЛЬСТВО МОСКОВСКОГО УНИВЕРСИТЕТА2009УДК 681.3.06ББК 22.20А72Рецензенты:зам. директора НИВЦ МГУ, член-корреспондент РАН Вл.В. Воеводин,зав. кафедрой механико-математического факультета МГУ, членкорреспондент РАН Ю.В. Нестеренко.Антонов А.С.А72Параллельное программирование с использованием технологииOpenMP: Учебное пособие. – М.: Изд-во МГУ, 2009. – 77 с.ISBN 978-5-211-05702-9Учебное пособие предназначено для освоения практического курса параллельного программирования с использованием технологии OpenMP.
В настоящеевремя технология OpenMP является основным средством программирования длякомпьютеров с общей памятью. Книга включает в себя описание большинства основных директив, функций и переменных окружения стандарта OpenMP 3.0 с примерами их применения, а также практические сведения, которые могут потребоваться при написании реальных программ. Некоторые детали описания стандартаопускаются для простоты изложения и восприятия материала. Описание ведётся сиспользованием вызовов процедур OpenMP из программ на языках Си и Фортран.Приводятся примеры небольших законченных параллельных программ, тексты которыхдоступнывсетиИнтернетнастраницеhttp://parallel.ru/tech/tech_dev/OpenMP/examples/.
В конце разделов приводятся контрольные вопросы и задания, которые можно использовать в процессе обучения.Для студентов, аспирантов и научных сотрудников, чья деятельность связана с параллельными вычислениями.УДК 681.3.06ББК 22.20ISBN 978-5-211-05702-9© Антонов А.С., 2009© НИВЦ МГУ, 2009СодержаниеАлфавитный указатель по директивам, функциям, опциям и переменнымокружения OpenMP................................................................................................. 4Директивы.............................................................................................................
4Опции .................................................................................................................... 4Функции................................................................................................................ 4Переменные окружения ...................................................................................... 5Введение...................................................................................................................
6Основные понятия................................................................................................... 8Компиляция программы...................................................................................... 8Модель параллельной программы ..................................................................... 9Директивы и функции ....................................................................................... 10Выполнение программы....................................................................................
11Замер времени .................................................................................................... 11Задания................................................................................................................ 12Параллельные и последовательные области ...................................................... 14Директива parallel ....................................................................................... 14Сокращённая запись .......................................................................................... 17Переменные среды и вспомогательные функции .......................................... 17Директива single............................................................................................
24Директива master............................................................................................ 27Задания................................................................................................................ 28Модель данных...................................................................................................... 29Задания................................................................................................................ 35Распределение работы .......................................................................................... 36Низкоуровневое распараллеливание ............................................................... 36Параллельные циклы.........................................................................................
37Параллельные секции........................................................................................ 47Директива workshare..................................................................................... 52Задачи (tasks) .................................................................................................. 53Задания................................................................................................................
54Синхронизация ...................................................................................................... 55Барьер.................................................................................................................. 55Директива ordered ......................................................................................... 56Критические секции .......................................................................................... 57Директива atomic............................................................................................ 59Замки67 ................................................................................................................... 61Директива flush .............................................................................................. 66Задания................................................................................................................
66Дополнительные переменные среды и функции ............................................... 68Использование OpenMP ....................................................................................... 71Примеры программ ............................................................................................... 73Литература ............................................................................................................. 763Алфавитный указатель по директивам, функциям, опциям и переменным окружения OpenMPДирективыatomicbarriercriticaldoend criticalend doend masterend parallelend sectionsend singleflushformasterorderedparallelsectionsectionssingletasktaskwaitthreadprivateФункции59,5557,38,57,38,27,14,48,24,6638,275614,48,47,24,535433omp_destroy_lock62,63, 64omp_destroy_nest_lock62omp_get_active_level69omp_get_ancestor_thread_num68omp_get_dynamic19omp_get_level68omp_get_max_active_levels68omp_get_max_threads20omp_get_nested23omp_get_num_procs20omp_get_num_threads36omp_get_schedule47omp_get_team_size69omp_get_thread_limit70omp_get_thread_num36omp_get_wtick12omp_get_wtime11omp_in_parallel23omp_init_lock61,63, 64omp_init_nest_lock61omp_set_dynamic19omp_set_lock62,63omp_set_max_active_levels68omp_set_nest_lock62omp_set_nested21omp_set_num_threads17omp_set_schedule46omp_test_lock64omp_test_nest_lock64omp_unset_lock62,63, 64omp_unset_nest_lock62605841, 43, 445941, 43, 442815, 16492640, 42, 4415, 164948, 4925, 26Опцииcollapsecopyincopyprivatedefaultfirstprivate48, 53iflastprivatenowaitnum_threadsorderedprivate48, 53reductionscheduleshareduntied3815,24,14,15,35265324, 32, 38,14,38,25,14,39,14,5348, 5039, 48, 52175624, 29, 38,15, 16, 38, 4838, 41, 42, 4415, 29, 30, 53534Переменные окруженияOMP_DYNAMICOMP_MAX_ACTIVE_LEVELSOMP_NESTEDOMP_NUM_THREADSOMP_SCHEDULEOMP_STACKSIZEOMP_THREAD_LIMITOMP_WAIT_POLICY18682111426970705ВведениеОдним из наиболее популярных средств программирования для компьютеровс общей памятью, базирующихся на традиционных языках программирования и использовании специальных комментариев, в настоящее время является технология OpenMP.
За основу берётся последовательная программа, а длясоздания её параллельной версии пользователю предоставляется набор директив, функций и переменных окружения. Предполагается, что создаваемаяпараллельная программа будет переносимой между различными компьютерами с разделяемой памятью, поддерживающими OpenMP API.Технология OpenMP нацелена на то, чтобы пользователь имел один вариантпрограммы для параллельного и последовательного выполнения. Однаковозможно создавать программы, которые работают корректно только в параллельном режиме или дают в последовательном режиме другой результат.Более того, из-за накопления ошибок округления результат вычислений с использованием различного количества нитей может в некоторых случаях различаться.Разработкой стандарта занимается некоммерческая организация OpenMPARB (Architecture Review Board) [1], в которую вошли представители крупнейших компаний – разработчиков SMP-архитектур и программного обеспечения.
OpenMP поддерживает работу с языками Фортран и Си/Cи++. Перваяспецификация для языка Фортран появилась в октябре 1997 года, а спецификация для языка Си/Cи++ – в октябре 1998 года. На данный момент последняя официальная спецификация стандарта – OpenMP 3.0 [3] (принята в мае2008 года).Интерфейс OpenMP задуман как стандарт для программирования на масштабируемых SMP-системах (SSMP, ccNUMA и других) в модели общей памяти(shared memory model).
В стандарт OpenMP входят спецификации набора директив компилятора, вспомогательных функций и переменных среды.OpenMP реализует параллельные вычисления с помощью многопоточности,в которой «главный» (master) поток создает набор «подчиненных» (slave) потоков, и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами, причём количество процессоров не обязательно должно быть больше или равноколичеству потоков.POSIX-интерфейс для организации нитей (Pthreads) поддерживается практически на всех UNIX-системах, однако по многим причинам не подходит дляпрактического параллельного программирования: в нём нет поддержки языкаФортран, слишком низкий уровень программирования, нет поддержки па6раллелизма по данным, а сам механизм нитей изначально разрабатывался недля целей организации параллелизма. OpenMP можно рассматривать как высокоуровневую надстройку над Pthreads (или аналогичными библиотекаминитей); в OpenMP используется терминология и модель программирования,близкая к Pthreads, например, динамически порождаемые нити, общие и разделяемые данные, механизм «замков» для синхронизации.Согласно терминологии POSIX threads, любой UNIX-процесс состоит из нескольких нитей управления, которые имеют общее адресное пространство, норазные потоки команд и раздельные стеки.