📌 XMM

XMM — 128-битные векторные регистры, введённые в архитектуру x86_64 с набором инструкций SSE, предназначенные для работы с числами с плавающей точкой и SIMD-вычислениями.

🧠 Как работает

XMM регистры используются для параллельной обработки данных по SIMD-модели (Single Instruction, Multiple Data).
Каждый регистр может хранить:

  • четыре 32-битных float (FP32)
  • два 64-битных double (FP64)
  • восемь 16-битных short или шестнадцать 8-битных int

Операции выполняются одной SSE-инструкцией сразу над всеми элементами регистра.
Примеры инструкций: addps, mulps, movaps, xorps, sqrtpd, minsd

Расширения:

Набор командРазмер регистровРасширение
SSE / SSE2128 битXMM
AVX / AVX2256 битYMM
AVX-512512 битZMM

⚙️ Где применяется

ОбластьПримеры
MultimediaАудио, видео фильтрация, кодирование
Scientific computingВекторные операции над матрицами, числами
CryptographyПотоковая обработка блоков данных
Game enginesФизика, векторы движения, пересчёты координат
Machine LearningОбработка входных данных, нормализация

💻 Пример (на SSE)

#include <xmmintrin.h>
 
__m128 a = _mm_set_ps(1.0, 2.0, 3.0, 4.0);
__m128 b = _mm_set_ps(5.0, 6.0, 7.0, 8.0);
__m128 result = _mm_add_ps(a, b); // поэлементное сложение float

📐 Схема XMM регистра

+-----------------------------------------------------+
|        128-битный XMM регистр (SSE)                 |
+----------+----------+----------+----------+---------+
| float[3] | float[2] | float[1] | float[0] | ← порядок
+----------+----------+----------+----------+

✅ Преимущества

  • Параллельная обработка до 4 чисел за такт

  • Аппаратное ускорение векторной математики

  • Совместимость со всеми x86 CPU начиная с SSE

❌ Недостатки

  • Ограничение в 128 бит (устарело по сравнению с AVX)

  • Требует выравнивания данных и специфичных инструкций

  • Не работает с целыми числами без SSE2