Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OpenMP_Pytannja.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
113.66 Кб
Скачать
  1. Паралельн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.

  1. Синхронізація в OpenMp програмах

Механізм роботи синхронізації можна описати таким чином. При ініціалізації набору паралельних процесів в програмі встановлюється контрольна точка (аналогічна контрольній точці в відладчик), в якій програма очікує завершення всіх породжених паралельних процесів. Відзначимо, що поки всі паралельні процеси свою роботу не завершили, програма не може продовжити роботу за точкою синхронізації. А оскільки всі сучасні високопродуктивні процесори є процесорами конвеєрного типу, стає зрозумілою і висока трудомісткість процедури синхронізації. Поки не завершені всі паралельні процеси, програма не може розпочати підготовку завантаження конвеєрів процесорів. Ось це і веде до великих втрат при синхронізації процесів, аналогічних втрат при роботі умовних операторів у звичайній послідовній програмі.

Всього в OpenMP існує шість типів синхронізації: critical, atomic, barrier, master, ordered, flush.

  1. Директива 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" ) ;}

  1. Директива omp master в OpenMp програмах

Директиви master видiляють дiлянку коду, який буде виконаний тiльки основним потоком. Решта потокiв просто пропускають дану дiлянку i продовжують роботу з оператора, розташованого слiдом за ним. Неявної синхронiзацiї дана директива не передбачає.

#pragma omp parallel private(n)      {   n = 1;   #pragma omp master          {  n = 2;  }           printf("Перше значення n: %d\n", n);  }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]