Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Коллекция математических сопроцессоров семейства x87 от Intel

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

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

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

  • Эмулятор модуля с плавающей запятой (библиотека с плавающей запятой).
  • Надстройка 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 напрямую не поддерживают арифметику произвольной точности .

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

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

Интегрированные FPU [ править ]

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

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

Дополнительные FPU [ править ]

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

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 -На рабочие станции , как ВС-3 серии. Они также обычно добавлялись в старшие модели Apple Macintosh и Commodore Amiga , но, в отличие от IBM PC-совместимых систем, разъемы для добавления сопроцессора не были так распространены в младших системах.

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

См. Также [ править ]

  • Арифметико-логический блок (АЛУ)
  • Блок генерации адресов (AGU)
  • Загрузка – магазин
  • Процедуры CORDIC используются во многих FPU для реализации функций, но не сильно увеличивают количество вентилей.
  • Блок исполнения
  • Стандарт IEEE 754 с плавающей запятой
  • Шестнадцатеричное число с плавающей запятой IBM
  • Блок обработки графики
  • Операция умножения-накопления

Ссылки [ править ]

  1. ^ Андерсон, Стэнли Ф .; Эрл, Джон Дж .; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System / 360 Model 91: блок выполнения с плавающей запятой». Журнал исследований и разработок IBM . 11 (1): 34–53. DOI : 10.1147 / rd.111.0034 . ISSN  0018-8646 .
  2. ^ Брюс Доусон (2014-10-09). «Intel занижает границы ошибок на 1,3 квинтиллиона» . randomascii.wordpress.com . Проверено 16 января 2020 .
  3. ^ «Улучшения документации FSIN в« Руководстве разработчика программного обеспечения для архитектур Intel® 64 и IA-32 » » . intel.com . 2014-10-09 . Проверено 16 января 2020 .
  4. ^ "Руководство PDP-6" (PDF) . www.bitsavers.org .
  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. ^ a b c Мюллер, Жан-Мишель (2006). Элементарные функции: алгоритмы и реализация (2-е изд.). Бостон: Биркхойзер . п. 134. ISBN 978-0-8176-4372-0. LCCN  2005048094 . Проверено 1 декабря 2015 .
  8. ^ a b Нейв, Рафи (март 1983 г.). «Реализация трансцендентных функций на числовом процессоре». Микропроцессинг и микропрограммирование . 11 (3–4): 221–225. DOI : 10.1016 / 0165-6074 (83) 90151-5 .
  9. ^ Палмер, Джон Ф .; Морс, Стивен Пол (1984). Праймер 8087 (1-е изд.). John Wiley & Sons Australia, Limited . ISBN 0471875694. 9780471875697 . Проверено 2 января 2016 .
  10. ^ Гласс, Л. Брент (январь 1990). «Математические сопроцессоры: посмотрите, что они делают и как они это делают». Байт . 15 (1): 337–348. ISSN 0360-5280 . 
  11. ^ a b c Джарвис, Питтс (1990-10-01). «Реализация алгоритмов CORDIC - единая компактная процедура для вычисления трансцендентных функций» . Журнал доктора Добба : 152–156 . Проверено 2 января 2016 .
  12. ^ a b Yuen, AK (1988). «Процессоры Intel с плавающей точкой». Electro / 88 Запись конференции : 48/5 / 1–7.
  13. ^ http://cdn3.wccftech.com/wp-content/uploads/2013/07/AMD-Steamroller-vs-Bulldozer.jpg
  14. ^ «AMD представляет Flex FP» . bit-tech.net . Проверено 29 марта 2018 .

Дальнейшее чтение [ править ]

  • Филиатро, Раймонд (2003). «ПРОСТО ФПУ» .