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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Intel 80287

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

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

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

Співпроцесори Intel сімейства x86[ред.ред. код]

Для таких процесорів як 8086/88, 186/188, 286, 386, 486 були випущені співпроцесори для операцій з плаваючою комою, як правило остання цифра у таких співпроцесорів була 7 (8087, 187, 287, 387, 487). Для установки співпроцесора на платі комп'ютера передбачалось окреме гніздо.

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

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

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

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

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

Система команд співпроцесора[ред.ред. код]

Система включає близько 80 команд. Їх класифікація:

  • Команди передачі даних
    • Дійсні дані
    • Цілочисельні дані
    • Десяткові дані
    • Завантаження констант (0, 1, число Пі, log2 (10), log2 (e), lg (2), ln (2))
    • Обмін
    • Умовне пересилання (Pentium II / III)
  • Команди порівняння даних
    • Дійсні дані
    • Цілочисельні дані
    • Аналіз
    • З нулем
    • Умовне порівняння (Pentium II / III)
  • Арифметичні команди
    • Дійсні дані: додавання, віднімання, множення, ділення
    • Цілочисельні дані: додавання, віднімання, множення, ділення
    • Допоміжні арифметичні команди (квадратний корінь, модуль, зміна знака, виділення порядку і мантиси)
  • Трансцендентні команди
    • Тригонометрія: синус, косинус, тангенс, арктангенс
    • Обчислення логарифмів і степенів
  • Команди управління
    • Ініціалізація співпроцесора
    • Робота з середовищем
    • Робота зі стеком
    • Перемикання режимів

Див. також[ред.ред. код]