OpenMP: відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Немає опису редагування
Рядок 12:
|license = різні<ref name="openmp.org">http://openmp.org/wp/openmp-compilers/ OpenMP Compilers</ref>
|website = {{URL|openmp.org}}
}}
}}'''OpenMP''' (''Open Multi-Processing'') &nbsp;— це набір директив [[компілятор]]а, [[бібліотека програм|бібліотечних]] процедур та змінних середовища, які призначені для програмування [[багатонитевість|багатопоточних]] [[застосунок|застосунків]] на [[багатопроцесорна система|багатопроцесорних системах]] із спільною пам'яттю на [[мова програмування|мовах]] [[C (мова програмування)|C]], [[C++]] та [[Fortran]].
 
Розробку специфікації OpenMP ведуть кілька великих виробників обчислювальної техніки та програмного забезпечення, робота яких регулюється некомерційною організацією, названою OpenMP Architecture Review Board (ARB)<ref>[http://www.openmp.org Офіційний сайт OpenMP Architecture Review Board]</ref>. Детальна специфікація OpenMP міститься на [http://www.openmp.org/blog/specifications/ сторінці]. Специфікації для мов Fortran і C/C++ з'явилися відповідно в жовтні [[1997]] року і жовтні [[1998]] року.
Рядок 23 ⟶ 24:
# механізм нитей спочатку розроблявся не для цілей організації паралелізму
 
OpenMP реалізує [[паралельні обчислення]] за допомогою [[багатонитевість|багатопотоковості]], в якій «головний» (master) потік створює набір підлеглих (slave) потоків і завдання розподіляється між ними. Передбачається, що потоки виконуються паралельно на машині з декількома [[процесор]]ами (кількість процесорів не обов'язково має бути більше або дорівнювати кількості потоків).
 
Завдання, що виконуються потоками паралельно, так само як і дані, необхідні для виконання цих завдань, описуються за допомогою спеціальних директив препроцесора відповідної мови &nbsp;— прагм. Наприклад, ділянка коду на мові Fortran, яка повинна виконуватися кількома потоками, кожна з яких має свою копію змінної N, передує наступній !$OMP PARALLEL PRIVATE(N)
 
Кількість створюваних потоків може регулюватися як самою програмою за допомогою виклику бібліотечних процедур, так і ззовні, за допомогою змінних оточення.
Рядок 31 ⟶ 32:
=== Переваги ===
# За рахунок ідеї «інкрементального розпаралелювання» OpenMP ідеально підходить для розробників, що прагнуть швидко розпаралелювати свої обчислювальні програми з великими паралельними циклами. Розробник не створює нову паралельну програму, а просто послідовно додає в текст програми OpenMP-директиви.
# При цьому, OpenMP &nbsp;— досить гнучкий механізм, що надає розробникові великі можливості контролю над поведінкою паралельної програми.
# Передбачається, що OpenMP-програма на однопроцесорній платформі може бути використана як послідовна програма, тобто немає необхідності підтримувати послідовну та паралельну версії. Директиви OpenMP просто ігноруються послідовним компілятором, а для виклику процедур OpenMP можуть бути підставлені заглушки (stubs), текст яких приведений в специфікаціях.
# Однією з переваг OpenMP розробники вважають підтримку так званих «orphan» (відірваних) директив, тобто директиви синхронізації і розподілу роботи можуть не входити безпосередньо в лексичний контекст паралельної області.
 
== Ключові елементи ==
Ключовими елементами OpenMP є
* конструкції для створення потоків (директива parallel),
* конструкції розподілу роботи між потоками (директиви DO / for та section),
Рядок 113 ⟶ 114:
 
== Існуючі реалізації ==
OpenMP підтримується багатьма комерційними компіляторами.
 
Компілятори [[Oracle Solaris Studio]], v12.3, підтримують офіційно специфікацію OpenMP 3.1 &nbsp;— з покращеною продуктивністю під ОС [[Solaris]] та обмеженим числом платформ під ОС [[Linux]] <ref>[http://docs.oracle.com/cd/E24457_01/pdf/E21996.pdf Oracle Solaris Studio 12.3 OpenMP API User's Guide, PDF]</ref>
 
Visual C++ 2005 підтримує OpenMP у редакціях Professional і Team System<ref>[http://msdn2.microsoft.com/en-us/library/hs24szh9(vs.80).aspx MSDN: Visual C++ Editions]</ref>.
 
[[GCC]] 4.2 підтримує OpenMP 2.5, а деякі дистрибутиви (такі як [[Fedora Core]] 5 [http://meditation-art.blogspot.com/2007/04/openmp-with-gcc-on-fedora-core-5.html gcc]) включили підтримку в свої версії GCC 4.1. Починаючи з GCC 4.4 підтримується стандарт OpenMP 3.0 а з версії GCC 4.7 -&nbsp;— OpenMP 3.1 <ref>[http://gcc.gnu.org/wiki/openmp GCC Wiki OpenMP]</ref>
 
В універсальному комплексі [[Intel Parallel Studio]] від [[Intel]] об'єднано компілятори C++ та Фортран, бібліотеки оптимізації та паралелізації, включаючи OpenMP 3.1 (починаючи з версії компіляторів 12.1), а також засоби перевірки помилок та продуктивності, зневаджувач і профайлер для останніх поколінь багатоядерних процесорів.
 
== Приклад реалізації ==
Компілятори Sun Studio створюють окрему процедуру з вихідного коду, розташованого під директивою parallel, а замість самої директиви вставляють виклик процедури __mt_MasterFunction_ бібліотеки libmtsk, передаючи їй адресу штучно створену. Таким чином, розподілювані (shared) дані можуть бути передані останній за посиланням, а власні (private) оголошуються всередині цієї процедури, опиняючись незалежні від своїх копій в інших нитях.
 
Процедура __mt_MasterFunction_ створює групу нитей (кількістю 9 у наведеному вище прикладі на мові C), які будуть виконувати код конструкції parallel, а нить, що викликала їх, стає головною у групі. Потім головна нить організовує роботу підлеглих нитей, після чого починає виконувати код користувача сама. Коли код буде виконаний, головна нить викликає процедуру _mt_EndOfTask_Barrier_ що синхронізує її з іншими.
 
== Інструменти ==
* [[VivaMP]] &nbsp;— Статичний аналізатор Сі/Сі++ коду для виявлення помилок в програмах, побудованих на технології OpenMP для ОС Windows.
 
== ВиноскиПримітки ==
{{reflist}}
 
== Посилання ==
* [http://OpenMP.org OpenMP.org &nbsp;— Офіційний сайт OpenMP Architecture Review Board]
* [http://parallel.ru/tech/tech_dev/openmp.html Что такое OpenMP?] {{ref-ru}}
* [http://developers.sun.ru/index.php?option=com_content&task=view&id=7&Itemid=0 Введение в OpenMP: API параллельных программ для многопроцессорных систем с общей памятью] {{ref-ru}}
* [http://www.microsoft.com/Rus/Msdn/Magazine/2005/10/OpenMP.mspx OpenMP и C++] {{ref-ru}}
* [http://www.intuit.ru/department/se/openmp/ Учебный курс &nbsp;— Параллельное программирование с использованием OpenMP] {{ref-ru}}
* [http://developers.sun.com/solaris/articles/studio_openmp.html OpenMP Support in Sun Studio Compilers and Tools] {{ref-en}}
* [http://www.viva64.com/art-3-1-464379766.html Статья «32 подводных камня OpenMP при программировании на Си++»] {{ref-ru}}
 
{{Паралельні обчислення}}
 
{{Паралельні обчислення}}
{{Compu-prog-stub}}
[[Категорія:Прикладні програмні інтерфейси]]
[[Категорія:Паралельні обчислення]]