📌 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
Расширения:
⚙️ Где применяется
Область | Примеры |
---|---|
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