X87 - X87

x87 это плавающая точка -связанное подмножество архитектура x86 Набор инструкций. Он возник как расширение набора инструкций 8086 в форме необязательного числа с плавающей запятой. сопроцессоры которые работали в тандеме с соответствующими процессорами x86. Эти микрочипы имели названия, оканчивающиеся на «87». Это также было известно как NPX (Расширение числового процессора). Как и другие расширения базового набора инструкций, инструкции x87 не нужны строго для создания рабочих программ, но предоставляют оборудование и микрокод реализации общих числовых задач, что позволяет выполнять эти задачи намного быстрее, чем соответствующие Машинный код рутина может. Набор инструкций x87 включает инструкции для основных операций с плавающей запятой, таких как сложение, вычитание и сравнение, а также для более сложных числовых операций, таких как вычисление касательная функция и ее обратная, например.

Большинство процессоров x86 после Intel 80486 эти инструкции x87 были реализованы в основном процессоре, но этот термин иногда все еще используется для обозначения этой части набора инструкций. До того, как инструкции x87 стали стандартными для ПК, компиляторы или программистам приходилось использовать довольно медленные вызовы библиотеки для выполнения операций с плавающей запятой, метод, который все еще распространен в (недорогих) встроенные системы.

Описание

Регистры x87 образуют восьмиуровневую нестрогую куча структура в диапазоне от ST (0) до ST (7) с регистрами, к которым можно получить прямой доступ любым операндом, используя смещение относительно вершины, а также сдвигать и выталкивать. (Эту схему можно сравнить с тем, как кадр стека может быть как нажатым, так и индексированным.)

Есть инструкции для отправки, вычисления и извлечения значений поверх этого стека; унарные операции (FSQRT, FPTAN и т. Д.) Затем неявно адресуют самый верхний ST (0), а бинарные операции (FADD, FMUL, FCOM и т. Д.) Неявно адресуют ST (0) и ST (1). Модель нестрогого стека также позволяет двоичным операциям использовать ST (0) вместе с прямым операнд памяти или с явно указанный регистр стека, ST (Икс), в роли, аналогичной традиционной аккумулятор (комбинированный пункт назначения и левый операнд). Это также может быть отменено для каждой инструкции с ST (0) в качестве неизмененного операнда и ST (Икс) как пункт назначения. Кроме того, содержимое в ST (0) может быть заменено другим регистром стека с помощью инструкции FXCH ST (Икс).

Эти свойства позволяют использовать стек x87 в качестве семи свободно адресуемых регистров плюс выделенный аккумулятор (или как семь независимых аккумуляторов). Это особенно актуально на суперскалярный процессоры x86 (такие как Pentium 1993 г. и позже), где эти инструкции обмена (коды D9C8..D9CFчас) оптимизируются до нулевого штрафа тактовой частоты с помощью одного из целочисленных путей для FXCH ST (Икс) параллельно с инструкцией FPU. Несмотря на то, что он естественен и удобен для человека язык ассемблера программисты, некоторые составители компиляторов сочли сложным создание автоматических генераторы кода которые эффективно планируют код x87. Такой интерфейс на основе стека потенциально может свести к минимуму необходимость сохранения временных переменных в вызовах функций по сравнению с интерфейсом на основе регистров.[1] (хотя исторически проблемы с дизайном в исходной реализации ограничивали этот потенциал.[2][3])

X87 обеспечивает одинарную точность, двойную точность и 80-битную удвоенная точность двоичная арифметика с плавающей запятой согласно IEEE 754-1985 стандарт. По умолчанию все процессоры x87 используют внутреннюю 80-битную двойную расширенную точность (чтобы обеспечить стабильную точность для многих вычислений, см. Обоснование дизайна IEEE 754 ). Таким образом, данная последовательность арифметических операций может вести себя несколько иначе по сравнению со строгой одинарной или двойной точностью IEEE 754 FPU.[4] Поскольку иногда это может быть проблематично для некоторых получисловых вычислений, написанных с учетом двойной точности для правильной работы, чтобы избежать таких проблем, x87 может быть настроен с использованием специального регистра конфигурации / состояния для автоматического округления до одинарной или двойной точности после каждой операции. С момента введения SSE2, инструкции x87 не так важны, как раньше, но остаются важными как высокоточная скалярная единица для численных вычислений, чувствительных к ошибка округления и требуя 64-битный мантисса точность и расширенный диапазон доступен в 80-битном формате.

Спектакль

Тактовый цикл подсчитывается для примеров типичных инструкций x87 FPU (здесь показаны только версии регистр-регистр).[5]

В А...B обозначение (от минимального до максимального) охватывает изменения синхронизации, зависящие от переходного состояния конвейера и выбранной арифметической точности (32, 64 или 80 бит); он также включает вариации из-за числовых случаев (например, количество установленных битов, ноль и т. д.). Обозначение L → H отображает значения, соответствующие самой низкой (L) и самой высокой (H) максимальной тактовой частоте, которые были доступны.

реализация x87FADDFMULFDIVFXCHFCOMFSQRTFPTANFPATANМакс часы
(МГц)
Пик FMUL
(миллионов /s )
FMUL§
отн. 5 МГц 8087
808770…10090…145193…20310…1540…50180…18630…540250…8000005 → 00100.034…0.055 → 0.100…0.111~00001 → 2 раза быстрее
80287 (оригинал)0006 → 00120.041…0.066 → 0.083…0.133.0001.2 → 2.4×
80387 (и более поздние модели 287)23…3429…5788…911824122…129191…497314…4870016 → 00330.280…0.552 → 0.580…1.1000~10 → 20×
80486 (или 80487)8…2016734483…87200…273218…3030016 → 0050….0000001.0 → 3.1000~18 → 56×
Cyrix 6x86, Cyrix MII4…74…624…342459…60117…12997…1610066 → 0300..000011…16 → 50…7500~320 → 1400×
AMD K6 (включая K6 II / III)2221…412321…41??0166 → 0550…..00000083 → 2750~1500 → 5000×
Pentium / Pentium MMX1…31…3391 (0*)1…47017…17319…1340060 → 0300..000020…60 → 100…3000~1100 → 5400×
Pentium Pro1…32…516…56128…68??0150 → 0200..000030…75 → 40…1000~1400 → 1800×
Pentium II / III1…32…517…38127…50??0233 → 1400..00047…116 → 280…7000~2100 → 13000×
Athlon (K7)1…41…413…241…216…35??0500 → 2330..00125…500 → 580…23300~9000 → 42000×
Athlon 64 (K8)1000 → 3200..0250…1000 → 800…3200~18000 → 58000×
Pentium 41…52…720…43несколько
циклы
120…43??1300 → 3800..00186…650 → 543…1900~11000 → 34000×
* Эффективная задержка нулевого тактового сигнала часто возможна за счет суперскалярного выполнения.
§ 8087 5 МГц был оригинальным процессором x87. По сравнению с типичными программно реализуемыми подпрограммами с плавающей запятой на 8086 (без 8087), коэффициенты были бы даже больше, возможно, еще в 10 раз (то есть правильное добавление чисел с плавающей запятой на языке ассемблера может потребовать более 1000 циклов. ).

Производители

Компании, которые разработали или изготовили[а] модули с плавающей запятой, совместимые с Intel 8087 или более поздними моделями, включают AMD (287, 387, 486DX, 5x86, K5, K6, K7, K8), Чипы и технологииСупер МАТЕМАТИКА сопроцессоры), CyrixFasMath, Cx87SLC, Cx87DLC, так далее., 6x86, Cyrix MII), Fujitsu (рано Pentium Mobile так далее.), Харрис Полупроводник (изготовлено 80387 и 486DX процессоры), IBM (разные 387 и 486 конструкции), IDTWinChip, C3, C7, Нано, так далее.), ИИТ2C87, 3C87и др.), LC Technology ( Зеленый MATH сопроцессоры), National SemiconductorGeode GX1, Geode GXm, так далее.), NexGenNx587), Rise TechnologymP6), СТ Микроэлектроника (изготовлено 486DX, 5x86, так далее.), Инструменты Техаса (изготовлено 486DX процессоры и т. д.), TransmetaTM5600 и TM5800), ULSIМатематика · Co сопроцессоры), ЧЕРЕЗC3, C7, и Нанои т. д.) и Xtend ( 83С87СХ-25 и другие сопроцессоры).

Архитектурные поколения

8087

В 8087 была первая математика сопроцессор для 16-битных процессоров, разработанных Intel. Он был построен для работы в паре с Intel 8088 или же 8086 микропроцессоры. (Intel ранее 8231 и 8232 Процессоры с плавающей запятой, продаваемые для использования с ЦП i8080, на самом деле были лицензионными версиями AMD Am9511 и Am9512 FPU с 1977 и 1979 годов.[6])

80187

Версия Intel 80187 с тактовой частотой 16 МГц

В 80187 (80C187)[7] математический сопроцессор для Intel 80186 ЦПУ. Он не может работать с 80188, так как 80188 имеет восьмибитную шину данных; 80188 может использовать только 8087. 80187 не появился одновременно с 80186 и 80188, но фактически был запущен после 80287 и 80387. Хотя интерфейс с основным процессором такой же, как и у 8087 , его ядро ​​- это 80387 и, следовательно, полностью IEEE 754 -соответствует и способен выполнять все дополнительные инструкции 80387.[8]

80287

В 80287 (i287) это математика сопроцессор для Intel 80286 серия микропроцессоры. Модели Intel включали варианты с указанными верхними частотными пределами от 6 до 12 МГц. Позже последовали i80287XL с микроархитектурой 387 и i80287XLT, специальная версия, предназначенная для ноутбуков, а также другие варианты.

80287XL на самом деле является 80387SX с 287 распиновкой. Он содержит внутренний множитель 3/2, поэтому материнские платы, на которых сопроцессор работает на 2/3 скорости ЦП, могли вместо этого запускать FPU с той же скоростью, что и ЦП. Другие модели 287 с производительностью, подобной 387, - это Intel 80C287, построенный с использованием ХМОС III, и AMD 80EC287, произведенная в AMD CMOS процесс, используя только полностью статические ворота.

80287 и 80287XL работают с 80386 микропроцессор и изначально были единственными сопроцессорами, доступными для 80386, до появления 80387 в 1987 году. Наконец, они смогли работать с Cyrix Cx486SLC. Однако для обеих этих микросхем 80387 является предпочтительным из-за его более высокой производительности и большей функциональности его набора команд.

80387

Изображение кристалла процессора Intel 80387

В 80387 (387 или же i387) является первым сопроцессором Intel, полностью совместимым с IEEE 754-1985 стандарт. Выпущенный в 1987 году, спустя целых два года после чипа 386, i387 отличается значительно большей скоростью по сравнению с предыдущими сопроцессорами Intel 8087/80287 и улучшенными характеристиками его тригонометрических функций. Команды FPTAN и FPATAN 8087 и 80287 ограничены аргументом в диапазоне ± π / 4 (± 45 °), а 8087 и 80287 не имеют непосредственный инструкции для функций SIN и COS.[9][требуется полная цитата ]

Без сопроцессора 386 обычно выполняет арифметические операции с плавающей запятой с помощью (относительно медленных) программных процедур, реализуемых во время выполнения с помощью программного обеспечения. обработчик исключений. Когда математический сопроцессор соединен с 386, сопроцессор выполняет арифметические операции с плавающей запятой аппаратно, возвращая результаты намного быстрее, чем (эмулирующий) вызов библиотеки программного обеспечения.

I387 совместим только со стандартным чипом i386, который имеет 32-битную шину процессора. Более поздний i386SX с более узкой 16-битной шина данных, не может взаимодействовать с 32-битной шиной i387. Для i386SX требуется собственный сопроцессор, 80387SX, который совместим с более узкой 16-битной шиной данных SX.

80487

i487SX

В i487SX (P23N) продавался как блок с плавающей запятой сопроцессор для Intel i486SX машины. На самом деле он содержал полноценный i486DX выполнение. При установке в систему i486SX i487 отключил основной ЦП и взял на себя все операции ЦП. I487 принял меры для обнаружения присутствия i486SX и не мог работать без установленного исходного процессора.[10]

80587

В Nx587 был последним FPU для x86, который производился отдельно от CPU, в данном случае NexGen's Nx586.

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

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

  1. ^ Уильям Кахан (2 ноября 1990 г.). «О преимуществах стека 8087» (PDF). Неопубликованные заметки по курсу, Отдел компьютерных наук, Калифорнийский университет в Беркли. Архивировано из оригинал (PDF) 18 января 2017 г.
  2. ^ Уильям Кахан (8 июля 1989 г.). «Как нужно было обрабатывать переполнение стека Intel 8087» (PDF). Архивировано из оригинал (PDF) 12 июня 2013 г.
  3. ^ Джек Вур (1 ноября 1997 г.). «Разговор с Уильямом Каханом».
  4. ^ Давид Моннио, Подводные камни проверки вычислений с плавающей запятой, чтобы появиться в ACM TOPLAS.
  5. ^ Номера взяты из технических паспортов соответствующих процессоров, руководств по программированию и руководств по оптимизации.
  6. ^ «Арифметические процессоры: тогда и сейчас - музей CPU Shack». www.cpushack.com. Получено 14 апреля 2018.
  7. ^ «Коллекция ЦП - Модель 80187». cpu-info.com. Получено 14 апреля 2018.
  8. ^ "80-БИТНЫЙ МАТЕМАТИЧЕСКИЙ КОПРОЦЕССОР 80C187" (PDF). datasheetcatalog.org. Ноябрь 1992. Получено 11 августа 2020.
  9. ^ Документация по Borland Turbo Assembler.
  10. ^ Intel 487SX на Бесплатный онлайн-словарь по вычислительной технике

Примечания

  1. ^ Fabless компании разрабатывают микросхемы и полагаются на фабричную компанию в производстве, в то время как фабричные компании могут заниматься проектированием и производством самостоятельно.

внешняя ссылка