Плавающий блок ( 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 объединена с блоками SIMD для выполнения вычислений SIMD; примером этого является расширение набора инструкций x87 набором инструкций SSE в архитектуре x86-64 , используемой в новых процессорах Intel и AMD.
Несколько моделей 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).
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )