Википедия

Математический сопроцессор (FPU)

16.01.2022, выдержки Дятлова Н. С. от 06.06.2023, источник

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

2.     x87 — это специальный набор инструкций для работы с математическими вычислениями, являющийся подмножеством архитектуры процессоров x86. Такое название он получил, потому что первоначальные отдельные математические сопроцессорные чипы имели названия, заканчивающиеся на 87. Как и другие расширения базового набора инструкций процессора, эти инструкции не являются строго необходимыми для построения рабочей программы, но будучи аппаратно реализованными, общие математические задачи они позволяют выполнять гораздо быстрее. Например, в наборе инструкций x87 присутствуют команды для расчёта значений синуса или косинуса.

3.     Для процессоров семейства x86 с 8086/8088 по 386 модуль операций с плавающей запятой был выделен в отдельную микросхему, называемую математическим сопроцессором. Для установки сопроцессора на плате компьютера предусматривался отдельный разъём.

4.     Начиная с процессора Intel486DX модуль операций с плавающей запятой был интегрирован в центральный процессор и назван FPU.

5.     Настоящая интеграция FPU c центральным процессором началась только в процессорах Pentium модели MMX.

6.     В СССР выпускалась микросхема (КМ)1810ВМ87, которая являлась аналогом 8087.

7.     Регистры FPU организованы не в виде массива, как в некоторых других архитектурах, а как регистровый стек. Таким образом, FPU представляет собой стековый калькулятор, работающий по принципу обратной польской записи. Хотя стековая организация регистров FPU получается и удобной для программистов, она усложняет задачу построения эффективного кода компиляторами.

8.     Все процессоры Intel и AMD, начиная с 486DX, имеют встроенный математический сопроцессор, и в отдельном сопроцессоре не нуждаются (за исключением Intel486SX). Тем не менее, термин x87 всё ещё применяется для выделения той части инструкций процессора, которая служит для работы с вещественными числами в стеке FPU. Отличительный признак этих инструкций: их мнемоники начинаются с буквы f (от англ. float). Компиляторы могут использовать эти инструкции для производства кода, который в ряде случаев работает быстрее, нежели тот, что использует вызовы к библиотекам для выполнения операций с плавающей запятой.

9.     Однако обычно последовательность команд x87 выполняет операции не в строгом соответствии с форматами IEEE-754 из-за использования более широких регистров по сравнению с форматами чисел одинарной и двойной точности. Поэтому последовательность арифметических операций на наборе x87 может давать несколько иной результат, чем на процессоре, строго следующем стандарту IEEE-754.

10.  После появления расширения 3DNow! от AMD и затем SSE, начиная с процессоров Pentium III компании Intel, вычисления с одинарной точностью стало возможным проводить без помощи инструкций FPU, причём с возросшей производительностью. Расширение SSE2 и более поздние расширения системы команд обеспечили также быстрое выполнение расчётов с двойной точностью (см. стандарт IEEE-754). В связи с этим в современных компьютерах потребность в командах классического математического сопроцессора значительно уменьшилась. Тем не менее, во всех выпускаемых x86-процессорах они по-прежнему поддерживаются для совместимости со старыми приложениями, а также для нужд тех приложений, где требуются двоично-десятичные преобразования или вычисления с расширенной точностью (когда двойной точности недостаточно). В настоящее время использование команд x87 остаётся наиболее эффективным способом ведения таких расчётов.

11.  Внутри FPU числа хранятся в 80-битном формате с плавающей запятой (расширенная точность), для записи же или чтения из памяти могут использоваться: Вещественные числа в трёх форматах: коротком (32 бита), длинном (64 бита) и расширенном (80 бит). Двоичные целые числа со знаком в трёх форматах: 16, 32 и 64 бита. Упакованные целые десятичные числа (BCD-числа) — длина максимального числа составляет 18 упакованных десятичных цифр (72 бита).

12.  Стек процессора: регистры R0..R7. Размерность каждого регистра: 80 бит.

13.  Трансцендентные команды: 1) Тригонометрия: синус, косинус, тангенс, арктангенс; 2) Вычисление логарифмов и степеней.