Скільки прискорення дає гіперпотік? (теоретично)


38

Мені цікаво, що таке теоретична швидкість роботи з гіперпотокових процесорів. Якщо припустити 100% -ну паралелізацію і 0-зв’язок - два процесора дають прискорення 2. Що робити з гіпер-потоковим процесором?

Відповіді:


59

Як говорили інші, це повністю залежить від завдання.

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

введіть тут опис зображення

Це було взято з моєї магістерської роботи (наразі недоступна в Інтернеті).

Це показує відносне прискорення 1 алгоритмів відповідності рядків (кожен колір є різним алгоритмом). Алгоритми були виконані на двох чотирьохядерних процесорах Intel Xeon X5550 з гіперточуванням. Іншими словами: було 8 ядер, кожне з яких може виконати два апаратних потоки (= "гіпертоки"). Тому тест тестує прискорення до 16 потоків (що є максимальною кількістю одночасних потоків, яку може виконати ця конфігурація).

Два з чотирьох алгоритмів (синій і сірий) масштабують більш-менш лінійно по всьому діапазону. Тобто, це отримує вигоду від гіпертренування.

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

Причина? У цьому конкретному випадку це навантаження на пам'ять; Перші два алгоритми потребують більше пам'яті для обчислення і обмежуються продуктивністю основної шини пам'яті. Це означає, що поки один апаратний потік чекає пам’яті, інший може продовжувати виконання; основний випадок використання для апаратних потоків.

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


1 Тобто коефіцієнт прискорення 4 означає, що алгоритм працює в чотири рази швидше, як якщо б він був виконаний лише одним потоком. За визначенням, тоді кожен алгоритм, виконаний на одному потоці, має відносний коефіцієнт швидкості 1.


Найкраща відповідь :-)
Sklivvz

1
Які фактичні швидкості алгоритмів, побудовані на основі кількості ядер? Тобто, що коефіцієнт підсилення швидкості для найшвидшого алгоритму в цих тестах? Просто цікаво :).
crazy2be

@ crazy2be Для синьої лінії ( алгоритм Horspool ) час роботи триває від 4,16 секунди до 0,35 секунди з 16 нитками. Тож швидкість - 11,74. Однак це з гіпер-нарізкою. Коли побудовано графік проти кількості ядер, прискорення цього алгоритму становить 7,17 на 8 ядер.
Конрад Рудольф

5
Єдина проблема з цією відповіддю полягає в тому, що я можу підтвердити її лише один раз. Це приголомшливо об'єктивна відповідь на суб'єктивне запитання;)
Подорожник Гік


20

Проблема в тому, це залежить від завдання.

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

Крім того, кожен блок має різні швидкості. Тобто для обробки щось може знадобитися цілий математичний блок 3 циклу, але 64-бітове поділ з плаваючою комою може зайняти 7 циклів. (Це міфічні числа, не засновані ні на чому).

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

Однак будь-яке окреме завдання не використовує кожну одиницю виконання кожного моменту. Навіть розщеплення ниток може допомогти цілком.

Таким чином, теорія стає, роблячи вигляд, що є другий процесор, на ній може працювати інший потік, використовуючи наявні одиниці виконання, які не використовуються, скажімо, вашим перекодування аудіо, що становить 98% SSE / MMX, а блоки int і float повністю простою, крім деяких речей.

Для мене це має більше сенсу в одному процесорному світі, оскільки підробка другого процесора дозволяє потокам легше перетнути цей поріг з невеликим (якщо є) додатковим кодуванням для обробки цього підробленого другого процесора.

Чи допомагає це в основному світі 3/4/6/8, маючи процесор 6/8/12/16? Данно. Стільки? Залежить від задач, які є під рукою.

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

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


2
Хоча я шукав щось на кшталт "прискорення 1,7 часу", ця відповідь дуже приємна, оскільки це не ляпає чорно-білий погляд на цю проблему.
Михайло

@Mikhail: Справа в тому, що простого фактора немає - це залежить, як часто в житті :-).
sleske

4
Суть права. Хоча одна каламбура: немає апріорної причини, чому одне ядро ​​має більше користі від гіперточення, ніж декілька ядер. За неправильне завдання ні прибутку. За правильне завдання обидва отримують прибуток одним і тим же фактором.
Конрад Рудольф

@Konrad: Думаю, що питання, на яке я потрапляв, полягає в тому, що різниця між одним ядром і двома ядрами може бути більш цінною, ніж різниця між 4 і 8 або 2 і 4. Тобто, маючи друге ядро, для програми з низьким потоком може допомогти трохи більше.
geoffc

"Для погано завантаженої програми" - це важливий біт. Але реально, підтримка нитки більшості додатків погана, тому ви маєте бажання.
Конрад Рудольф

5

У мене є деякі анекдотичні докази, які слід додати до відповіді geoffc, що я фактично маю CPU Core i7 (4-ядерний) з гіперточенням і трохи пограв з перекодуваннями відео, що є завданням, яке вимагає великої кількості зв'язку та синхронізації, але має достатньо паралелізм, що ви можете ефективно повно завантажувати систему.

Мій досвід роботи з тим, скільки процесорів призначено для виконання завдання, як правило, з використанням 4-х "додаткових" ядер, рівних еквіваленту приблизно 1 додатковому процесорові вартості процесорної потужності. Додаткові 4 "гіперточені" ядра додають приблизно стільки ж корисної потужності процесора, що і від 3 до 4 "справжніх" ядер.

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

Єдиним реальним способом показати, чи справді це допомагає, було б одночасно виконати кілька різних тестів типу Integer / Floating Point / SSE в системі з увімкненою та вимкненою гіперрезінуванням та вимкнути, яка потужність обробки доступна в контрольованому середовище.


1
Ну зрозумілий момент - це залежно від програми. Я впевнений, що обчислювачі високої комунікації можуть бути прискорені, оскільки ядро ​​0 і 0-год ядра будуть спілкуватися через один і той же кеш, не використовуючи повільну ОЗУ.
Михайло

1
@Mikhail, тоді проблема полягає в тому, що якщо обом потокам потрібна велика кількість процесорної потужності, вони обидва будуть конкурувати за одні і ті ж ресурси, і їм буде набагато краще спілкуватися через будь-який кеш-пам'ять спільного кешу L3 (у i7 є кеш L1 та L2 на одне ядро ​​та спільний кеш L3) або навіть системну пам'ять і виконують свої завдання окремо. Це все масова вправа гойдалки та
кругообігу

3

Це дуже залежить від процесора та навантаження, як говорили інші.

Intel каже :

Виміряна продуктивність процесора MP Intel® Xeon® з технологією Hyper-Threading показує підвищення продуктивності до 30% на загальних орієнтирах серверних додатків для цієї технології

(Це здається мені трохи консервативним.)

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

Бульдозерна архітектура AMD може бути цікавою . Вони описують кожне ядро ​​як ефективно 1,5 ядра. Це свого роду екстремальне багатоядерне або субстандартне багатоядерне, залежно від того, наскільки ви впевнені в його ймовірній продуктивності. Цифри в цьому фрагменті говорять про прискорення коментарів між 0,5x та 1,5x.

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


1
ОС має переконатися, що потоки не блокують один одного :)
Михайло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.