Математичний співпроцесор. Навіщо він потрібний? Функції та принципи роботи математичного співпроцесора Співпроцесори для виконання будь-яких вузькоспеціалізованих обчислень

Важливою частиною архітектури мікропроцесорів Intel є наявність пристрою для обробки числових даних у форматі з плаваючою точкою, що називається математичним співпроцесором. Архітектура комп'ютерів з урахуванням мікропроцесорів спочатку спиралася виключно цілочисленну арифметику. Зі зростанням мощі стали з'являтися пристрої обробки чисел з плаваючою точкою. В архітектурі сімейства мікропроцесорів Intel 8086 пристрій для обробки чисел з плаваючою точкою з'явився у складі комп'ютера на базі мікропроцесора i8086/88 та отримав назву математичний співпроцесор або просто співпроцесор. Вибір такої назви був обумовлений тим, що,

  • по-перше, цей пристрій був призначений для розширення обчислювальних можливостей основного процесора;
  • по-друге, воно було реалізовано у вигляді окремої мікросхеми, тобто його присутність була необов'язковою. Мікросхема співпроцесора для мікропроцесора i8086/88 мала назву i8087.

З появою нових моделей мікропроцесорів Intel удосконалювалися і співпроцесори, хоча їхня програмна модель залишилася практично незмінною. Як окремі (а, відповідно, необов'язкові у конкретній комплектації комп'ютера) пристрої, співпроцесори зберігалися до моделі мікропроцесора i386 і мали назву i287 і i387 відповідно. Починаючи з моделі i486, співпроцесор виконується в одному корпусі з основним мікропроцесором і таким чином є невід'ємною частиною комп'ютера.

Основні можливості математичного співпроцесора:

  • повна підтримка стандартів IEEE-754 та 854 на арифметику з плаваючою точкою. Ці стандарти описують як формати даних, із якими має працювати співпроцесор, і набір реалізованих їм функцій;
  • підтримка чисельних алгоритмів для обчислення значень тригонометричних функцій, логарифмів тощо;
  • обробка десяткових чисел з точністю до 18 розрядів, що дозволяє співпроцесор виконувати арифметичні операції без округлення над цілими десятковими числами зі значеннями до 10 18 ;
  • обробка дійсних чисел із діапазону ±3.37х10 -4932 …1.18х10 +4932 .

Форма представлення чисел з плаваючою точкою описана.

Загальна форма подання дійсних чисел передбачає можливість розміщення в розрядній сітці таких типів.

Тип чисел Знак Ступінь Ціле Мантіса
+∞ 0 11…11 1 00…00
позитивні
нормовані
0 00…01 — 11…10 1 00…00 — 11…11
позитивні ненормовані 0 00…00 0 00…00 — 11…11
0 0, 1 00…00 0 00…00
негативні ненормовані 1 00…00 0 00…00 — 11…11
негативні нормовані 1 00…01 — 11…10 1 00…00 — 11…11
-∞ 1 11…11 1 00…00
нечисла
(NaN - Not a number)
* 11…11 1 **…** ≠0

Числа простої та подвійної точності (float (DD ) та double (DQ ) відповідно) можуть бути представлені лише у нормованій формі. При цьому біт цілої частини числа є прихованим і має на увазі логічну 1. Інші 23 (52) розряду зберігають двійкову мантису числа.

Числа подвійної розширеної точності (long double (DT )) можуть бути представлені як у нормованій, так і ненормованій формі, оскільки біт цілої частини числа не є прихованим і може приймати значення як 0, так і 1.

Основним типом даних, якими оперує математичний співпроцесор, є 10-байтні дані (DT).

Програмна модель співпроцесора

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

У програмній моделі співпроцесора можна виділити три групи регістрів:

  • Вісім регістрів r0…r7 , що становлять основу програмної моделі співпроцесора стек співпроцесора . Розмір кожного регістра 80 бітів. Така організація й у пристрої, що спеціалізуються на обробці обчислювальних алгоритмів.
  • Три службові регістри:
    — регістр стану співпроцесора swr (Status Word Register – регістр слова стану) – відображає інформацію про поточний стан співпроцесора;
    - керуючий регістр співпроцесора cwr (Control Word Register - регістр слова управління) - керує режимами роботи співпроцесора;
    - Регістр тегів twr (Tags Word Register - слово тегів) - використовується для контролю за станом кожного з регістрів стека.
  • Два регістри покажчиків - даних dpr (Data Point Register) та команд ipr (Instruction Point Register). Вони призначені для запам'ятовування інформації про адресу команди, що викликала виняткову ситуацію та адресу її операнда. Ці покажчики застосовуються при обробці виняткових ситуацій (але не для всіх команд).

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

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

Структурно регістр swr складається з:

  • 6 прапорів виняткових ситуацій: PE, OE, UE, ZE, DE, IE.
    Винятки – це різновид переривань, за допомогою яких процесор інформує програму про деякі особливості її реального виконання. Співпроцесор також має здатність збудження подібних переривань у разі виникнення певних ситуацій (не обов'язково помилкових). Всі можливі винятки зведені до 6 типів, кожному з яких відповідає 1 біт в регістрі swr . Програмістові не обов'язково писати оброблювач для реакції на ситуацію, що призвела до деякого виключення. Співпроцесор вміє самостійно реагувати багато з них. Це так звана обробка винятків за умовчанням. Щоб викликати обробку певного типу винятку за умовчанням, необхідно цей виняток залишити не маскованим. Така дія виконується за допомогою установки в 1 відповідного біта в регістрі керуючого співпроцесора cwr . Типи винятків, що фіксуються за допомогою регістра swr:
    • IE (Invalide operation Error) – недійсний код операція;
    • DE (Denormalized operand Error) – ненормований операнд;
    • ZE (divide by Zero Error) - помилка поділу на нуль;
    • ОЕ (Overflow Error) – помилка переповнення. Виникає у разі виходу порядку числа максимально допустимий діапазон;
    • UE (Underflow Error) – помилка антипереповнення. Виникає, коли результат занадто малий (близький до нуля);
    • РЕ (Precision Error) – помилка точності. Встановлюється, коли співпроцесору доводиться округляти результат через те, що його точне уявлення неможливо. Так, співпроцесор ніколи не вдасться точно розділити 10 на 3.

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

  • бита помилка роботи стека співпроцесора SF (Stack Fault). Біт встановлюється в 1, якщо виникає одна з трьох виняткових ситуацій – РЕ, UE чи IE. Зокрема, його установка інформує про спробу запису в заповнений стек або, навпаки, спробу читання з порожнього стека. Після того, як значення цього біта проаналізовано, його потрібно знову скинути в 0, разом з бітами РЕ, UE та IE (якщо вони були встановлені);
  • біта сумарної помилки роботи співпроцесора ES (Error Summary). Біт встановлюється в 1, якщо виникає кожна з шести перерахованих вище виняткових ситуацій;
  • чотирьох бітів с0 ... с3 (Condition Code) - коду умови. Призначення цих бітів аналогічне прапорам у регістрі EFLAGS основного процесора - відобразити результат виконання останньої команди співпроцесора.
  • трибітного поля TOP. Поле містить покажчик регістра поточної вершини стека.
  • біта B зайнятості співпроцесора.

Регістр управління роботою співпроцесора cwr- Визначає особливості обробки числових даних. За допомогою полів у регістрі cwr можна регулювати точність виконання чисельних обчислень, керувати заокругленням, маскувати винятки.

Він складається з:

  • шести масок винятків PM, UM, OM, ZM, DM, IM;
  • поля керування точністю PC (Precision Control);
  • поля керування заокругленням RC (Rounding Control).

Маски винятків призначені маскування виняткових ситуацій, виникнення яких фіксується з допомогою шести біт регістру swr . Якщо якісь маскуючі біти винятків у регістрі cwr встановлені один, то відповідні винятки будуть оброблятися самим співпроцесором. Якщо для будь-якого виключення у відповідному биті маски винятків регістра cwr міститься 0, то при виникненні виключення цього типу буде збуджено переривання int 16 (10h). Операційна система повинна містити (або програміст повинен написати) обробник цього переривання. Він повинен з'ясувати причину переривання, після чого, якщо це необхідно, виправити її та виконати інші дії.

2-бітове поле управління точністю PC призначене для вибору довжини мантиси. Можливі значення у цьому полі означають:

  • PC =00 - довжина мантиси 24 біти;
  • PC =10 - довжина мантиси 53 біти;
  • PC =11 - довжина мантиси 64 біти.

За промовчанням встановлюється значення поля PC =11.

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

  • 00 - значення округляється до найближчого числа, яке можна подати в розрядній сітці регістру співпроцесора;
  • 01 - значення округляється у меншу сторону;
  • 10 - значення округляється у велику сторону;
  • 11 - провадиться відкидання дробової частини числа. Використовується для приведення значення форми, яка може використовуватися в операціях цілочисленної арифметики.

Біт 12 у регістрі cwr фізично відсутній і зчитується рівним 0.

Реєстр тегів twr- являє собою сукупність двобітових полів. Кожне поле відповідає певному фізичному регістру стека та характеризує його поточний стан. Команди співпроцесора використовують цей регістр, наприклад, щоб визначити можливість запису значень у ці регістри. Зміна стану будь-якого регістра стека відбивається на вмісті відповідного цього регістру 2-бітового поля регістра тега. Можливі такі значення в полях регістру тега:

  • 00 - регістр стека співпроцесора зайнятий допустимим ненульовим значенням;
  • 01 - регістр стека співпроцесора містить нульове значення;
  • 10 - регістр стека співпроцесора містить одне із спеціальних чисельних значень, за винятком нуля;
  • 11 - регістр порожній і в нього можна робити запис. Це значення у двобітовому полі регістра тегів не означає, що всі біти відповідного регістра стека повинні бути обов'язково нульовими.
Принцип роботи співпроцесора

Реєстровий стік співпроцесора організований за принципом кільця. Серед восьми регістрів, що становлять стек, немає такого, який є вершиною стека. Усі регістри стека з функціональної точки зору абсолютно однакові та рівноправні. Вершина в кільцевому стеку співпроцесора є плаваючою. Контроль поточної вершини здійснюється апаратно за допомогою 3-бітового поля top регістра swr.


У полі top фіксується номер регістра стека r0…r7 , що є нині поточної вершиною стека.
Команди співпроцесора оперують не фізичними номерами регістрів стека r0…r7, які логічними номерами st(0)…st(7) . З допомогою логічних номерів реалізується відносна адресація регістрів стека співпроцесора. Наприклад, якщо поточною вершиною до запису в стек є фізичний регістр стека r3 то після запису в стек поточної вершиною стає фізичний регістр стека r2 . Тобто, в міру запису в стек, покажчик його вершини рухається у напрямку до молодших номерів фізичних регістрів (зменшується на одиницю). Якщо поточною вершиною є r0, то після запису чергового значення в стек співпроцесора його поточною вершиною стане фізичний регістр r7. Що ж до логічних номерів регістрів стека st(0)…st(7) , всі вони переміщаються разом із зміною поточної вершини стека. Логічна вершина стека має ім'я st(0) .
Оскільки при написанні програми розробник маніпулює не абсолютними, а відносними номерами регістрів стека, у нього можуть виникнути труднощі при спробі інтерпретації вмісту регістру тегів twr з відповідними фізичними регістрів стека. Як сполучна ланка необхідно залучати інформацію з поля top регістра swr. У такий спосіб реалізується принцип кільця.
Така організація стека має велику гнучкість, зокрема при передачі параметрів у процедуру. Для підвищення гнучкості розробки та використання процедур не бажано прив'язувати їх за параметрами, що передаються, до апаратних ресурсів (фізичних номерів регістрів співпроцесора). Набагато зручніше задавати порядок проходження параметрів, що передаються у вигляді логічних номерів регістрів. Такий спосіб передачі був би однозначним і не вимагав від розробника знання зайвих подробиць про апаратні реалізації співпроцесора. Логічна нумерація регістрів співпроцесора, що підтримується лише на рівні системи команд, ідеально реалізує цю ідею. При цьому не має значення, в якому фізичному регістрі стека співпроцесора були поміщені дані перед викликом підпрограми, визначальним є тільки порядок слідування параметрів у стеку. З цієї причини підпрограмою важливо знати тільки порядок розміщення параметрів, що передаються в стеку.

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

У певних випадках необхідно узгоджувати роботу обох пристроїв. Наприклад, якщо у вхідному потоці відразу за командою співпроцесора слідує команда основного процесора, що використовує результати роботи попередньої команди, то співпроцесор не встигне виконати свою команду за той час, поки основний процесор, пропустивши співпроцесорну команду, виконає свою. При цьому, що логіка роботи програми буде порушена. Можлива інша ситуація. Якщо вхідний потік команд містить послідовність з кількох команд співпроцесора, процесор пропустить їх дуже швидко, але він повинен забезпечити зовнішній інтерфейс для співпроцесора. Ці та інші, складніші ситуації, призводять до необхідності синхронізації між собою роботи двох процесорів. У перших моделях мікропроцесорів це робилося шляхом вставки перед чи після кожної команди співпроцесора спеціальної команди wait або fwait. Робота цієї команди полягала у призупиненні роботи основного процесора до того часу, поки співпроцесор не закінчить роботу над останньою командою. У моделях мікропроцесора (починаючи з i486) подібна синхронізація виконується автоматично. Але для деяких команд із групи команд керування співпроцесором залишена можливість вибору між командами із синхронізацією (очікуванням) та без неї.

Математичний співпроцесор – це спеціальний модуль для виконання операцій з плаваючою комою, який працює у співдружності із центральним процесором.
Математичний співпроцесор перестав бути обов'язковим елементом персонального комп'ютера. Від нього, в принципі, можна відмовитись. Так раніше й робили з міркувань економії.
Однак, при вирішенні завдань, які вимагали виконання великої кількості математичних обчислень, наприклад, при наукових чи інженерних розрахунках, гостро постало питання підвищення продуктивності комп'ютера.
Для цього вирішили використовувати додатковий спеціальний процесор, який "налаштований" на виконання математичних операцій і реалізує їх набагато швидше, ніж центральний процесор. Таким чином, було отримано можливість нарощувати продуктивність центрального процесора за рахунок спеціального модуля - математичного співпроцесора.
Не приклад центральному процесору, математичний співпроцесор тримає під керівництвом основну масу ланцюгів комп'ютера. Навпаки, вся діяльність математичного співпроцесора визначається центральним процесором, який може посилати математичному співпроцесору команди виконання програм і формування результатів. У звичайному режимі центральний процесор виконує всі функції комп'ютера. І лише, коли зустрічається завдання, з яким краще впорається математичний співпроцесор, йому видаються дані та команди, а центральний процесор чекає на результати. До таких завдань відносяться, наприклад, математичні операції між речовими числами (операції між числами з плаваючою комою), де числа представлені мантисою та ординатою (десятковий ступінь числа, що визначає положення десяткової коми).
Якщо раніше, у комп'ютерах перших поколінь (i80386, i80486) модуль математичного співпроцесора встановлювався на материнську плату як окремого чіпа, то сучасних комп'ютерах використання математичного співпроцесора, як окремого чіпа, не потрібно, оскільки він вже вбудований у центральний процесор.
Переваги, які ви отримуєте від використання математичного співпроцесора, залежить від того, які завдання вирішуються на вашому комп'ютері.
Згідно з даними компанії INTEL, математичний співпроцесор може зменшити час виконання математичних операцій, таких як множення, розподіл і зведення в ступінь на 80 відсотків і більше. Швидкість виконання простих математичних операцій, таких, як додавання та віднімання, не змінюється.
З практичної точки зору, продуктивність персонального комп'ютера, що стосується підготовки текстів та ведення бази даних (функцій, що не потребують складних математичних розрахунків), не може бути покращена математичним співпроцесором. Однак, ви отримаєте відчутний приріст продуктивності при проведенні наукових та інженерних розрахунків, обробці статистичних даних, а також під час роботи з графікою, оскільки остання потребує інтенсивних математичних розрахунків.

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

Що таке співпроцесор: загальне розуміння

Вам буде цікаво:

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

Математичний співпроцесор

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

Рис.1. Математичний співпроцесор

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

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

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

Математичні співпроцесори називають ще процесорами з плаваючою комою, тому що вони особливо яскраво виявляють свої можливості у цій галузі математики. Числа з плаваючою комою часто використовуються в наукових розрахунках і представляються, як правило, мантисою та ординатою. Перевага, що отримується від установки математичного співпроцесора, залежить від того, які завдання вирішуються на комп'ютері. Згідно зі твердженням Intel співпроцесор може зменшити час виконання математичних операцій, таких як множення, розподіл, зведення на 80% і більше. Швидкість виконання простих операцій, таких як додавання та віднімання практично не зменшується.

Конструктивно закладені в мікропроцесор сигнали дозволяють передавати роботу співпроцесору і потім отримувати результати обробки.

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

Мікропроцесори 8088, 80286, 80386 сконструйовані так, що дозволяють використовувати арифметичні співпроцесори 8087, 80287, 80387 фірми "Intel"-відповідно. Пізніші моделі мікропроцесорів мають вбудовані співпроцесори.

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

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

Простим "цілочисленним" процесорам для роботи з речовими числами та математичними операціями потрібні відповідні процедури підтримки та час для їх виконання. Модуль операцій із плаваючою комою підтримує роботу з ними лише на рівні примітивів -- завантаження, вивантаження речовинного числа (із спеціалізованих регістрів) чи математична операція з них виконується однією командою, рахунок цього досягається значне прискорення таких операцій. Усередині FPU числа зберігаються в 80-бітному форматі з плаваючою комою, для запису або читання з пам'яті можуть використовуватися:

Речові числа у трьох форматах: короткому (32 біти), довгому (64 біти) та розширеному (80 біт).

Двійкові цілі числа у трьох форматах: 16, 32 та 64 біти.

Упаковані цілі десяткові числа (BCD) числа - довжина максимального числа становить 18 десяткових упакованих цифр (72 біти).

FPU також підтримує спеціальні чисельні значення:

Деморалізовані речові числа - числа, які менші від мінімального нормалізованого числа. При формуванні такого значення в деякому регістрі стека у відповідному цьому регістру тегу регістра TWR формується спеціальне значення (10);

Нескінченність (позитивна та негативна), виникає при розподілі на нуль ненульового значення, а також при переповненнях. При формуванні такого значення у деякому регістрі стека у відповідному цьому регістру тегу регістра TWR формується спеціальне значення (10).

Число, розрізняють два види нечисел:

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

Спокійні (тихі) нечисла. Співпроцесор може формувати спокійні нечисла як реакцію певні винятки, наприклад число речовинної невизначеності.

Нуль - у форматі з плаваючою комою, нуль також вважається спеціальним значенням.

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

Спеціальний процесор, який налаштований на виконання математичних операцій і реалізує їх набагато швидше, ніж центральний процесор. Таким чином, було отримано можливість нарощувати продуктивність центрального процесора за рахунок спеціального модуля - математичного співпроцесора. Не приклад центральному процесору, математичний співпроцесор тримає під керівництвом основну масу ланцюгів комп'ютера. Навпаки, вся діяльність математичного співпроцесора визначається центральним процесором, який може посилати математичному співпроцесору команди виконання програм і формування результатів. У звичайному режимі центральний процесор виконує всі функції комп'ютера. І лише, коли зустрічається завдання, з яким краще впорається математичний співпроцесор, йому видаються дані та команди, а центральний процесор чекає на результати. До таких завдань відносяться, наприклад, математичні операції між речовими числами (операції між числами з плаваючою комою), де числа представлені мантисою та ординатою (десятковий ступінь числа, що визначає положення десяткової коми). Якщо раніше, у комп'ютерах перших поколінь (i80386, i80486) модуль математичного співпроцесора встановлювався на материнську плату як окремого чіпа, то сучасних комп'ютерах використання математичного співпроцесора, як окремого чіпа, не потрібно, оскільки він вже вбудований у центральний процесор. Переваги, які ви отримуєте від використання математичного співпроцесора, залежить від того, які завдання вирішуються на персональному комп'ютері.

Переваги, які виходять від установки математичного співпроцесора, залежать від того, які завдання вирішуються на вашому комп'ютері. Відповідно до Intel співпроцесор може зменшити час виконання математичних операцій, таких, як множення, розподіл та зведення в ступінь на 80% і більше. Швидкість виконання простих операцій, таких, як додавання та віднімання, може бути зовсім не зменшена.

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

Розрізняють такі види співпроцесорів:

Математичні співпроцесори загального призначення, які зазвичай прискорюють обчислення з плаваючою точкою,

Співпроцесори вводу-виводу (наприклад - Intel 8089), що розвантажують центральний процесор від контролю за операціями вводу-виводу або розширюють стандартний адресний простір процесора,

Співпроцесори для виконання будь-яких вузькоспеціалізованих обчислень.

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

Одна із схем взаємодії центрального процесора та співпроцесора, що застосовується, зокрема, у x86 співпроцесорах, реалізується наступним чином:

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

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

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

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

Починаючи з процесора Intel486DX, модуль операцій з плаваючою комою був інтегрований в центральний процесор і названий FPU. У лінійці Intel486SX модуль FPU відключався (спочатку до цієї лінійки потрапляли процесори з бракованим FPU). Для процесорів Intel486SX випускався «співпроцесор» Intel487SX, але, фактично, він був процесором Intel486DX і за його встановлення процесор Intel486SX відключався.


Незважаючи на інтеграцію, FPU в процесорах i486 є незмінним співпроцесором, виконаним на тому ж кристалі, більше того, схема FPU i486 повністю ідентична співпроцесору попереднього покоління 387DX аж до тактової частоти (в два рази меншою, ніж частота центрального процесора). Справжня інтеграція FPU з центральним процесором розпочалася лише у процесорах Pentium моделі MMX.

Широке поширення у відповідний період набули співпроцесори для платформи x86, що випускалися компанією Weitek - нею були випущені 1167, 2167 у вигляді набору мікросхем та мікросхеми 3167, 4167, для процесорів 8086, 80286, 80386, 8. У порівнянні з співпроцесорами від Intel вони забезпечували в 2-3 рази більшу продуктивність, але мали несумісний програмний інтерфейс, реалізований через технологію memory-mapping. Вона зводилася до того, що основний процесор повинен був записувати інформацію в ті чи інші області пам'яті, контрольовані співпроцесором. Конкретна адреса, куди проводився запис, інтерпретувався як та чи інша команда. Незважаючи на несумісність, співпроцесори від Weitek були широко підтримані як розробниками програмного забезпечення, так і виробниками материнських плат, які передбачали використання такої мікросхеми.

Ряд інших компаній випускав різні несумісні математичні співпроцесори, реалізуючи інтерфейс до них через порти вводу-виводу або переривання BIOS, але вони не набули такого широкого поширення.

Зависає