дає як дві незалежні. Зрозуміло, що двоядерний процесор здатний одночасно виконувати два потоки інструкцій, в той час як звичайний CPU робить обчислення строго по черзі. До цього вже була проведена спроба розділити виконувані інструкції - йдеться про технології Intel Hyper-Threading. Ось тільки в неї два В«віртуальнихВ» процесора майже у всьому поділяють між собою ресурси одного В«фізичногоВ» процесора (кеші, конвеєр, виконавчі пристрою). Практично всі ресурси загальні - і якщо вони вже зайняті одним з виконуються потоків, то другий буде змушений чекати їх звільнення.
По суті, принцип роботи процесора з Hyper-Threading схожий на принцип роботи багатозадачного операційної системи, тільки відбувається це не на програмному, а на апаратному рівні. Поділ потоку на дві частини, як правило, дозволяє ефективніше завантажити виконавчі пристрої процесора. І при цьому трохи полегшити операційній системі задачу імітації безлічі незалежних комп'ютерів на одному існуючому процесорі.
Повноцінний двоядерний процесор - Зовсім інша справа. У цьому випадку система визначає дійсно два В«чеснихВ» процесорних ядра. І приріст продуктивності при цьому становить вже не 10-20% (Середній показник для процесора з технологією Hyper-Threading), а всі 80-90% і навіть більше (природно, при використанні обох ядер). В принципі, двоядерний процесор являє собою SMP-систему (SMP - Symmetric MultiProcessing, симетрична многопроцессорная обробка; термін, що позначає систему з кількома рівноправними процесорами). По суті своїй він не відрізняється від звичайної двухпроцессорной системи, в якій встановлено два незалежних процесора. У результаті ми отримуємо всі переваги двопроцесорних систем без необхідності використання складних і дорогих двопроцесорних материнських плат.
Один із способів створити енергоефективний процесор - це перехід від одноядерної процесорної архітектури до многоядерной. Справа в тому, що багатоядерні процесори дозволяють підвищувати продуктивність саме за рахунок збільшення IPC, тобто кількості інструкцій програмного коду, оброблюваних за кожен такт роботи процесора. В ідеалі при переході від одноядерної архітектури процесора до двуядерной можна зберегти той же рівень продуктивності, знизивши тактову частоту кожного з ядер майже вдвічі. У реальності, звичайно, все трохи складніше - результат залежатиме від програми і його оптимізації до двоядерному процесору. Тобто, щоб додаток могло одночасно задіяти кілька процесорних ядер, воно повинне добре распараллелівать. Якщо ж програмний код написаний таким чином, що має на увазі тільки послідовне виконання інструкцій, від багатоядерності пуття не буде. Для того щоб продемонструвати, як саме масштабується продуктивність многоядерного процесора залежно від оптимізації програмного коду до многоядерной архітектурі, розглянемо наступний приклад. Мається багатоядерний процесор з кількістю ядер рівним n. Припустимо, що на цьому процесорі виконується програма, що включає N інструкцій програмного коду, причому S інструкцій цього коду може виконуватися тільки послідовно один за одним, а P (рівне N - S) інструкцій є програмно незалежними один від одного і можуть виконуватися одночасно на всіх ядрах процесора. Позначимо через s (рівне S/N) - частку інструкцій, виконуваних послідовно, а через p (рівне 1 - s) - частку інструкцій, виконуваних паралельно. br/>В
Рисунок 3 - Виконання програмного коду на одноядерному процесорі
У разі застосування одноядерного процесора (малюнок 4) час, що витрачається на виконання всього програмного коду, складе:
t1 = N/IPS (3.1)
У разі використання n-ядерного процесора (малюнок 1) час, що витрачається на виконання всього програмного коду, виявиться менше за рахунок паралельного виконання P команд на n ядрах процесора і становитиме:
(3.2)
Оскільки приростом продуктивності в даному випадку можна вважати скорочення часу виконання програми при використанні многоядерного процесора в порівнянні з часом виконання тієї ж програми при застосуванні одноядерного процесора, тобто t1/tn, отримаємо, що приріст продуктивності складе:
(3.3)
Графічна залежність приросту продуктивності від числа ядер процесора показана на рисунку 5.
В
Рисунок 4 - Виконання програмного коду на багатоядерному процесорі
Як видно з наведеної формули, приріст продуктивності у випадку многоядерной архітектури процесора у великій мірі залежить від оптимізації додатка до многоядерной архітектурі, тобто від його здатності распараллелівать. Наприклад, навіть у випадку, коли 90% програмного коду розпаралелюється на кілька виконавчих ядер, використання чотириядерного процесора дозволяє отримати тільки триразовий приріст продуктивності у порівнянні з одноядерної архітектурою процесора.
В
Рисунок 5 - Залежність приросту продуктивності від числа ядер процесора
Розглянутий приклад являє собою ідеальну ситу...