Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Навести конструкції технології OpenMP на мові С для паралельного виконання циклу області технології OpenMP.

Читайте также:
  1. Визнання доходів та витрат протягом виконання будівельного контракту
  2. Виконайте завдання на листі для виконання завдань.
  3. Виконання вимог процесуальних норм;
  4. Виконання доведених завдань державного замовлення щодо виробництва телерадіопрограм.
  5. ВИКОНАННЯ ЕСКІЗУ КОМПОНУВАННЯ АРХІТЕКТУРНИХ ОРДЕРІВ У ДЕТАЛЯХ
  6. Виконання ескізу компонування ордерів у масах
  7. Виконання зобов’язань

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

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

Розглянутий вище підхід є основою технології OpenMP, найбільш широко вживаною в даний час для організації паралельних обчислень на багатопроцесорних системах із загальною пам'яттю. У рамках даної технології директиви паралелізму використовуються для виділення у програмі паралельних областей (parallel regions), в яких послідовний виконуваний код може бути розділений на декілька роздільних командних потоків (threads). Далі ці потоки можуть виконуватися на різних процесорах обчислювальної системи. У результаті такого підходу програма представляється у вигляді набору послідовних (однопотокових) та паралельних (багатопотокових) ділянок програмного коду.

omp_lock_t dmax_lock;

omp_init_lock (dmax_lock);

do {

dmax = 0; // максимальна зміна значень u

#pragma omp parallel for shared(u,n,dmax) private(i,temp,d)

for (i=1; i<N+1; i++) {

#pragma omp parallel for shared(u,n,dmax) private(j,temp,d)

for (j=1; j<N+1; j++) {

temp = u[i][j];

u[i][j] = 0.25*(u[i-1][j]+u[i+1][j]+

u[i][j-1]+u[i][j+1]–h*h*f[i][j]);

d = fabs(temp-u[i][j]);

omp_set_lock(dmax_lock);

if (dmax < d) dmax = d;

omp_unset_lock(dmax_lock);

} // конец вложенной параллельной области

} // конец внешней параллельной области

} while (dmax > eps);

54. num_threads ( цілочисельне вираження ) - явне задання кількості ниток, які виконуватимуть паралельну область; по замовчуванні вибирається останнє значення, встановлене за допомогою функції omp_set_num_threads(), або значення змінної OMP_NUM_THREADS;

За допомогою функцій omp_get_thread_num() і omp_get_num_threads() нитка може взнати свій номер і загальне число ниток, а потім виконувати свою частину роботи залежно від свого номера (цей підхід широко використовується в програмах на базі інтерфейсу MPI).

55. ----

56. Навести конструкції технології OpenMP на мові С для керування паралельними секціями.

#pragma omp parallel sections

{#pragma omp section

f1();

…#pragma omp section

f2();}

sections використовується тоді коли необхідно блоки коду виконувати в окремих потоках.

sections оголошує цілу ділянку секцій, а кожна окрема секція за допомогою директиви section. Кожний section – це окремий потік.

При вході в паралельну область породжуються нові OMP_NUM_THREADS-1 ниток, кожна нитка отримує свій унікальний номер, причому що породжує нитка отримує номер 0 і стає основною ниткою групи («майстром»). Решта нитки отримують в якості номера цілі числа з 1 до OMP_NUM_THREADS-1. Кількість ниток, що виконують цю паралельну область, залишається незмінним до моменту виходу з області. При виході з паралельної області виробляється неявна синхронізація та видаляються всі нитки, крім породженої.
57. Навести конструкції технології OpenMP на мові С для керування роботою процесів у критичних секціях, бар'єрами.

Критичні секції є невід’ємним етапом виконання програми. При виявлені критичної секції потік призупиняється і очікує її звільнення зокрема це може трапитись при виконанні циклів а також може виникати задача коли всі потоки в певний момент часу планово мають з’явитися в певній секції це називається бар’єром в такому випадку всі потоки зупиняються до того часу поки всі інші не з’являються в даному бар’єрі. Він є методом синхронізації в OpenMP.

For (int i=0; i<5000; i++) {…}

#pragma omp fpr nowait

For (int j=0; j<1000; j++) {…}

#pragma mop barrier

Nowait – відключає синхронізацію

Barrier призупиняє виконання всіх потоків які вже звільнилися до моменту звільнення всіх інших.

#pragma omp for critical {…}

Critical вказує на те що поки в відповідному фрагменті є хоча б один потік інші ввійти в дану секцію не можуть. Це є неіменована критична секція.

Critical(same val) –іменована критична секція


Дата добавления: 2015-08-18; просмотров: 154 | Нарушение авторских прав


Читайте в этой же книге: Архітектура МРР | Архітекттура SMP | Охарактеризувати кластерні системи. | Як визначається час виконання паралельного алгоритму? | Ефективність паралельних обчислень сильно залежить від об'єму обміну у виконуваному застосуванні і від свойст коммуникатора. | Закон Густавсона – Барсиса | Характеристики | Охарактеризувати спеціалізований комунікаційний інтерфейс Myrinet | RMI (англ. Remote Method Invocation) - програмний інтерфейс виклику видалених методів в мові Java. | XML-RPC |
<== предыдущая страница | следующая страница ==>
LOGICAL PERIODS(*), REORDER| Охарактеризувати технологію PVM.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)