Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Узгоджене програмування і паралельні обчислення

Поиск

Природний резерв підвищення продуктивності комп'ютерів –розпаралелювання потоку команд або потоку даних. Розпаралелювання даних передбачає застосування однієї операції відразу до кількох елементів масиву даних, а паралелізм задач — розбиття обчислювального процесу на декілька процесів, кожний з яких виконується на своєму процесорі.

Досить швидко були розроблені супер-ЕОМ, які мали «векторну» або «матричну» архітектуру процесорів (трансп'ютери), автономних, але здатних обмінюватися між собою результатами своїх обчислень через канали зв'язку.

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

Можна виділити такі основні види паралелізму:

- паралелізм багатопроцесорних систем;

- паралелізм операцій введення-виведення;

- паралелізм взаємодії з користувачем;

- паралелізм розподілених систем.

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

Активне впровадження нової апаратної архітектури потребувало зміни парадигми програмування - переходу від послідовного програмування до узгодженого програмування (concurrent programming), зокрема, паралельного програмування (parallel programming або паралельних обчислень - parallel computing), пов'язаного з паралельними процесами, породженням і обробкою асинхронних подій і ін.

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

При розробці паралельних програм використовуються спеціалізовані мови, як, наприклад, мова високого рівня Occam, а також сучасні бібліотеки і системи паралельного програмування PVM, LAM, CHMP і ін.

Три основні підходи до реалізації цих систем розрізняються методами взаємодії паралельних задач.

Перший підхід базується на концепції обміну повідомленнями,

Другий — на використанні розділення пам'яті,

Третій спирається на стандарт POSIX і об'єднує обидва підходи.

Найбільш відомою реалізацією першого підходу є специфікація MPI (Message Passing Interface) для мов С і Fortran, а другого підходу - специфікація OpenMP для Fortran, С, C++. OpenMP — це набір спеціальних директив компілятору (pragma), а також бібліотечних функцій і змінних середовища. Компілятор, що підтримує OpenMP, перетворює початковий код програми - вставляє відповідні виклики функцій для паралельного виконання фрагментів коду, виділених за допомогою спеціальних директив компілятору. Підтримка специфікації OpenMP є у всіх компіляторах Intel, починаючи з шостої версії, в Microsoft С і C++, починаючи з Visual Studio 2005. В третьому підході використовується специфікація POSIX (Portable Operating System interface for unIX), введена як міжнародний стандарт ISO/IEC 9945-1:1990. В рамках POSIX можна реалізувати паралельні обчислення на основі обміну повідомленнями (аналогічно MPI), або розділення пам'яті (як в OpenMP). В POSIX допустима і будь-яка комбінація цих методів.

Можливості розподілених і паралельних обчислень є в мовах Java, C#.

На сьогодні головними елементами програм провідних компаній–розробників мікропроцесорів стали багатоядерні процесори.

Наприклад, корпорація Intel розробляє відразу 17 багатоядерних процесорів і в найближчому майбутньому зможе поставляти їх для всіх сімейств своєї продукції на різних платформах, включаючи клієнтські, серверні і комунікаційні системи. До складу багатоядерного серверного процесора входять два або більше ядра на кожний фізичний процесор, що дозволяє серверним платформам одночасно обробляти більше завдань, програмних потоків або застосувань. Очікується, що ці можливості відкриють нову еру зростання продуктивності і гнучкості серверів [3].

Двоядерні процесори Intel – лише перший крок на цьому шляху. Перший двоядерний процесор Intel для настільних ПК був випущений в квітні 2005 року; зараз корпорація Intel вже працює над багатоядерною архітектурою, яка, дозволить об'єднати десятки і навіть сотні процесорних ядер на одному кристалі. Розробляються також плани створення спеціалізованих ядер, які забезпечать оптимальну продуктивність для найважливіших задач майбутнього, таких як аналіз інформації в базі даних і вдосконалена обробка зображень і природної мови.

Сьогодні вважається, що багатоядерні процесори – цей єдиний перспективний напрям для подальшого розвитку комп'ютерної індустрії.

Провідний експерт корпорації Microsoft Херб Саттер в статті «Програмне забезпечення і революція узгодження» (ACM QUEUE, September 2005) називає те, що відбувається революцією за масштабами суттєво більш могутньою, ніж поширення об'єктно-орієнтованого програмування на початку 90-х років. Тоді причиною змін стало ускладнення програмних систем, нинішня ж революційна ситуація викликана необхідністю виконувати програми на багатоядерних процесорах».



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 319; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.46.87 (0.006 с.)