stringtranslate.com

Модуль с плавающей запятой

Коллекция математических сопроцессоров семейства x87 от Intel

Устройство с плавающей запятой ( 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 могут быть специализированными и разделены на более простые операции с плавающей запятой (в основном сложение и умножение) и более сложные операции, такие как деление. В некоторых случаях только простые операции могут быть реализованы аппаратно или микрокодом , тогда как более сложные операции реализуются программно.

В некоторых современных архитектурах функциональность FPU сочетается с блоками SIMD для выполнения вычислений SIMD; примером этого является дополнение набора инструкций x87 набором инструкций SSE в архитектуре x86-64 , используемой в новых процессорах Intel и AMD.

Дополнительные FPU

Несколько моделей 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).

Смотрите также

Рекомендации

  1. ^ Андерсон, Стэнли Ф.; Эрл, Джон Г.; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System/360 Model 91: Модуль выполнения операций с плавающей запятой». Журнал исследований и разработок IBM . 11 (1): 34–53. дои : 10.1147/рд.111.0034. ISSN  0018-8646.
  2. ^ Доусон, Брюс (9 октября 2014 г.). «Intel занижает границы ошибок на 1,3 квинтиллиона». Randomascii.wordpress.com . Проверено 16 января 2020 г.
  3. ^ «Улучшения документации ФСИН в «Руководстве разработчика программного обеспечения для архитектур Intel® 64 и IA-32»» . intel.com . 09.10.2014. Архивировано из оригинала 16 января 2020 г. Проверено 16 января 2020 г.
  4. ^ «Справочник по PDP-6» (PDF) . www.bitsavers.org . Архивировано (PDF) из оригинала 9 октября 2022 г.
  5. ^ "Документы GE-2xx" . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf, стр. IV-4.
  6. ^ "Семейство Intel 80287" . www.cpu-world.com . Проверено 15 января 2019 г.
  7. ^ abc Мюллер, Жан-Мишель (2006). Элементарные функции: алгоритмы и реализация (2-е изд.). Бостон, Массачусетс: Биркхойзер . п. 134. ИСБН 978-0-8176-4372-0. LCCN  2005048094 . Проверено 1 декабря 2015 г.
  8. ^ аб Наве, Рафи (март 1983 г.). «Реализация трансцендентных функций на числовом процессоре». Микропроцессинг и микропрограммирование . 11 (3–4): 221–225. дои : 10.1016/0165-6074(83)90151-5.
  9. ^ Палмер, Джон Ф.; Морс, Стивен Пол (1984). Букварь 8087 (1-е изд.). Джон Вили и сыновья Австралия, Лимитед . ISBN 0471875694. 9780471875697 . Проверено 2 января 2016 г.
  10. ^ Гласс, Л. Брент (январь 1990 г.). «Математические сопроцессоры: взгляд на то, что они делают и как они это делают». Байт . 15 (1): 337–348. ISSN  0360-5280.
  11. ^ abc Джарвис, Питтс (1990-10-01). «Реализация алгоритмов CORDIC - единая компактная процедура для вычисления трансцендентных функций». Журнал доктора Добба : 152–156 . Проверено 2 января 2016 г.
  12. ^ Аб Юэнь, АК (1988). «Процессоры Intel с плавающей запятой». Протокол конференции Electro/88 : 48/5/1–7.
  13. ^ «Архивная копия». cdn3.wccftech.com . Архивировано из оригинала 9 мая 2015 года . Проверено 14 марта 2022 г.{{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  14. ^ «AMD представляет Flex FP» . bit-tech.net . Проверено 29 марта 2018 г.
  15. ^ Справочник по процессору PDP-11/45 (PDF) . Корпорация цифрового оборудования . 1973. Глава 7 «Процессор с плавающей запятой».
  16. ^ Справочник по процессору abcd PDP-11 (PDF) . Корпорация цифрового оборудования . 1979.
  17. ^ ab Справочник MICRO/PDP-11 (PDF) . Корпорация цифрового оборудования . 1983. с. 33.
  18. ^ VAX - Справочник по аппаратному обеспечению, том I - 1986 г. (PDF) . Корпорация цифрового оборудования . 1985.
  19. ^ VAX - Справочник по аппаратному обеспечению, том II - 1986 г. (PDF) . Корпорация цифрового оборудования . 1986.
  20. ^ "Сопроцессор Western Electric 32206" . www.cpu-world.com . Проверено 6 ноября 2021 г.

дальнейшее чтение