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. AMD also added MMX instruction set in its K6 processor.
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).
MMX is officially a meaningless initialism[6] trademarked by Intel;[7] unofficially, the initials have been variously explained as standing for
- MultiMedia eXtension,[1] or
- Matrix Math eXtension.[8]
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.[9]
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.[10]
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.[11] 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 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.[11]
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[12] in 1999,[13] 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.[14][15][16] 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.
- Extended MMX
- AltiVec — equivalent on PowerPC architecture
- ^ 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, …
- ^ 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.
- ^ «Embedded Pentium Processors with MMX Technology». Intel. Archived from the original on August 11, 2010. Retrieved July 28, 2007.
- ^ 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.
- ^ 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.
- ^ 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
- ^ «Intel | Data Center Solutions, IoT, and PC Innovation». Archived from the original on December 17, 2013. Retrieved December 17, 2013.
- ^ Zhang, Peng (January 1, 2010). «CHAPTER 5 — Microprocessors». Advanced Industrial Control Technology. (12) MMX technology: William Andrew Publishing. pp. 155–214. ISBN 978-1-4377-7807-6. Retrieved June 2, 2024.
{{cite book}}
: CS1 maint: location (link) - ^ «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.
- ^ 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.
- ^ 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.
- ^ 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.
- ^ «Microprocessor Hall of Fame». Intel Museum. Archived from the original on April 6, 2008.
- ^ «Intel Brings MMX™ Technology To Intel® Personal Internet Client Architecture-Based Wireless Devices». Retrieved July 28, 2022.
- ^ «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.
- ^ «World’s smallest PXA270 embedded CPU card?». EE Times. September 15, 2004. Retrieved July 28, 2022.
- Intel Intrinsics Guide
- Intel Pentium Processor with MMX Technology Documentation
- IA Software Developer’s Manual, Vol 1 (PDF), see chapter 8 for MMX programming
Материал из РУВИКИ — свободной энциклопедии
У этого термина существуют и другие значения, см. MMX (значения).
MMX (Multimedia Extensions — мультимедийные расширения) — коммерческое название дополнительного SIMD-набора инструкций, разработанного компанией Intel и впервые представленного в 1997 году одновременно с линией процессоров Pentium MMX. Набор инструкций был предназначен для ускорения процессов кодирования/декодирования потоковых аудио- и видеоданных. Является развитием технологий, предложенных в микропроцессоре i860[1]. Разработан в лаборатории Intel в Хайфе, Израиль, в первой половине 1990-х[2][3].
Сейчас набор инструкций MMX, представленный в 1997 году, является откровенно устаревшим и уже давно вытеснен различными версиями SSE и AVX. Тем не менее, в средствах разработки он всё ещё формально поддерживается; правда, в силу редкости использования, реализация страдает от многочисленных дефектов. Поэтому есть предложения удалить его из популярного набора компиляторов LLVM[4].
Расширение MMX включает в себя восемь 64-битных регистров общего пользования MM0—MM7. Для совместимости со способами переключения контекста процессора в существующих ОС Intel была вынуждена объединить в программной модели процессора восемь регистров MMX с мантиссами восьми регистров FPU. Аппаратно это могут быть разные устройства, но с точки зрения программиста — это одни и те же регистры. Таким образом, нельзя одновременно пользоваться командами математического сопроцессора и MMX.
Команды технологии MMX обрабатывают целочисленные данные, упакованные в группы (векторы) общей длиной 64 бита, либо одиночные 64-битные слова. Такие данные могут находиться в памяти или в восьми MMX-регистрах.
Команды технологии MMX работают со следующими типами данных:
- упакованные байты (восемь байтов в одном 64-разрядном регистре) (англ. packed byte);
- упакованные слова (четыре 16-разрядных слова в 64-разрядном регистре) (англ. packed word);
- упакованные двойные слова (два 32-разрядных слова в 64-разрядном регистре) (англ. packed doubleword);
- 64-разрядные слова (англ. quadword).
MMX-команды имеют следующий синтаксис:
instruction [dest, src]
Здесь instruction — имя команды, dest обозначает выходной операнд, src — входной операнд.
Систему команд образуют 57 инструкций, позволяющих параллельно обрабатывать несколько элементов данных[5].
Большинство команд имеет суффикс, который определяет тип данных и используемую арифметику:
- US (unsigned saturation) — арифметика с насыщением, данные без знака.
- S или SS (signed saturation) — арифметика с насыщением, данные со знаком. Если в суффиксе нет ни S, ни SS, используется циклическая арифметика (wraparound).
- B, W, D, Q указывают тип данных. Если в суффиксе есть две из этих букв, первая соответствует входному операнду, а вторая — выходному.
Можно выделить следующие группы инструкций[5]:
- пересылки данных, позволяющих перемещать данные между регистрами MMX и целочисленными регистрами процессора или памятью;
- упаковки и распаковки данных, позволяющих преобразовывать элементы векторов в элементы с меньшей разрядностью или попарно объединять элементы с образованием элементов большей разрядности;
- арифметических, например, сложение и вычитание в различных режимах, умножение, а также операция умножения 4 пар операндов с последующим сложением первого произведения со вторым, а третьего — с четвёртым;
- сравнения векторов с записью результата сравнения в виде битовой маски;
- логических — И, инверсия прямой импликации, ИЛИ и исключающее ИЛИ;
- логических и арифметических сдвигов;
- управления состоянием — установка признаков пустых регистров слова тегов FPU.
Выполнение инструкций MMX не приводит к изменению флагов условий слова состояния FPU, за исключением поля TOP.
К регистрам MMX можно обращаться непосредственно по именам, в отличие от регистров FPU, которые организованы в стек с вершиной, определяемой полем TOP слова состояния FPU. При этом поле TOP сбрасывается после выполнения любой инструкции MMX.
Выполнение инструкций MMX возможно в любом режиме процессора[5].
Семейство процессоров Intel XScale, начиная с модели PXA270, содержит дополнение к системе команд ARM, называемое iwMMXt, похожее на расширение IA-32 MMX.
- ↑ Millind Mittal, Alex Peleg, Uri Weiser. MMX Technology Architecture Overview // Intel Technology Journal. — 1997. — Т. 1, № 3.
- ↑ Intel in Haifa, Israel Архивная копия от 19 июля 2013 на Wayback Machine // intel.com
- ↑ Intel Israel Fab Tour — первое официальное международное пресс-мероприятие Intel в Израиле Архивная копия от 11 ноября 2013 на Wayback Machine // ixbt.com
- ↑ Компиляторы могут остаться без поддержки Intel MMX Архивная копия от 3 сентября 2020 на Wayback Machine // 2.09.2020
- ↑ 1 2 3 Михаил Гук. Процессоры Intel: от 8086 до Pentium II. — СПб.: Питер, 1997. — С. 96. — 224 с. — ISBN 5-88782-398-4.
- Бердышев Евгений. Технология MMX. Новые возможности процессоров P5 и P6. — М.: ДИАЛОГ-МИФИ, 1998. — 234 с. — ISBN 5-86404-105-x.
- Технология MMX — новый этап развития процессоров Intel (рус.)
- IA Software Developer’s Manual, Vol 1 (англ.), см. раздел 8 о программировании MMX
- IA Optimization manual (англ.), Руководство
- Codenet.ru (рус.), статья о программировании ММХ, codenet.ru
Pentium 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), который предсказывает наиболее вероятный набор инструкций для исполнения.
— Улучшенная конвейерная обработка. Для повышения производительности была добавлена дополнительная стадия конвейерной обработки.
— Более глубокие буферы записи. Для улучшени производительности записи в память, буферная область, состоящая из четырех буферов, теперь используется совместно двумя конвейерами.
Технология MMX+ и новый 0.25-микронный производственный процесс
Семейство процессоров Pentium для мобильных ПК призвано обеспечить наивысшую на сегодня производительность мобильных компьютеров. Компьютеры на базе мобильных процессоров Pentium с технологией MMX+ показывают отличную производительность при работе с графикой, видео- и аудио- приложениями. Новый 0.25-микронный технологический процесс Intel позволяет увеличить тактовую частоту процессора на 40%, сократив при этом расход энергии почти на 50% по сравнению с предыдущими высокопроизводительными процессорами для мобильных ПК. Это дает пользователям целый ряд преимуществ — от значительного повышения общей производительности до серьезного увеличения времени автономной работы. Тактовая частота увеличена до 233 МГц, расход энергии снижен почти на 50%
Технология производства микропроцессоров обычно характеризуется минимальным возможным размером элемента — чем меньше кристалл, тем с большей скоростью может работать схема. 0.25-микронная технология позволяет создавать элементы, имеющие вдвое меньшую площадь по сравнению с возможностями 0.35-микронной технологии (обычно применяемой в производстве самых быстрых устройств).
В мире компьютерных технологий нет ничего странного в обилии всевозможных аббревиатур: 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. Так что будем ждать нового поколения векторных расширений и надеюсь, реклама нас впечатлит.
Процессор не поддерживает 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