В 1997 году Intel выпустила Pentium MMX — процессор с 57 дополнительными инструкциями, которые назвали MMX (MultiMedia eXtensions). Идея была простая: вместо одного целого числа за раз обрабатывать несколько чисел, упакованных в 64-битный регистр, одной командой. Это и есть SIMD. MMX не был первым SIMD: ещё в 1960-х ILLIAC IV использовал массово-параллельную архитектуру, CDC и Cray делали векторные машины. Но SIMD и векторные процессоры — не одно и то же: Cray-1 имел векторные регистры на 64 элемента и инструкцию SET VECTOR SIZE, а MMX работал с регистрами фиксированной ширины. Главная заслуга MMX в том, что Intel принесла доступный SIMD в обычные PC.
Регистры MMX не были новыми: в режиме MMX Intel переиспользовала x87 floating-point регистры. MM0-MM7 — алиасы на нижние 64 бита 80-битных x87 регистров. Это экономило кремний, но делало MMX и обычные FPU-операции взаимоисключающими. После MMX нужно было вызывать EMMS, иначе x87 код начинал давать странные баги.
Работа с MMX выглядела так: movq mm0, [src1], movq mm1, [src2], paddb mm0, mm1 — одно сложение вместо восьми. Для графики важна насыщающая арифметика: paddusb даёт 250+20=255, а не 14, и 10-40=0. Были и сравнения (pcmpgtb, результат 0xFF или 0x00), сдвиги (psllw, psrlw), умножение (pmullw). Floating-point SIMD в MMX не было, поэтому использовался fixed-point.
В играх MMX применяли реже, чем ожидалось. К 1997-1998 на рынок уже выходили 3D-ускорители (S3 ViRGE, ATI 3D Rage, 3dfx Voodoo). Но для software rendering MMX использовался: текстуры, спрайты, alpha blending, MP3/MPEG, звук. Comanche 3 от Novalogic активно его использовала. Упоминаются Eraser Turnabout, POD и Extreme Assault; достоверность слухов о Tomb Raider с MMX-патчем под вопросом. Quake не был MMX-игрой: оригинальный Quake вышел в 1996, до Pentium MMX. Поддержку MMX проверяли инструкцией CPUID, bit 23 регистра EDX.
AMD ответила 3DNow! в 1998 на K6-2: те же 64-битные MMX-регистры, но с floating-point SIMD. Quake II получил отдельную сборку 3.20 с 3DNow!, но успеха технология не имела: MMX имел огромный запас по времени и поддержку почти всех x86, а в 1999 Intel выпустила SSE на Pentium III. SSE перекрывал 3DNow! и стал отраслевым стандартом. MMX продолжал жить для целочисленных задач, пока в 2000 не появился SSE2: 128-битные XMM-регистры и целочисленный SIMD позволили обрабатывать 16 пикселей за раз вместо восьми.
MMX не был магической кнопкой. Pentium MMX был быстрее предшественников и за счёт 32KB кэша вместо 16KB. Но именно MMX принёс в мейнстрим упакованные данные, векторную арифметику, насыщающие операции и data-parallel программирование. От него тянутся SSE, AVX и современные SIMD-расширения. MMX стоит считать успешным переходным этапом, а не провалом.