Директива omp master в OpenMP програмахСтр 1 из 3Следующая ⇒
Паралельнi цикли в OpenMP програмах Як вже зазначалося ранiше, програмний код блоку директиви parallel за замовчуванням виконуюється усiма потоками. Даний спосiб може бути корисний, коли потрiбно виконати однi й тi ж дiї багаторазово. або коли один i той же програмний код може бути застосований для виконання обробки рiзних даних. Останнiй варiант досить широко використовується при розробцi паралельних алгоритмiв i програм i зазвичай іменується розпаралелюванням за даними. У рамках даного пiдходу в OpenMP поряд iз звичайним повторенням в потоках одного i того ж програмного коду, як у директивi parallel , можна здiйснити подiл ітеративно. Така можливiсть є тим бiльш важливою, оскiльки в багатьох випадках саме в циклах виконується основна частина трудомiстких обчислень. Якщо в паралельнiй областi зустрiвся оператор циклу, то, вiдповiдно до загального правила, вiн буде виконаний усiма потоками поточної групи, тобто кожен потiк виконає всi iтерацiї даного циклу. Для розпаралелювання циклiв в OpenMP застосовується директива for: #pragma omp for [опцiя [[,] опцiя ]...] Ця директива вiдноситься до блоку, що йде слiдом за даною директивою, котрий містить оператор for.
Синхронізація в OpenMP програмах Механізм роботи синхронізації можна описати таким чином. При ініціалізації набору паралельних процесів в програмі встановлюється контрольна точка (аналогічна контрольній точці в відладчик), в якій програма очікує завершення всіх породжених паралельних процесів. Відзначимо, що поки всі паралельні процеси свою роботу не завершили, програма не може продовжити роботу за точкою синхронізації. А оскільки всі сучасні високопродуктивні процесори є процесорами конвеєрного типу, стає зрозумілою і висока трудомісткість процедури синхронізації. Поки не завершені всі паралельні процеси, програма не може розпочати підготовку завантаження конвеєрів процесорів. Ось це і веде до великих втрат при синхронізації процесів, аналогічних втрат при роботі умовних операторів у звичайній послідовній програмі. Всього в OpenMP існує шість типів синхронізації: critical, atomic, barrier, master, ordered, flush.
Директива omp single в OpenMP програмах Якщо в паралельнiй областi яку-небудь дiлянку коду потрiбно виконати лише один раз, то його потрiбно видiлити директивою single. #pragma omp single [опцiя [[,] опцiя ]...] Можливi опцiї: private, firstprivate, copyprivate, nowait #pragma omp p a r a l l e l { p r i n t f ( "Повiдомлення ␣1\n" ) ; #pragma omp s i n g l e nowait {p r i n t f ( "Один␣ п о т i к \n" ) ;} p r i n t f ( "Повiдомлення ␣2\n" ) ;}
Директива omp master в OpenMP програмах Директиви master видiляють дiлянку коду, який буде виконаний тiльки основним потоком. Решта потокiв просто пропускають дану дiлянку i продовжують роботу з оператора, розташованого слiдом за ним. Неявної синхронiзацiї дана директива не передбачає. #pragma omp parallel private(n)
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|