Устройство с плавающей запятой ( FPU , в просторечии математический сопроцессор ) — это часть компьютерной системы , специально предназначенная для выполнения операций с числами с плавающей запятой . [1] Типичными операциями являются сложение , вычитание , умножение , деление и извлечение квадратного корня . Некоторые FPU также могут выполнять различные трансцендентные функции , такие как экспоненциальные или тригонометрические вычисления, но точность может быть низкой, [2] [3] , поэтому некоторые системы предпочитают вычислять эти функции программно.
В компьютерных архитектурах общего назначения один или несколько FPU могут быть интегрированы в качестве исполнительных блоков в центральном процессоре ; однако многие встроенные процессоры не имеют аппаратной поддержки операций с плавающей запятой (хотя они все чаще входят в стандартную комплектацию).
Когда ЦП выполняет программу, вызывающую операцию с плавающей запятой, существует три способа ее выполнения:
В 1954 году в IBM 704 арифметика с плавающей запятой была стандартной функцией, что было одним из его основных улучшений по сравнению с предшественником IBM 701 . Это было перенесено на его преемников 709, 7090 и 7094.
В 1963 году Digital анонсировала PDP-6 , стандартная функция которого имела плавающую запятую. [4]
В 1963 году в GE-235 был установлен «вспомогательный арифметический блок» для вычислений с плавающей запятой и вычислений двойной точности. [5]
Исторически сложилось так, что некоторые системы реализовывали операции с плавающей запятой с помощью сопроцессора , а не как интегрированный блок (но теперь в дополнение к ЦП, например, графические процессоры – которые не всегда являются сопроцессорами, встроенными в ЦП – как правило, имеют FPU, в то время как первые поколения графических процессоров имели нет). Это может быть одна интегральная схема , целая печатная плата или шкаф. Если аппаратное обеспечение для вычислений с плавающей запятой не предусмотрено, вычисления с плавающей запятой выполняются программным обеспечением, что требует больше процессорного времени, но позволяет избежать затрат на дополнительное оборудование. Для конкретной компьютерной архитектуры инструкции модуля с плавающей запятой могут быть эмулированы библиотекой программных функций; это может позволить одному и тому же объектному коду работать в системах с оборудованием для работы с плавающей запятой или без него. Эмуляция может быть реализована на любом из нескольких уровней: в ЦП как микрокод , как функция операционной системы или в коде пользовательского пространства . Когда доступна только целочисленная функциональность, методы CORDIC чаще всего используются для оценки трансцендентных функций . [ нужна цитата ]
В большинстве современных компьютерных архитектур существует некоторое разделение операций с плавающей запятой и операций с целыми числами . Это разделение существенно различается в зависимости от архитектуры; некоторые имеют выделенные регистры с плавающей запятой, а некоторые, например Intel x86 , доходят до независимых схем тактирования . [6]
Подпрограммы CORDIC были реализованы в сопроцессорах Intel x87 ( 8087 , [7] [8] [9] [10] [11] 80287, [11] [12] 80387 [11] [12] ) вплоть до 80486 [7] серии микропроцессоров, а также в Motorola 68881 [7] [8] и 68882 для некоторых видов инструкций с плавающей запятой, главным образом как способ уменьшить количество вентилей (и сложность) подсистемы FPU.
Операции с плавающей запятой часто выполняются конвейерно . В более ранних суперскалярных архитектурах без общего выполнения вне очереди операции с плавающей запятой иногда конвейеризировались отдельно от целочисленных операций.
Модульная архитектура микроархитектуры Bulldozer использует специальный FPU под названием FlexFPU, который использует одновременную многопоточность . Каждое физическое целочисленное ядро, по два на модуль, является однопоточным, в отличие от Intel Hyperthreading , где два виртуальных одновременных потока совместно используют ресурсы одного физического ядра. [13] [14]
Некоторое оборудование для операций с плавающей запятой поддерживает только самые простые операции: сложение, вычитание и умножение. Но даже самое сложное оборудование с плавающей запятой имеет ограниченное количество операций, которые оно может поддерживать — например, ни один FPU напрямую не поддерживает арифметику произвольной точности .
Когда ЦП выполняет программу, которая вызывает операцию с плавающей запятой, которая напрямую не поддерживается аппаратным обеспечением, ЦП использует серию более простых операций с плавающей запятой. В системах без каких-либо аппаратных средств с плавающей запятой ЦП эмулирует ее, используя серию более простых арифметических операций с фиксированной запятой , которые выполняются на логическом устройстве целочисленной арифметики .
Программное обеспечение, в котором перечислены необходимые серии операций для эмуляции операций с плавающей запятой, часто упаковывается в библиотеку операций с плавающей запятой .
В некоторых случаях FPU могут быть специализированными и разделены на более простые операции с плавающей запятой (в основном сложение и умножение) и более сложные операции, такие как деление. В некоторых случаях только простые операции могут быть реализованы аппаратно или микрокодом , тогда как более сложные операции реализуются программно.
В некоторых современных архитектурах функциональность FPU сочетается с блоками SIMD для выполнения вычислений SIMD; примером этого является дополнение набора инструкций x87 набором инструкций SSE в архитектуре x86-64 , используемой в новых процессорах Intel и AMD.
Несколько моделей PDP-11 , таких как PDP-11/45, [15] PDP-11/34a, [16] : 184–185 PDP-11/44, [16] : 195, 211 и PDP-11. /70, [16] : 277, 286–287 поддерживали дополнительный модуль с плавающей запятой для поддержки инструкций с плавающей запятой. PDP-11/60, [16] : 261 MicroPDP-11/23 [17] и несколько моделей VAX [18] [19] могли выполнять инструкции с плавающей запятой без дополнительного FPU (для MicroPDP-11/23 требовался вариант дополнительного микрокода), [17] и предлагал дополнительные ускорители для дальнейшего ускорения выполнения этих инструкций.
В 1980-х годах в IBM PC -совместимых микрокомпьютерах было обычным явлением , когда FPU был полностью отделен от ЦП и обычно продавался как дополнительная надстройка. Его можно было бы приобрести только в том случае, если необходимо ускорить или включить программы, требующие интенсивной математики.
IBM PC, XT и большинство совместимых компьютеров на базе 8088 или 8086 имели разъем для дополнительного сопроцессора 8087. Системы на базе AT и 80286 обычно были разъёмами для 80287 , а машины на базе 80386/80386SX — для 80387 и 80387SX соответственно, хотя ранние системы были разъёмами для 80287, поскольку 80387 ещё не существовало. Другие компании производили сопроцессоры для серии Intel x86. В их число входили Cyrix и Weitek . Компания Acorn Computers выбрала WE32206, чтобы обеспечить одинарную , двойную и повышенную точность [20] для своей линейки Archimedes на базе ARM .
Сопроцессоры были доступны для семейства Motorola 68000 , 68881 и 68882 . Они были распространены в рабочих станциях на базе Motorola 68020/68030 , таких как серия Sun-3 . Их также обычно добавляли в более дорогие модели серий Apple Macintosh и Commodore Amiga , но в отличие от IBM PC-совместимых систем разъемы для добавления сопроцессора не были так распространены в системах более низкого уровня.
Существуют также дополнительные сопроцессорные блоки FPU для микроконтроллеров (MCU/μC)/ одноплатных компьютеров (SBC), которые служат для обеспечения арифметических операций с плавающей запятой . Эти дополнительные FPU не зависят от хост-процессора, имеют свои собственные требования к программированию ( операции , наборы команд и т. д.) и часто снабжены собственными интегрированными средами разработки (IDE).
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка )