Fpu что это в компьютере

Обновлено: 04.07.2024

Быстрый процессор - это великолепно! Однако факторов, влияющих на быстродействие процессора, достаточно много. Попадаются люди, которые меряют скорость исключительно в гигагерцах - чем больше, тем лучше. Те, кто поопытнее, обычно оценивают производительность процессора либо по специальным тестам, либо по тому, как он справляется с обработкой информации в реальных приложениях, требующих больших объемов вычислений (3D-графика, сжатие видеофильмов и т.п.). С учетом того, что большинство современных приложений и игр требуют огромного количества вычислений именно над вещественными числами (числа с плавающей точкой), то общая производительность процессора зависит от того, насколько быстро он их обрабатывает. Для этих целей в процессоре существует специальный модуль, получивший название Floating-Point Unit (FPU) - модуль вычислений с плавающей точкой. В то же время производительность этого модуля зависит не только от рабочей частоты процессора, но и от его конструктивных особенностей.

В начале эволюции IBM-совместимых компьютеров вычисления над вещественными числами брал на себя математический сопроцессор, конструктивно выполненный отдельно от центрального процессора. Однако уже в 486-м процессоре Intel применила встроенный модуль вычислений с плавающей точкой, значительно увеличив при этом скорость работы процессора с вещественными числами. Впоследствии на встроенный FPU перешли и другие производители процессоров для персональных компьютеров.

Отметим, что при работе с вещественными числами существует тот же нюанс, что и в целочисленных операциях - команда не может быть выполнена за один такт ядра процессора (смотрите статью "Зачем процессору конвейер", "КВ" №3/2003). И если в 486-х процессорах для обработки целочисленных команд уже начал использоваться пятиступенчатый конвейер, то FPU был по-прежнему не конвейерного типа, т.е. следующая команда с плавающей точкой всегда должна была дожидаться выполнения предыдущей. Это существенно тормозило работу процессора с мультимедийными приложениями. А последние в то время уже начали стремительно набирать обороты в своих "запросах". Поэтому вполне естественно, что Intel, начиная с процессоров Pentium, стала применять конвейер не только в целочисленных, но и в вещественных операциях. Корпорация AMD, в свою очередь, пошла по несколько иному пути - вместо конвейеризации FPU она начала внедрять в свою продукцию технологию 3DNow!, которая также была направлена на повышение производительности в операциях с вещественными числами. Эта технология столкнулась с множеством проблем в своей реализации. Думаю, многие помнят, как AMD K6-2, призванный конкурировать с Pentium II в целочисленных операциях, на процентов тридцать отставал от него в обработке вещественных чисел.

Но, как говорится, на ошибках учатся, поэтому в Athlon'ах и последующих процессорах корпорация AMD перешла на конвейерный тип FPU. Более того, в новых процессорах AMD применила в модуле вычислений с плавающей точкой не только суперконвейеризацию, но и суперскалярность - в одном процессоре стало располагаться, грубо говоря, три модуля FPU, каждый из которых принимает участие в вычислениях с плавающей точкой. Другими словами, с выходом процессоров Athlon/Duron продукция AMD перестала уступать в скорости вычислений над вещественными числами своему конкуренту - корпорации Intel. А это сыграло очень существенную роль в расстановке сил этих извечных соперников на современном процессорном рынке.

aidamini

Инструкции

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

Как запустить

FPU – floating point unit – это сопроцессор – модуль для выполнения операций с вещественными числами, преимущественно с плавающей точкой (часто называют с плавающей запятой). Основные ядра не могут заниматься такими расчётами, потому что для выполнения математических операций с вещественными числами нужны соответствующие процедуры.

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

Запуск стресс теста AIDA64

  1. Отметьте флажком пункт StressFPU, остальные галочки снимите, чтобы не нагружать другие компоненты компьютера.
  2. Над первым графиком снимите галочки, стоящие возле всех компонентов, кроме CPU, и жмите Start.

Запуск теста AIDA64

Наблюдайте за температурой оборудования и не допускайте ее приближения к критической градусов на 20 0 С. Пиковое значение указано в разделе: «Системная плата» – CPUID – строка «Температура Tjmax».

Максимальная температура AIDA64

На первом графике значение термодатчика центрального процессора CPU начнет стремительно подниматься. На нижнем – одна кривая показывает нагрузку на математический сопроцессор, вторая – CPU Throttling – его троттлинг. Это механизм защиты процессора от термических повреждений, возникающих при перегреве или длительной работе при высокой температуре.

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

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

Тестирование прерывается вручную кнопкой Stop. В настройках АИДА 64 можно указать приложению автоматически завершать работу при достижении на термодатчике указанной температуры центрального процессора или вывести уведомление о достижении указанного значения на термодатчике.


Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.

Простым «целочисленным» процессорам для работы с вещественными числами и математическими операциями требуются соответствующие процедуры поддержки и время для их выполнения. Модуль операций с плавающей запятой поддерживает работу с ними на уровне примитивов — загрузка, выгрузка вещественного числа (в/из специализированных регистров) или математическая операция над ними выполняется одной командой, за счёт этого достигается значительное ускорение таких операций.

Содержание

Сопроцессоры

x87 — это специальный набор инструкций для работы с математическими вычислениями, являющийся подмножеством архитектуры процессоров x86. Такое название он получил, потому что первоначальные отдельные математические сопроцессорные чипы имели названия, заканчивающиеся на 87. Как и другие расширения базового набора инструкций процессора, эти инструкции не являются строго необходимыми для построения рабочей программы, но будучи аппаратно реализованными, общие математические задачи они позволяют выполнять гораздо быстрее. Например, в наборе инструкций x87 присутствуют команды для расчёта значений синуса или косинуса.

Сопроцессоры Intel семейства x86

Для процессоров семейства x86 с 8086/8088 по 386 модуль операций с плавающей запятой был выделен в отдельную микросхему, называемую математическим сопроцессором. Для установки сопроцессора на плате компьютера предусматривался отдельный разъём.

Сопроцессор не является полноценным процессором, так как не умеет делать многих необходимых для этого операций (например, не умеет работать с программой и вычислять адреса памяти), являясь всего лишь придатком центрального процессора.

Одна из схем взаимодействия центрального процессора и сопроцессора, применяемая, в частности, в x86-сопроцессорах, реализуется следующим образом:

  • Сопроцессор подключен к шинам центрального процессора, а также имеет несколько специальных сигналов для синхронизации процессоров между собой.
  • Часть командных кодов центрального процессора зарезервирована для сопроцессора, он следит за потоком команд, игнорируя другие команды. Центральный процессор, наоборот, игнорирует команды сопроцессора, занимаясь только вычислением адреса в памяти, если команда предполагает к ней обращение. Центральный процессор делает цикл фиктивного считывания, позволяя сопроцессору считать адрес с адресной шины. Если сопроцессору необходимо дополнительное обращение к памяти (для чтения или записи результатов), он выполняет его через захват шины.
  • После получения команды и необходимых данных сопроцессор начинает её выполнение. Пока сопроцессор выполняет команду, центральный процессор выполняет программу дальше, параллельно с вычислениями сопроцессора. Если следующая команда также является командой сопроцессора, процессор останавливается и ожидает завершения выполнения сопроцессором предыдущей команды.
  • Также существует специальная команда ожидания (FWAIT), принудительно останавливающая процессор до завершения вычислений (если для продолжения программы необходимы их результаты). В настоящее время команда используется лишь для обработки исключений при работе с плавающей точкой, работа процессора и сопроцессора синхронизируется прозрачно для программиста.

Начиная с процессора Intel486DX модуль операций с плавающей запятой был интегрирован в центральный процессор и назван FPU. В линейке Intel486SX модуль FPU отключался (поначалу в эту линейку попадали процессоры с бракованным FPU). Для процессоров Intel486SX также выпускался «сопроцессор» Intel487SX, но фактически он являлся процессором Intel486DX, и при его установке процессор Intel486SX отключался.

Несмотря на интеграцию, FPU в процессорах i486 представляет собой неизменный сопроцессор, выполненный на том же кристалле, более того, схема FPU i486 полностью идентична сопроцессору предыдущего поколения 387DX вплоть до тактовой частоты (в два раза меньшей, чем частота центрального процессора). Настоящая интеграция FPU c центральным процессором началась только в процессорах Pentium модели MMX.

Сопроцессоры x86 от сторонних производителей

Широкое распространение в соответствующий период получили сопроцессоры для платформы x86, выпускавшиеся компанией Weitek — ею были выпущены 1167, 2167 в виде набора микросхем и микросхемы 3167, 4167, для процессоров 8086, 80286, 80386, 80486, соответственно. По сравнению с сопроцессорами от Intel они обеспечивали в 2—3 раза большую производительность, но обладали несовместимым программным интерфейсом, реализованным через технологию memory-mapping. Она сводилась к тому, что основной процессор должен был записывать информацию в те или иные области памяти, контролируемые Weitek-овским сопроцессором (собственно оперативной памяти там, конечно, не было). Конкретный адрес, куда производилась запись, интерпретировался в качестве той или иной команды. Несмотря на несовместимость, сопроцессоры от Weitek были широко поддержаны как разработчиками ПО, так и производителями материнских плат, предусматривавших на них гнёзда для установки такой микросхемы.

Ряд других компаний также выпускал различные несовместимые математические сопроцессоры, реализуя интерфейс к ним через порты ввода-вывода или прерывания BIOS, но они не получили такого широкого распространения.

Компании-производители клонов выпускали совместимые с 80287 80387 сопроцессоры, работавшие быстрее аналогичных интеловских. Среди этих компаний можно упомянуть Cyrix, AMD, Chips & Technologies (C&T). Иногда система команд этих сопроцессоров расширялась несколькими несовместимыми, например, аналог 80287 от C&T содержал команды для работы с вектором из четырёх значений с плавающей точкой. Серьёзной поддержки от производителей ПО эти расширенные команды не получили.

Процессоры EMC87 от фирмы Cyrix могли работать как в режиме программной совместимости с Intel 80387, так и в собственном несовместимом режиме программирования. Для них обеспечивалась аппаратная совместимость с разъёмом 80387-го сопроцессора.

В СССР выпускалась микросхема (КМ)1810ВМ87, которая являлась аналогом 8087.

Другие платформы

Аналогично, материнские платы ПК, построенных на процессорах Motorola, до разработки этой фирмой процессора MC68040 (в который сопроцессор был встроен) содержали математический сопроцессор. Как правило, в качестве FPU использовался сопроцессор 68881 16 МГц или 68882 25 МГц. Практически любой современный процессор имеет встроенный сопроцессор.

Компания Weitek также выпускала математические сопроцессоры для платформ 68000 и MIPS.

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

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

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

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

Устройство FPU

Все процессоры Intel и AMD, начиная с 486DX, имеют встроенный математический сопроцессор, и в отдельном сопроцессоре не нуждаются (за исключением Intel486SX). Тем не менее, термин x87 всё ещё используется для выделения той части инструкций процессора, которая занимается вычислениями с использованием плавающей запятой; компиляторы могут использовать эти инструкции для производства кода, который работает быстрее, нежели тот, что использует вызовы к библиотекам для выполнения операций с плавающей запятой.

Инструкции x87 совместимы со стандартом IEEE-754. Однако x87 выполняют операции не в строгом соответствии с форматами IEEE-754, из-за использования более широких регистров. Поэтому последовательность арифметических операций может выполняться несколько по-разному на наборе x87 и на процессоре, строго следующем формату IEEE-754.

x87 организует свои регистры не как массив, как большинство других архитектур, а как регистровый стек, работающий по принципу обратной польской записи. Это означает, что в один момент времени только два верхних регистра доступны для проведения операций, а доступ к другим регистрам требует манипуляций со стеком. Хотя такая организация получается и удобной для программистов, она делает трудоёмким построение эффективного кода x87 для компиляторов.

Начиная с Pentium III, вычисления с помощью инструкций SSE осуществляются с одинарной точностью, а в более поздних версиях — с двойной точностью форматов IEEE-754. После появления SSE2 использование x87 в значительной степени умаляется в 64-разрядных архитектурах x86-64 и связанных с ней 64-битных реализациях операционных систем, таких, как Microsoft Windows, Mac OS X, Solaris, FreeBSD и Linux, хотя он по-прежнему хорошо поддерживается для полной совместимости со старыми приложениями.

Модуль операций с плавающей запятой представляет собой стековый калькулятор, работающий по принципу обратной польской записи. Перед операцией аргументы помещаются в LIFO-стек, при выполнении операции необходимое количество аргументов снимается со стека. Результат операции помещается в стек, где может быть использован в дальнейших вычислениях или может быть снят со стека для записи в память. Также поддерживается и прямая адресация аргументов в стеке относительно вершины.

Форматы данных

Внутри FPU числа хранятся в 80-битном формате с плавающей запятой, для записи же или чтения из памяти могут использоваться:


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

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

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

  • Эмулятор модуля с плавающей запятой (библиотека с плавающей запятой).
  • Надстройка FPU.
  • Интегрированный FPU.

СОДЕРЖАНИЕ

История

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

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

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

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

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

Cordic процедура была реализована в x87 Intel сопроцессоров ( 8087 , 80287, 80387) до 80486 микропроцессора серии, а также в Motorola 68881 и 68882 для некоторых видов инструкций с плавающей запятой, в основном как способ уменьшить ворота счетчиков (и сложность) подсистемы FPU.

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

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

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

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

Читайте также: