Модуль с плавающей запятой
Устройство с плавающей запятой ( FPU , в просторечии математический сопроцессор ) — это часть компьютерной системы, специально предназначенная для выполнения операций с числами с плавающей запятой . [1] Типичными операциями являются сложение , вычитание , умножение , деление и извлечение квадратного корня . Некоторые FPU также могут выполнять различные трансцендентные функции, такие как экспоненциальные или тригонометрические вычисления, но точность может быть низкой. [2] [3] поэтому некоторые системы предпочитают вычислять эти функции программно.
общего назначения В компьютерных архитектурах один или несколько FPU могут быть интегрированы в качестве исполнительных блоков в центральном процессоре ; однако многие встроенные процессоры не имеют аппаратной поддержки операций с плавающей запятой (хотя они все чаще входят в стандартную комплектацию).
Когда ЦП выполняет программу, вызывающую операцию с плавающей запятой, существует три способа ее выполнения:
- Эмулятор модуля с плавающей запятой (программная библиотека с плавающей запятой)
- Дополнительное оборудование FPU
- Встроенный 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 напрямую не поддерживает арифметику произвольной точности .
Когда ЦП выполняет программу, которая вызывает операцию с плавающей запятой, которая напрямую не поддерживается аппаратным обеспечением, ЦП использует серию более простых операций с плавающей запятой. В системах без какого-либо оборудования для операций с плавающей запятой ЦП эмулирует ее, используя серию более простых арифметических операций с фиксированной запятой , которые выполняются на логическом устройстве целочисленной арифметики .
Программное обеспечение, в котором перечислены необходимые серии операций для эмуляции операций с плавающей запятой, часто упаковывается в библиотеку операций с плавающей запятой .
Интегрированные editFPU
В некоторых случаях FPU могут быть специализированными и разделены на более простые операции с плавающей запятой (в основном сложение и умножение) и более сложные операции, такие как деление. В некоторых случаях только простые операции могут быть реализованы аппаратно или микрокодом , тогда как более сложные операции реализуются программно.
В некоторых современных архитектурах функциональность FPU сочетается с блоками SIMD для выполнения вычислений SIMD; примером этого является дополнение набора x87 инструкций набором инструкций SSE в архитектуре x86-64 , используемой в новых процессорах Intel и AMD.
Дополнительные FPU [ править ]
Некоторые модели PDP -11 , такие как PDP-11/45, [15] ПДП-11/34а, [16] : 184–185 ПДП-11/44, [16] : 195, 211 и ПДП-11/70, [16] : 277, 286–287 поддерживал дополнительный модуль с плавающей запятой для поддержки инструкций с плавающей запятой. ПДП-11/60, [16] : 261 МикроПДП-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] к ARM на базе линейке Archimedes .
Сопроцессоры были доступны для семейства Motorola 68000 , 68881 и 68882 . Они были распространены в Motorola 68020/68030 на базе рабочих станциях , таких как серия Sun-3 . Их также обычно добавляли в более дорогие модели серий Apple Macintosh и Commodore Amiga , но в отличие от IBM PC-совместимых систем разъемы для добавления сопроцессора не были так распространены в системах более низкого уровня.
Существуют также дополнительные сопроцессорные блоки FPU для микроконтроллеров (MCU/μC)/ одноплатных компьютеров (SBC), которые обеспечивают возможность выполнения арифметических операций с плавающей запятой . Эти дополнительные FPU не зависят от хост-процессора, имеют свои собственные требования к программированию ( операции , наборы команд и т. д.) и часто снабжены собственными интегрированными средами разработки (IDE).
См. также [ править ]
- Арифметико-логическое устройство (АЛУ)
- Блок генерации адреса (АГУ)
- Блок загрузки-складирования
- Подпрограммы CORDIC используются во многих FPU для реализации функций, но не сильно увеличивают количество вентилей.
- Исполнительная единица
- Стандарт IEEE 754 с плавающей запятой
- IBM шестнадцатеричное число с плавающей запятой
- Графический процессор
- Операция умножения-накопления
Ссылки [ править ]
- ^ Андерсон, Стэнли Ф.; Эрл, Джон Г.; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System/360 Model 91: Модуль выполнения операций с плавающей запятой». Журнал исследований и разработок IBM . 11 (1): 34–53. дои : 10.1147/rd.111.0034 . ISSN 0018-8646 .
- ^ Доусон, Брюс (9 октября 2014 г.). «Intel занижает границы ошибок на 1,3 квинтиллиона» . Randomascii.wordpress.com . Проверено 16 января 2020 г.
- ^ «Усовершенствования документации ФСИН в «Руководстве разработчика программного обеспечения для архитектур Intel® 64 и IA-32» » . intel.com . 09.10.2014. Архивировано из оригинала 16 января 2020 г. Проверено 16 января 2020 г.
- ^ «Справочник по PDP-6» (PDF) . www.bitsavers.org . Архивировано (PDF) из оригинала 9 октября 2022 г.
- ^ «Документы GE-2xx» . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf , стр. IV-4.
- ^ «Семейство Intel 80287» . www.cpu-world.com . Проверено 15 января 2019 г.
- ^ Jump up to: а б с Мюллер, Жан-Мишель (2006). Элементарные функции: алгоритмы и реализация (2-е изд.). Бостон, Массачусетс: Биркхойзер . п. 134. ИСБН 978-0-8176-4372-0 . LCCN 2005048094 . Проверено 1 декабря 2015 г.
- ^ Палмер, Джон Ф.; Морс, Стивен Пол (1984). Букварь 8087 (1-е изд.). Джон Вили и сыновья Австралия, Лимитед . ISBN 0471875694 . 9780471875697 . Проверено 2 января 2016 г.
- ^ Гласс, Л. Брент (январь 1990 г.). «Математические сопроцессоры: взгляд на то, что они делают и как они это делают». Байт . 15 (1): 337–348. ISSN 0360-5280 .
- ^ Jump up to: а б с Джарвис, Питтс (1 октября 1990 г.). «Реализация алгоритмов CORDIC — единая компактная процедура для вычисления трансцендентных функций» . Журнал доктора Добба : 152–156 . Проверено 2 января 2016 г.
- ^ Jump up to: а б Юэнь, АК (1988). «Процессоры Intel с плавающей запятой». Протокол конференции Electro/88 : 48/5/1–7.
- ^ «Архивная копия» . cdn3.wccftech.com . Архивировано из оригинала 9 мая 2015 года . Проверено 14 марта 2022 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ «AMD представляет Flex FP» . bit-tech.net . Проверено 29 марта 2018 г.
- ^ Справочник по процессору PDP-11/45 (PDF) . Корпорация цифрового оборудования . 1973. Глава 7 «Процессор с плавающей запятой».
- ^ Jump up to: а б с д Справочник по процессору PDP-11 (PDF) . Корпорация цифрового оборудования . 1979.
- ^ Jump up to: а б Справочник MICRO/PDP-11 (PDF) . Корпорация цифрового оборудования . 1983. с. 33.
- ^ VAX – Справочник по аппаратному обеспечению, том I – 1986 г. (PDF) . Корпорация цифрового оборудования . 1985.
- ^ VAX – Справочник по аппаратному обеспечению, том II – 1986 г. (PDF) . Корпорация цифрового оборудования . 1986.
- ^ «Сопроцессор Western Electric 32206» . www.cpu-world.com . Проверено 6 ноября 2021 г.
Дальнейшее чтение [ править ]
- Филиатро, Раймонд (2003). «ПРОСТО ФПУ» .