A модуль с плавающей запятой (FPU, в просторечии математический сопроцессор ) является частью компьютерной системы, специально разработанной для выполнения операций на числа с плавающей запятой. Типичными операциями являются сложение, вычитание, умножение, деление и квадратный корень. Некоторые FPU могут также выполнять различные трансцендентные функции, такие как экспоненциальные или тригонометрические вычисления, но точность может быть очень низкой, поэтому некоторые системы предпочитают вычислять эти функции. в программном обеспечении.
В компьютерных архитектурах общего назначения один или несколько FPU могут быть интегрированы как исполнительные блоки в центральный процессор ; однако многие встроенные процессоры не имеют аппаратной поддержки операций с плавающей запятой (хотя они все чаще имеют их в стандартной комплектации, по крайней мере, 32-битные).
Когда ЦП выполняет программу, которая вызывает операцию с плавающей запятой, есть три способа ее выполнения:
В 1963 году GE-235 имел «Вспомогательный арифметический блок» для операций с плавающей запятой и вычисления с двойной точностью.
Исторически в системах с плавающей запятой использовался сопроцессор, а не как интегрированный блок (но теперь в дополнение к ЦП, например Графические процессоры - сопроцессоры, не всегда встроенные в ЦП - как правило, имеют FPU, а первые поколения графических процессоров - нет). Это может быть отдельная интегральная схема, вся печатная плата или шкаф. Там, где оборудование для вычислений с плавающей запятой не было предоставлено, вычисления с плавающей запятой выполняются программно, что требует больше процессорного времени, но позволяет избежать затрат на дополнительное оборудование. Для конкретной компьютерной архитектуры инструкции модуля с плавающей запятой могут эмулироваться библиотекой программных функций; это может позволить запускать один и тот же объектный код в системах с оборудованием с плавающей запятой или без него. Эмуляция может быть реализована на любом из нескольких уровней: в ЦП как микрокод (не обычная практика), как функция операционной системы или в пользовательском пространстве код. Когда доступны только целочисленные функции, чаще всего используются методы эмуляции с плавающей запятой CORDIC.
В большинстве современных компьютерных архитектур существует некоторое разделение операций с плавающей запятой от операций целых чисел. Это разделение значительно зависит от архитектуры; у некоторых есть выделенные регистры с плавающей запятой, в то время как некоторые, такие как Intel x86, считают это независимыми тактовыми схемами.
Подпрограммы CORDIC были реализованы в Сопроцессоры Intel x87 (8087, 80287, 80387) до серии микропроцессоров 80486, а также в серии Motorola 68881 и 68882 для некоторых виды команд с плавающей запятой, в основном как способ уменьшить количество элементов (и сложность) подсистемы FPU.
Операции с плавающей запятой часто конвейерные. В более ранних суперскалярных архитектурах без общего выполнения вне очереди операции с плавающей запятой иногда конвейеризовались отдельно от целочисленных операций.
С начала 1990-х годов многие микропроцессоры для настольных компьютеров и серверов имеют более одного FPU.
Модульная архитектура микроархитектуры Bulldozer использует специальный FPU с именем FlexFPU, который использует одновременную многопоточность. Каждое физическое целочисленное ядро, по два на модуль, является однопоточным, в отличие от Intel Hyperthreading, где два виртуальных одновременных потока совместно используют ресурсы одного физического ядра.
В Викиучебнике есть книга по теме: Плавающая точка / Программные реализации |
В Викиучебнике есть книга по теме: Встроенные системы / Модуль с плавающей точкой |
Некоторое оборудование с плавающей запятой поддерживает только самые простые операции: сложение, вычитание и умножение. Но даже самое сложное оборудование с плавающей запятой имеет конечное число операций, которые оно может поддерживать - например, никакие FPU напрямую не поддерживают арифметику произвольной точности.
Когда ЦП выполняет программу, которая вызывает плавающую точку операции, которые напрямую не поддерживаются оборудованием, ЦП использует ряд более простых операций с плавающей запятой. В системах без какого-либо оборудования с плавающей запятой ЦП эмулирует его, используя серию более простых арифметических операций с фиксированной запятой, которые выполняются на целочисленном арифметическом логическом блоке.
Программное обеспечение, которое перечисляет необходимые серии операций для имитации операций с плавающей запятой, часто упаковывается в библиотеку с плавающей запятой .
В некоторых случаях FPU могут быть специализированными и разделенными на более простые операции с плавающей запятой (в основном сложение и умножение) и более сложные операции, такие как деление. В некоторых случаях только простые операции могут быть реализованы аппаратно или микрокодом, тогда как более сложные операции реализованы в виде программного обеспечения.
В некоторых современных архитектурах функциональные возможности FPU объединены с модулями для выполнения вычислений SIMD ; Примером этого является расширение набора инструкций x87 с помощью набора инструкций SSE в архитектуре x86-64, используемой в новых процессорах Intel и AMD.
В 1980-х годах в IBM PC / совместимых микрокомпьютерах было обычным делом, чтобы FPU был полностью отделен от CPU и обычно продается как дополнительный модуль. Его можно было бы купить только в том случае, если это необходимо для ускорения или включения математических программ.
IBM PC, XT и большинство совместимых устройств на базе 8088 или 8086 имели разъем для дополнительного сопроцессора 8087. Системы на базе AT и 80286, как правило, подключались к машинам на базе 80287 и 80386 / 80386SX - к машинам 80387 и 80387SX соответственно, хотя ранние были вставлены в разъем для 80287, поскольку 80387 еще не существовало. Другие компании производили сопроцессоры для серии Intel x86. К ним относятся сопроцессоры Cyrix и Weitek.
, которые были доступны для семейства Motorola 68000, 68881 и 68882. Они были распространены в Motorola 68020 / 68030 на базе рабочих станций, таких как серия Sun-3. Они также обычно добавлялись в старшие модели серий Apple Macintosh и Commodore Amiga, но, в отличие от IBM PC-совместимых систем, разъемы для добавления сопроцессора не были так распространены в младших поколениях. оконечные системы.
Существуют также дополнительные сопроцессорные блоки FPU для блоков микроконтроллеров (MCU / μC) / одноплатных компьютеров (SBC), которые служат для обеспечения плавающего точка арифметическая возможность. Эти дополнительные FPU не зависят от хост-процессора, обладают собственными требованиями к программированию (операции, наборы инструкций и т. Д.) И часто поставляются с собственной интегрированной разработкой. среды (IDE).