В SSE 128-битные регистры могут быть представлены как 4 элемента по 32 бита или 2 элемента по 64 бита.
SSE определяет два типа операций; скалярный и упакованный. Скалярная операция работает только с наименее значимым элементом данных (биты 0 ~ 31 или 0 ~ 63), а пакетная операция вычисляет все элементы параллельно.
_mm_cmpeq_sd
предназначен для работы с двойной точностью (64 -bit) элементов с плавающей запятой и будет сравнивать только наименее значимый элемент данных (первые 64 бита) из двух операндов (скаляр).
_mm_cmpeq_pd
предназначен для работы с двойной точностью (64 -bit) элементы с плавающей запятой, но будут сравнивать каждые две группы по 64 бита параллельно (упакованные).
_mm_cmpeq_ss
предназначен для работы с одинарной точностью (32 -bit) элементов с плавающей запятой и будет сравнивать только наименее значимый элемент данных (первые 32 бита) из двух операндов (скаляр).
_mm_cmpeq_ps
предназначен для работы с одинарной точностью (32 -bit) элементов с плавающей запятой и будет сравнивать каждую группу из 32 бит параллельно (упаковано).
Если вы используете 32-битное число с плавающей запятой, вы можете упаковать его в квадруплет, чтобы использовать 128-битное пространство. Таким образом, _mm_cmpeq_ps
сможет провести 4 сравнения параллельно.
Если вы используете 64-битное двойное, вы можете упаковать его в пару, чтобы использовать 128-битное пространство. Таким образом, _mm_cmpeq_pd
сможет провести 2 сравнения параллельно.
Если вы хотите проводить только одно сравнение за раз, вы можете использовать _mm_cmpeq_sd
для сравнения двух 64-битных чисел двойной точности или _mm_cmpeq_ss
для сравнения двух 32-битных чисел с плавающей запятой.
Обратите внимание, что _mm_cmpeq_sd
и _mm_cmpeq_pd
- это SSE2, а _mm_cmpeq_ss
и _mm_cmpeq_ps
- SSE.
person
zakinster
schedule
25.04.2013