Набор инструкций CLMUL
Умножение без переноса ( CLMUL ) — это расширение набора команд x86, используемого микропроцессорами Intel , и AMD которое было предложено Intel в марте 2008 года. [1] и стала доступна в процессорах Intel Westmere, анонсированных в начале 2010 года. Математически инструкция реализует умножение полиномов над конечным полем GF(2), где битовая строка представляет полином . Команда CLMUL также позволяет более эффективно реализовать тесно связанное умножение больших конечных полей GF(2 к ), чем традиционный набор команд. [2]
Одним из применений этих инструкций является повышение скорости приложений, выполняющих блочное шифрование в режиме Галуа/Счетчика , который зависит от конечного поля GF(2 к ) умножение. Другое применение — быстрый расчет значений CRC , [3] включая те, которые используются для реализации LZ77 скользящего окна алгоритма DEFLATE в zlib и pngcrush . [4]
ARMv8 также имеет версию CLMUL. SPARC называет свою версию XMULX, что означает «умножение XOR».
Новые инструкции
[ редактировать ]Инструкция вычисляет 128-битное без переноса произведение двух 64-битных значений . Назначением является 128-битный регистр XMM . Источником может быть другой регистр XMM или память. Непосредственный операнд указывает, какие половины 128-битных операндов умножаются. Также определены мнемоники , определяющие конкретные значения непосредственного операнда:
Инструкция | Код операции | Описание |
---|---|---|
PCLMULQDQ xmmreg,xmmrm,imm | [rmi: 66 0f 3a 44 /r ib] | Выполните умножение без переноса двух 64-битных полиномов над конечным полем GF (2)[ X ]. |
PCLMULLQLQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 00] | Умножьте младшие половины двух регистров. |
PCLMULHQLQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 01] | Умножьте старшую половину регистра назначения на младшую половину регистра источника. |
PCLMULLQHQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 10] | Умножьте младшую половину регистра назначения на старшую половину регистра источника. |
PCLMULHQHQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 11] | Умножьте старшие половины двух регистров. |
Векторизованная версия EVEX (VPCLMULQDQ) представлена в AVX-512 .
ЦП с набором команд CLMUL
[ редактировать ]- Интел
- Процессор Westmere (март 2010 г.).
- Сэнди Бридж процессор
- Айви Бридж Процессор
- Хасуэлл Процессор
- Процессор Broadwell (с повышенной пропускной способностью и меньшей задержкой) [5] )
- Процессор Skylake (и более поздние версии)
- Голдмонт процессор
- АМД :
- Процессоры на базе Jaguar и новее [6]
- Процессоры на базе Puma и новее
- Процессоры «Тяжелое оборудование»
- на базе бульдозера Процессоры [7]
- на базе Piledriver Процессоры
- на базе Steamroller Процессоры
- Процессоры на базе экскаватора и новее
- Дзен -процессоры
- Дзен+ процессоры
- Процессоры Zen2 (и новее)
Наличие набора команд CLMUL можно проверить, проверив один из битов функции ЦП .
См. также
[ редактировать ]- Арифметика конечных полей
- Набор инструкций AES
- Набор инструкций FMA3
- Набор инструкций FMA4
- Набор инструкций AVX
Ссылки
[ редактировать ]- ^ «Сеть программного обеспечения Intel» . Интел. Архивировано из оригинала 7 апреля 2008 г. Проверено 5 апреля 2008 г.
- ^ Шей Герон; Майкл Э. Кунавис (20 апреля 2014 г.). «Инструкция Intel по умножению без переноса и ее использование для вычисления режима GCM – версия 2.02» (PDF) . Интел . Архивировано из оригинала 06 августа 2019 г.
- ^ «Быстрое вычисление CRC для универсальных полиномов с использованием PCLMULQDQ» (PDF) .
- ^ Влад Краснов (08.07.2015). «Борьба с раком: неожиданная польза от открытого исходного кода нашего кода» . CloudFlare . Проверено 4 сентября 2016 г.
- ^ Йохан Де Гелас (31 марта 2017 г.). «Обзор Intel Xeon E5 v4: тестирование Broadwell-EP с требовательными серверными нагрузками» . Анандтех . п. 3.
- ^ «Слайд с подробным описанием улучшений Jaguar по сравнению с Bobcat» . АМД . Проверено 3 августа 2013 г.
- ^ Дэйв Кристи (6 мая 2009 г.). «Достижение баланса» . Блоги разработчиков AMD. Архивировано из оригинала 9 ноября 2013 года . Проверено 11 марта 2011 г.