Одноядерні процесори - Інформатика, програмування
2. Одноядерні процесори
Розглянемо їх з прикладу процесора Intel Pentium 1.
Основні відмінності від процесора 486:
а) Суперскалярна архітектура. Завдяки використанню суперскалярної архітектури процесор може виконувати 2 команди за 1 такт. Така можливість існує завдяки наявності двох конвеєрів – u- та v-. u-конвеєр - основний, виконує всі операції над цілими та речовими числами; v-конвеєр - допоміжний, виконує лише прості операції над цілими та частково над речовими. Щоб старі програми (486) повною мірою використовували можливості такої архітектури, необхідно було їх перекомпілювати. Pentium – перший CISC-процесор, який використовує багатоконвеєрну архітектуру.
б) 64-бітна шина даних. Дозволяє процесору Pentium за один шинний цикл обмінюватись удвічі більшим обсягом даних з оперативною пам'яттю, ніж 486 (при однаковій тактовій частоті).
г) Окреме кешування програмного коду та даних. У процесорах Pentium використовується кеш-пам'ять першого рівня (кеш L1) об'ємом 16 Кб, поділена на 2 сегменти: 8 Кб для даних та 8 Кб для інструкцій. Це покращує продуктивність та дозволяє робити подвійне кешування доступним частіше, ніж це було можливо раніше. Крім того, змінено механізм кешування.
д) Покращений блок обчислень з плаваючою комою (FPU).
е) Симетрична багатопроцесорна робота (SMP).
3. Перехід до двоядерних процесорів

Малюнок 2 – мікрофотографія одного з перших двоядерних процесорів
комп'ютер процесор одноядерний двоядерний
Перехід на двоядерну архітектуру обумовлений тим, що традиційні методи збільшення продуктивності практично вичерпали себе. Через рядтехнологічних проблем темпи нарощування тактових частот останнім часом помітно сповільнились. Наприклад, в останній рік перед появою двоядерних процесорів компанія Intel змогла наростити частоти CPU лише на 400 МГц, а конкуренти від AMD прискорилися всього на 200 МГц. Як бачимо, зростання тактових частот дається нелегко. Інші методи, такі як збільшення швидкості шини і розміру кеш-пам'яті, відчутного приросту продуктивності не дають.
Тому зрозуміло, чому саме впровадження двоядерних процесорів виявилося найбільш логічним кроком на шляху до нових вершин швидкодії та ознаменувало початок нової ери у розвитку процесорного ринку.
Що ж є двоядерний процесор? На перший погляд це просто два процесори, об'єднані в загальному корпусі. Але не все так просто. По-перше, потрібно розрізняти терміни «процесор» та «процесорне ядро». По-друге, існує проблема загальних ресурсів, доступ до яких потрібно розподіляти між двома ядрами. Якщо ж подивитися з погляду програмного забезпечення, то двоядерний процесор система розглядає як два незалежні. Зрозуміло, що двоядерний процесор здатний одночасно виконувати два потоки інструкцій, у той час як звичайний 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) – частку інструкцій, що виконуються паралельно.

Малюнок 3 - Виконання програмного коду на одноядерному процесорі
У разі застосування одноядерного процесора (рисунок 4) час, що витрачається на виконання всього програмного коду, становитиме:
У разі використання n-ядерного процесора (рисунок 1) час, що витрачається на виконання всього програмного коду, виявиться меншим за рахунок паралельного виконання команд P на n ядрах процесора і складе:

Оскільки приростом продуктивності в даному випадку можна вважати скорочення часу виконання програми при використанні багатоядерного процесора в порівнянні з часом виконання тієї ж програми при застосуванні одноядерного процесора, тобто t1/tn, отримаємо, що прирістпродуктивності складе:
(3.3)
Графічна залежність приросту продуктивності кількості ядер процесора показано малюнку 5.

Малюнок 4 - Виконання програмного коду на багатоядерному процесорі
Як видно з наведеної формули, приріст продуктивності у разі багатоядерної архітектури процесора великою мірою залежить від оптимізації додатка до багатоядерної архітектури, тобто від його здатності розпаралелюватись. Наприклад, навіть у разі, коли 90% програмного коду розпаралелюється на кілька виконавчих ядер, використання чотириядерного процесора дозволяє отримати лише триразовий приріст продуктивності порівняно з одноядерною архітектурою процесора.

Рисунок 5 - Залежність приросту продуктивності кількості ядер процесора