stringtranslate.com

Модуль с плавающей точкой

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

Плавающий блок ( FPU ) , числовой процессор ( NPU ), [1] в просторечии математический сопроцессор , является частью компьютерной системы, специально разработанной для выполнения операций с числами с плавающей точкой . [2] Типичными операциями являются сложение , вычитание , умножение , деление и квадратный корень . Некоторые FPU также могут выполнять различные трансцендентные функции, такие как экспоненциальные или тригонометрические вычисления, но точность может быть низкой, [3] [4] поэтому некоторые системы предпочитают вычислять эти функции программно.

В архитектурах компьютеров общего назначения один или несколько FPU могут быть интегрированы в качестве исполнительных блоков в центральном процессоре ; однако многие встроенные процессоры не имеют аппаратной поддержки операций с плавающей точкой (хотя все чаще они имеют их в качестве стандарта).

Когда ЦП выполняет программу, требующую операции с плавающей точкой, есть три способа ее выполнить:

История

В 1954 году IBM 704 имел арифметику с плавающей точкой в ​​качестве стандартной функции, что было одним из его главных улучшений по сравнению с его предшественником IBM 701. Это было перенесено и на его преемников 709, 7090 и 7094.

В 1963 году компания Digital анонсировала PDP-6 , в котором плавающая точка была стандартной функцией. [5]

В 1963 году GE-235 оснастили «вспомогательным арифметическим блоком» для вычислений с плавающей точкой и двойной точностью. [6]

Исторически некоторые системы реализовали плавающую точку с сопроцессором, а не как интегрированный блок (но теперь в дополнение к ЦП, например, графические процессоры  — которые являются сопроцессорами, не всегда встроенными в ЦП — как правило, имеют FPU, в то время как первые поколения графических процессоров не имели). Это может быть отдельная интегральная схема , целая печатная плата или шкаф. Если аппаратное обеспечение для вычислений с плавающей точкой не было предоставлено, вычисления с плавающей точкой выполняются программным обеспечением, что занимает больше процессорного времени, но позволяет избежать затрат на дополнительное оборудование. Для конкретной компьютерной архитектуры инструкции блока с плавающей точкой могут эмулироваться библиотекой программных функций; это может позволить одному и тому же объектному коду работать в системах с аппаратным обеспечением с плавающей точкой или без него. Эмуляция может быть реализована на любом из нескольких уровней: в ЦП как микрокод , как функция операционной системы или в коде пользовательского пространства . Когда доступна только целочисленная функциональность, методы CORDIC чаще всего используются для оценки трансцендентных функций . [ необходима цитата ]

В большинстве современных компьютерных архитектур существует некоторое разделение операций с плавающей точкой и целочисленных операций. Это разделение существенно различается в зависимости от архитектуры; некоторые имеют выделенные регистры с плавающей точкой, в то время как некоторые, как Intel x86 , доходят до независимых схем тактирования . [7]

Процедуры CORDIC были реализованы в сопроцессорах Intel x87 ( 8087 , [8] [9] [10] [11] [12] 80287, [12] [13] 80387 [12] [13] ) вплоть до серии микропроцессоров 80486 [8] , а также в Motorola 68881 [8] [9] и 68882 для некоторых видов инструкций с плавающей точкой, в основном как способ уменьшения количества вентилей (и сложности) подсистемы FPU.

Операции с плавающей точкой часто конвейеризируются . В ранних суперскалярных архитектурах без общего внеочередного выполнения операции с плавающей точкой иногда конвейеризовались отдельно от целочисленных операций.

Модульная архитектура микроархитектуры Bulldozer использует специальный FPU, называемый FlexFPU, который использует одновременную многопоточность . Каждое физическое целочисленное ядро, два на модуль, является однопоточным, в отличие от Hyperthreading от Intel , где два виртуальных одновременных потока совместно используют ресурсы одного физического ядра. [14] [15]

Библиотека с плавающей точкой

Некоторое оборудование с плавающей точкой поддерживает только самые простые операции: сложение, вычитание и умножение. Но даже самое сложное оборудование с плавающей точкой имеет конечное число операций, которые оно может поддерживать — например, ни один FPU напрямую не поддерживает арифметику произвольной точности .

Когда ЦП выполняет программу, которая вызывает операцию с плавающей точкой, которая напрямую не поддерживается оборудованием, ЦП использует ряд более простых операций с плавающей точкой. В системах без какого-либо оборудования с плавающей точкой ЦП эмулирует ее, используя ряд более простых арифметических операций с фиксированной точкой , которые выполняются на целочисленном арифметико-логическом устройстве .

Программное обеспечение, которое перечисляет необходимые последовательности операций для эмуляции операций с плавающей точкой, часто упаковано в библиотеку с плавающей точкой .

Интегрированные FPU

В некоторых случаях FPU могут быть специализированными и разделенными между более простыми операциями с плавающей точкой (в основном сложением и умножением) и более сложными операциями, такими как деление. В некоторых случаях только простые операции могут быть реализованы в аппаратном обеспечении или микрокоде , в то время как более сложные операции реализованы в программном обеспечении.

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

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

Несколько моделей PDP -11 , такие как PDP-11/45, [16] PDP-11/34a, [17] : 184–185  PDP-11/44, [17] : 195, 211  и PDP-11/70, [17] : 277, 286–287  поддерживали дополнительный блок с плавающей точкой для поддержки инструкций с плавающей точкой. PDP-11/60, [17] : 261  MicroPDP-11/23 [18] и несколько моделей VAX [19] [20] могли выполнять инструкции с плавающей точкой без дополнительного FPU (MicroPDP-11/23 требовала дополнительную опцию микрокода), [18] и предлагали дополнительные ускорители для дальнейшего ускорения выполнения этих инструкций.

В 1980-х годах в IBM PC /совместимых микрокомпьютерах было обычным делом , когда FPU был полностью отделен от CPU и обычно продавался как необязательный дополнительный компонент. Его покупали только в случае необходимости ускорить или включить программы с интенсивным использованием математики.

IBM PC, XT и большинство совместимых с ними компьютеров на базе 8088 или 8086 имели гнездо для дополнительного сопроцессора 8087. Системы на базе AT и 80286 обычно имели гнездо для машин на базе 80287 , а машины на базе 80386/80386SX — для 80387 и 80387SX соответственно, хотя ранние модели имели гнездо для 80287, поскольку 80387 еще не существовало. Другие компании производили сопроцессоры для серии Intel x86. К ним относятся Cyrix и Weitek . Acorn Computers выбрала WE32206, чтобы предложить одинарную , двойную и расширенную точность [21] для своей линейки Archimedes на базе ARM , внедрив вентильную матрицу для сопряжения процессора ARM2 с WE32206 для поддержки дополнительных инструкций ARM с плавающей точкой. [22] Позднее Acorn предложила сопроцессор FPA10, разработанный ARM, для различных машин, оснащенных процессором ARM3. [23]

Сопроцессоры были доступны для семейства Motorola 68000 , 68881 и 68882. Они были распространены в рабочих станциях на базе Motorola 68020/68030 , таких как серия Sun-3 . Они также обычно добавлялись в более дорогие модели серий Apple Macintosh и Commodore Amiga , но в отличие от систем, совместимых с IBM PC, разъемы для добавления сопроцессора не были столь распространены в более дешевых системах.

Существуют также дополнительные модули FPU-сопроцессоров для микроконтроллеров (MCU/μC)/ одноплатных компьютеров (SBC), которые служат для обеспечения возможности арифметики с плавающей точкой . Эти дополнительные модули FPU не зависят от хост-процессора, обладают собственными требованиями к программированию ( операции , наборы инструкций и т. д.) и часто поставляются с собственными интегрированными средами разработки (IDE).

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

Ссылки

  1. ^ https://www.computinghistory.org.uk/det/35216/Intel-80287XL-Numeric-Processing-Unit/
  2. ^ Андерсон, Стэнли Ф.; Эрл, Джон Г.; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System/360 Model 91: Floating-Point Execution Unit». IBM Journal of Research and Development . 11 (1): 34–53. doi :10.1147/rd.111.0034. ISSN  0018-8646.
  3. ^ Доусон, Брюс (2014-10-09). «Intel недооценивает пределы ошибок на 1,3 квинтиллиона». randomascii.wordpress.com . Получено 2020-01-16 .
  4. ^ "Улучшения документации FSIN в "Руководстве разработчика программного обеспечения для архитектур Intel® 64 и IA-32"". intel.com . 2014-10-09. Архивировано из оригинала 2020-01-16 . Получено 2020-01-16 .
  5. ^ "PDP-6 Handbook" (PDF) . www.bitsavers.org . Архивировано (PDF) из оригинала 2022-10-09.
  6. ^ "Документы GE-2xx". www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf, стр. IV-4.
  7. ^ "Семейство Intel 80287". www.cpu-world.com . Получено 15.01.2019 .
  8. ^ abc Muller, Jean-Michel (2006). Elementary Functions: Algorithms and Implementation (2nd ed.). Бостон, Массачусетс: Birkhäuser . стр. 134. ISBN 978-0-8176-4372-0. LCCN  2005048094 . Получено 01.12.2015 .
  9. ^ ab Nave, Rafi (март 1983 г.). «Реализация трансцендентных функций на числовом процессоре». Микропроцессорная обработка и микропрограммирование . 11 (3–4): 221–225. doi :10.1016/0165-6074(83)90151-5.
  10. ^ Палмер, Джон Ф.; Морзе, Стивен Пол (1984). 8087 Primer (1-е изд.). John Wiley & Sons Australia, Limited . ISBN 0471875694. 9780471875697 . Получено 2016-01-02 .
  11. Glass, L. Brent (январь 1990 г.). «Математические сопроцессоры: взгляд на то, что они делают и как они это делают». Байт . 15 (1): 337–348. ISSN  0360-5280.
  12. ^ abc Джарвис, Питтс (1990-10-01). «Реализация алгоритмов CORDIC – Единая компактная процедура для вычисления трансцендентных функций». Журнал доктора Добба : 152–156 . Получено 2016-01-02 .
  13. ^ ab Yuen, AK (1988). «Процессоры Intel с плавающей точкой». Отчет конференции Electro/88 : 48/5/1–7.
  14. ^ "AMD Steamroller vs Bulldozer". WCCFtech . Архивировано из оригинала 9 мая 2015 г. Получено 14 марта 2022 г.
  15. ^ Halfacree, Gareth (28 октября 2010 г.). "AMD представляет Flex FP". bit-tech.net . Архивировано из оригинала 22 марта 2017 г. . Получено 29 марта 2018 г. .{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  16. ^ PDP-11/45 Processor Handbook (PDF) . Digital Equipment Corporation . 1973. Глава 7 «Процессор с плавающей точкой».
  17. ^ abcd PDP-11 Processor Handbook (PDF) . Digital Equipment Corporation . 1979.
  18. ^ ab MICRO/PDP-11 Handbook (PDF) . Digital Equipment Corporation . 1983. стр. 33.
  19. ^ VAX – Справочник по оборудованию Том I – 1986 (PDF) . Digital Equipment Corporation . 1985.
  20. ^ VAX – Hardware Handbook Volume II – 1986 (PDF) . Digital Equipment Corporation . 1986.
  21. ^ "Сопроцессор Western Electric 32206". www.cpu-world.com . Получено 2021-11-06 .
  22. Феллоуз, Пол (март 1990 г.). «Программирование ARM: сопроцессор с плавающей точкой». A&B Computing . стр. 43–44.
  23. ^ "Acorn Releases Floating Point Accelerator" (пресс-релиз). Acorn Computers Limited. 5 июля 1993 г. Получено 7 апреля 2021 г.

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