х87
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( x ) в роли, аналогичной традиционному аккумулятору (комбинированный адрес назначения и левый операнд). ). Это также можно отменить для каждой инструкции, используя ST(0) в качестве немодифицированного операнда и ST( x ) в качестве пункта назначения . Кроме того, содержимое ST(0) может быть обменено с другим регистром стека с помощью инструкции под названием FXCH ST( x ).
Эти свойства позволяют использовать стек x87 как семь свободно адресуемых регистров плюс выделенный аккумулятор (или как семь независимых аккумуляторов). Это особенно применимо к суперскалярным процессорам x86 (таким как Pentium 1993 года и новее), где эти инструкции обмена (коды D9C8..D9CF h ) оптимизированы до нулевого штрафа за тактовую частоту за счет использования одного из целочисленных путей для FXCH ST( x ) параллельно с инструкцией FPU. Несмотря на то, что это естественно и удобно для программистов на языке ассемблера , некоторые авторы компиляторов сочли сложным создание автоматических генераторов кода , которые эффективно планируют код x87. Такой интерфейс на основе стека потенциально может свести к минимуму необходимость сохранять рабочие переменные при вызовах функций по сравнению с интерфейсом на основе регистров. [1] (хотя исторически проблемы проектирования реализации 8087 ограничивали этот потенциал. [2] [3] )
x87 обеспечивает двоичную арифметику с плавающей запятой одинарной, двойной точности и 80-битной двоичной точности с плавающей запятой в соответствии со стандартом IEEE 754-1985 . По умолчанию все процессоры x87 используют внутреннюю 80-битную точность двойного расширения (чтобы обеспечить постоянную точность во многих вычислениях, см. обоснование конструкции IEEE 754 ). Таким образом, данная последовательность арифметических операций может вести себя несколько иначе по сравнению со строгим FPU одинарной или двойной точности IEEE 754. [4] Поскольку иногда это может быть проблематично для некоторых получисловых вычислений, написанных с учетом двойной точности для правильной работы, чтобы избежать таких проблем, x87 можно настроить с помощью специального регистра конфигурации/состояния для автоматического округления до одинарной или двойной точности после каждой операции. С момента появления SSE2 инструкции x87 не так важны, как раньше, но остаются важными в качестве высокоточной скалярной единицы для числовых вычислений, чувствительных к ошибкам округления и требующих 64-битной мантиссы точности и расширенного диапазона, доступных в 80-битный формат.
Производительность [ править ]
Подсчет тактовых циклов для примеров типичных инструкций FPU x87 (здесь показаны только версии регистр-регистр). [5]
Обозначение A ... B (от минимума до максимума) охватывает изменения синхронизации в зависимости от переходного состояния конвейера и выбранной арифметической точности (32, 64 или 80 бит); он также включает вариации, связанные с числовыми случаями (например, количество установленных битов, ноль и т. д.). Обозначение L → H отображает значения, соответствующие самой низкой (L) и самой высокой (H) максимальным тактовым частотам, которые были доступны.
реализация x87 | ФАДД | ФМУЛ | ФДИВ | FXCH | ФКОМ | ФСКРТ | ФПТАН | ФПАТАН | Макс. часы (МГц) | Пик FMUL (миллионов/ с ) | ФМУЛ § отн. 5 МГц 8087 |
---|---|---|---|---|---|---|---|---|---|---|---|
8087 | 70…100 | 90…145 | 193…203 | 10…15 | 40…50 | 180…186 | 30…540 | 250…800 | 5 → 10 | 0.034…0.055 → 0.100…0.111 | 1 → 2× быстрее |
80287 (оригинал) | 6 → 12 | 0.041…0.066 → 0.083…0.133 | 1.2 → 2.4× | ||||||||
80387 (и более поздние модели 287) | 23…34 | 29…57 | 88…91 | 18 | 24 | 122…129 | 191…497 | 314…487 | 16 → 33 | 0.280…0.552 → 0.580…1.1 | ~10 → 20× |
80486 (или 80487) | 8…20 | 16 | 73 | 4 | 4 | 83…87 | 200…273 | 218…303 | 16 → 50 | 1.0 → 3.1 | ~18 → 56× |
Сайрикс 6х86 , Сайрикс МИИ | 4…7 | 4…6 | 24…34 | 2 | 4 | 59…60 | 117…129 | 97…161 | 66 → 300 | 11…16 → 50…75 | ~320 → 1400× |
AMD K6 (включая K6 II/III) | 2 | 2 | 21…41 | 2 | 3 | 21…41 | ? | ? | 166 → 550 | 83 → 275 | ~1500 → 5000× |
Пентиум /Пентиум 2010 | 1…3 | 1…3 | 39 | 1 (0*) | 1…4 | 70 | 17…173 | 19…134 | 60 → 300 | 20…60 → 100…300 | ~1100 → 5400× |
Пентиум Про | 1…3 | 2…5 | 16…56 | 1 | 28…68 | ? | ? | 150 → 200 | 30…75 → 40…100 | ~1400 → 1800× | |
Пентиум II /III | 1…3 | 2…5 | 17…38 | 1 | 27…50 | ? | ? | 233 → 1400 | 47…116 → 280…700 | ~2100 → 13000× | |
Атлон (К7) | 1…4 | 1…4 | 13…24 | 1…2 | 16…35 | ? | ? | 500 → 2330 | 125…500 → 580…2330 | ~9000 → 42000× | |
Атлон 64 (К8) | 1000 → 3200 | 250…1000 → 800…3200 | ~18000 → 58000× | ||||||||
Пентиум 4 | 1…5 | 2…7 | 20…43 | несколько циклы | 1 | 20…43 | ? | ? | 1300 → 3800 | 186…650 → 543…1900 | ~11000 → 34000× |
- * Эффективная нулевая задержка тактовой частоты часто возможна посредством суперскалярного выполнения.
- § 8087 с частотой 5 МГц был оригинальным процессором x87. По сравнению с типичными программно реализованными процедурами с плавающей запятой на 8086 (без 8087), эти коэффициенты будут даже больше, возможно, еще в 10 раз (т. е. правильное сложение чисел с плавающей запятой на языке ассемблера вполне может потребовать более 1000 циклов). ).
Производители [ править ]
Компании, которые разработали или произвели [а] Модули с плавающей запятой, совместимые с моделями Intel 8087 или более поздними, включают AMD ( 287 , 387 , 486DX , 5x86 , K5 , K6 , K7 , K8 ), Chips and Technologies ( сопроцессоры Super MATH ), Cyrix ( FasMath , Cx87SLC , Cx87DLC) . и т. д., 6x86 , Cyrix MII ), Fujitsu (ранние версии Pentium Mobile и т. д.), Harris Semiconductor (производила 80387 и 486DX процессоры ), IBM (различные 387 и 486 конструкции ), IDT ( WinChip , C3 , C7 , Nano и т. д.). .), IIT ( 2C87 , 3C87 и т. д.), LC Technology ( сопроцессоры Green MATH ), National Semiconductor ( Geode GX1 , Geode GXm и т. д.), NexGen ( Nx587 ), Rise Technology ( mP6 ), ST Microelectronics (производит 486DX , 5x86 и т. д.), Texas Instruments (производит 486DX процессоры и т. д.), Transmeta ( TM5600 и TM5800 ), ULSI ( сопроцессоры Math·Co ), VIA ( C3 , C7 и Nano и т. д.) .), Weitek ( 1067 , 1167 , 3167 и 4167 ) и Xtend ( 83S87SX-25 и другие сопроцессоры).
Архитектурные поколения [ править ]
8087 [ править ]
8087 для 16-битных процессоров , был первым математическим сопроцессором разработанным Intel . Он был создан для работы в паре с микропроцессорами Intel 8088 или 8086 . (Более ранние процессоры Intel с плавающей запятой 8231 и 8232 , продававшиеся для использования с процессором i8080, на самом деле были лицензионными версиями FPU AMD Am9511 и Am9512 1977 и 1979 годов. [6] )
80C187 [ править ]
Хотя в исходной таблице данных 1982 года ( на базе NMOS ) 80188 и 80186, кажется, упоминаются конкретные математические сопроцессоры, [7] оба чипа фактически работали в паре с 8087.
Однако в 1987 году для работы с обновленным CMOS на базе процессором Intel 80C186 компания Intel представила процессор 80C187. [8] математический сопроцессор. Хотя интерфейс 80C187 с основным процессором такой же, как и у 8087, его ядро по сути такое же, как у 80387SX, и, таким образом, полностью совместимо со стандартом IEEE 754 и способно выполнять все дополнительные инструкции 80387. [9]
80287 [ править ]
80287 i287 ( 80286 ) — математический сопроцессор для Intel серии микропроцессоров . В моделях Intel были варианты с указанным верхним пределом частоты от 6 до 12 МГц. Версия NMOS была доступна на частотах 6, 8 и 10 МГц. [10] Доступная версия сопроцессора Intel 80287-10 Numerics с частотой 10 МГц стоила 250 долларов США в количестве 100 штук. [11] Эти коробочные версии 80287, 80287-8 и 80287-10 были доступны по цене 212, 326 и 374 долларов США соответственно. Была коробочная версия 80C287A, доступная за 457 долларов США. [12] Другими моделями 287 с производительностью, аналогичной 387, являются Intel 80C287, созданная с использованием CHMOS AMD III, и AMD 80EC287, изготовленная по технологии CMOS , с использованием только полностью статических вентилей.
Позже последовал i80287XL с микроархитектурой 387SX и распиновкой 287, [13] i80287XLT, специальная версия, предназначенная для ноутбуков, а также другие варианты. Он содержит внутренний множитель 3/2, поэтому материнские платы, на которых сопроцессор работает на скорости процессора 2/3, вместо этого могут запускать FPU на той же скорости, что и процессор. И 80287XL, и 80287XLT обеспечивали на 50% лучшую производительность, на 83% меньше энергопотребления и имели дополнительные инструкции. [14]
80287 работает с микропроцессором 80386 и изначально был единственным сопроцессором, доступным для 80386 до появления 80387 в 1987 году. Наконец, они смогли работать с Cyrix Cx486SLC . Однако для обоих этих чипов настоятельно рекомендуется использовать 80387 из-за его более высокой производительности и более широких возможностей набора команд.
- Версия Intel 80287 с тактовой частотой 6 МГц
- Выстрел кристалла Intel 80287
- Интел 80287XL
- Интел 80287XLT
80387 [ править ]
80387 387 ( ) — первый сопроцессор Intel , или i387 полностью соответствующий стандарту IEEE 754-1985 . Выпущенный в 1987 году, [15] Спустя два года после чипа 386, i387 имеет значительно улучшенную скорость по сравнению с предыдущими сопроцессорами Intel 8087/80287 и улучшенные характеристики тригонометрических функций. Он был доступен по цене 500 долларов США в количестве 100 штук. [16] Вскоре после этого он стал доступен через подразделение Intel Personal Computer Enhancement Operation по розничной рыночной цене 795 долларов США. [17] Версия с частотой 25 МГц была доступна в розничной продаже по цене 1395 долларов США. [18] Математический сопроцессор Intel M387 соответствует стандарту MIL-STD-883 Rev. C. Это устройство было протестировано, включая циклическое изменение температуры от -55 до 125 °C, герметичность и длительную приработку. Эта военная версия работает на частоте 16 МГц. Эта военная версия была доступна в 68-выводном PGA и четырехканальном плоском корпусе. Эта военная версия была доступна по цене 1155 долларов США в количестве 100 единиц для версии PGA. [19] Была доступна версия 387DX с частотой 33 МГц и производительностью 3,4 мегапикселя в секунду . [20] Следующие коробочные версии математического сопроцессора 387DX с частотой 16, 20, 25 и 33 МГц были доступны по цене 570, 647, 814 и 994 долларов США соответственно. [21] Инструкции FPTAN и FPATAN 8087 и 80287 ограничены аргументом в диапазоне ±π/4 (±45°), а 8087 и 80287 не имеют прямых инструкций для функций SIN и COS. [22] [ нужна полная цитата ]
Без сопроцессора 386 обычно выполняет арифметические операции с плавающей запятой с помощью (относительно медленных) программных процедур, реализуемых во время выполнения с помощью программного обработчика исключений . Когда математический сопроцессор соединен с 386, сопроцессор выполняет арифметику с плавающей запятой аппаратно, возвращая результаты намного быстрее, чем (эмулирующий) вызов программной библиотеки.
i387 совместим только со стандартным чипом i386, имеющим 32-битную процессорную шину. Более поздний удешевленный i386SX, имеющий более узкую 16-битную шину данных , не может взаимодействовать с 32-битной шиной i387. Для i386SX требуется собственный сопроцессор 80387SX , который совместим с более узкой 16-битной шиной данных SX. Intel выпустила версию сопроцессора 387SX с низким энергопотреблением. [23]
- я387
- i387SX
- i387DX
- Микроархитектура i387 с 16-битным бочкообразным сдвигом и CORDIC блоком
- i386DX с i387DX
- Розетка для 80387
80487 [ править ]
i487SX ( P23N ) продавался как с плавающей запятой сопроцессор для машин Intel i486SX . Фактически он содержал полноценную реализацию i486DX . При установке в систему i486SX i487 отключил основной процессор и взял на себя все операции процессора. i487 принял меры для обнаружения присутствия i486SX и не будет работать без исходного процессора. [24] [25] [ не удалось пройти проверку ]
80587 [ править ]
Nx587 был последним FPU для x86 , который производился отдельно от ЦП, в данном случае Nx586 от NexGen .
См. также [ править ]
Примечания [ править ]
- ^ Компании без фабрики разрабатывают чип и полагаются на фабрику-компанию в ее производстве, в то время как компании-фабриканты могут самостоятельно заниматься как разработкой, так и производством.
Ссылки [ править ]
- ^ Уильям Кахан (2 ноября 1990 г.). «О преимуществах стека 8087» (PDF) . Неопубликованные конспекты курса, Отдел компьютерных наук, Калифорнийский университет в Беркли . Архивировано из оригинала (PDF) 18 января 2017 года.
- ^ Уильям Кахан (8 июля 1989 г.). «Как следовало обрабатывать переполнение/недополнение стека Intel 8087» (PDF) . Архивировано из оригинала (PDF) 12 июня 2013 года.
- ^ Джек Вёр (1 ноября 1997 г.). «Разговор с Уильямом Каханом» .
- ^ Дэвид Моннио (май 2008 г.). «Подводные камни проверки вычислений с плавающей запятой» . Транзакции ACM в языках и системах программирования . 30 (3): 1–41. arXiv : cs/0701192 . дои : 10.1145/1353445.1353446 . S2CID 218578808 .
- ^ Числа взяты из технических характеристик соответствующих процессоров, руководств по программированию и руководств по оптимизации.
- ^ «Арифметические процессоры: тогда и сейчас» . www.cpushack.com . 23 сентября 2010 г. Проверено 3 мая 2023 г.
- ^ Интел (1983). Справочник по микропроцессорам и периферийным устройствам Intel . стр. 3–25 (iAPX 186/20) и 3–106 (iAPX 188/20).
- ^ «Коллекция ЦП — Модель 80187» . cpu-info.com . Архивировано из оригинала 23 июля 2011 года . Проверено 14 апреля 2018 г.
- ^ «80-битный математический сопроцессор 80C187» (PDF) . Ноябрь 1992 года . Проверено 3 мая 2023 г.
- ^ Йошида, Стейси, «Математические сопроцессоры: поддержание работоспособности вашего компьютера», корпорация Intel, Microcomputer Solutions, сентябрь/октябрь 1990 г., стр. 16
- ^ Корпорация Intel, «Новый компонент продукта: 32-битный микропроцессор с небольшой помощью друзей», Специальные решения для 32-битных проблем, ноябрь/декабрь 1985 г., стр. 13.
- ^ Корпорация Intel, «Усовершенствование персонального компьютера», Операция по усовершенствованию персонального компьютера, приказ № 245.2, 10-89/75K/AL/GO, октябрь 1989 г., стр. 4
- ^ Корпорация Intel, «Новый продукт: системы: модуль SnapIn 386 обновляет ПК PS / 2», Microcomputer Solutions, сентябрь/октябрь 1991 г., стр. 12
- ^ Йошида, Стейси, «Математические сопроцессоры: поддержание работоспособности вашего компьютера», корпорация Intel, Microcomputer Solutions, сентябрь/октябрь 1990 г., стр. 16
- ^ Моран, Том (16 февраля 1987 г.). «Чипы для повышения производительности 386 машин, утверждает Intel» . Инфомир . Том. 9, нет. 7. с. 5. ISSN 0199-6649 .
- ^ «Компоненты, ориентированные на новые продукты: 32-битный вычислительный механизм, полный вперед». Решения . Корпорация Intel: 10 мая – июнь 1987 г.
- ^ «NewsBit: Intel 80387 доступен через розничные каналы». Решения . Корпорация Intel: 1. Июль – август 1987 г.
- ^ Корпорация Intel, «NewsBits: 25 МГц 80387, доступная через розничные каналы», Microcomputer Solutions, сентябрь/октябрь 1988 г., стр. 1
- ^ Корпорация Intel, «Фокус: компоненты: военная периферия поддерживает микропроцессор M386», Microcomputer Solutions, март/апрель 1989 г., стр. 12
- ^ Льюнес, Энн, «Архитектура Intel386 останется здесь», корпорация Intel, Microcomputer Solutions, июль/август 1989 г., стр. 2
- ^ Корпорация Intel, «Усовершенствование персонального компьютера», Операция по усовершенствованию персонального компьютера, приказ № 245.2, 10-89/75K/AL/GO, октябрь 1989 г.
- ^ Документация Borland Turbo Assembler.
- ^ Льюнес, Энн, «Архитектура Intel386 останется здесь», корпорация Intel, Microcomputer Solutions, июль/август 1989 г., стр. 2
- ^ Intel 487SX в Бесплатном онлайн-словаре по вычислительной технике
- ^ «Интел 80487» . www.cpu-world.com . Проверено 9 июня 2021 г.
- Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 1: Базовая архитектура (PDF) . Интел.