Intel pentium mmx набор поддерживаемых инструкций

From Wikipedia, the free encyclopedia

This article is about the instruction set for Intel Pentium and Pentium II processors. For the operating system that used the abbreviation name as the latest version, see Windows 3.0.

MMX is a single instruction, multiple data (SIMD) instruction set architecture designed by Intel, introduced on January 8, 1997[1][2] with its Pentium P5 (microarchitecture) based line of microprocessors, named «Pentium with MMX Technology».[3] It developed out of a similar unit introduced on the Intel i860,[4] and earlier the Intel i750 video pixel processor. MMX is a processor supplementary capability that is supported on IA-32 processors by Intel and other vendors as of 1997.

The New York Times described the initial push, including Super Bowl advertisements, as focused on «a new generation of glitzy multimedia products, including videophones and 3-D video games.»[5]

MMX has subsequently been extended by several programs by Intel and others: 3DNow!, Streaming SIMD Extensions (SSE), and ongoing revisions of Advanced Vector Extensions (AVX).

Overview[edit]

Naming[edit]

MMX is officially a meaningless initialism[6] trademarked by Intel;[7] unofficially, the initials have been variously explained as standing for

  • MultiMedia eXtension,[1]
  • Multiple Math eXtension, or
  • Matrix Math eXtension.

Advanced Micro Devices (AMD), during one of its many court battles with Intel, produced marketing material from Intel indicating that MMX stood for «Matrix Math Extensions».[citation needed] Since an initialism cannot be trademarked,[citation needed] this was an attempt to invalidate Intel’s trademark. In 1995, Intel filed suit against AMD and Cyrix Corp. for misuse of its trademark MMX. AMD and Intel settled, with AMD acknowledging MMX as a trademark owned by Intel, and with Intel granting AMD rights to use the MMX trademark as a technology name, but not a processor name.[8]

Technical details[edit]

Pentium II processor with MMX technology

MMX defines eight processor registers, named MM0 through MM7, and operations that operate on them. Each register is 64 bits wide and can be used to hold either 64-bit integers, or multiple smaller integers in a «packed» format: one instruction can then be applied to two 32-bit integers, four 16-bit integers, or eight 8-bit integers at once.[9]

MMX provides only integer operations. When originally developed, for the Intel i860, the use of integer math made sense (both 2D and 3D calculations required it), but as graphics cards that did much of this became common, integer SIMD in the CPU became somewhat redundant for graphical applications.[citation needed] Alternatively, the saturation arithmetic operations in MMX could[vague] significantly speed up some digital signal processing applications.[citation needed]

To avoid compatibility problems with the context switch mechanisms in existing operating systems, the MMX registers are aliases for the existing x87 floating-point unit (FPU) registers, which context switches would already save and restore. Unlike the x87 registers, which behave like a stack, the MMX registers are each directly addressable (random access).

Any operation involving the floating-point stack might also affect the MMX registers and vice versa, so this aliasing makes it difficult to work with floating-point and SIMD operations in the same program.[10] To maximize performance, software often used the processor exclusively in one mode or the other, deferring the relatively slow switch between them as long as possible.

Each 64-bit MMX register corresponds to the mantissa part of an 80-bit x87 register. The upper 16 bits of the x87 registers thus go unused in MMX, and these bits are all set to ones, making them Not a Number (NaN) data types, or infinities in the floating-point representation. This can be used by software to decide whether a given register’s content is intended as floating-point or SIMD data.

Software support[edit]

Software support for MMX developed slowly.[5] Intel’s C Compiler and related development tools obtained intrinsics for invoking MMX instructions and Intel released libraries of common vectorized algorithms using MMX. Both Intel and Metrowerks attempted automatic vectorization in their compilers, but the operations in the C programming language mapped poorly onto the MMX instruction set and custom algorithms as of 2000 typically still had to be written in assembly language.[10]

Successors[edit]

AMD, a competing x86 microprocessor vendor, enhanced Intel’s MMX with their own 3DNow! instruction set. 3DNow is best known for adding single-precision (32-bit) floating-point support to the SIMD instruction-set, among other integer and more general enhancements.

Following MMX, Intel’s next major x86 extension was the Streaming SIMD Extensions (SSE), introduced with the Pentium III family[11] in 1999,[12] roughly a year after AMD’s 3DNow! was introduced.

SSE addressed the core shortcomings of MMX (inability to mix integer-SIMD ops with any floating-point ops) by creating a new 128-bit wide register file (XMM0–XMM7) and new SIMD instructions for it. Like 3DNow!, SSE focused exclusively on single-precision floating-point operations (32-bit); integer SIMD operations were still performed using the MMX register and instruction set. However, the new XMM register-file allowed SSE SIMD-operations to be freely mixed with either MMX or x87 FPU ops.

Streaming SIMD Extensions 2 (SSE2), introduced with the Pentium 4, further extended the x86 SIMD instruction set with integer (8/16/32 bit) and double-precision floating-point data support for the XMM register file. SSE2 also allowed the MMX operation codes (opcodes) to use XMM register operands, extended to even wider YMM and ZMM registers by later SSE revisions.

MMX in embedded applications[edit]

Intel’s and Marvell Technology Group’s XScale microprocessor core starting with PXA270 include an SIMD instruction set architecture extension to the ARM architecture core named Intel Wireless MMX Technology (iwMMXt) which functions are similar to those of the IA-32 MMX extension.[13][14][15] It provides arithmetic and logic operations on 64-bit integer numbers, in which the software may choose to instead perform two 32-bit, four 16-bit or eight 8-bit operations in one instruction. The extension contains 16 data registers of 64-bits and eight control registers of 32-bits. All registers are accessed through standard ARM architecture coprocessor mapping mechanism. iwMMXt occupies coprocessors 0 and 1 space, and some of its opcodes clash with the opcodes of the earlier floating-point extension, FPA.[citation needed]

Later versions of Marvell’s ARM processors support both Wireless MMX (WMMX) and Wireless MMX2 (WMMX2) opcodes.

See also[edit]

  • Extended MMX

References[edit]

  1. ^ a b «Makers Unveil PCs With Intel’s MMX Chip». The New York Times. January 9, 1997. Archived from the original on January 13, 2019. Retrieved January 13, 2019. Intel’s new multimedia extension technology, called MMX, …
  2. ^ Ch, Rajiv; rasekaran (January 8, 1997). «Intel to unveil faster Pentium chip». The Washington Post. Archived from the original on January 14, 2019. Retrieved January 13, 2019.
  3. ^ «Embedded Pentium Processors with MMX Technology». Intel. Archived from the original on August 11, 2010. Retrieved July 28, 2007.
  4. ^ Mittal, Millind; Peleg, Alex; Weiser, Uri (1997). «MMX Technology Architecture Overview» (PDF). Intel Technology Journal. 1 (3). Archived (PDF) from the original on March 4, 2016. Retrieved October 29, 2015.
  5. ^ a b Calem, Robert E. (January 24, 1997). «Intel’s MMX: The Technology Behind the Hoopla». The New York Times. Archived from the original on January 13, 2019. Retrieved January 13, 2019.
  6. ^ Tanaka, Jennifer (February 16, 1997). «A new chip off the block». Newsweek. Archived from the original on August 31, 2019. Retrieved August 31, 2019. the name, which doesn’t stand for anything
  7. ^ «Intel | Data Center Solutions, IoT, and PC Innovation». Archived from the original on December 17, 2013. Retrieved December 17, 2013.
  8. ^ «Intel and Advance Micro agree on chip trademark». The New York Times. April 22, 1997. Archived from the original on January 13, 2019. Retrieved January 13, 2019.
  9. ^ Pfeiffer, Joseph J. Jr. (1997). «MMX Microarchitecture of Pentium Processors With MMX Technology and Pentium II Microprocessors» (PDF). Intel Technology Journal. Archived from the original (PDF) on January 12, 2011. Retrieved September 1, 2017.
  10. ^ a b Conte, G.; Tommesani, S.; Zanichelli, F. (2000). The long and winding road to high-performance image processing with MMX/SSE (PDF). Proceedings of IEEE International Workshop on Computer Architectures for Machine Perception. Archived from the original (PDF) on January 28, 2016.
  11. ^ Kay, Alan S. (February 26, 1999). «Pentium III: Buy the Numbers?». The Washington Post. Archived from the original on April 15, 2019. Retrieved January 13, 2019.
  12. ^ «Microprocessor Hall of Fame». Intel Museum. Archived from the original on April 6, 2008.
  13. ^ «Intel Brings MMX™ Technology To Intel® Personal Internet Client Architecture-Based Wireless Devices». Retrieved July 28, 2022.{{cite web}}: CS1 maint: url-status (link)
  14. ^ «Intel Delivers Next-Generation Processors Specifically Designed For Cell Phones And Wireless PDAs». Archived from the original on January 2, 2012. Retrieved July 28, 2022.
  15. ^ «World’s smallest PXA270 embedded CPU card?». EE Times. September 15, 2004. Retrieved July 28, 2022.{{cite web}}: CS1 maint: url-status (link)

External links[edit]

  • Intel Intrinsics Guide
  • Intel Pentium Processor with MMX Technology Documentation
  • IA Software Developer’s Manual, Vol 1 (PDF), see chapter 8 for MMX programming

Pentium с MMX

MMX — это одиночная инструкция, несколько данных (SIMD ) набор инструкций, разработанный Intel, представленный в январе 1997 года с его Линия P5 на базе Pentium микропроцессоров , обозначенных как «Pentium с технологией MMX». Она разработана на основе аналогичного устройства, представленного на Intel i860., а ранее — Intel i750 видеопиксельный процессор. MMX — это дополнительная возможность процессора, которая поддерживается на последних процессорах IA-32 Intel и другими поставщиков.

The New York Times описала начальный толчок, в том числе Supe r Bowl реклама, сфокусированная на «новом поколении блестящих мультимедийных продуктов, включая видеофоны и трехмерные видеоигры».

MMX впоследствии был расширен несколькими программами Intel и другими: 3DNow!, Streaming SIMD Extensions (SSE) и текущие версии Advanced Vector Extensions (AVX).

Содержание

  • 1 Обзор
    • 1.1 Именование
    • 1.2 Технические детали
    • 1.3 Поддержка программного обеспечения
  • 2 Преемник
  • 3 MMX во встроенных приложениях
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

Обзор

Именование

MMX официально является бессмысленным инициализмом товарным знаком Intel; неофициально инициалы по-разному объяснялись как означающие

  • MultiMedia eXtension,
  • Multiple Math eXtension или
  • Matrix Math eXtension.

AMD во время одного из В ходе многочисленных судебных разбирательств с Intel были выпущены маркетинговые материалы от Intel, в которых говорилось, что MMX означает «Matrix Math Extensions». Поскольку инициализм не может быть зарегистрирован как товарный знак, это была попытка аннулировать товарный знак Intel. В 1995 году Intel подала иск против AMD и Cyrix Corp. за неправомерное использование своего товарного знака MMX. AMD и Intel заключили соглашение, при этом AMD признала MMX товарным знаком, принадлежащим Intel, а Intel предоставила AMD права на использование товарного знака MMX в качестве названия технологии, но не названия процессора.

Технические подробности

Pentium II с технологией MMX

MMX определяет восемь регистров , называемых от MM0 до MM7, и операции, которые с ними работают. Каждый регистр имеет ширину 64 бита и может использоваться для хранения либо 64-битных целых чисел, либо нескольких меньших целых чисел в «упакованном» формате: затем одна инструкция может применяться к двум 32-битным целым числам, четырем 16-битным целым числам или сразу восемь 8-битных целых чисел.

MMX поддерживает только целочисленные операции. При первоначальной разработке для Intel i860 использование целочисленной математики имело смысл (это требовалось как для двухмерных, так и трехмерных вычислений), но поскольку видеокарты, которые выполняли большую часть этого, стали обычным явлением, целое число SIMD в ЦП стала несколько избыточной для графических приложений. С другой стороны, операции арифметики насыщения в MMX могут значительно ускорить некоторые приложения обработки цифровых сигналов.

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

Любая операция, связанная со стеком с плавающей запятой, может также повлиять на регистры MMX и наоборот, поэтому такое сглаживание затрудняет работу с операциями с плавающей запятой и SIMD в одном приложении. Чтобы максимизировать производительность, программисты часто использовали процессор исключительно в одном или другом режиме, откладывая относительно медленное переключение между ними как можно дольше.

Каждый 64-битный регистр MMX соответствует части мантиссы 80-битного регистра x87. Таким образом, старшие 16 бит регистров x87 не используются в MMX, и все эти биты устанавливаются в единицы, что делает их NaN или бесконечность в представлении с плавающей запятой. Это может использоваться приложениями, чтобы решить, предназначено ли содержимое конкретного регистра как данные с плавающей запятой или данные SIMD.

Поддержка программного обеспечения

Поддержка программного обеспечения для MMX шла медленно. Компилятор Intel C и связанные с ним инструменты разработки получили встроенные функции для вызова инструкций MMX и Intel выпустила библиотеки общих векторизованных алгоритмов с использованием MMX. И Intel, и Metrowerks пытались автоматическую векторизацию в своих компиляторах, но с 2000 года операции на языке программирования C плохо отображались на набор инструкций MMX и пользовательские алгоритмы. обычно все еще приходилось писать на сборке.

Преемник

AMD, конкурирующий поставщик микропроцессоров x86, усовершенствовал MMX Intel с помощью собственного набора инструкций 3DNow!. 3DNow наиболее известна тем, что добавила поддержку одинарной точности (32-битной) с плавающей запятой в набор инструкций SIMD, среди других целочисленных и более общих улучшений.

Вслед за MMX следующим крупным расширением Intel для архитектуры x86 стало SSE, представленное в семействе Pentium-III в 1999 году, примерно через год после AMDNow! был представлен.

SSE устранил основные недостатки MMX (невозможность смешивать целочисленные операции SIMD с любыми операциями с плавающей запятой), создав новый 128-битный регистровый файл (XMM0 – XMM7) и новые инструкции SIMD для него. Как и 3DNow !, SSE ориентирован исключительно на операции с плавающей запятой одинарной точности (32-битные); Целочисленные операции SIMD по-прежнему выполнялись с использованием регистра MMX и набора команд. Однако новый регистровый файл XMM позволил SSE SIMD-операции свободно смешиваться с MMX или x87 FPU ops.

SSE2, представленный в Pentium 4, дополнительно расширил набор инструкций x86 SIMD за счет целочисленного (8/16/32 бит) и поддержки данных с плавающей запятой двойной точности для файла регистров XMM. SSE2 также позволял кодам операций MMX использовать операнды регистров XMM, расширенные до еще более широких регистров YMM и ZMM более поздними версиями SSE.

MMX во встроенных приложениях

Intel и Marvell XScale ядро ​​микропроцессора, начиная с PXA270, включая SIMD набор инструкций для ядра ARM с именем iwMMXt, функции которого аналогичны функциям расширения IA-32 MMX. iwMMXt означает «Технология Intel Wireless MMX». Он обеспечивает арифметические и логические операции с 64-битными целыми числами (вместо этого программа может выбрать выполнение двух 32-битных, четырех 16-битных или восьми 8-битных операций в одной инструкции). Расширение содержит 16 регистров данных по 64 бита и восемь регистров управления по 32 бита. Доступ ко всем регистрам осуществляется через стандартный механизм сопоставления сопроцессора архитектуры ARM. iwMMXt занимает пространство сопроцессоров 0 и 1, и некоторые из его кодов операций конфликтуют с кодами операций более раннего расширения с плавающей запятой, FPA.

Более поздние версии процессоров ARM Marvell поддерживают коды операций WMMX (Wireless MMX) и WMMX2 (Wireless MMX2).

См. Также

  • Extended MMX

Ссылки

Внешние ссылки

  • Intel Intrinsics Guide
  • Процессор Intel Pentium с технологией MMX Документация
  • Руководство разработчика программного обеспечения IA, том 1 (PDF), см. Главу 8 для программирования MMX

Процессоры
Pentium c технологией MMX, выпускающиеся с
тактовой частотой 233, 200 и 166 МГц, являются
существенным дополнением семейства
Pentium. Скорость работы приложений в
системах с процессором Pentium с технологией
MMX на 10-20% больше, чем в системах с
процессором Pentium той же тактовой частоты.
Приложения, разработанные для технологии
MMX, реализуют дополнительную
производительность, которую обеспечивает
технология MMX, позволяя использовать
богатую цветовую гамму, более реалистичную
графику, полно-экранное видео и т. д.
Конкретные возможности определяются
типом приложения и степенью использования
технологии MMX. Эталонный тест Intel Media
Benchmark, который оценивает производительность
мультимедиа, исполняетс более чем на
60% быстрее в системе на базе процессора
Pentium с технологией MMX, чем в системе с
процессором Pentium той же тактовой частоты.

Для
более полного интерактивного использования
ПК система должна обладать высокой
производительностью в трех направлениях:
при выполнении целочисленных вычислений
и операций с плавающей запятой, а также
при работе с мультимедиа. Обычные
приложения, такие как текстовые редакторы,
программы для создания и просмотра
презентаций, персональные финансовые
программы, требуют высокой производительности
целочисленных вычислений. Однако, для
использования видео, трехмерных игр и
обработки изображений необходимо
максимальное расширение мультимедийных
возможностей ваших процессоров и систем,
а также высокая производительность
операций с плавающей запятой. Процессор
Pentiumг c технологией MMX с тактовой частотой
233 МГц имеет лучшие показатели
производительности во всех трех областях.

Процессор
Pentium с технологией MMX обеспечивает полную
совместимость, как программную, так и
по выводам, с предыдущими процессорами
семейства Pentium. Он содержит 4. 5 миллиона
транзисторов и изготовлен по расширенной
0. 35 микронной технологии с использованием
технологии КМОП и технологии понижения
напряжения. Это позволяет сохранить
тепловые характеристики оригинального
процессора Pentium при существенном
увеличении производительности.

Описание процессора.

Процессор
Pentium с технологией MMX — новый представитель
семейства процессоров Pentium c улучшенной
микроархитектурой:

    —
Полная поддержка технологии MMX.


В основе технологии MMX лежит метод SIMD —
одна инструкция над многими данными, —
который позволяет увеличить
производительность широкого набора
мультимедийных и коммуникационных
приложений.


Процессор Pentium c технологией MMX поддерживает
57 новых инструкций и 4 новых 64-разрядных
типа данных.


Все существующие операционные системы
и приложени полностью совместимы с
процессором Pentium с технологией MMX.

    —
Удвоен объем кэш данных и кэш кода до
16К каждой.


Кэш данных и кэш кода 1-го уровня процессора
были удвоены до 16kb каждая. Раздельные
встроенные кэш увеличивают
производительность, сокращая среднее
время доступа к памяти и обеспечивая
быстрый доступ к часто используемым
инструкциям и данным. Кэш кода и кэш
данных используются одновременно,
причем кэш данных поддерживает два
обращения одновременно. Кэш данных
поддерживает метод обратной записи
(write-back) или, альтернативно, построчной
сквозной записи (writethrough).


Улучшенное предсказание ветвления.
Динамическое предсказание ветвления
использует Branch Target Buffer (BTB), который
предсказывает наиболее вероятный набор
инструкций для исполнения.


Улучшенная конвейерная обработка. Для
повышения производительности была
добавлена дополнительная стадия
конвейерной обработки.


Более глубокие буферы записи. Для
улучшени производительности записи в
память, буферная область, состоящая из
четырех буферов, теперь используется
совместно двумя конвейерами.

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

    Основные
характеристики:
    —
64-разрядная шина данных
    —
Целостность данных
    —
Встроенный контроллер прерываний
микропроцессора
    — Контроль
производительности и отслеживание
исполнения
    — Улучшение
страничного обмена
    —
Управление мощностью с помощью
SL-технологии


Суперскралярная архитектура с возможностью
параллельного исполнения двух
целочисленных инструкций за один такт


Конвейерный блок вычислений с плавающей
запятой (FPU) для поддержки 32- и 64 разрядных
форматов, установленных стандартом
IEEE 754, а также 80-разрядного формата. Это
дает возможность исполнения в одном
такте двух инструкций с плавающей
запятой, обеспечивая увеличение
производительности вычислений с
плавающей запятой до пяти раз с
планированием инструкции и конвейерным
исполнением. FPU — это объектный код,
совместимый с математическими
сопроцессорами Intel486 DX и Intel 487 SX, Intel 387
DX, и Intel 387 SX. — Многие инструкции,
микрокодированные в процессорах x86,
теперь аппаратно встроены в процессор
для обеспечени высокой производительности.
— Контрольные сигналы шины для управления
согласованностью кэш-памяти в
мультипроцессорных системах.


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


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


Расширенная форма страничного обмена
обеспечивает доступ к структурам данных,
большим доступного объема памяти,
сохраняя их частично в памяти и частично
на диске.


Аппаратная поддержка виртуальных
прерываний, которая обеспечиваетс
Виртуальным флагом прерываний(VIF) и
Виртуальным ожиданием прерываний(VIP) в
регистре EFLAGS, в некоторых случаях
устраняет необходимость мониторного
захвата из виртуального-8086 или защищенного
режимов.


Идентификация CPU для получения информации
о семействе, модели, степпинге и
характеристиках процессора с помощью
команды CPUID. Возможность выполнения
этой инструкции определяется возможностью
установки ID в регистре EFLAGS. — Определение
ошибок внутренних устройств и интерфейса
шины обеспечиваетс с помощью защиты
контроля по четности и Machine Check Exception
(MCE). Также обеспечивается аппаратная
поддержка для проверки завершения цикла
шины.

Некоторые
возможности процессора используются
для тестирования и контроля
производительности. Это:


Встроенный Self Test (BIST), обеспечивающий
100% определение единичных константных
ошибок микрокода и больших PLA, а также
тестирование кэш кода, кэш данных,
Translation Lookaside Buffers(TLB) и постоянных ROM. —
Порт доступа к стандартным тестам IEEE
1149. 1 и архитектурный механизм сканировани
границ, позволяющий тестирование
процессора с помощью стандартного
интерфейса.


Расширения Отладки, которые позволяют
отлаживать адреса ввода-вывода и доступ
к памяти.


Внутренние счетчики, которые могут
использоваться для контроля
производительности и учета
событий.

    Pentium Pro
    Обзор
продукции

Семейство
процессоров Pentium Pro — это следующее
поколение высокопроизводительных
изделий Intel для мощных настольных
компьютеров, рабочих станций и серверов.
Это семейство включает в себя процессоры
с тактовой частотой от 150 Mгц и выше,
которые легко объединяются в
многопроцессорные системы до четырех
процессоров в каждой. Преимущество в
производительности процессора Pentium Pro
над предыдущими поколениями процессоров
достигаетс за счет технологии, называемой
Динамическим Исполнением. Это следующий
этап развития суперскалярной архитектуры,
ранее реализованной в процессорах
Pentium, который позволил широко использовать
трехмерную визуализацию и интерактивные
возможности, необходимые для современных
коммерческих и технических приложений
и развивающихся приложений завтрашнего
дня. Надежность и сервисные средства
процессора Pentium Pro важны для наиболее
ответственных приложений.

    Основные
характеристики
    — Тактовая
частота ядра 150, 166, 180 и 200 Mгц


Совместим по кодам с приложениями,
работающими с предыдущими семействами
процессоров Intel


Оптимизирован для 32-разрядных приложений,
работающих под управлением современных
32-разрядных операционных систем

    —
Микроархитектура с Динамическим
Исполнением


Единый корпус содержит процессор Pentium
Pro, кэш-память и интерфейс системной
шины

    — Наращивается до
четырехпроцессорной системы с 4Гб памяти


Раздельные внешняя системная шина и
внутренняя полноскоростная шина
кэш-памяти


Раздельные неблокируемая кэш-память
данных и инструкций размером 8Kб/8Kб —
Интегрированная неблокируемая кэш-память
второго уровня 256 или 512 Kб — Средства
сохранения целостности данных: аппаратная
коррекция ошибок (ECC), анализ ошибок и
восстановление данных, проверка
функциональной избыточности

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #




Процессор не поддерживает MMX

Однако такие исключения встречаются редко и в большинстве случав программа, взамен отсутствующих SIMD, будет использовать универсальные (genegic) х86 инструкции. При этом мы не получим никакого повышения быстродействия, но и снижения производительности (по сравнению с обычным кодом) также не будет.

Поскольку каждый производитель процессоров по-своему улучшал архитекутуру, развитие микропроцессоров сопровождалось появлением нескольких вариантов SIMD расширений. Основные из них мы рассмотрим ниже.

MMX-расширение появилось в Pentium MMX (P55, январь 1997) и включало в себя 57 новых команд, предназначенных для обработки звуковых и видеосигналов. Позднее их поддержка появилась в K6 (Little Foot) от AMD и в 6х86MX от Cyrix.

MMX-расширение микропроцессора Pentium предназначено для поддержки приложений, ориентированных на работу с большими массивами данных целого типа, над которыми выполняются одинаковые операции. С данными такого типа обычно работают мультимедийные, графические, коммуникационные программы. По этой причине данное расширение архитектуры микропроцессоров Intel и названо
MultiMedia eXtensions (MMX), что переводится как мультимедиа расширения.

Основа программной компоненты – система команд MMX-расширения (те самые 57 новых команд) и четыре новых типа данных. MMX-команды являются естественным дополнением основной системы команд микропроцессора. Основным принципом их работы является одновременная обработка нескольких единиц однотипных данных одной командой. Основа аппаратной компоненты – 8 MMX регистров, каждый размером в 64 бит = 8 байт. MMX работает только с целыми числами; поддерживаются данные размером в 1, 2, 4 или 8 байт. То есть, один MMX регистр может содержать 8, 4, 2 или 1 операнд соответственно.




Формат регистра ММХ

На самом деле эти регистры не являются новыми, а MMX-расширение использует регистры сопроцессора (FPU). Как известно, регистры сопроцессора стека имеют размерность 80 бит, что касается MMX регистров, то их разрядность только 64 бита. Поэтому, когда регистры сопроцессора играют роль MMX-регистров, то доступными являются лишь их младшие 64 бита. К тому же, при работе стека сопроцессора в режиме MMX-расширения, он рассматривается не как стек, а как обычный регистровый массив с произвольным доступом. Таким образом, можно сказать, что расширения MMX реализованы в виде дополнительного pежима, в который процессор может переключаться из обычного pежима работы. Регистровый стек сопроцессора не может одновременно использоваться и по своему прямому назначению и как MMX-расширение, поэтому необходимо заботиться о его разделении и корректной работе с ним. Такое совмещение может снизить эффективность работы в случае попеременного использования обычных вычислений с плавающей точкой и работы в режиме MMX.

Данные, содержащиеся в MMX-регистрах, можно покомпонентно складывать, умножать, вычитать, выполнять разнообразные специфические, необходимые для мультимедиа приложений, операции, вроде сложения без переполнения, вычисления среднего арифметического и производить логические операции с битами (побитовый and, or, xor). Делить, правда, нельзя, есть ещё ограничения. Но многие операции можно делать на порядок быстрее, даже больше. Однако, применение MMX в особенности требует специальной ручной оптимизации, никакой компилятор тут существенно не поможет. Под MMX, например, оптимизируются разнообразные кодеки аудио файлов, алгоритмы работы которых хорошо сочетаются с MMX. Причём, не вся программа целиком, а небольшая часть, выполняющая основную работу, и это обстоятельство упрощает оптимизацию.

SSE

Данное расширение появилось в Pentium III (ядро Katmai, сентябрь 1999) и насчитывало 70 новых команд. Позднее в Athlon XP (начиная с Palomino) его стали поддерживать и процессоры AMD. Аббревиатура SSE расшифровывается как
Streaming SIMD Extensions (потоковые SIMD расширения).

SSE интересно прежде всего тем, что оперирует с данными вещественного типа, которые используются в геометрических расчётах, то есть, приложениях трёхмерной графики, компьютерных играх, редакторах вроде 3DStudioMax, и многих других. С тех пор как в компьютерных играх вроде Quake текстурирование треугольников стало производиться при помощи видеоускорителей, большая надобность в целочисленных вычислениях отпала. На первое место вышла скорость операций с плавающей точкой, вроде перемножения вещественного вектора на вещественную матрицу.

При внедрении SSE процессор получил в дополнение к стандартным регистрам архитектуры x87 8 новых больших регистров размером по 128 бит, в каждом из которых содержится 4 32-битных вещественных числа. С четвёрками операндов можно покомпонентно производить следующие операции: сложить две четвёрки чисел, вычесть, перемножить, разделить. Вычислить одновременно 4 (обратных) квадратных корня, точно или приближённо. Ещё можно тасовать содержимое регистров, перекладывать данные из одних частей регистра в другие и производить некоторые другие аналогичные операции. Однако перемещение данных происходит не быстрее их сложения, так что эффективное использование SSE возможно только на подготовленных правильно упакованных данных.

Если посчитать, что SSE-операция заменяет 4 аналогичных обыкновенных, то при оптимизации можно получить прирост производительности в 4 раза. Если быть более точным, то даже несколько больше, за счёт использования новых больших регистров. Однако, далеко не все вычисления можно эффективно оптимизировать под SSE. Как пример «хорошей» задачи следует привести умножение четырёхмерной матрицы на четырёхмерный вектор. Ускорение четырёхкратное без особых затрат.

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

SSE2

Следующее расширение, являющееся логическим продолжением MMX и SSE появилось в Pentium 4 (начиная с Willamette). В Athlon 64 появилось начиная с Clawhammer.

В данное расширение включены 144 команды SSE2, ориентированные, в первую очередь, на работу с потоковыми данными. Подобно Pentium III, они также оперируют со 128-битными регистрами, но уже не только с четверками чисел одинарной точности, но и с любыми другими типами данных, которые умещаются в 128 бит. Это пары вещественных чисел двойной точности, шестнадцать однобайтовых целых, восьмерки двухбайтовых целых, пары восьмибайтовых целых etc. В результате получился некий симбиоз MMX и SSE.

Теперь те же 8 больших 128-битных регистров уже можно интерпретировать как содержащие не четыре 32-битных вещественных числа, а два 64-битных вещественных числа повышенной точности. Числа с повышенной точностью используются в тех случаях, когда вычисления с обычной точностью приводят к большим погрешностям. Все операции перенеслись с SSE, только работают не с четвёркой пар операндов, а с двойкой пар операндов.

В SSE2 регистры по сравнению с MMX удвоились, то есть, там стало помещаться не, например, 8 чисел, а 16. Поскольку скорость выполнения инструкций не изменилась, при оптимизации под SSE2 программа запросто получала двукратный прирост производительности. Надо отметить ещё следующее обстоятельство. Если программа уже была оптимизирована под MMX, то оптимизация под SSE2 даётся сравнительно легко в силу сходности системы команд.

SSE3

Следующий набор появился в Pentium 4 начиная с Prescott и Athlon 64 начиная с Venice. Это расширение, имевшее поначалу имело рабочее название
Prescott New Instruction, но получившее в итоге не совсем верное с технической точки зрения название SSE3, призвано облегчить оптимизацию программ под SSE и SSE2. Причём, в первую очередь, сделать более легкой полностью автоматическую оптимизацию программ средствами компилятора. То есть, для оптимизации необходимо будет просто перекомпилировать программу.

Некорректность названия SSE3 объясняется тем, что в отличие от других SIMD инструкций, где операции (например сложение) выполняются вертикально, здесь появилась возможность горизонтального выполнения операций.




Вертикальное сложение




Горизонтальное сложение

Таким образом в SSE3 появились удобные команды горизонтального последовательного сложения и вычитания операндов, а также другие разнообразные вспомогательные команды, облегчающие работу с данными.

SSE4 *

Данный набор появился в новейших процессорах Intel Core 2. Конкретная информация по этим инструкциям пока отсутствует.

Кстати стоит отметить, что в новых интеловских процессорах появилась технология Intel Advanced Digital Media Boost, суть которой в ускорении выполнения SIMD инструкций. Если раньше каждая инструкция выполнялась за два такта (один такт для обработки старших 64 бит, а второй такт для младших), то теперь выполнение этой инструкции занимает один такт. Налицо двукратное ускорение, что должно сказываться на работе программ, оптимизированных под этот набор инструкций.

*Обновлено: информация о наборе инструкций SSE4 оказалась преждевременной, на самом деле SSE4 появится в процессорах поколения Penryn, которые предположительно должны появиться в четвертом квартале 2007 года.

3DNow!

Различают три поколения этого расширения инструкций: 3DNow!, Enhanced 3DNow! и 3DNow! Professional, однако очень часто их все называют просто 3DNow!

Набор инструкций 3DNow! появился в AMD K6-2 (Chomper). Данный набор, состоящий из 21 команды, был оптимизирован для еще более узкой области, нежели «универсально-мультимедийный» Intel MMX, а именно: для наиболее ресурсоемких расчетов, связанных с 3D-графикой. Даже в самом названии этого набора (3DNow!) отразилась область его применения. Это расширение во многом сходно с SSE, но так же имеет и значительные отличия. Регистров так же 8, но они размером не 128 бит, а 64. Соответственно, в них помещается не 4 числа, а только 2. Имеется аналогичный SSE набор арифметических операций с регистрами. Сложить-умножить-разделить две пары операндов и т.п. Есть и операции нахождения (обратного) квадратного корня, точные и более быстрые приближённые. Однако, есть ещё одно важное отличие расширения 3DNow! Можно складывать между собой содержимое одного регистра. То есть, так же как и в SSE3, производить не только вертикальные операции, но и горизонтальные.

Другое важное обстоятельство, говорящее в пользу 3DNow!, это возможность достаточно эффективной автоматической оптимизации средствами компилятора. SSE слишком громоздко — размеры регистров большие — для автоматической организации данных. На коде, наполненном вычислениями с плавающей точкой, можно было бы бесплатно получить примерно полуторный прирост производительности.

В дальнейшем изменения блока 3DNow! произошли в К7. Он, как и раньше, работал с 64-битными регистрами, в которых находились пары вещественных чисел одинарной точности, зато его набор команд расширился еще на 24 инструкции (Enhanced 3DNow!). Последнее расширение этого набора до 3DNow! Professional появилось в ядре Thoroughbred.

На развитие набора 3DNow! негативно повлияло то, что у AMD первое время отсутствовал оптимизирующий компилятор, к тому же разработчики программ не торопились оптимизировать свои программы под эти инструкции.

Оценка прироста производительности.

Для того, чтобы определить, какой прирост быстродействия дают SIMD-инструкции было решено провести тестирование. Мы должны сравнить быстродействие программы в двух режимах (или двух программ): с оптимизацией под SIMD-инструкции и без нее. Это возможно в двух случаях: при использовании двух версий одной и той же программы (одна версия оптимизирована, а другая нет) или при наличии в программе функции отключения оптимизации. Однако здесь я столкнулся с проблемой – программ, имеющих такую фичу крайне мало
. В случае с различными версиями одной программы, просматривая Changelog было обнаружено, что практически всегда наряду с включением поддержки SIMD-инструкций, в новой версии появлялись какие-либо дополнительные оптимизации. В таком случае сравнение программ разных версий представляется некорректным с точки зрения поставленной цели.

После продолжительного поиска необходимые бенчмарки были найдены. Все они имеют возможность включать/отключать оптимизацию под определнные виды инструкций. Итак, тесты условно были поделены на четыре группы:

1.Видео: кодек XviD 1.1.0, MSU Deblocking Filter v2.2 (фильтр для VirtualDub)

2.Аудио: Lame 3.97 b2.

3.Синтетика: Sandra 2007, CPU RightMark 2003B.

4.Игры: Doom 3 ,Quake 4.

Тестовая конфигурация:

Материнская плата: Gigabyte GA-8I945P-G, BIOS v.F10

Процессор: Intel Pentium 4 630@3.600 MHz

Система охлаждения: TT Big Typhoon

Оперативная память: 512 Mb DDR2–667@638 Samsung Original (5-5-4-14), 512 Mb DDR2–667@638 Hynix (5-5-4-14)

Видеокарта: PCI-E Palit GeForce 6600GT@585/551 MHz

Дисковая подсистема: 160Gb SATA-II SAMSUNG HD160JJ, 40Gb Ultra-ATA/100 Seagate Barracuda ST340014A

Software: Windows XP SP2, ForceWare 91.28

Видео




XviD 1.1.0




MSU Deblocking Filter v2.2

Кодеком Xvid кодировался 160 MB файл из формата mpeg2. Перед фильтром MSU Deblocking стояла задача обработки 80 MB файла без последующего сжатия. Оба теста проводились в VirtualDub 1.6.15. Измерялось время выполнения в секундах. Как видно из результатов, использование оптимизации дает более чем двукратный прирост производительности
. Особенно впечатляет ускорение c MMX и SSE. Малый прирост у SSE2 можно списать под плохую оптимизацию кодека.

Аудио




Lame 3.97 b2

Данный аудиокодек хоть и не обладает графическим интерфейсом, но имеет большое число настраиваемых параметров через командную строку. Для отключения оптимизации используется флаг —noasm xxx (где xxx – отключаемый набор инструкций). В формат mp3 преобразовывался 400 MB wav файл. Прирост не такой большой, как в случае с видео, но все же ускорение в 1,5 раза можно назвать успехом. Особенно сильна ”заточка” под MMX, что не удивительно ведь данное расширение создавалось специально для мультимедиа.

Синтетические тесты




Sandra 2007, Whetstone




Sandra 2007, Dhrystone




CPU RightMark 2003B, Math




CPU RightMark 2003B, Rendering

C Сандрой все понятно: при прогоне арифметического теста, прирост в тесте с FPU объясняется увеличением объема обрабатываемых данных (за счет увеличенного размера SIMD-регистров), а его отсутствие в тесте АЛУ тем, что SSE2 и SSE3 предназначены для операций с плавающей запятой.

Тест CPU RightMark достаточно редко встречается в обзорах, и я не удивлюсь если о нем слышали немногие (я сам только недавно его ”выловил”). Тест моделирует поведение притягивающихся и отталкивающих шаров в пространстве. Сам он представляет собой, по сути, два теста, объединенных в один. Модуль решателя (solver) рассчитывает физику взаимодействия тел, а модуль рендеринга (render) отображает это взаимодействие на экране. Нагрузку можно изменять и на модуль решателя (увеличивая количество рассчитываемых объектов), и на модуль рендеринга (изменяя количество источников света и качество текстур). В обоих модулях можно настраивать то, какие инструкции будут использованы при решении задачи. Тест больше оптимизирован под SSE/SSE3, поскольку требуется рассчитывать координаты объектов и силы их взаимодействия.

Игры




Doom3, Low Quality




Doom 3, Ultra Quality 2xAA, 4xAF




Quake 4, Low Quality




Quake 4, Ultra Quality 2xAA, 4xAF

Из игр только последние версии Doom и Quake позволяют отключать оптимизацию под SIMD-инструкции. Делается это в консольной командой com_ForceGenericSimd. Тесты проводились при разрешении 1024*768, при минимальном и максимальном (с 2xAA и 4xAF) качестве. При этом настройки антиалиасинга и анизотропной фильтрации принудительно выставлялись в настройках драйвера видеокарты. Для тестирования Doom 3 использовалось стандартное demo1, для Q4 была записана демка на уровне Air Defence Trenches. Демо прогонялись четыре раза, вычислялось среднее арифметическое последних трех прогонов.

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

Заключение

Как видно оптимизация приложений под SIMD-инструкции приносит свои плоды в виде повышения производительности. Прирост состоит от нескольких процентов играх, до полутора-двух раз при обработке видео и звука. Насколько же хороша оптимизация и во сколько секунд/fps/попугаев она выльется зависит и от создателей процессоров, и от производителей программного обеспечения. При их тесном сотрудничестве производительность компьютеров будет повышаться, а это именно то, что нам и надо
.

Напоследок хочу привести таблицу десктопных ядер от Intel и AMD с указанием поддерживаемых наборов инструкций.

Ядро MMX SSE SSE2 SSE3 SSE4 3DNow!
P54
P55 +
Covington +
Mendocino +
Klamath +
Deschutes +
Katmai + +
Coppermine + +
Tualatin + +
Willamette + + +
Northwood + + +
Prescott + + + +
Prescott-2M + + + +
Smithfield + + + +
Presler + + + +
Core 2 + + + +
5K86
Little Foot +
Chomper + +
Sharptooth + +
Pluto + +
Orion + +
Spitfire + +
Morgan + + +
Thunderbird + +
Palomino + + +
Thoroughbred + + +
Barton + + +
Thorton + + +
Applebred + + +
Sledgehammer + + + +
Clawhammer + + + +
Paris + + + +
Palermo + + + + +
Newcastle + + + +
Venice + + + + +
San Diego + + + + +
Winchester + + + +
Manchester + + + + +
Toledo + + + + +
Manila + + + + +
Orleans + + + + +
Windsor + + + + +

При написании статьи использовались материалы с сайтов overclockers.ru, ferra.ru, fcenter.ru, thg.ru, ixbt.com, intel.com, 3dnews.ru.

С уважением, Таболин Юра aka olddanmer

Вопросы и предложения мылить на danmer@udm.ru

В мире компьютерных технологий нет ничего странного в обилии всевозможных аббревиатур: CPU, GPU, RAM, SSD, BIOS, CD-ROM, и многих других. И почти каждый день появляются всё новые и новые сокращения названий каких-то технологий, что является неизбежным следствием бесконечного стремления инженеров улучшить функции и возможности наших вычислительных устройств.

Сегодня речь пойдёт о таких расширениях набора команд процессоров, как MMX, SSE и AVX. Многим знакомы эти сокращения, и мы выясним, действительно ли это какие-то интересные разработки, или же это не более чем бессмысленные маркетинговые уловки.

Ну о-о-очень первые дни

Середина 80-х прошлого столетия. Рынок процессоров был очень похож на сегодняшний. Intel бесспорно преобладала, но столкнулась с жесткой конкуренцией со стороны AMD. Домашние компьютеры, такие как Commodore 64, использовали базовые 8-битные процессоры, тогда как настольные ПК начинали переходить с 16-битных на 32-битные чипы.

Эти числа означают размер значений данных, которые могут быть обработаны математически, при этом чем выше эти значения, тем выше точность и возможности. Они также определяет размер основных регистров в микросхеме: небольших участков памяти, используемых для хранения рабочих данных.

Такие процессоры являются также скалярными и целочисленными. Что это означает? Скаляр – это когда над одним элементом данных выполняется только одна любая математическая операция. Обычно это обозначается как SISD (single instruction, single data, «одиночный поток команд – одиночный поток данных»).

Таким образом, инструкция по сложению двух значений данных просто обрабатывается для этих двух чисел. А если вам, например, нужно прибавить одно и то же значение к группе из 16 чисел, то для этого потребуется выполнить все 16 наборов инструкций – для каждого числа из этой группы по отдельности. По-другому процессоры тех лет складывать ещё не умели.


Intel 80386DX с частотой 16МГц (1985).

Целое (Integer) – в математике, это такое число, которое не имеет дробной части. Например, 8 или -12. Процессоры типа интеловского 80386SX не имели врожденной способности сложить, скажем, 3.80 и 7.26 – такие дробные числа называются числами с плавающей точкой (или запятой, в русском языке это без разницы) – по-английски FP, floating point или просто floats. Чтобы справиться с ними, нужен был другой процессор, например 80387SX, и отдельный набор инструкций – список команд, который сообщает процессору, что делать.

В те времена под инструкциями x86 понимали наборы команд для целочисленных (integer) операций, а под инструкциями x87 – для чисел с плавающей точкой (float). В наши дни все операции умеет выполнять один процессор, поэтому мы используем термин x86 для обозначения набора инструкций обоих типов данных.

Использование отдельных сопроцессоров для обработки разных типов данных было нормой, пока Intel не представила 80486: их первый CPU для персоналок со встроенным математическим сопроцессором для обработки вещественных данных (FPU, Floating Point Unit).


Intel 80486: Жёлтым цветом выделен блок FPU для обработки чисел с плавающей точкой.

Как вы можете видеть, этот блок совсем немного занимает места в процессоре, но рывок в производительности, благодаря этому решению, был огромен.

Но в целом принцип работы оставался скалярным, и таким он перешел и к преемнику 486-го: оригинальному Intel Pentium.

И пройдёт ещё три года после релиза этого первого Пентиума, прежде чем Intel представит миру Pentium MMX. Это произошло в октябре 1996 года.

V – значит «векторный». А MMX что значит?

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

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

Знаменитая реклама технологии Intel MMX (1997).

FPU Pentium имел 64-битные регистры, и в операциях MMX каждый из них мог вместить два 32-битных, четыре 16-битных или восемь 8-битных целых числа. Именно эти группы чисел и являются векторами, и каждая инструкция, предназначенная для них, будет выполняться сразу над всеми значениями в группе.

Такой принцип получил название SIMD (single instruction, multiple data, «одиночный поток команд, множественный поток данных») и знаменует собой большой шаг вперед в развитии возможностей процессоров для персональных компьютеров.

Ну а какие приложения выигрывают от использования такого принципа? Практически все, которым приходится выполнять одинаковые вычисления над группой однородных данных, и в первую очередь это некоторые функции в 3D-моделировании и мультимедийных технологиях, а также в системах обработки стандартных сигналов.

Например, MMX можно применить для ускорения умножения матриц при обработке вершин в 3D, или для смешивания видеопотоков при работе с хромакеем или альфа-композитингом.


Процессор AMD K6-2 – где-то там есть 3DNow!

К сожалению, внедрение MMX продвигалось  довольно медленными темпами из-за негативного влияния этой технологии на производительность операций с плавающей точкой. AMD частично решила эту проблему, создав свою собственную версию под названием 3DNow! примерно через два года после появления MMX. Технология от AMD предлагала больше инструкций SIMD и умела обрабатывать числа с плавающей точкой, но также страдала от недостатка понимания программистами.

Ах, да! Как же официально расшифровывается аббревиатура MMX? Согласно Intel – никак!

Проще пареной SSE

Ситуация переломилась в лучшую сторону с приходом в 1999 году процессора Intel Pentium III. Он принёс с собой блестящую реализацию векторной функции под названием SSE (Streaming SIMD Extensions, «потоковые расширения SIMD»). На этот раз это был дополнительный набор из восьми 128-битных регистров, отдельных от регистров в FPU, и стек дополнительных инструкций для обработки чисел с плавающей точкой.

Использование независимых регистров означает, что больше нет такой сильной зависимости от FPU, хотя Pentium III не мог выполнять инструкции SSE одновременно с инструкциями FP. А также, новая функция поддерживает только один тип данных в регистрах: четыре 32-битных FP-числа.

Но переход к использованию FP-инструкций SIMD позволил значительно увеличить производительность в таких приложениях, как кодирование/декодирование видео, обработка изображений и звука, сжатие файлов и многих других.


Pentium IV: желтым цветом выделен блок регистров SSE2.

Усовершенствованная версия SSE2 появилась в 2001 году вместе с Pentium 4, и на этот раз поддержка типов данных была намного лучше: четыре 32-битных или два 64-битных FP-числа, а также шестнадцать 8-битных, восемь 16-битных, четыре 32-битных или два 64-битных целых числа. Регистры MMX остались в процессоре, но все операции MMX и SSE могли выполняться с использованием независимых 128-битных регистров SSE.

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

Ещё через 3 года мы познакомились с архитектурой Intel Core, принёсшей ещё одну ревизию технологии SIMD (SSSE3 – Supplemental SSE, «расширенные SSE»), и чуть позже в том же году – финальную версию, SSE4.

В 2007 году AMD применила собственную версию расширений CPU-инструкций SSE4 в своей архитектуре Barcelona. С названием в AMD париться не стали, и назвали свою версию просто SSE4a.

С линейкой Nehalem Core в 2008 году было выпущено незначительное обновление этой версии, которую Intel обозначила как SSE4.2 (а под SSE4.1 стали понимать исходную версию этого обновления). Обновления не затронули регистры, а лишь добавили больше инструкций в таблицу, расширив диапазон возможных математических и логических операций.

AMD, со своей стороны, сперва предложила новую версию SSE5, но позже решила разделить ее на три отдельных расширения, одно из которых довольно проблемное – подробнее об этом чуть позже.

К концу 2008 года и Intel, и AMD поставляли процессоры, которые уже могли обрабатывать все версии наборов инструкций от MMX до SSE4.2, и многие приложения (в основном игры) начали требовать этих функций для работы.

Время для новых букв

2008 год также был годом, когда Intel объявила о том, что они работают над значительным апгрейдом своей системы SIMD, и в 2011 году выкатила линейку процессоров Sandy Bridge с поддержкой набора инструкций AVX (Advanced Vector Extensions, «продвинутые векторные расширения»).

Всё удвоилось: вдвое больше векторных регистров и вдвое больше их размер.

Шестнадцать 256-битных регистров вмещают только восемь 32-битных или четыре 64-битных вещественных числа, поэтому в плане форматов данных, этот набор инструкций более ограничен в сравнении с SSE, но ведь и SSE никто не отменял. К тому времени программная поддержка векторных операций для CPU была уже хорошо отлажена, начиная с фундаментального мира компиляторов, заканчивая сложными приложениями.

И не даром: Core i7-2600K (или подобный ему), работающий на частоте 3,8ГГц, потенциально может выдавать более 230 GFLOPS (миллиардов операций с плавающей точкой в секунду) при выполнении инструкций AVX – неплохо для дополнения, относительно немного места занимающего на кристалле процессора.

Или могло бы быть неплохо, если бы он действительно работал на частоте 3,8ГГц. Частично проблема AVX заключалась в том, что нагрузка на чип получалась настолько высокой, что Intel пришлось заставить процессор автоматически снижать тактовую частоту в этом режиме примерно на 20%, чтобы уменьшить энергопотребление и не допустить перегрева. К сожалению, такова цена за выполнение любой работы SIMD в современном процессоре.

Еще одно усовершенствование, предлагаемое в AVX – это возможность работать одновременно с тремя значениями. Во всех версиях SSE операции выполнялись между двумя значениями, после чего результат заменял одно из них в регистре. При выполнении инструкций SIMD AVX не трогает исходные значения, сохраняя результирующее значение в отдельный регистр.

AVX2 был выпущен вместе с архитектурой Haswell для процессоров Core 4-го поколения в 2013 году, и представлял собой довольно значительный апгрейд, благодаря добавлению нового расширения: FMA (Fused Multiply-Add, «умножение-сложение с однократным округлением»).

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

Проблема оказалась в том, что FMA от Intel отличался от аналогичного расширения AMD настолько, что они были совершенно несовместимы. Причина в том, что Intel FMA представляет собой систему с тремя операндами, то есть работает с тремя отдельными значениями: два слагаемых и сумма, либо три слагаемых и сумма, замещающая одно из слагаемых.

У версии от AMD четыре операнда, поэтому она может вычислить 3 числа и записать ответ в отдельный регистр, не трогая исходные значения. Математически FMA4 лучше, чем FMA3, но его реализация немного сложнее, как с точки зрения программирования, так и с точки зрения интеграции функции в процессор.

AVX-512: а не многовато-ли?

AVX2 ещё только начал появляться на рынке процессоров, а Intel уже плела маниакальные планы относительно его преемника, AVX-512, и общий настрой среди разработчиков был такой: «больше регистров богу регистров!». Мало того, что этих самых регистров снова вдвое больше, и они снова вдвое увеличились в размере, так ещё и появился стек новых инструкций и поддержка устаревших.

Первой партией чипов, на которых поднялся в воздух набор функций AVX-512, стала серия Xeon Phi 7200 – второе поколение громоздких и очень многоядерных процессоров Intel, ориентированных на рынок суперкомпьютеров.

72-ядерный 288-потоковый Knights Landing Xeon Phi.

В отличие от всех предыдущих реализаций, новый набор векторных инструкций состоял из 19-и компонентов: базового – AVX-512F, – необходимого для обеспечения совместимости, и множества весьма специфических. Эти дополнительные наборы охватывают такие области операций, как обратная математика, целочисленные FMA и алгоритмы свёрточной (конволюционной) нейронной сети (CNN-алгоритмы).

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

Это может показаться круто. А может и не показаться – в зависимости от вашей точки зрения. Регистры на кристалле CPU обычно группируются в так называемом регистровом файле, как видно на макрофото ниже.

2-ядерный Intel Skylake

Желтым прямоугольником выделен файл векторных регистров, красный прямоугольник – это наиболее вероятное расположение файла целочисленного регистра. Обратите внимание, насколько файл векторного регистра больше integer-регистра. В Skylake используются 256-битные регистры AVX2, следовательно аналогичный векторный регистровый файл AVX-512 занял бы на таком же кристалле в четыре раза больше места: вдвое больше, потому что вдвое больше их размер, и ещё вдвое – потому что самих регистров вдвое больше.

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

И учитывая, что использование AVX в любом виде приводит к автоматическому уменьшению тактовой частоты, использование AVX-512 на таких платформах скорее всего приведет к ещё более сомнительным издержкам по сравнению с любым из своих предшественников, поскольку при работе он потребляет еще больше энергии.

И проблема AVX-512 не только в применении к небольшим мобильным процессорам. Разработчикам, пишущим код для работы на рабочих станциях и серверах, и для которых увеличение возможностей векторных расширений действительно важный вопрос, потребуется создавать несколько версий кода. Это связано с тем, что не все процессоры с AVX-512 работают с одинаковым набором команд.

Например, набор IFMA (Integer Fused Multiply Add, «целочисленное умножение-сложение с однократным округлением») доступен только на процессорах Cannon, Ice и Tiger Lake. В то время как процессоры на архитектуре Cooper и Cascade Lake его не поддерживают, несмотря на то, что они относятся к сегменту процессоров для серверов и рабочих станций.

Стоит отметить, что AMD не предлагает поддержку AVX-512, и не собирается. По их мнению, обработка массивных векторных вычислений – это прерогатива GPU. С AMD полностью солидарна Nvidia, и обе компании уже выпустили продукты специально для таких нужд.

И дальше что?

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

Что касается последних двух типов данных, то CPU теперь напрямую конкурируют с GPU: ведь мир 3D-графики – это как раз всё, что связано с SIMD, векторами, плавающими точками и т.д. И производители GPU не спали – разработка графических ускорителей велась стремительными темпами. В начале 2010-х годов купить видеокарту, процессор которой способен выполнять почти 800 миллиардов инструкций SIMD в секунду, вы уже могли менее чем за 500 долларов.

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

Вас интересует производительность SIMD в чистом виде? Ваш выбор – видеокарта, а не материнка!

Стремительное развитие графических процессоров недвусмысленно намекает, что для CPU нет нужды иметь чересчур большие векторные блоки, и почти наверняка именно поэтому AMD даже не пыталась разрабатывать своего собственного преемника для AVX2 (расширение, которое они используют в своих чипах с 2015 года). Давайте также не будем забывать, что процессоры следующего поколения могут больше походить на мобильные однокристальные (SoC, System-on-a-Chip), где под каждый тип задач выделена площадь на кристалле. Intel, в свою очередь, похоже, стремится внедрить AVX-512 в как можно большее количество продуктов.

Ждёт ли нас ещё и AVX-1024? Вряд ли, либо очень нескоро. Скорее всего, Intel займётся расширением AVX-512 с помощью дополнительных компонентов с инструкциями, чтобы повысить гибкость, а чистую SIMD-производительность переложит на плечи своей недавно разработанной линейки графических процессоров Xe.

Библиотеки SSE и AVX теперь являются неотъемлемой частью программного обеспечения: Adobe Photoshop требует, чтобы процессоры поддерживали как минимум SSE4.2; API машинного обучения TensorFlow требует поддержки AVX; Microsoft Teams может выполнять фоновые видеоэффекты, только если доступен AVX2.

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

Понравилась статья? Поделить с друзьями:
  • Велсон таблетки для сна инструкция по применению цена аналоги взрослым
  • Витамин липоевая кислота инструкция по применению
  • Виагра софт инструкция по применению цена отзывы аналоги
  • Лифан 2v78f 2a pro инструкция на русском
  • Алфлутоп инструкция по применению таблетки взрослым отзывы