SlideShare a Scribd company logo
1 of 3
Download to read offline
Технология OpenMP
Автор: Андрей Карпов

Дата: 20.11.2009


Аннотация
Статья содержит краткое описание технологии OpenMP.


OpenMP
OpenMP (Open Multi-Processing) - это набор директив компилятора, библиотечных процедур и
переменных окружения, которые предназначены для программирования многопоточных
приложений на многопроцессорных системах с общей памятью (SMP-системах).

Первый стандарт OpenMP был разработан в 1997 г. как API, ориентированный на написание легко
переносимых многопоточных приложений. Сначала он был основан на языке Fortran, но позднее
включил в себя и языки Си и Си++.

Интерфейс OpenMP стал одной из наиболее популярных технологий параллельного
программирования. OpenMP успешно используется как при программировании
суперкомпьютерных систем с большим количеством процессоров, так и в настольных
пользовательских системах или, например, в Xbox 360.

Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной
техники и программного обеспечения, чья работа регулируется некоммерческой организацией
"OpenMP Architecture Review Board" (ARB) [1].

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

Число потоков в группе, выполняющихся параллельно, можно контролировать несколькими
способами. Один из них - использование переменной окружения OMP_NUM_THREADS. Другой
способ - вызов процедуры omp_set_num_threads(). Еще один способ - использование выражения
num_threads в сочетании с директивой parallel.
OpenMP и другие технологии параллельного программирования
На данный момент считается, что наиболее гибким, переносимым и общепринятым интерфейсом
параллельного программирования является MPI (интерфейс передачи сообщений). Однако
модель передачи сообщений:

   •   недостаточно эффективна на SMP-системах;
   •   относительно сложна в освоении, так как требует мышления в "невычислительных"
       терминах.

POSIX-интерфейс для организации нитей (Pthreads) поддерживается широко (практически на всех
UNIX-системах), однако по многим причинам не подходит для практического параллельного
программирования:

   •   нет поддержки Fortran;
   •   слишком низкий уровень;
   •   нет поддержки параллелизма по данным;
   •   механизм нитей изначально разрабатывался не для целей организации вычислительного
       параллелизма.

OpenMP можно рассматривать как высокоуровневую надстройку над Pthreads (или аналогичными
библиотеками нитей). Перечислим преимущества, которые OpenMP дает разработчику.

   1. За счет идеи "инкрементального распараллеливания" OpenMP идеально подходит для
      разработчиков, желающих быстро распараллелить свои вычислительные программы с
      большими параллельными циклами. Разработчик не создает новую параллельную
      программу, а просто последовательно добавляет в текст последовательной программы
      OpenMP-директивы.
   2. При этом OpenMP - достаточно гибкий механизм, предоставляющий разработчику
      большие возможности контроля над поведением параллельного приложения.
   3. Предполагается, что OpenMP-программа на однопроцессорной платформе может быть
      использована в качестве последовательной программы, т.е. нет необходимости
      поддерживать последовательную и параллельную версии. Директивы OpenMP просто
      игнорируются последовательным компилятором, а для вызова процедур OpenMP могут
      быть подставлены заглушки (stubs), текст которых приведен в спецификациях.
   4. Одним из достоинств OpenMP его разработчики считают поддержку так называемых
      "orphan" (оторванных) директив, то есть директивы синхронизации и распределения
      работы могут не входить непосредственно в лексический контекст параллельной области.


OpenMP и инструментарий
На данный момент технология OpenMP поддерживается большинством компиляторов языка
Си/Си++. Несколько хуже дело обстоит с инструментами тестирования параллельных OpenMP
программ. Инструменты анализа, проверки и оптимизации параллельных программ хотя и
существуют давно, до недавнего времени были мало востребованы при разработке прикладного
программного обеспечения. Поэтому они часто являются менее удобными, чем иные
инструментальные средства разработки.

Наиболее полно процесс разработки параллельных OpenMP программ поддержан в пакете Intel
Parallel Studio. Имеется инструмент предварительного анализа кода, для выявления участков кода,
которые потенциально можно эффективно распараллелить. Имеется хорошо оптимизирующий
компилятор с поддержкой OpenMP. Имеется профилировщик и инструмент динамического
анализа для выявления параллельных ошибок.

Дополнительно можно выделить инструмент VivaMP, входящий в состав PVS-Studio. Это
статический анализатор кода, специализированный на выявлении ошибок в OpenMP программах
на этапе их написания.


Библиографический список
   1. Официальный сайт OpenMP Architecture Review Board. http://www.openmp.org/
   2. Joel Yliluoma. Guide into OpenMP: Easy multithreading programming for C++.
      http://www.viva64.com/go.php?url=135
   3. Kang Su Gatlin and Pete Isensee. OpenMP and C++. http://www.viva64.com/go.php?url=113
   4. Коллекция ссылок на статьи посвященных параллельному программированию и
      технологии OpenMP. http://www.viva64.com/ru/links/parallel-programming-ru/

More Related Content

What's hot

Языки программирования
Языки программированияЯзыки программирования
Языки программированияArzuK
 
Programming Concepts
Programming ConceptsProgramming Concepts
Programming ConceptsMister_Lee
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)Ayan_R
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. AlgorithmIhor Porotikov
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
языки программирования
языки программированияязыки программирования
языки программированияDmitry Kulikov
 
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использованияТрудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использованияTatyanazaxarova
 
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...ivanov15548
 
языки программирования презетнация
языки программирования презетнацияязыки программирования презетнация
языки программирования презетнацияsonyadark
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreTatyanazaxarova
 

What's hot (20)

TAP
TAPTAP
TAP
 
лекция 17
лекция 17лекция 17
лекция 17
 
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстовСмолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Programming Concepts
Programming ConceptsProgramming Concepts
Programming Concepts
 
Pascal+
Pascal+Pascal+
Pascal+
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
лек13 4
лек13 4лек13 4
лек13 4
 
43828
4382843828
43828
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. Algorithm
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
языки программирования
языки программированияязыки программирования
языки программирования
 
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использованияТрудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
 
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
 
структура программы
структура программыструктура программы
структура программы
 
языки программирования презетнация
языки программирования презетнацияязыки программирования презетнация
языки программирования презетнация
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCore
 
378 васильев куницын
378 васильев куницын378 васильев куницын
378 васильев куницын
 

Viewers also liked

Caffine And Pregnancy
Caffine  And  PregnancyCaffine  And  Pregnancy
Caffine And PregnancyAlicia Knapp
 
Making Solo Practice Sustainable
Making Solo Practice SustainableMaking Solo Practice Sustainable
Making Solo Practice SustainableCarolyn Elefant
 
Articles - Rules and Examples
Articles - Rules and ExamplesArticles - Rules and Examples
Articles - Rules and Examplesdajicrad
 
Carolyn Elefant Speaks at IEEFA Conference
Carolyn Elefant Speaks at IEEFA ConferenceCarolyn Elefant Speaks at IEEFA Conference
Carolyn Elefant Speaks at IEEFA ConferenceCarolyn Elefant
 
Mens Journal and Vemma
Mens Journal and VemmaMens Journal and Vemma
Mens Journal and Vemmadasak
 
Basics of eng grammar wrap up
Basics of eng grammar wrap upBasics of eng grammar wrap up
Basics of eng grammar wrap upSana Malik
 
PYTHON NOTES
PYTHON NOTESPYTHON NOTES
PYTHON NOTESNi
 
медиа план New-17.08-23.08
медиа план New-17.08-23.08медиа план New-17.08-23.08
медиа план New-17.08-23.08Andrey Dihtjarenko
 
Write your email professionally - Writing Request E mails
Write your email professionally - Writing Request E mailsWrite your email professionally - Writing Request E mails
Write your email professionally - Writing Request E mailsPeea Bal Chakraborty
 
Web real time communication @UXRepublic
Web real time communication @UXRepublicWeb real time communication @UXRepublic
Web real time communication @UXRepublicUX REPUBLIC
 

Viewers also liked (17)

Caffine And Pregnancy
Caffine  And  PregnancyCaffine  And  Pregnancy
Caffine And Pregnancy
 
Making Solo Practice Sustainable
Making Solo Practice SustainableMaking Solo Practice Sustainable
Making Solo Practice Sustainable
 
Plc
PlcPlc
Plc
 
Articles - Rules and Examples
Articles - Rules and ExamplesArticles - Rules and Examples
Articles - Rules and Examples
 
Bioalgo 2013-05-aho-corasick
Bioalgo 2013-05-aho-corasickBioalgo 2013-05-aho-corasick
Bioalgo 2013-05-aho-corasick
 
Carolyn Elefant Speaks at IEEFA Conference
Carolyn Elefant Speaks at IEEFA ConferenceCarolyn Elefant Speaks at IEEFA Conference
Carolyn Elefant Speaks at IEEFA Conference
 
Mens Journal and Vemma
Mens Journal and VemmaMens Journal and Vemma
Mens Journal and Vemma
 
Cuaderno 2parcial
Cuaderno 2parcialCuaderno 2parcial
Cuaderno 2parcial
 
Minimanual
MinimanualMinimanual
Minimanual
 
ขั้นตอนขออนุญาต ใบกนอ.
ขั้นตอนขออนุญาต ใบกนอ.ขั้นตอนขออนุญาต ใบกนอ.
ขั้นตอนขออนุญาต ใบกนอ.
 
Evaluation: Question 3
Evaluation: Question 3Evaluation: Question 3
Evaluation: Question 3
 
Basics of eng grammar wrap up
Basics of eng grammar wrap upBasics of eng grammar wrap up
Basics of eng grammar wrap up
 
PYTHON NOTES
PYTHON NOTESPYTHON NOTES
PYTHON NOTES
 
медиа план New-17.08-23.08
медиа план New-17.08-23.08медиа план New-17.08-23.08
медиа план New-17.08-23.08
 
Write your email professionally - Writing Request E mails
Write your email professionally - Writing Request E mailsWrite your email professionally - Writing Request E mails
Write your email professionally - Writing Request E mails
 
Web real time communication @UXRepublic
Web real time communication @UXRepublicWeb real time communication @UXRepublic
Web real time communication @UXRepublic
 
Actividad 2 4 p5
Actividad 2 4 p5Actividad 2 4 p5
Actividad 2 4 p5
 

Similar to Технология OpenMP

лекция №7
лекция №7лекция №7
лекция №7student_kai
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP languageVladimir Burdaev
 
VivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMPVivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMPTatyanazaxarova
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...IT Share
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по PhpRauan Ibraikhan
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Mikhail Kurnosov
 
Памятка о php-шниках
Памятка о php-шникахПамятка о php-шниках
Памятка о php-шникахKaterina Starostina
 
уроки по Php
уроки по Phpуроки по Php
уроки по Phpnewbieseo
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAlexander Lisachenko
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программированияAlexander Petrov
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.IT-Доминанта
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"Yandex
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программистru_Parallels
 
Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Vsevolod Dyomkin
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in russuser0562f1
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++ssuser0562f1
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютерыnastena07051995
 
Presentation for students about Laravel.pptx
Presentation for students about Laravel.pptxPresentation for students about Laravel.pptx
Presentation for students about Laravel.pptxGetOverHere
 

Similar to Технология OpenMP (20)

лекция №7
лекция №7лекция №7
лекция №7
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
VivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMPVivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMP
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по Php
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
190
190190
190
 
Памятка о php-шниках
Памятка о php-шникахПамятка о php-шниках
Памятка о php-шниках
 
уроки по Php
уроки по Phpуроки по Php
уроки по Php
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программирования
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?
 
Languages b6cc1c17
Languages b6cc1c17Languages b6cc1c17
Languages b6cc1c17
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in ru
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютеры
 
Presentation for students about Laravel.pptx
Presentation for students about Laravel.pptxPresentation for students about Laravel.pptx
Presentation for students about Laravel.pptx
 

More from Tatyanazaxarova

Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияTatyanazaxarova
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программTatyanazaxarova
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокTatyanazaxarova
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиTatyanazaxarova
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурTatyanazaxarova
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхTatyanazaxarova
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияTatyanazaxarova
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиTatyanazaxarova
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarova
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхTatyanazaxarova
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейTatyanazaxarova
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаTatyanazaxarova
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаTatyanazaxarova
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовTatyanazaxarova
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаTatyanazaxarova
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокTatyanazaxarova
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеTatyanazaxarova
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияTatyanazaxarova
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииTatyanazaxarova
 

More from Tatyanazaxarova (20)

Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окружения
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
 

Технология OpenMP

  • 1. Технология OpenMP Автор: Андрей Карпов Дата: 20.11.2009 Аннотация Статья содержит краткое описание технологии OpenMP. OpenMP OpenMP (Open Multi-Processing) - это набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью (SMP-системах). Первый стандарт OpenMP был разработан в 1997 г. как API, ориентированный на написание легко переносимых многопоточных приложений. Сначала он был основан на языке Fortran, но позднее включил в себя и языки Си и Си++. Интерфейс OpenMP стал одной из наиболее популярных технологий параллельного программирования. OpenMP успешно используется как при программировании суперкомпьютерных систем с большим количеством процессоров, так и в настольных пользовательских системах или, например, в Xbox 360. Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной техники и программного обеспечения, чья работа регулируется некоммерческой организацией "OpenMP Architecture Review Board" (ARB) [1]. В OpenMP используется модель параллельного выполнения "ветвление-слияние". Программа OpenMP начинается как единственный поток выполнения, называемый начальным потоком. Когда поток встречает параллельную конструкцию, он создает новую группу потоков, состоящую из себя и некоторого числа дополнительных потоков, и становится главным в новой группе. Все члены новой группы (включая главный) выполняют код внутри параллельной конструкции. В конце параллельной конструкции имеется неявный барьер. После параллельной конструкции выполнение пользовательского кода продолжает только главный поток. В параллельный регион могут быть вложены другие параллельные регионы, в которых каждый поток первоначального региона становится основным для своей группы потоков. Вложенные регионы могут в свою очередь включать регионы более глубокого уровня вложенности. Число потоков в группе, выполняющихся параллельно, можно контролировать несколькими способами. Один из них - использование переменной окружения OMP_NUM_THREADS. Другой способ - вызов процедуры omp_set_num_threads(). Еще один способ - использование выражения num_threads в сочетании с директивой parallel.
  • 2. OpenMP и другие технологии параллельного программирования На данный момент считается, что наиболее гибким, переносимым и общепринятым интерфейсом параллельного программирования является MPI (интерфейс передачи сообщений). Однако модель передачи сообщений: • недостаточно эффективна на SMP-системах; • относительно сложна в освоении, так как требует мышления в "невычислительных" терминах. POSIX-интерфейс для организации нитей (Pthreads) поддерживается широко (практически на всех UNIX-системах), однако по многим причинам не подходит для практического параллельного программирования: • нет поддержки Fortran; • слишком низкий уровень; • нет поддержки параллелизма по данным; • механизм нитей изначально разрабатывался не для целей организации вычислительного параллелизма. OpenMP можно рассматривать как высокоуровневую надстройку над Pthreads (или аналогичными библиотеками нитей). Перечислим преимущества, которые OpenMP дает разработчику. 1. За счет идеи "инкрементального распараллеливания" OpenMP идеально подходит для разработчиков, желающих быстро распараллелить свои вычислительные программы с большими параллельными циклами. Разработчик не создает новую параллельную программу, а просто последовательно добавляет в текст последовательной программы OpenMP-директивы. 2. При этом OpenMP - достаточно гибкий механизм, предоставляющий разработчику большие возможности контроля над поведением параллельного приложения. 3. Предполагается, что OpenMP-программа на однопроцессорной платформе может быть использована в качестве последовательной программы, т.е. нет необходимости поддерживать последовательную и параллельную версии. Директивы OpenMP просто игнорируются последовательным компилятором, а для вызова процедур OpenMP могут быть подставлены заглушки (stubs), текст которых приведен в спецификациях. 4. Одним из достоинств OpenMP его разработчики считают поддержку так называемых "orphan" (оторванных) директив, то есть директивы синхронизации и распределения работы могут не входить непосредственно в лексический контекст параллельной области. OpenMP и инструментарий На данный момент технология OpenMP поддерживается большинством компиляторов языка Си/Си++. Несколько хуже дело обстоит с инструментами тестирования параллельных OpenMP программ. Инструменты анализа, проверки и оптимизации параллельных программ хотя и существуют давно, до недавнего времени были мало востребованы при разработке прикладного программного обеспечения. Поэтому они часто являются менее удобными, чем иные инструментальные средства разработки. Наиболее полно процесс разработки параллельных OpenMP программ поддержан в пакете Intel Parallel Studio. Имеется инструмент предварительного анализа кода, для выявления участков кода,
  • 3. которые потенциально можно эффективно распараллелить. Имеется хорошо оптимизирующий компилятор с поддержкой OpenMP. Имеется профилировщик и инструмент динамического анализа для выявления параллельных ошибок. Дополнительно можно выделить инструмент VivaMP, входящий в состав PVS-Studio. Это статический анализатор кода, специализированный на выявлении ошибок в OpenMP программах на этапе их написания. Библиографический список 1. Официальный сайт OpenMP Architecture Review Board. http://www.openmp.org/ 2. Joel Yliluoma. Guide into OpenMP: Easy multithreading programming for C++. http://www.viva64.com/go.php?url=135 3. Kang Su Gatlin and Pete Isensee. OpenMP and C++. http://www.viva64.com/go.php?url=113 4. Коллекция ссылок на статьи посвященных параллельному программированию и технологии OpenMP. http://www.viva64.com/ru/links/parallel-programming-ru/