Открыть сервис

Математический сопроцессор

Математический сопроцессор (также известный как блок операций с плавающей запятой, FPU — Floating Point Unit) — это специализированный модуль центрального процессора (ЦП) или отдельная микросхема, предназначенная для выполнения арифметических операций над числами с плавающей запятой, а также для вычисления некоторых трансцендентных функций (тригонометрических, логарифмических, экспоненциальных) с высокой скоростью и точностью. В отличие от основного процессора, который может выполнять такие операции программно, сопроцессор реализует их аппаратно, что значительно ускоряет вычисления в научных, инженерных и графических приложениях.

История

Ранние этапы и отдельные микросхемы

Первые математические сопроцессоры появились в конце 1970-х — начале 1980-х годов, когда микропроцессоры общего назначения, такие как Intel 8086 и 8088, не имели встроенных средств для эффективной работы с плавающей запятой. Для решения этой задачи компании Intel, AMD, Cyrix и другие выпускали отдельные микросхемы, которые подключались к системной шине и работали параллельно с основным процессором.

Наиболее известным представителем этого поколения является Intel 8087 (1979 год), предназначенный для работы с процессорами 8086 и 8088. Он выполнял операции сложения, вычитания, умножения, деления, а также извлечение квадратного корня, вычисление синуса, косинуса, тангенса, арктангенса, логарифмов и экспонент. Архитектура 8087 стала основой для последующих моделей: 80287 (для 80286), 80387 (для 80386) и 80487 (для 80486). В СССР и России выпускались аналоги этих микросхем, например, КР1810ВМ87 (аналог Intel 8087) и КР1834ВМ87.

Интеграция в центральный процессор

С развитием технологий и ростом тактовых частот стало невыгодно размещать сопроцессор на отдельном кристалле из-за задержек при передаче данных и увеличения стоимости системы. Первым массовым процессором со встроенным математическим сопроцессором стал Intel 80486DX (1989 год). В более дешёвой версии 80486SX сопроцессор отсутствовал, и его можно было установить отдельно (Intel 80487SX). Начиная с процессоров Pentium (1993 год) и их аналогов от других производителей (AMD K5, K6), FPU стал неотъемлемой частью всех процессоров общего назначения для настольных компьютеров.

Архитектура и принцип работы

Регистровая модель

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

  • Регистровый стек — 8 регистров (ST(0) — ST(7)), каждый из которых может хранить число с плавающей запятой в формате расширенной точности (80 бит). Арифметические операции выполняются над вершиной стека и операндами, которые могут быть извлечены из памяти или других регистров.
  • Регистр состояния (Status Word) — содержит флаги результатов операций (нуль, переполнение, потеря значимости, бесконечность, недопустимая операция) и информацию о состоянии стека.
  • Регистр управления (Control Word) — позволяет настраивать режимы округления, точность и обработку исключений.
  • Регистр тегов (Tag Word) — указывает, какие регистры стека содержат корректные данные, а какие пусты.

Система команд

Набор команд сопроцессора включает:

  • Арифметические: FADD, FSUB, FMUL, FDIV, FABS, FCHS (изменение знака).
  • Трансцендентные: FSIN, FCOS, FSINCOS, FPTAN, FPATAN, F2XM1 (2^x — 1), FYL2X (y log2(x)), FYL2XP1 (y log2(x+1)).
  • Загрузка/сохранение: FLD (загрузка в стек), FST (сохранение), FSTP (сохранение с извлечением из стека).
  • Управляющие: FINIT (инициализация), FCLEX (очистка флагов), FWAIT (ожидание завершения операции).

Взаимодействие с основным процессором

В современных процессорах FPU работает как часть конвейера инструкций. Команды сопроцессора кодируются в общем потоке команд ЦП, но выполняются на отдельном исполнительном устройстве. Для синхронизации используется механизм ожидания (FWAIT), который приостанавливает выполнение следующих инструкций до завершения операции FPU. В процессорах с архитектурой x86-64 (AMD64, Intel 64) поддержка x87 сохранена для обратной совместимости, но для высокопроизводительных вычислений рекомендуется использовать наборы команд SSE, AVX, FMA, которые также работают с плавающей запятой, но используют векторные регистры (XMM, YMM, ZMM).

Типы и классификация

По способу реализации

  • Отдельный сопроцессор — микросхема, устанавливаемая на материнской плате или в специальном разъёме (например, Intel 8087, 80287). Требовал отдельной тактовой частоты и синхронизации.
  • Встроенный сопроцессор — входит в состав кристалла ЦП (начиная с Intel 80486DX). Является стандартным для всех современных процессоров.
  • Программный эмулятор — библиотека, которая выполняет операции с плавающей запятой программно, используя целочисленные инструкции. Используется в системах, где аппаратный FPU отсутствует или неисправен (например, в ранних версиях Windows или в эмуляторах).

По архитектуре

  • x87классическая архитектура с регистровым стеком, использовавшаяся в процессорах Intel 8087–80487 и в режиме совместимости в последующих поколениях.
  • SSE/SSE2/SSE3/SSSE3/SSE4.x — наборы инструкций, введённые Intel в процессорах Pentium III (1999) и позже. Работают с векторными регистрами XMM (128 бит) и поддерживают операции с плавающей запятой одинарной (32 бит) и двойной (64 бит) точности.
  • AVX/AVX2/AVX-512 — расширения, использующие регистры YMM (256 бит) и ZMM (512 бит). Позволяют выполнять до 16 операций с плавающей запятой за такт.
  • FMA (Fused Multiply-Add) — инструкции, выполняющие умножение и сложение за одну операцию без промежуточного округления, что повышает точность и производительность.

Применение

Научные и инженерные расчёты

Математические сопроцессоры широко используются в задачах, требующих высокой точности и скорости вычислений с плавающей запятой: моделирование физических процессов, расчёт траекторий, обработка сигналов, численное решение дифференциальных уравнений, криптография (например, в алгоритмах RSA и ECC).

Компьютерная графика и игры

Современные графические процессоры (GPU) имеют собственные блоки FPU, но в ранних 3D-играх (например, Quake, Doom) математический сопроцессор ЦП использовался для расчёта освещения, трансформации вершин и текстур. В настоящее время эти задачи выполняются видеокартой, но FPU ЦП по-прежнему задействуется в физических симуляциях (PhysX, Havok) и процедурной генерации.

Финансовые и бухгалтерские системы

Хотя для финансовых расчётов чаще используется фиксированная запятая (decimal), операции с плавающей запятой применяются в статистическом анализе, прогнозировании, расчёте процентов и валютных курсов.

Встраиваемые системы и микроконтроллеры

Многие современные микроконтроллеры (например, ARM Cortex-M4, M7, STM32F4, STM32H7) имеют встроенный FPU, что позволяет выполнять цифровую обработку сигналов (фильтры, БПФ), управление двигателями и навигационные расчёты без использования внешних DSP.

Производительность

Производительность FPU измеряется в количестве операций с плавающей запятой в секунду (FLOPS — Floating Point Operations Per Second). Современные процессоры общего назначения (Intel Core i9, AMD Ryzen 9) достигают пиковой производительности в несколько сотен гигафлопс (GFLOPS) при использовании векторных инструкций AVX-512. Для сравнения, Intel 8087 выполнял около 50 000 операций в секунду (50 кфлопс). Рекордсменами по производительности FPU являются графические процессоры (NVIDIA A100, H100) и специализированные вычислители (Intel Xeon Phi), которые могут достигать десятков терафлопс (TFLOPS).

Интересные факты

  • В процессорах Intel 80486SX (без FPU) для ускорения вычислений использовался программный эмулятор, который входил в состав операционной системы. Однако его производительность была в десятки раз ниже, чем у аппаратного сопроцессора.
  • В некоторых моделях процессоров AMD (K6-2, K6-III) использовалась технология 3DNow!, которая была конкурентом SSE и позволяла выполнять операции с плавающей запятой над векторами.
  • В СССР и России выпускались микросхемы, совместимые с Intel 8087, например, КР1810ВМ87 (производство НПО «Интеграл», Минск) и КР1834ВМ87 (производство НПО «Микрон», Зеленоград). Они использовались в компьютерах серии «Электроника» и «Искра».
  • В современных процессорах FPU может быть отключён через BIOS/UEFI или программно (например, для снижения энергопотребления или в целях безопасности). В некоторых операционных системах (например, Linux) поддержка FPU настраивается через конфигурацию ядра.

Источники

  • Intel Corporation. Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 1: Basic Architecture. — 2023.
  • AMD Corporation. AMD64 Architecture Programmer’s Manual. Volume 1: Application Programming. — 2022.
  • Шагурин И. И. Микропроцессоры и микропроцессорные системы. — М.: Радио и связь, 1988.
  • Таненбаум Э. Архитектура компьютера. — 6-е изд. — СПб.: Питер, 2013.
  • Хеннесси Дж., Паттерсон Д. Архитектура компьютера и проектирование компьютерных систем. — 5-е изд. — М.: Вильямс, 2014.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →