багатопроцесорний, багатоядерний та гіперпотоковий


80

Хтось може порекомендувати мені деякі документи, щоб проілюструвати різницю між багатопроцесорним, багатоядерним та гіперпотоковим? Мене завжди бентежать ці відмінності та плюси / мінуси кожної архітектури в різних сценаріях.

EDIT: ось моє поточне розуміння після навчання в Інтернеті та вивчення коментарів інших; хтось може переглянути коментар, будь ласка?

  1. Я думаю, що гіперпотік - це найнижча технологія серед них, але дешева. Його основна ідея - дублікати регістрів для економії часу перемикання контексту;
  2. Багатопроцесор краще, ніж гіперпотік, але оскільки різні процесори знаходяться на різних мікросхемах, зв’язок між різними центральними процесорами має більшу затримку, ніж багатоядерний, а використання кількох мікросхем збільшує витрати та споживає більше енергії, ніж багатоядерний ;
  3. багатоядерний інтегрує всі центральні процесори на одному чіпі, тому затримка зв'язку між різними центральними процесорами значно зменшується в порівнянні з багатопроцесорними. Оскільки він використовує один мікросхем для вміщення всіх процесорів, він споживає менше енергії та є дешевшим, ніж багатопроцесорна система.

заздалегідь дякую, Джордж


Гіперпоточність не поступається. Це досить корисно, особливо для серверів. Від ILP зменшується віддача (зайняття процесора зайнятим шляхом перестановки послідовних інструкцій). Гіперпотік - це альтернатива посиленню паралелізму: безліч апаратних потоків виконуються без особливих витрат.
аміт

А як щодо інших моїх тверджень щодо багатоядерних та багатопроцесорних процесів, чи вважаєте ви мої аргументи правильними? Щось не так?
George2

1
@ George2 - Ваше редагування є дуже правдивим. У цьому вся ідея. :) Найкраще, що ви можете отримати на сервері, це, мабуть, багатоядерний багатопроцесорний процесор, але для звичайного використання багатоядерний найкращий постріл!
Богдан Костянтинеску,

Дякую Богдане, з Вашим підтвердженням я впевненіший! :-)
George2

Це жахливий опис гіперпотоків. Головне - відмовитись від певної продуктивності для кожного потоку, щоб отримати вищу загальну пропускну здатність, лише трохи додаткового обладнання в інтерфейсі невпорядкованого ядра. Дивіться це запитання та запитання про подібний абзац у прийнятій відповіді (до мого редагування, яке це виправило).
Пітер Кордес,

Відповіді:


86

Першою версією була Multi-CPU: у вас була б одна або кілька материнських плат з однією або кількома мікросхемами процесора. Основною проблемою тут було те, що центральним процесорам доведеться виставляти деякі свої внутрішні дані іншому центральному процесору, щоб вони не заважали їм.

Наступним кроком була гіперпоточність. Один чіп на материнській платі, але він мав деякі деталі двічі всередині, щоб він міг виконувати дві інструкції одночасно.

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

Суперкомп’ютери сьогодні є багатоядерними, багатоядерними: у них багато материнських плат, на яких зазвичай 2–4 процесори, кожен процесор багатоядерний і кожен має свою власну оперативну пам’ять.

[РЕДАКТУВАТИ] Ви в значній мірі правильно. Кілька незначних моментів:

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

  • Основна проблема багатопроцесорного процесора полягає в тому, що код, що працює на них, з часом отримає доступ до оперативної пам'яті. Є N процесорів, але лише одна шина для доступу до оперативної пам'яті. Отже, ви повинні мати певне обладнання, яке гарантує, що а) кожен процесор отримує достатній обсяг оперативної пам’яті, б) доступ до однієї і тієї ж частини оперативної пам’яті не викликає проблем та в) головне, що CPU 2 буде повідомлено коли CPU 1 пише на якусь адресу пам'яті, яку CPU 2 має у своєму внутрішньому кеші. Якщо цього не трапиться, CPU 2 із задоволенням використовуватиме кешоване значення, не враховуючи того, що воно застаріле

    Тільки уявіть, що у вас є завдання у списку, і ви хочете поширити їх на всі доступні процесори. Отже, CPU 1 отримає перший елемент зі списку та оновить покажчики. Процесор 2 зробить те саме. З міркувань ефективності обидва процесора не лише копіюють кілька байтів у кеш-пам’ять, але й цілий «рядок кешу» (яким би він не був). Припущення полягає в тому, що коли ви прочитаєте байт X, ви скоро прочитаєте і X + 1.

    Тепер обидва процесори мають у кеші копію пам'яті. Потім CPU 1 отримає наступний елемент зі списку. Без синхронізації кешу він не помітив би, що CPU 2 також змінив список, і він почне працювати з тим самим елементом, що і CPU 2.

    Це те, що ефективно робить багатопроцесорний процесор настільки складним. Побічні ефекти цього можуть призвести до продуктивності, яка гірша, ніж ви отримаєте, якби весь код працював лише на одному процесорі. Рішення було багатоядерним: Ви можете легко додати стільки проводів, скільки потрібно для синхронізації кеш-пам’яті; ви навіть можете скопіювати дані з одного кешу в інший (оновлюючи частини рядка кешу, не очищаючи і не перезавантажуючи його) і т. д. Або логіка кешу може переконатися, що всі процесори отримують однаковий рядок кешу, коли вони отримують доступ до однієї частини реальна оперативна пам’ять, просто блокуючи CPU 2 на кілька наносекунд, поки CPU 1 не внесе своїх змін.

[EDIT2] Основна причина, чому багатоядерність простіша за багатопроцесорну, полягає в тому, що на материнській платі ви просто не можете прокласти всі дроти між двома мікросхемами, які вам потрібні для ефективної синхронізації. Плюс сигнал проходить лише вершини 30 см / нс (швидкість світла; у дроті у вас зазвичай набагато менше). І не забувайте, що на багатошаровій материнській платі сигнали починають впливати один на одного (перехресні перешкоди). Нам подобається думати, що 0 - це 0 В, а 1 - 5 В, але насправді "0" - це щось між -0,5 В (перенапруження, якщо відпустити лінію з 1>> 0) і .5 В, а "1" - це все вище 0,8 В.

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


3
Ваше уявлення про гіперпотоковість може дещо вводити в оману, оскільки гіперпотокове "просто" імітує паралельне виконання декількох потоків - але в основному намагається поліпшити багатопотокову продуктивність за допомогою вбудованої логіки процесора.
JC Inacio

@jcinacio, чи покращує гіперпоточність продуктивність багатопроцесорності? Чому?
George2

@ Аарон, 1. Я відредагував свої поточні моменти у своєму оригінальному дописі після того, як дізнався у вас. Не могли б ви допомогти переглянути та прокоментувати, будь ласка? 2. Що означає "передавати деякі свої внутрішні дані іншому центральному процесору, щоб вони не заважали їм". у вашому дописі?
George2

@Aaron, ваша відповідь така відмінна, моє останнє запитання, чому, на вашу думку, багатоядерний процесор вирішує проблему синхронізації статусу процесора / чекає проблем з оперативною пам'яттю? Думаю, якщо логіка коду однакова, проблема синхронізації та очікування оперативної пам'яті все ще існує. Будь-які коментарі?
George2

1
@AmitP, будь ласка, зауважте, що надто широкі питання, як правило, відмовляються і закривають у програмістів, див. Що відбувається на Programmers.SE? Посібник із переповнення стека
gnat

4

Ви можете знайти кілька цікавих статей про двоядерний процесор, багатоядерність та гіперпотоковість на веб-сайті Intel або в короткій статті Єльського університету .

Сподіваюся, ви знайдете тут всю необхідну інформацію.


Богдане, я відредагував свої поточні моменти у своєму початковому дописі. Не могли б ви допомогти переглянути та прокоментувати, будь ласка? Я дізнався їх, прочитавши ваші рекомендовані посилання.
George2

@ George2 - Ваше редагування є дуже правдивим. У цьому вся ідея. :) Найкраще, що можна отримати на сервері - це, мабуть, багатоядерний багатопроцесорний процесор
Богдан Константинеску,

2
Обидва посилання порушені :(
rkachach

2

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

Мультипроцесори існують вже 30 років, але переважно в лабораторіях. Багатоядерний - це новий популярний мультипроцесор. Серверні процесори сьогодні реалізують гіперпотоки разом із багатопроцесорними процесорами.

Статті у Вікіпедії на ці теми є досить показовими.


Amit, 1. Я відредагував свої поточні моменти у своєму оригінальному дописі після того, як дізнався у вас. Не могли б ви допомогти переглянути та прокоментувати, будь ласка? 2. Що означає померти та розірвати у своєму дописі?
George2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.