синхронізація між процесами представляють великий бар'єр для отримання високої продуктивності паралельних систем. У останні роки також стали розглядати питання про споживання електроенергії паралельними комп'ютерами. Характер збільшення швидкості програми в результаті розпаралелювання пояснюється законом Амдала.
Якщо при обчисленні не застосовуються циклічні (повторювані) дії, то N обчислювальних модулів ніколи не виконають роботу в N разів швидше, ніж один єдиний обчислювальний модуль.
Наприклад, для швидкого сортування масиву на двухпроцессорной машині можна розділити масив навпіл і сортувати кожну половину на окремому процесорі. Сортування кожної половини може зайняти різний час, тому необхідна синхронізація.
2. Типи паралелізму
2.1 Паралелізм на рівні бітів
Ця форма паралелізму заснована на збільшенні розміру машинного слова. Збільшення розміру машинного слова зменшує кількість операцій, необхідних процесору для виконання дій над змінними, чий розмір перевищує розмір машинного слова. Наприклад: на 8-бітному процесорі потрібно скласти два 16-бітних цілих числа. Для цього спочатку потрібно скласти нижні 8 біт чисел, потім скласти верхні 8 біт і до результату їх складання додати значення прапора переносу. Разом 3 інструкції. З 16-бітним процесором можна виконати цю операцію однією інструкцією.
Історично 4-бітові мікропроцесори були замінені 8-бітними, потім з'явилися 16-бітові та 32-бітові. 32-бітові процесори довгий час були стандартом в повсякденних обчисленнях. З появою технології x86-64 для цих цілей стали використовувати 64-бітові процесори. br/>
2.2 Паралелізм на рівні інструкцій
Комп'ютерна програма - це, по суті, потік інструкцій, які виконуються процесором. Але можна змінити порядок цих інструкцій, розподілити їх по групах, які виконуватимуться паралельно, без зміни результату роботи всієї програми. Даний прийом відомий як паралелізм на рівні інструкцій. Просування в розвитку паралелізму на рівні інструкцій в архітектурі комп'ютерів відбувалися з середини 1980-х до середини 1990-х.
Сучасні процесори мають багатоступінчастий конвеєр команд. Кожній ступені конвеєра відповідає певне дію, що виконується процесором в цій інструкції на цьому етапі. Процесор з N ступенями конвеєра може мати одночасно до N різних інструкцій на різному рівні закінченості. Класичний приклад процесора з конвеєром - це RISC-процесор з 5-ю ступенями: вибірка інструкції з пам'яті (IF), декодування інструкції (ID), виконання інструкції (EX), доступ до пам'яті (MEM), запис результату в регістри (WB). Процесор Pentium 4 має 35-тиступеневою конвеєр. [4]
Деякі процесори, додатково до використання конвеєрів, володіють можливістю виконувати декілька інструкцій одночасно, що дає додатковий паралелізм на рівні інструкцій. Можлива реалізація даного методу за допомогою суперскалярное, коли інструкції можуть бути згруповані разом для паралельного виконання (якщо в них немає залежності між даними). Також можливі реалізації з використанням явного паралелізму на рівні інструкцій: VLIW і EPIC. br/>
2.3 Паралелізм даних
Основна ідея підходу, заснованого на паралелізм даних, полягає в тому, що одна операція виконується відразу над всіма елементами масиву даних. Різні фрагменти такого масиву обробляються на векторному процесорі або на різних процесорах паралельної машини. Розподілом даних між процесорами займається програма. Векторизація або розпаралелювання в цьому випадку частіше всього виконується вже на етапі компіляції - перекладу вихідного тексту програми в машинні команди. Роль програміста в цьому випадку зазвичай зводиться до завданням налаштувань векторної або паралельної оптимізації компілятору, директив паралельної компіляції, використанню спеціалізованих мов для паралельних обчислень.
2.4 Паралелізм завдань (багатопоточність)
Стиль програмування, заснований на паралелізм завдань, має на увазі, що обчислювальна завдання розбивається на декілька відносно самостійних підзадач і кожен процесор завантажується своєї власної підзадачею.
2.5 Розподілені операційні системи
Розподілена ОС, динамічно і автоматично розподіляючи роботи з різних машинам системи для обробки, змушує набір мережевих машин працювати як віртуальний уніпроцессор. Користувач розподіленої ОС, взагалі кажучи, не має відомостей про те, на якій машині виконується його робота.
Розподілена ОС існує як єдина операційна система в масштабах обчислювальної системи. Кожен комп'ютер мережі, що працює під управлінням розподіленої ОС, виконує частину функцій цієї глобальної ОС. Розподілена ОС об'єднує всі комп'ютери мережі в тому сенсі, що вони працюють в ті...