Карри-менее Умножение ( CLMUL ) является расширением x86 набор команд , используемых микропроцессорами от Intel и AMD , который был предложен Intel в марте 2008 года [1] и доступны в процессорах Intel Westmere объявили в начале 2010 года Математически, инструкция реализует умножение многочленов над конечным полем GF (2), где битовая цепочка представляет многочлен . Команда CLMUL также позволяет более эффективно реализовать тесно связанное умножение больших конечных полей GF (2 k ), чем традиционный набор команд.[2]
Одно из применений этих инструкций - повысить скорость приложений, выполняющих шифрование блочным шифром в режиме Галуа / счетчика , который зависит от умножения конечного поля GF (2 k ). Другое применение быстрое вычисление значений 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 k ). |
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 [ править ]
- Intel
- Процессор Westmere (март 2010 г.).
- Процессор Sandy Bridge
- Процессор Ivy Bridge
- Процессор Haswell
- Процессор Broadwell (с увеличенной пропускной способностью и меньшей задержкой [5] )
- Процессор Skylake (и новее)
- Процессор Goldmont
- AMD :
- Процессоры на базе Jaguar и новее [6]
- Процессоры на базе Puma и новее
- Переработчики "тяжелого оборудования"
- Процессоры на базе бульдозеров [7]
- Процессоры на базе Piledriver
- Процессоры на базе Steamroller
- Экскаваторные процессоры и новее
- Процессоры Zen
- Процессоры Zen +
- Процессоры Zen2 (и новее)
Наличие набора команд CLMUL можно проверить, протестировав один из битов функции ЦП .
См. Также [ править ]
- Конечная арифметика поля
- Набор инструкций AES
- Набор инструкций FMA3
- Набор инструкций FMA4
- Набор инструкций AVX
Ссылки [ править ]
- ^ "Intel Software Network" . Intel. Архивировано из оригинала на 2008-04-07 . Проверено 5 апреля 2008 .
- ^ Шей Gueron (2011-04-13). «Инструкция Intel Carry -less Multiplication и ее использование для вычислений в режиме GCM - Rev 2» . Intel .
- ^ «Быстрое вычисление CRC для общих многочленов с использованием PCLMULQDQ» (PDF) .
- ^ Влад Краснов (2015-07-08). «Борьба с раком: неожиданное преимущество открытого исходного кода для нашего кодекса» . CloudFlare . Проверено 4 сентября 2016 .
- ^ Йохан Де Гелас (2017-03-31). «Обзор Intel Xeon E5 v4: тестирование Broadwell-EP с требовательными серверными рабочими нагрузками» . Anandtech . п. 3.
- ^ "Слайд, детализирующий улучшения Jaguar по сравнению с Bobcat" . AMD . Проверено 3 августа 2013 года .
- ↑ Дэйв Кристи (6 мая 2009 г.). «Достижение баланса» . Блоги разработчиков AMD. Архивировано из оригинала 9 ноября 2013 года . Проверено 11 марта 2011 .