загрузка...
загрузка...
На головну

Паралелізм на рівні команд

  1. E.3. Значення статистик Дарбіна-Уотсона при 5% -му рівні значущості
  2. Автокорреляция рівнів часового ряду
  3. Апарати з нерухомим рівнем рідини
  4. Апарати з рухомим рівнем рідини
  5. арифметичні команди
  6. Архітектура TCP / IP. Коротка характеристика рівневих підсистем. Основні відмінності від моделі OSI.
  7. Бойовий наказ командира РГ № 1 на десантування та ведення розвідки

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

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

Конвеєри

Уже багато років відомо, що головною перешкодою високої швидкості виконання команд є їх виклик з пам'яті. Для вирішення цієї проблеми розробники придумали засіб для виклику команд з пам'яті заздалегідь, щоб вони були в наявності в той момент, коли будуть необхідні. Еги команди поміщалися в набір регістрів, який називався буфером вибірки з попередженням. Таким чином, коли була потрібна певна команда, вона викликалася прямо з буфера, і не потрібно було чекати, поки вона вважається з пам'яті. Ця ідея використовувалася ще при розробці IBM Stretch, який був сконструйований в 1959 році.

Насправді процес вибірки з попередженням поділяє виконан

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

На рис. 2.3, а зображений конвеєр з 5 блоків, які називаються стадіями.

Стадія С1 викликає команду з пам'яті і поміщає її в буфер, де вона зберігається до тих пір, поки не буде потрібна. Стадія С2 декодує цю команду, визначаючи її тип і тип операндів, над якими вона буде виробляти певні дії. Стадія СЗ визначає місцезнаходження операндів і викликає їх або з регістрів, або з пам'яті. Стадія С4 виконує команду, зазвичай шляхом проведення операндів через тракт даних (див. Рис. 2.2). І нарешті, стадія С5 записує результат назад в потрібний регістр.

На рис. 2.3, б ми бачимо, як діє конвеєр в часі. Під час циклу 1 стадія С1 працює над командою 1, викликаючи її з пам'яті. Під час циклу 2 стадія С2 декодує команду 1, в той час як стадія С1 викликає з пам'яті команду 2. Під час циклу 3 стадія СЗ викликає операнди для команди 1, стадія С2 декодує команду 2, а стадія С1 викликає третю команду. Під час циклу 4 стадія С4 виконує команду 1, СЗ викликає операнди для команди 2, С2 декодує команду 3, а С1 викликає команду 4. Нарешті, під час п'ятого циклу С5 записує результат виконання команди 1 назад в регістр, тоді як інші стадії працюють над наступними командами.

Щоб краще зрозуміти принципи роботи конвеєра, розглянемо аналогічний

приклад. Уявімо собі кондитерську фабрику »на якій випічка тортів і їх упаковка для відправки виробляються роздільно. Припустимо, що у відділі відправки знаходиться довгий конвеєр, уздовж якого стоять 5 робочих (або блоків обробки). Кожні 10 секунд (цей час циклу) перший робочий ставить порожню коробку для торта на стрічку конвеєра. Ця виконуєте повернення до другого робітника, який кладе в неї торт. Після цього коробка з тортом доставляється третього робочого, який закриває і запечатує її. Потім вона надходить до четвертого робочого, який ставить на ній ярлик. Нарешті, п'ятий робочий знімає коробку з конвеєрної стрічки і поміщає її в великий контейнер для відправки в супермаркет. Приблизно таким же чином діє комп'ютерний конвеєр: кожна команда (у випадку з кондитерською фабрикою - торт) перед остаточним виконанням проходить кілька кроків обробки.

Повернемося до нашого конвеєру, зображеному на рис. 2.3. Припустимо,

що час циклу у цієї машини 2 ні. Тоді для того, щоб одна команда пройшла через весь конвеєр, потрібно 10 ні. На перший погляд може здатися, що такий комп'ютер може виконувати 100 млн команд в секунду, в дійсності ж швидкість його роботи набагато вище. Під час кожного циклу (2 цієї статті не) завершується виконання однієї нової команди, тому машина виконує не 100 млн, а 500 млн команд в секунду.

Конвеєри дозволяють знайти компроміс між часом очікування (як-

до часу займає виконання однієї команди) і пропускною спроможністю процесора (скільки мільйонів команд в секунду виконує процесор). Якщо час циклу становить Т ні, а конвеєр містить п стадій, то час очікування складе пт ні, а пропускна здатність - 1000 / Т млн команд в секунду.

суперскалярні архітектури

Один конвеєр - добре, а два - ще краще. Одна з можливих схем процесора з подвійним конвеєром показана на рис. 2.4. В основі розробки лежить конвеєр, зображений на рис. 2.3. Тут загальний відділ виклику команд бере з пам'яті відразу по дві команди і завадить кожну з них в один з конвеєрів. Кожен конвеєр містить АЛУ для паралельних операцій. Щоб виконуватися паралельно, дві команди не повинні конфліктувати при використанні ресурсів (наприклад, регістрів), і жодна з них не повинна залежати від результату виконання іншої. Як і у випадку з одним конвеєром, або компілятор повинен стежити, щоб не виникало неприємних ситуацій (наприклад, коли апаратне забезпечення видає некоректні результати, якщо команди несумісні), або ж конфлікти виявляються і усуваються прямо під час виконання команд завдяки використанню додаткового апаратного забезпечення.

Спочатку конвеєри (як подвійні, так і одинарні) використовувалися тільки

в комп'ютерах RISC. У 386-го і його попередників їх не було. Конвеєри в процесорах компанії Intel з'явилися тільки починаючи з 486-ї моделі.486-й процесор містив один конвеєр, a Pentium - два конвеєра з п'яти стадій. Схожа схема зображена на рис. 2.4, але поділ функцій між другою і третьою стадіями (вони називалися декодування 1 і декодування 2) було трохи іншим. Головний конвеєр (u-конвеєр) міг виконувати довільні команди. Другий конвеєр (v-конвеєр) міг виконувати тільки прості команди з цілими числами, а також одну просту команду з плаваючою точкою (FXCH).

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

з'явилося завдяки другому конвеєру. Перехід до чотирьох конвеєрів можливий, але це вимагало б створення громіздкого апаратного забезпечення (відзначимо, що комп'ютерники, на відміну від фольклористів, не вірять в щасливе число три). Замість цього використовується інший підхід. Основна ідея - один конвеєр з великою кількістю функціональних блоків, як показано па рис. 2.5. Pentium II, наприклад, має подібну структуру (детально ми розглянемо його в розділі 4). У 1987 році для позначення

цього підходу був введений термін суперскалярна архітектура. Однак подібна ідея знайшла втілення ще більше 30 років тому в комп'ютері CDC 6600. CDC 6600 викликав команду з пам'яті кожні 100 ні і поміщав її в один з 10 функціональних блоків для паралельного виконання. Поки команди виконувалися, центральний процесор викликав таку команду. Відзначимо, що стадія 3 випускає команди значно швидше, ніж стадія 4 здатна їх виконувати. Якби стадія 3 випускала команду кожні 10 ні, а всі функціональні блоки виконували б свою роботу також за 10 ні, то на четвертій стадії завжди функціонував би тільки один блок, що зробило б саму ідею конвеєра безглуздою. Насправді більшості функціональних блоків четвертої стадії для виконання команди потрібно значно більше часу, ніж займає один цикл (це блоки доступу до пам'яті і блок виконання операцій з плаваючою точкою). Як видно з рис. 2 5, на четвертій стадії може бути кілька АЛУ.

3. Паралелізм на рівні процесорів

Попит на комп'ютери, що працюють всі з більш і більш високою швидкістю, не припиняється. Астрономи хочуть з'ясувати, що сталося в першу мікросекунду після великого вибуху, економісти хочуть змоделювати всю світову економіку, підлітки хочуть грати в 3D інтерактивні ігри зі своїми віртуальними друзями через Інтернет. Швидкість роботи процесорів підвищується, але у них постійно виникають проблеми з швидкістю передачі інформації, оскільки швидкість поширення електромагнітних хвиль в мідних проводах і світла в оптико-волоконних кабелях як і раніше залишається 20 см / нс, незалежно від того, наскільки розумні інженери компанії Intel. Крім того, чим швидше працює процесор, тим сильніше він нагревается1, і потрібно оберігати його від перегріву.

Паралелізм на рівні команд допомагає в якійсь мірі, але конвеєри

і суперскалярна архітектура зазвичай збільшують швидкість роботи всього лише в 5-10 разів. Щоб поліпшити продуктивність в 50, 100 і більше разів, потрібно розробляти комп'ютери з декількома процесорами. Нижче ми ознайомимося з пристроєм таких комп'ютерів.

векторні комп'ютери

Багато задач в фізичних і технічних науках містять вектори, в іншому випадку вони мали б дуже складну структуру. Часто одні і ті ж обчислення виконуються над різними наборами даних в один і той же час. Структура цих програм дозволяє підвищувати швидкість роботи завдяки паралельному виконанню команд. Існує два методи, які використовуються для швидкого виконання великих наукових програм. Хоча обидві схеми у багатьох відношеннях схожі, одна з них вважається розширенням одного процесора, а інша - паралельним комп'ютером.

Масивно-паралельний процесор (array processor) складається з великого

числа подібних процесорів, які виконують одну й ту ж послідовність команд стосовно до різних наборів даних. Першим в світі таким процесором був ILLIAC IV (Університет Іллінойсу). Він зображений на рис. 2.6. Спочатку передбачалося сконструювати машину, що складається з чотирьох секторів, кожен з яких містить грати 8x8 елементів процесор / пам'ять. Для кожного сектора був один блок контролю. Він розсилав команди, які виконувалися усіма процесорами одночасно, при цьому кожен процесор використовував свої власні дані зі своєї власної пам'яті (завантаження даних відбувалася під час ініціалізації). Через дуже високу вартість був побудований тільки один такий сектор, але він міг виконувати 50 млн. Операцій з плаваючою крапкою в секунду. Якби при створенні машини використовувалося чотири сектори, і вона могла б виконувати 1 млрд. Операцій з плаваючою крапкою в секунду, то потужність такої машини в два рази перевищувала б потужність комп'ютерів усього світу.

Для програмістів векторний процесор (vector processor) дуже схожий на

масивно-паралельний процесор (array processor). Як і масивно-паралельний процесор, він дуже ефективний при виконанні послідовності операцій над парами елементів даних. Але, на відміну від першого (array processor), всі операції додавання виконуються в одному блоці підсумовування, який має конвеєрну структуру. Компанія Cray Research, засновником якої був Сеймур Крей, випустила багато векторних процесорів, починаючи з моделі Cray-1 (1974) і до цього дня. Cray Research в даний час входить до складу SGI. Обидва типи процесорів працюють з масивами даних. Обидва вони виконують одні і ті ж команди, які, наприклад, попарно складають елементи для двох векторів. Але якщо у масивно-паралельного процесора (array processor) є стільки

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

Масивно-паралельні процесори (array processor) випускаються до цих пір, але займають незначну сферу комп'ютерного ринку, оскільки вони ефективні при вирішенні тільки таких завдань, які вимагають одночасного виконання одних і тих же обчислень над різними наборами даних. Масивно-паралельні процесори (array processor) можуть виконувати деякі операції набагато швидше, ніж векторні комп'ютери (vector computer), але вони вимагають більшої кількості апаратного забезпечення, і для них складно писати програми. Векторний процесор (vector processor), з іншого боку, можна додавати до звичайного процесору. В результаті ті частини програми, які можуть бути перетворені в векторну форму, виконуються векторних блоком, а інша частина програми - звичайним процесором.

Мультіпроцесори

Елементи масивно-паралельного процесора пов'язані між собою, оскільки їх роботу контролює один блок управління. Система декількох паралельних процесорів, які поділяють загальну пам'ять, називається мультипроцесором. Оскільки кожен процесор може записувати або зчитувати інформацію з будь-якої частини пам'яті, їх робота повинна узгоджуватися програмним забезпеченням, щоб не допустити будь-яких перетинів.

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

Неважко зрозуміти, що при наявності великої кількості швидко працюють про-

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

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

Мультікомпьютери

Мультіпроцесори з невеликим числом процесорів (<64) сконструювати досить легко, а от створення великих мультипроцессоров представляє деякі труднощі. Складність полягає в тому, щоб зв'язати всі процесори з пам'яттю. Щоб уникнути таких проблем, багато розробників просто відмовилися від ідеї розділеної пам'яті і стали створювати системи, що складаються з великого числа взаємопов'язаних комп'ютерів, у кожного з яких є своя власна пам'ять, а загальної пам'яті немає. Такі системи називаються мультікомпьютерамі. Процесори мультікомпьютера відправляють один одному послання (це дещо схоже на електронну пошту, але набагато швидше). Кожен комп'ютер не обов'язково зв'язувати з усіма іншими, тому зазвичай в якості топології використовуються Основна пам'ять 73 2D, 3D, дерева і кільця. Щоб послання могли дійти до місця призначення, вони повинні проходити через один або кілька проміжних комп'ютерів. Проте, час передачі займає всього кілька мікросекунд. Зараз створюються і запускаються в роботу мультікомпьютери, що містять близько 10 000 процесорів. Оскільки мультипроцесори легше програмувати, а мультікомпьютери -конструіровать, з'явилася ідея створення гібридних систем, які поєднують в собі переваги обох видів машин. Такі комп'ютери представляють ілюзію розділеної пам'яті, при цьому в дійсності вона не конструюється і не вимагає особливих грошових витрат. Ми розглянемо мультипроцесори і мультікомпьютери докладніше в розділі 8.

 



Попередня   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   Наступна

Мови і сучасні багаторівневі машини | Сучасні багаторівневі машини | Модульне ОЗУ. | Шини інформаційного обміну. | Символьні термінали. | Символьне кодування інформації. | Інтегральні схеми. | комбінаційні схеми | арифметичні схеми | Засувки, тригери. |

загрузка...
© um.co.ua - учбові матеріали та реферати