SSSE3: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Спасено источников — 0, отмечено мёртвыми — 1. #IABot (v1.6.5)
 
(не показано 11 промежуточных версий 7 участников)
Строка 1: Строка 1:
'''Supplemental Streaming SIMD Extension 3''' ('''SSSE3''') — это обозначение, данное [[Intel]] четвёртому расширению системы команд. Предыдущее имело обозначение [[SSE3]], и Intel добавил ещё один символ 'S' вместо того, чтобы увеличить номер расширения, возможно, потому, что они посчитали SSSE3 простым дополнением к SSE3. Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами '''Tejas New Instructions (TNI)''' и '''Merom New Instructions (MNI)''' по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды. Появившись в Intel Core Microarchitecture, SSSE3 доступно в сериях процессоров [[Xeon]] 5100 (Server и Workstation версии), а также в процессорах [[Intel Core 2]] (Notebook- и Desktop-версии) и Intel Atom.
'''SSSE3''' (''[[Английский язык|англ]]. Supplemental Streaming SIMD Extensions 3'') — это обозначение, данное [[Intel]] четвёртому расширению системы команд. Предыдущее имело обозначение [[SSE3]], и [[Intel]] добавил ещё один символ "S" вместо того, чтобы увеличить номер расширения, возможно, потому, что они посчитали SSSE3 простым дополнением к [[SSE3]].


Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами '''Tejas New Instructions (TNI)''' и '''Merom New Instructions (MNI)''' по названию процессоров, где впервые [[Intel]] намеревалась поддержать эти новые команды.
Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-х битными (MMX), так и с 128-ми битными (XMM) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды.

SSSE3 был представлен 26 июня [[2006 год]]а вместе с процессорами [[Xeon]] с кодовым именем [[Xeon#Xeon на микроархитектуре Core|Woodcrest]].

Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-битными ([[MMX]]), так и с 128-битными (XMM) регистрами, поэтому [[Intel]] в своих материалах ссылается на 32 новые команды.


== Новые инструкции ==
== Новые инструкции ==
Строка 22: Строка 26:
** Input — { A0, A1 }, { B0, B1 }, imm8
** Input — { A0, A1 }, { B0, B1 }, imm8
** Output — { B1_B0_A1_A0 >> (imm8 * 8) }
** Output — { B1_B0_A1_A0 >> (imm8 * 8) }
Два регистра операнда рассматривается как одно беззнаковое промежуточное значение удвоенной размерности, из которого извлекается 64-х/128-х битное значение начиная с байта, указанного в непосредственном аргументе-константе команды.
Два регистра операнда рассматривается как одно беззнаковое промежуточное значение удвоенной размерности, из которого извлекается 64-/128-битное значение начиная с байта, указанного в непосредственном аргументе-константе команды.


=== Перемешивание байт ===
=== Перемешивание байт ===
Строка 36: Строка 40:
** Input — { A0, A1… }, { B0, B1… }
** Input — { A0, A1… }, { B0, B1… }
** Output — { A0 * B0, A1 * B1… }
** Output — { A0 * B0, A1 * B1… }
Аргументы A и B рассматриваются как вектора 16-ти битных знаковых чисел с фиксированной запятой представленных в диапазоне [-1,+1) (то есть 0x4000 это 0.5, а 0xa000 это −0.75 и т. д.), которые перемножаются друг с другом с корректным округлением.
Аргументы A и B рассматриваются как вектора 16-битных знаковых чисел с фиксированной запятой представленных в диапазоне [-1,+1) (то есть 0x4000 это 0.5, а 0xa000 это −0.75 и т. д.), которые перемножаются друг с другом с корректным округлением.


* '''PMADDUBSW''' — ''(Multiply and Add Packed Signed and Unsigned Bytes)''
* '''PMADDUBSW''' — ''(Multiply and Add Packed Signed and Unsigned Bytes)''
** Input — { A0, A1, A2, A3,.. }, { B0, B1, B2, B3,.. }
** Input — { A0, A1, A2, A3,.. }, { B0, B1, B2, B3,.. }
** Output — { (A0*B0+A1*B1), (A2*B2+A3*B3), … }
** Output — { (A0*B0+A1*B1), (A2*B2+A3*B3), … }
Производится побайтное перемножение векторов A и B, промежуточные 16-ти битные результаты попарно складываются между собой с насыщением и выдаются как результат.
Производится побайтное перемножение векторов A и B, промежуточные 16-битные результаты попарно складываются между собой с насыщением и выдаются как результат.


=== Горизонтальные сложения/вычитания целых ===
=== Горизонтальные сложения/вычитания целых ===


* '''PHSUBW''', '''PHSUBD''' — ''(Packed Horizontal Subtract (16-ти или 32-х битные поля))''
* '''PHSUBW''', '''PHSUBD''' — ''(Packed Horizontal Subtract (16- или 32-битные поля))''
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Output — { A0-A1 A2-A3 … B0-B1 B2-B3 …}
** Output — { A0-A1 A2-A3 … B0-B1 B2-B3 …}
Горизонтальное вычитание целых 16/32 битных полей.
Горизонтальное вычитание целых 16/32-битных полей.


* '''PHSUBSW''' — ''(Packed Horizontal Subtract and Saturate Words (16-ти битные поля))''
* '''PHSUBSW''' — ''(Packed Horizontal Subtract and Saturate Words (16-битные поля))''
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Output — { A0-A1 A2-A3 B0-B1 B2-B3 }
** Output — { A0-A1 A2-A3 B0-B1 B2-B3 }
Горизонтальное вычитание целых 16 битных полей с насыщением.
Горизонтальное вычитание целых 16-битных полей с насыщением.


* '''PHADDW''', '''PHADDD''' — ''(Packed Horizontal Add (16-ти или 32-х битные поля))''
* '''PHADDW''', '''PHADDD''' — ''(Packed Horizontal Add (16- или 32-битные поля))''
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}
** Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}
Горизонтальное сложение целых 16/32 битных полей.
Горизонтальное сложение целых 16/32-битных полей.


* '''PHADDSW''' — ''(Packed Horizontal Add and Saturate Words (16-ти битные поля))''
* '''PHADDSW''' — ''(Packed Horizontal Add and Saturate Words (16-битные поля))''
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
** Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}
** Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}
Горизонтальное сложение целых 16 битных полей с насыщением.
Горизонтальное сложение целых 16-битных полей с насыщением.


== Процессоры, поддерживающие SSSE3 ==
== Процессоры, поддерживающие SSSE3 ==
* '''Intel''':
* '''Intel''':
** Xeon 5100 Series
** [[Xeon]] 5100 Series
** Xeon 5300 Series
** [[Xeon]] 5300 Series
** Xeon 3000 Series
** [[Xeon]] 3000 Series
** Xeon E3
** [[Xeon]] E3
** Xeon E5
** [[Xeon]] E5
** Xeon E7
** [[Xeon]] E7
** Core 2 Duo
** [[Core 2 Duo]]
** Core 2 Quad
** [[Core 2 Quad]]
** Core 2 Extreme
** Core 2 Extreme
** Core i3
** [[Core i3]]
** Core i5
** [[Core i5]]
** Core i7
** [[Core i7]]
** Pentium Dual-Core
** [[Core i9]]
** [[Pentium Dual-Core]] (на ноутбуках начиная с ядра Merom)
** Celeron (Celeron 4xx, ядро Conroe-L)
** [[Celeron]] (Celeron 4xx, ядро Conroe-L)
** Celeron Dual-Core
** Celeron Dual-Core
** Celeron M 500 Series
** Celeron M 500 Series
** Intel Atom
** [[Intel Atom|Atom]]
* '''AMD''':
* '''AMD''':
** Bobcat (E-240, E-350, C-30, C-50)
** Основанные на [[Bobcat (микроархитектура)|Bobcat]] (E-240, E-350, C-30, C-50)
** Основанные на [[Jaguar (микроархитектура)|Jaguar]]
** Bulldozer
** Основанные на [[Puma (микроархитектура)|Puma]]
** Zen
** Основанные на [[Bulldozer (микроархитектура)|Bulldozer]] ([[Список микропроцессоров AMD FX|FX]], [[Opteron]])
** Основанные на [[Piledriver (микроархитектура)|Piledriver]] ([[Список микропроцессоров AMD FX|FX]], [[AMD APU|A10]], [[AMD APU|A8]], [[AMD APU|A6]], [[AMD APU|A4]], [[Opteron]])
** Основанные на [[Zen (микроархитектура)|Zen]]
** Основанные на [[Zen+]]
** Основанные на [[Zen 2]]
** Основанные на [[Zen 3]]
** Основанные на [[Zen 4]]
* '''VIA''':
* '''VIA''':
** Nano
** [[VIA Nano|Nano]]


== Литература ==
== Литература ==
* [https://web.archive.org/web/20061104143303/http://download.intel.com/design/mobile/datashts/31407801.pdf Спецификация на Core 2 Mobile]
* [https://web.archive.org/web/20061104143303/http://download.intel.com/design/mobile/datashts/31407801.pdf Спецификация на Core 2 Mobile]

* [https://web.archive.org/web/20111124230720/http://download.intel.com/technology/architecture/new-instructions-paper.pdf Доклад Intel, признающий существование SSSE3 и описывающий SSE4]
* [https://web.archive.org/web/20111124230720/http://download.intel.com/technology/architecture/new-instructions-paper.pdf Доклад Intel, признающий существование SSSE3 и описывающий SSE4]

* [http://www.intel.com/design/processor/manuals/253667.pdf Описание системы команд, где расписаны SSSE3 инструкции]
* [http://www.intel.com/design/processor/manuals/253667.pdf Описание системы команд, где расписаны SSSE3 инструкции]
* [ftp://download.intel.com/design/Pentium4/manuals/25366721.pdf Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B]{{Недоступная ссылка|date=2018-05|bot=InternetArchiveBot }}


{{Наборы инструкций процессоров x86}}
* [ftp://download.intel.com/design/Pentium4/manuals/25366721.pdf Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B]{{Недоступная ссылка|date=Май 2018 |bot=InternetArchiveBot }}


{{Наборы инструкций процессоров x86}}
[[Категория:Инструкции x86]]
[[Категория:Инструкции x86]]
[[Категория:Расширения архитектуры x86]]
[[Категория:Расширения архитектуры x86]]

Текущая версия от 16:17, 17 июля 2024

SSSE3 (англ. Supplemental Streaming SIMD Extensions 3) — это обозначение, данное Intel четвёртому расширению системы команд. Предыдущее имело обозначение SSE3, и Intel добавил ещё один символ "S" вместо того, чтобы увеличить номер расширения, возможно, потому, что они посчитали SSSE3 простым дополнением к SSE3.

Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами Tejas New Instructions (TNI) и Merom New Instructions (MNI) по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды.

SSSE3 был представлен 26 июня 2006 года вместе с процессорами Xeon с кодовым именем Woodcrest.

Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-битными (MMX), так и с 128-битными (XMM) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды.

Новые инструкции

[править | править код]

Работа со знаком

[править | править код]
  • PABSB, PABSW, PABSD(Packed Absolute Value {Bytes/Words/DWords})
    • Input — { A0, A1… }
    • Output — { A0 * sign(A0), A1 * sign (A1)… }

Каждое поле результата есть абсолютная величина соответствующего поля из src1. Фактически это те же операции PSIGNB, PSIGNH, PSIGNW, у которых оба аргумента один и тот же регистр.

  • PSIGNB, PSIGNW, PSIGND(Packed Sign {Bytes/Words/DWords})
    • Input — { A0, A1… }, { B0, B1… }
    • Output — { A0 * sign(B0), A1 * sign (B1)… }

Каждое поле результата есть произведение поля из src1 на {-1,0,1} в зависимости от знака соответствующего поля в src2 (умножение на 0, когда поле в src2 равно нулю).

  • PALIGNR(Packed Align Right)
    • Input — { A0, A1 }, { B0, B1 }, imm8
    • Output — { B1_B0_A1_A0 >> (imm8 * 8) }

Два регистра операнда рассматривается как одно беззнаковое промежуточное значение удвоенной размерности, из которого извлекается 64-/128-битное значение начиная с байта, указанного в непосредственном аргументе-константе команды.

Перемешивание байт

[править | править код]
  • PSHUFB(Packed Shuffle Bytes)
    • Input — { A0, A1, A2,.. A7/A15 }, { B0, B1, B2,.. B7/B15 }
    • Output — { [AB0 AB1 AB2 …] }

Перестановка байт, каждый байт результата есть некоторый байт из первого аргумента, определяемый по соответствующему байту из второго аргумента (если байт отрицательный, то в байт результат прописывается ноль, иначе используются младшие 3 или 4 бита как номер байта в первом аргументе).

  • PMULHRSW(Packed Multiply High with Round and Scale)
    • Input — { A0, A1… }, { B0, B1… }
    • Output — { A0 * B0, A1 * B1… }

Аргументы A и B рассматриваются как вектора 16-битных знаковых чисел с фиксированной запятой представленных в диапазоне [-1,+1) (то есть 0x4000 это 0.5, а 0xa000 это −0.75 и т. д.), которые перемножаются друг с другом с корректным округлением.

  • PMADDUBSW(Multiply and Add Packed Signed and Unsigned Bytes)
    • Input — { A0, A1, A2, A3,.. }, { B0, B1, B2, B3,.. }
    • Output — { (A0*B0+A1*B1), (A2*B2+A3*B3), … }

Производится побайтное перемножение векторов A и B, промежуточные 16-битные результаты попарно складываются между собой с насыщением и выдаются как результат.

Горизонтальные сложения/вычитания целых

[править | править код]
  • PHSUBW, PHSUBD(Packed Horizontal Subtract (16- или 32-битные поля))
    • Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Output — { A0-A1 A2-A3 … B0-B1 B2-B3 …}

Горизонтальное вычитание целых 16/32-битных полей.

  • PHSUBSW(Packed Horizontal Subtract and Saturate Words (16-битные поля))
    • Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Output — { A0-A1 A2-A3 B0-B1 B2-B3 }

Горизонтальное вычитание целых 16-битных полей с насыщением.

  • PHADDW, PHADDD(Packed Horizontal Add (16- или 32-битные поля))
    • Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}

Горизонтальное сложение целых 16/32-битных полей.

  • PHADDSW(Packed Horizontal Add and Saturate Words (16-битные поля))
    • Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}

Горизонтальное сложение целых 16-битных полей с насыщением.

Процессоры, поддерживающие SSSE3

[править | править код]

Литература

[править | править код]