Інтернет Windows Android

І розглянемо, що буде в двох різних випадках. Універсальна сцена та об'єкти

Вступ. Комп'ютерна техніка розвивається швидкими темпами. Обчислювальні пристрої стають потужнішими, компактнішими, зручнішими, проте останнім часом підвищення продуктивності пристроїв стало великою проблемою. У 1965 році Гордон Мур (один із засновників Intel) дійшов висновку, що «кількість транзисторів, що розміщуються на кристалі інтегральної схеми, подвоюється кожні 24 місяці».

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

  • збільшилися струми витоку, внаслідок чого підвищилося тепловиділення та споживана потужність.
  • процесор став набагато швидше пам'яті. Продуктивність знижувалася через затримку звернення до оперативної пам'ятіта завантаження даних у кеш.
  • виникає таке поняття як "фон-нейманське вузьке місце". Воно означає неефективність архітектури процесора під час виконання будь-якої програми.

Багатопроцесорні системи (як один із способів вирішення проблеми) не отримали широкого застосування, тому що вимагали дорогих і складних у виробництві багатопроцесорних материнських плат. Виходячи з цього, продуктивність підвищувалася іншими шляхами. Ефективною виявилася концепція багатопоточності - одночасна обробка кількох потоків команд.

Hyper-Threading Technology (HTT) або технологія надпотокової обробки даних, що дозволяє процесору на одному ядрі виконувати кілька програмних потоків. Саме HTT, на думку багатьох фахівців, стала передумовою для створення багатоядерних процесорів. Виконання процесором одночасно кілька програмних потоків називається паралелізмом на рівні потоків (TLP-thread-level parallelism).

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

1. Загальні поняття

Архітектура у сенсі – це опис складної системи, що з безлічі елементів.

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

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

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

Процесори Intel, що використовуються в IBM – сумісних ПК, налічують понад тисячу команд і відносяться до процесорів із розширеною системою команд – CISC-процесорів (CISC – Complex Instruction Set Computing).

1.1 Високопродуктивні обчислення. Паралелізм

Темпи розвитку обчислювальної технікилегко простежити: від ENIAC (перший електронний цифровий комп'ютер загального призначення) з продуктивністю кілька тисяч операцій за секунду до суперкомп'ютера Tianhe-2 (1000 трильйонів операцій із плаваючою комою за секунду). Це означає, що швидкість обчислень збільшилася в трильйон разів за 60 років. Створення високопродуктивних обчислювальних систем – одне з найскладніших науково-технічних завдань. При тому, що швидкість обчислень технічних засобівзросла лише кілька мільйонів разів, загальна швидкість обчислень зросла в трильйони разів. Цей ефект досягнуто рахунок застосування паралелізму усім стадіях обчислень. Паралельні обчислення вимагають пошуку раціонального розподілу пам'яті, надійних способів передачі та координації обчислювальних процесів.

1.2 Симетрична мультипроцесорність

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

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

З огляду на перераховані вище особливості, SMP-системи застосовується виключно у науковій сфері, промисловості, бізнесі, вкрай рідко у робочих офісах. Крім високої вартості апаратної реалізації, такі системи потребують дуже дорогого та якісного програмного забезпечення, що забезпечує багатопоточне виконання завдань. Звичайні програми (ігри, текстові редактори) не будуть ефективно працювати в SMP-системах, так як у них не передбачена така міра розпаралелювання. Якщо адаптувати будь-яку програму для SMP-системи, вона стане вкрай неефективно працювати на однопроцессорных системах, що призводить до необхідності створення кількох версій однієї й тієї програми для різних систем. Винятком є, наприклад, програма ABLETON LIVE (призначена для створення музики та підготовка Dj-сетів), що має підтримку мультипроцесорних систем. Якщо запустити звичайну програму на мультипроцесорній системі, вона все-таки працюватиме трохи швидше, ніж в однопроцесорній. Це з так званим апаратним перериванням (зупинка програми обробки ядром), яке виконується іншому вільному процесорі.

SMP-система (як і будь-яка інша, заснована на паралельних обчисленнях), пред'являє підвищені вимоги до такого параметра пам'яті, як смуга пропускання шини пам'яті. Це часто обмежує кількість процесорів у системі (сучасні SMP-системи ефективно працюють аж до 16 процесорів).

Оскільки у процесорів загальна пам'ять, виникає необхідність раціонального її використання та узгодження даних. У мультипроцесорної системі виходить так, що кілька кешів працюють для ресурсу пам'яті, що розділяється. Сache coherence (когерентність кешу) – властивість кеша, що забезпечує цілісність даних, що зберігаються в індивідуальних кешах для ресурсу, що розділяється. Це поняття- окремий випадок поняття когерентності пам'яті, де кілька ядер мають доступ до загальної пам'яті (повсюдно зустрічається в сучасних багатоядерних системах). Якщо описати дані поняття загалом, то картина буде такою: той самий блок даних може бути завантажений у різні кеші, де дані обробляються по-різному.

Якщо не буде використано жодних сповіщень про зміну даних, виникне помилка. Когерентність кешу покликана для вирішення таких конфліктів та підтримки відповідності даних у кешах.

SMP-системи є підгрупою MIMD (multi in-struction multi data - обчислювальна система з множинним потоком команд та множинним потоком даних) класифікації обчислювальних систем за Флінном (професор Стенфордського університету, співзасновник Palyn Associates). Відповідно до цієї класифікації, майже всі різновиди паралельних систем можна зарахувати до MIMD.

Поділ багатопроцесорних систем на типи відбувається з урахуванням поділу за принципом використання пам'яті. Цей підхід дозволив розрізнити такі важливі типи

багатопроцесорних систем - multiprocessors (мультипроцесорні системи із загальною пам'яттю, що розділяється) і multicomputers (системи з роздільною пам'яттю). Загальні дані, які використовуються при паралельних обчисленнях, вимагають синхронізації. Завдання синхронізація даних – одна з найважливіших проблем, і її вирішення розробки багатопроцесорних і багатоядерних і, відповідно, необхідного програмного забезпеченняє пріоритетним завданням інженерів та програмістів. Загальний доступ до даних може бути зроблений за фізичного розподілу пам'яті. Цей підхід називається неоднорідним доступом до пам'яті (non-uniform memory access або NUMA).

Серед цих систем можна виділити:

  • Системи де тільки індивідуальна кеш-пам'ять процесорів використовується для представлення даних (cache-only memory architecture).
  • Системи із забезпеченням когерентності локальних кешів для різних процесорів (cache-coherent NUMA).
  • Системи із забезпеченням загального доступудо індивідуальної пам'яті процесорів без на апаратному рівні когерентності кеша (non-cache coherent NUMA).

Спрощення проблеми створення мультипроцесорних систем досягається використанням розподіленої спільної пам'яті (distributed shared memory), проте цей спосіб призводить до значного підвищення складності паралельного програмування.

1.3 Одночасна багатопоточність

Виходячи з усіх вищеперелічених недоліків симетричної мультипроцесорності, має сенс розробка та розвиток інших способів підвищення продуктивності. Якщо проаналізувати роботу кожного окремого транзистора в процесорі, можна звернути увагу цікавий факт– за виконання більшості обчислювальних операцій задіяні далеко ще не всі компоненти процесора (згідно з останніми дослідженнями – близько 30% всіх транзисторів). Таким чином, якщо процесор виконує, скажімо, нескладну арифметичну операцію, то більшість процесора простоює, отже, її можна використовувати для інших обчислень. Так, якщо в даний момент процесор виконує речові операції, то у вільну частину можна завантажити цілу арифметичну операцію. Щоб збільшити навантаження на процесор, можна створити спекулятивне (або випереджувальне) виконання операцій, що потребує великого ускладнення апаратної логіки процесора. Якщо програмі заздалегідь визначити потоки (послідовності команд), які можуть виконуватися незалежно друг від друга, це помітно спростить завдання ( даний спосіблегко реалізується на апаратному рівні). Ця ідея, що належить Діну Тулсену (розроблена ним 1955 р в університеті Вашингтона), отримала назву одночасної багатопоточності (simul-taneous multithreading). Пізніше вона була розвинена компанією Intelпід назвою гіперпоточності (hyper threading). Так, один процесор, який виконує безліч потоків, сприймається операційною системою Windows як кілька процесорів. Використання цієї технології знову-таки вимагає відповідного рівня програмного забезпечення. Максимальний ефект застосування технології багатопоточності становить близько 30%.

1.4 Багатоядерність

Технологія багатопоточності – реалізація багатоядерності на програмному рівні. Подальше збільшення продуктивності, як завжди, потребує змін в апаратній частині процесора. Ускладнення систем та архітектур не завжди виявляється дієвим. Існує зворотна думка: "все геніальне - просто!". Справді, щоб підвищити продуктивність процесора зовсім необов'язково підвищувати його тактову частоту, ускладнювати логічну та апаратну складові, тому що достатньо лише провести раціоналізацію та доопрацювання існуючої технології. Такий спосіб дуже вигідний - не потрібно вирішувати проблему підвищення тепловиділення процесора, розробку нового дорогого обладнання для виробництва мікросхем. Цей підхід і було реалізовано рамках технології багатоядерності – реалізація одному кристалі кількох обчислювальних ядер. Якщо взяти вихідний процесор і порівняти приріст продуктивності при реалізації кількох способів підвищення продуктивності, очевидно, що застосування технології багатоядерності є оптимальним варіантом.

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

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

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

Ще буквально 6-7 років тому, про багатоядерність процесорів практично не було чути. Ні, багато ядерні процесоривід тієї ж компанії IBM існували і раніше, але поява першого двоядерного процесора для настільних комп'ютерів, відбулося лише у 2005 році, і називався цей процесор Pentium D. Також, у 2005 році був випущений двоядерник Opteron від AMD, але для серверних систем.

У цій статті ми не будемо докладно вникати в історичні факти, а обговорюватимемо сучасні багатоядерні процесори як одну з характеристик CPU. А головне – нам потрібно розібратися з тим, що дає ця багатоядерність у плані продуктивності для процесора і для нас з вами.

Збільшення продуктивності рахунок багатоядерності

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

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


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

І розглянемо, що ж буде у двох різних випадках:

а) Процесор одноядерний.Оскільки два потоки виконуються в нас одночасно, потрібно створити для користувача (візуально) цю саму одночасність виконання. Операційна система робить хитро:відбувається перемикання між виконанням цих двох потоків (ці перемикання миттєві і час йде в мілісекундах). Тобто система трохи «виконувала» оновлення, потім різко переключилася на сканування, потім назад на оновлення. Таким чином, для нас із вами складається враження одночасного виконання цих двох завдань. Але що ж губиться? Звісно ж, продуктивність. Тому розглянемо другий варіант.

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

Чи потрібні багатоядерні процесори? Повсякденна резонність

При виборі процесораДля комп'ютера (а саме при міркуванні про кількість ядер) слід визначити основні види завдань, які він виконуватиме.

Для покращення знань у сфері комп'ютерного заліза, можете ознайомитися з матеріалом про сокети процесорів .

Точкою старту можна назвати двоядерні процесори, тому що немає сенсу повертатися до одноядерних рішень. Але й двоядерні процесори бувають різні. Це може бути не «найсвіжіший» Celeron, а можливо Core i3 на Ivy Bridge, так само і у АМД - Sempron або Phenom II. Звичайно, за рахунок інших показників продуктивність у них дуже відрізнятиметься, тому потрібно дивитися на все комплексно і зіставляти багатоядерність з іншими характеристиками процесорів.

Наприклад, у Core i3 на Ivy Bridge, є технологія Hyper-Treading, що дозволяє обробляти 4 потоки одночасно (операційна система бачить 4 логічних ядра, замість двох фізичних). А той самий Celeron таким не похвалиться.

Але повернемося безпосередньо до роздумів щодо необхідних завдань. Якщо комп'ютер потрібний для офісної роботи та серфінгу в інтернеті, то йому з головою вистачить двоядерного процесора.

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


На сьогоднішній день, ті ж 8 ядерні процесори AMD, Для ігор надмірна, надмірна саме кількість ядер, а ось продуктивність не дотягує, але у них є інші переваги. Ці самі 8 ядер дуже сильно допоможуть у завданнях, де необхідна потужна роботаз якісним багатопотоковим навантаженням. До такої можна віднести, наприклад рендеринг (прорахунок) відео, або серверні обчислення. Тому таких завдань необхідні 6, 8 і більше ядер. Та й незабаром ігри зможуть якісно вантажити 8 і більше ядер, так що в перспективі все дуже райдужно.

Не варто забувати про те, що залишається маса завдань, що створюють однопоточне навантаження. І варто поставити собі запитання: чи потрібен мені цей 8-ми ядерник чи ні?

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

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

Підвищення тактової частоти;

Розміщення однією мікросхемою двох процесорів;

Введення нових функціональних блоків;

Подовження конвеєра;

Використання багатопоточності.

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

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

Введення нових функціональних блоків також не становить складності, але тут важливо дотриматися балансу. Який сенс у десятці блоків АЛУ, якщо мікросхема не може видавати команди на конвеєр із такою швидкістю, що дозволяє завантажити всі ці блоки?

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

Нарешті, можна продати багатопоточність. Перевага цієї технології полягає у введенні додаткового програмного потоку, що дозволяє ввести в дію ті апаратні ресурси, які інакше простоювали б. За результатами експериментальних досліджень розробники Intel з'ясували, що збільшення площі мікросхеми на 5% при реалізації багатопоточності для багатьох програм дає приріст продуктивності на 25%. Першим процесором Intel з підтримкою багатопоточності став Хеон 2002 року. Згодом, починаючи з частоти 3,06 ГГц, багатопоточність була впроваджена в лінійку Pentium 4. Intel називає реалізацію багатопоточності Pentium 4 гіперпоточністю (hyperthreading).

Розібравшись з теорією багатопоточності, розглянемо практичний приклад - Pentium 4. Уже етапі розробки цього процесора інженери Intel продовжували роботу над підвищенням його швидкодії без внесення змін у програмний інтерфейс. Розглядалося п'ять найпростіших способів:
1. Підвищення тактової частоти.
2. Розміщення однією мікросхемі двох процесорів.
3. Запровадження нових функціональних блоків.
1. Подовження конвеєра.
2. Використання багатопоточності.
Найочевидніший спосіб підвищення швидкодії у тому, щоб підвищити тактову частоту, не змінюючи інші параметри. Як правило, кожна наступна модель процесора має більш високу тактову частоту, ніж попередня. На жаль, при прямолінійному підвищенні тактової частоти розробники стикаються із двома проблемами: збільшенням енергоспоживання (що актуально для портативних комп'ютерів та інших обчислювальних пристроїв, що працюють на акумуляторах) та перегрівом (що потребує створення більш ефективних тепловідводів).
Другий спосіб - розміщення на мікросхемі двох процесорів - порівняно простий, але він пов'язаний із подвоєнням площі, яку займає мікросхема. Якщо кожен процесор забезпечується власною кеш-пам'яттю, кількість мікросхем на пластині зменшується вдвічі, але це означає подвоєння витрат за виробництво. Якщо обох процесорів передбачається загальна кеш-пам'ять, значного збільшення займаної площі вдається уникнути, проте у разі виникає інша проблема - обсяг кеш-пам'яті у перерахунку кожен процесор зменшується вдвічі, але це неминуче позначається продуктивності. Крім того, якщо професійні серверні програми здатні повністю задіяти ресурси кількох процесорів, то у звичайних настільних програмах внутрішній паралелізм розвинений значно меншою мірою.
Введення нових функціональних блоків також не становить складності, але тут важливо дотриматися балансу. Який сенс у десятці блоків АЛУ, якщо мікросхема не може видавати команди на конвеєр із такою швидкістю, що дозволяє завантажити всі ці блоки?
Конвеєр зі збільшеним числом ступенів, здатний розділяти завдання на дрібніші сегменти та обробляти їх за короткі періоди часу, з одного боку, підвищує продуктивність, з іншого, посилює негативні наслідки невірного прогнозування переходів, кеш-промахів, переривань та інших подій, що порушують нормальний хід обробки команд у процесорі. Крім того, щоб повністю реалізувати можливості розширеного конвеєра, необхідно підвищити тактову частоту, а це, як ми знаємо, призводить до підвищеного енергоспоживання та тепловіддачі.
Нарешті, можна продати багатопоточність. Перевага цієї технології полягає у введенні додаткового програмного потоку, що дозволяє ввести в дію ті апаратні ресурси, які інакше простоювали б. За результатами експериментальних досліджень розробники Intel з'ясували, що збільшення площі мікросхеми на 5% при реалізації багатопоточності для багатьох програм дає приріст продуктивності на 25%. Першим процесором Intel із підтримкою багатопоточності став Xeon 2002 року. Згодом, починаючи з частоти 3,06 ГГц, багатопоточність була впроваджена в лінійку Pentium 4. Intel називає реалізацію багатопоточності Pentium 4 гіперпоточністю (hyperthreading).
Основний принцип гіперпоточності – одночасне виконання двох програмних потоків (або процесів – процесор не відрізняє процеси від програмних потоків). Операційна система розглядає гіперпотоковий процесор Pentium 4 як двопроцесорний комплекс із загальними кешами та основною пам'яттю. Планування операційної системи виконує для кожного програмного потоку окремо. Таким чином, в один і той же час можуть виконуватися дві програми. Наприклад, поштова програмаможе надсилати або приймати повідомлення в фоновому режимі, поки користувач взаємодіє з інтерактивним додатком - тобто демон і програма користувача виконуються одночасно, начебто системі доступно два процесори.
Прикладні програми, що передбачають можливість виконання у вигляді кількох програмних потоків, можуть задіяти обидва «віртуальні процесори». Наприклад, програми редагування відеоданих зазвичай дозволяють користувачам застосовувати фільтри до всіх кадрів. Такі фільтри коригують яскравість, контраст, колірний баланс та інші характеристики кадрів. У такій ситуації програма може призначити один віртуальний процесор обробки парних кадрів, а інший - обробки непарних. При цьому два процесори працюватимуть абсолютно незалежно один від одного.
Оскільки програмні потоки звертаються до тих самих апаратних ресурсів, необхідна координація цих потоків. У контексті гіперпоточності розробники Intel виділили чотири корисні стратегії управління спільним споживанням ресурсів: дублювання ресурсів, а також жорстке, порогове та повне поділ ресурсів. Розглянемо ці стратегії.
Почнемо з дублювання ресурсів (resource duplication). Як відомо, деякі ресурси для організації програмних потоків дублюються. Наприклад, оскільки кожному програмному потоку потрібно індивідуальне управління, потрібен другий лічильник команд. Крім того, необхідно ввести другу таблицю відображення архітектурних регістрів (ЕАХ, ЕВХ тощо) на фізичні регістри; аналогічно, дублюється контролер переривань, оскільки обробка переривань для кожного потоку проводиться індивідуально.
Далі слідує методика жорсткого поділуресурсів (partitioned resource sharing) між програмними потоками. Наприклад, якщо у процесорі передбачена черга між двома функціональними ступенями конвеєра, то половину слотів можна віддавати потоку 1, іншу половину - потоку 2. Поділ ресурсів легко реалізується, не веде до дисбалансу та забезпечує повну незалежність програмних потоків один від одного. При повному поділі всіх ресурсів один процесор фактично перетворюється на два. З іншого боку, може скластися така ситуація, за якої один програмний потік не використовує ресурси, які могли б стати в нагоді другому потоку, але щодо яких він не має повноважень доступу. В результаті, ресурси, які в іншій ситуації могли б бути задіяні, простоюють.
Протилежність жорсткого поділу – повний поділ ресурсів (full resource sharing). У цій схемі до потрібних ресурсів може отримати доступ будь-який програмний потік, а вони обслуговуються в порядку надходження запитів на доступ. Розглянемо ситуацію, в якій швидкий потік, що складається переважно з операцій складання та віднімання, співіснує з повільним потоком, що реалізує операції множення та поділу. Якщо команди викликаються з пам'яті швидше, ніж виконуються операції множення та поділу, кількість команд, викликаних у рамках повільного потоку та поставлених у чергу на конвеєр, поступово зростатиме. Зрештою, ці команди заповнять чергу, в результаті швидкий потік через брак місця в ній зупиниться. Повний поділ ресурсів вирішує проблему неоптимального витрачання спільних ресурсів, але створює дисбаланс їх споживання - один потік може уповільнити чи зупинити інший.
Проміжна схема реалізується у межах порогового поділу ресурсів (threshold resource sharing). Відповідно до цієї схеми будь-який програмний потік може динамічно отримувати певний (обмежений) обсяг ресурсів. Стосовно реплікованих ресурсів цей підхід забезпечує гнучкість без загрози простою одного з програмних потоків через неможливість отримання ресурсів. Якщо, наприклад, заборонити кожному з потоків займати більше 3/4 черги команд, підвищене споживання ресурсів повільним потоком не завадить виконання швидкого.
Модель гіперпоточності Pentium 4 поєднує різні стратегії поділу ресурсів. Таким чином, робиться спроба вирішити всі проблеми, пов'язані з кожною стратегією. Дублювання реалізується щодо ресурсів, доступ яких постійно потрібен обох програмним потокам (зокрема, щодо лічильника команд, таблиці відображення регістрів і контролера переривань). Дублювання цих ресурсів збільшує площу мікросхеми лише на 5 % - погодьтеся, цілком розумна плата за багатопоточність. Ресурси, доступні в такому обсязі, що практично виключається можливість їх захоплення одним потоком (наприклад, рядки кешу), розподіляються динамічно. Доступ до ресурсів, що контролюють роботу конвеєра (зокрема, його численні черги), поділяється – кожному програмному потоку надається половина слотів. Головний конвеєр архітектури Netburst, реалізованої Pentium 4, зображений на рис. 8.7; білі та сірі області на цій ілюстрації позначають механізм розподілу ресурсів між білим та сірим програмними потоками.
Як бачимо, всі черги на цій ілюстрації розділені – кожному програмному потоку виділяється по половині слотів. Жоден із програмних потоків неспроможна обмежити роботу іншого. Блок розподілу та заміни також поділяється. Ресурси планувальника поділяються динамічно, але на основі якогось порогового значення - таким чином, жоден із потоків не може зайняти всі слоти черги. Для решти щаблів конвеєра має місце повний поділ.
Втім, із багатопоточністю не все так просто. Навіть така прогресивна методика має недоліки. Жорстке поділ ресурсів пов'язані з серйозними витратами, тоді як динамічний поділ, особливо з урахуванням порогових величин, вимагає відстежувати споживання ресурсів на етапі виконання. Крім того, в деяких випадках програми значно краще працюють без багатопоточності, ніж із нею. Припустимо, наприклад, що з двох програмних потоків для нормального функціонування кожному їх потрібно 3/4 кеша. Якби вони виконувалися по черзі, кожен показав би достатню ефективність при невеликій кількості кеш-промахів (як відомо, пов'язаних із додатковими витратами). У разі паралельного виконання кеш-промахів у кожного було б значно більше, і кінцевий результат виявився б гіршим, ніж без багатопоточності.
Додаткові відомості про механізм багатопоточності РепПіт 4 можна отримати в .

Багатоядерністю процесорів нині нікого не здивуєш. Навпаки, всі намагаються щоб їх комп'ютер підтримував якнайбільше ядер, а отже швидше працював, і це правильно.
Якщо торкатися саме процесорів, то вже давно на ринку зустрічаються лише два виробника – це Intel та AMD. І якщо другі розповідають про свої 8ми і 10-ядерні процесори (маючи на увазі їх багато, а значить вони потужніші), то перші мають по 2 і 4 ядра, але роблять акцент на свої потоки (не потрібно писати гнівних коментарів що ядер буває і більше тому тут і далі описуються процесори для домашнього використання).

І якщо подивитися на порівняльні графіки продуктивності процесорів, то Ви можете побачити, що 4-ядерний процесор (не всі) від Intel обганятиме 8-ядерний від AMD. Чому так? Адже 4 менше ніж 8, а отже має бути слабшим... Але якщо копнути глибше (не прямий до кешів, частотою, шиною тощо), то можна побачити одне цікаве слово, яким часто описують процесори Intel - підтримка Hyper-threading.

Технологія Hyper-threading ("гіпертрендинг" у народі) була винайдена Intel`ом і використовується тільки в їх процесорах (не у всіх). Я не особливо глибоко вдаватися в її подробиці, якщо хочете, то можете почитати про неї на . Дана технологія дозволяє розділяти кожне ядро ​​надвоє і в результаті замість одного фізичного, ми маємо два логічні (або віртуальні) і операційна система Windowsдумає, що встановлено два замість одного.

Як дізнатися скільки потоків у процесорі?

Якщо Ви хочете дізнатися про конкретний процесор, то найчастіше в описі в магазинах вказують підтримку Hyper-threading або вставляючи це словосполучення або просто абревеатуру HT. Якщо ж немає такого опису, то завжди можна скористатися найправдивішою інформацією на офіційній сторінці Intel http://ark.intel.com/ru/search/advanced/?s=t&HyperThreading=true
Рекомендую користуватися тільки цією інформацією, бо вона найточніша.

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

Запускаєте будь-яким зручним способом(найпростіше поєднання гарячих клавіш Ctrl + Shift + Esc) перебуваючи в будь-якому місці (хоч читаючи цю статтю) і, якщо у Вас Windows 7, перейдіть у вкладку Швидкодія.


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

Якщо у вас Windows 8, 8.1 або 10, то такої вкладки не буде, зате є продуктивність.


Тут я виділив, куди треба звернути увагу. До речі, я недаремно клікнув за цим графіком правою кнопкою миші, тому що якщо вибрати пункт Логічні процеси, то графік зміниться і буде схожим на той, що у Windows 7, тобто. буде 8 "квадратиків" та графіками завантаженості по кожному ядру.
Якщо у Вас зворотний малюнок, тобто. відображається не один, а кілька графіків, значить якраз і обраний цей пункт у властивостях самого графіка.

Очевидно є ще кілька методів того, а в даному випадку потоків.

Наприклад, можна викликати властивість системи (поєднання клавіш Win + R і вводимо systeminfo) і побачити там.