Advanced Vector Extensions (AVX) и их использование презентация

Содержание


Презентации» Образование» Advanced Vector Extensions (AVX) и их использование
Advanced Vector Extensions (AVX)  и их использование
 Докладчик:
 Огородников АлександрРасширения x86
 2010. Набор команд AVX
 Количество инструкций >100. 32 нмMulti-Media Extensions (MMX)
 Впервые в процессорах Pentium MMX.
 Регистры: MM0 -Streaming SIMD Extensions (SSE)
 Впервые в процессорах Pentium 3.
 Регистры: XMM0Streaming SIMD Extensions 2 (SSE2)
 Впервые в процессорах Pentium 4.
 Регистры:Streaming SIMD Extensions 3 (SSE3)
 Впервые в процессорах Prescott.
 Регистры: XMM0Supplemental Streaming SIMD Extension 3 (SSSE3)
 Впервые в процессорах Intel CoreStreaming SIMD Extensions 4 (SSE4)
 Впервые в процессорах Penryn.
 Регистры: XMM0Advanced Vector Extensions (AVX)
 Регистры: YMM0 — YMM15 (256 бит):Расшифровка инструкций
 		ADDxx
 PD - Packed Double Precision Floating-Point Values
 PSРасшифровка инструкций
 		CVTxx2yy (Convert xx to yy Values)
 DQ - PackedНеразрушающие операции
 SSE код:
 	movdqa xmm2, xmm0
 	punpcklbw xmm0, xmm1
 	punpckhbwПреимущества трехоперандных инструкций:
 Позволяют избавиться от лишних операций копирования регистров вФормат инструкций AVX
 ADDPD xmm1, xmm2/m128
 VADDPD xmm1, xmm2, xmm3/m128
 VADDPDНовые инструкции:
 vbroadcastss / vbroadcastsd / vbroadcastf128
 ; заполнение AVX регистраНовые инструкции:
 vinsertf128 / vextractf128
 ; вставка/получение 128-битной части AVX регистра
Новые инструкции:
 vldmxcsr / vstmxcsr
 ; загрузка/сохранение управляющих параметров AVX
 
Поддержка в операционных системах
 Windows 7
 Windows Server 2008 R2
 LinuxИспользование AVX в ассемблерном коде
 GAS - начиная с версии binutilsОпределение поддержки AVX системой
 Убедимся, что ОС сохраняет/восстанавливает контекст AVX сОпределение поддержки AVX системой
 Инструкции XSAVE/XRSTOR конфигурируются с помощью extended controlИспользование AVX-инструкций
 Нежелательно смешивать SSE- и AVX-инструкции.
 vzeroupper и vzeroall работаютИспользование AVX-инструкций
 Пусть в функцию передали double a[4], double b[4]. ПосчитаемИспользование AVX в коде на C/C++
 Поддержка AVX реализована в следующихИспользование AVX в коде на C/C++
 Чтобы проверить, что процессор поддерживаетИспользование AVX в коде на C/C++
 Пусть в функцию передали doubleНормализация 3D-векторов
 Рассмотрим код:
 void Normalize(float Vec[][3],int N) { 
 	forНормализация 3D-векторов
 Рассмотрим код:
 void Normalize(float Vec [ ] [3],int N)Нормализация 3D-векторов
 AVX позволяет делать параллельные вычисления с 8-ми float. Например,Нормализация 3D-векторов
 128-bit AoS to SoA shuffleНормализация 3D-векторов
 128-bit AoS to SoA shuffleНормализация 3D-векторов
 128-bit SoA to AoS shuffleНормализация 3D-векторов
 128-bit SoA to AoS shuffleНормализация 3D-векторов
 256-bit AoS to SoA shuffleНормализация 3D-векторов
 256-bit AoS to SoA shuffleНормализация 3D-векторов
 256-bit SoA to AoS shuffleНормализация 3D-векторов
 Тест конвертации вектора AoS -> SoA -> AosНормализация 3D-векторов
 Тест нормализации вектора в SoAНормализация 3D-векторов
 Тест нормализации вектора в SoAШифрование AES
 		Стандарт шифрования AES является официальным стандартом правительства США дляШифрование AES
 		AES-128, AES-192, AES-256 обрабатывают блоки данных за соответственно 10,Шифрование AES
 	AddRoundKey (128-bit, 128-bit) является 128-битным преобразованием, которое заключается вШифрование AES
 	S-Box (Блок подстановки) это 8-битное преобразование, которое определяется какШифрование AES
 InvS-Box является обратным преобразованием по отношению к 
 S-BoxШифрование AES
 		SubBytes является 16-байтовым преобразованием, которое заключается в применении преобразованияШифрование AES
 		ShiftRows является побайтовой перестановкой: 
 (15, 14, 13, 12,Шифрование AES
 		MixColumns является 128-битным преобразованием, работающим со столбцами матрицы 4х4Шифрование AES
 		Инструкции AESENC, AESENCLAST, AESDEC, AESDECLAST можно описать приведенным нижеШифрование AES
 		Инструкции AESENC, AESENCLAST, AESDEC, AESDECLAST можно описать приведенным нижеШифрование AES
 Пример шифрования AES-128:
 ; данные в xmm1. регистры xmm2Шифрование AES
 Пример шифрования AES-128 (параллельная обработка):
 mov ecx, 9 
Шифрование AES
 Пример шифрования AES-128 (параллельная обработка):
 movdqu xmm1, OWORD PTRЗаключение
 		Наборы векторных данных большей разрядности могут обрабатываться со скоростью доСсылки
 http://software.intel.com/en-us/avx/
 http://ru.wikipedia.org/wiki/AVX/



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Advanced Vector Extensions (AVX) и их использование Докладчик: Огородников Александр


Слайд 2
Описание слайда:
Расширения x86 2010. Набор команд AVX Количество инструкций >100. 32 нм

Слайд 3
Описание слайда:
Multi-Media Extensions (MMX) Впервые в процессорах Pentium MMX. Регистры: MM0 - MM7 (64 бита). Целочисленные вычисления.

Слайд 4
Описание слайда:
Streaming SIMD Extensions (SSE) Впервые в процессорах Pentium 3. Регистры: XMM0 - XMM7 (128 бит, 4 значения с плавающей точкой одинарной точности). Поддерживает вычисления с плавающей точкой.

Слайд 5
Описание слайда:
Streaming SIMD Extensions 2 (SSE2) Впервые в процессорах Pentium 4. Регистры: XMM0 - XMM7 (128 бит, 2 значения с плавающей точкой двойной точности). Включает в себя ряд команд управления кэшем для минимизации загрязнения кэша при обработке неопределенных потоков информации.

Слайд 6
Описание слайда:
Streaming SIMD Extensions 3 (SSE3) Впервые в процессорах Prescott. Регистры: XMM0 - XMM7 (128 бит, 2 значения с плавающей точкой двойной точности). Возможность горизонтальной работы с регистрами. Преобразования значений с плавающей точкой в целые.

Слайд 7
Описание слайда:
Supplemental Streaming SIMD Extension 3 (SSSE3) Впервые в процессорах Intel Core Microarchitecture. Регистры: XMM0 - XMM7 (128 бит, 2 значения с плавающей точкой двойной точности). Работа с упакованными целыми.

Слайд 8
Описание слайда:
Streaming SIMD Extensions 4 (SSE4) Впервые в процессорах Penryn. Регистры: XMM0 – XMM15 (128 бит, не работает с 64-битными MMX регистрами). Ускорение видео, обработка строк 8/16 битных символов.

Слайд 9
Описание слайда:
Advanced Vector Extensions (AVX) Регистры: YMM0 — YMM15 (256 бит):

Слайд 10
Описание слайда:
Расшифровка инструкций ADDxx PD - Packed Double Precision Floating-Point Values PS - Packed Single Precision Floating-Point Values SD - Scalar Double Precision Floating-Point Values SS - Scalar Single Precision Floating-Point Values

Слайд 11
Описание слайда:
Расшифровка инструкций CVTxx2yy (Convert xx to yy Values) DQ - Packed Doubleword Integers SI - Doubleword Integers

Слайд 12
Описание слайда:
Неразрушающие операции SSE код: movdqa xmm2, xmm0 punpcklbw xmm0, xmm1 punpckhbw xmm2, xmm1 AVX код: vpunpckhbw xmm2, xmm0, xmm1 vpunpcklbw xmm0, xmm0, xmm1

Слайд 13
Описание слайда:
Преимущества трехоперандных инструкций: Позволяют избавиться от лишних операций копирования регистров в коде. Упрощают написание хороших оптимизирующих компиляторов.

Слайд 14
Описание слайда:
Формат инструкций AVX ADDPD xmm1, xmm2/m128 VADDPD xmm1, xmm2, xmm3/m128 VADDPD ymm1, ymm2, ymm3/m256

Слайд 15
Описание слайда:
Новые инструкции: vbroadcastss / vbroadcastsd / vbroadcastf128 ; заполнение AVX регистра одним и тем же значением vmaskmovps / vmaskmovpd ; загрузка/сохранение AVX регистра по маске vzeroupper ; обнуление старших 128 бит всех AVX регистров vzeroall ;полное обнуление всех AVX регистров

Слайд 16
Описание слайда:
Новые инструкции: vinsertf128 / vextractf128 ; вставка/получение 128-битной части AVX регистра vperm2f128 ; перестановка 128-битных частей 256-битного AVX регистра vpermilps / vpermilpd ; перестановка float/double чисел в AVX регистре

Слайд 17
Описание слайда:
Новые инструкции: vldmxcsr / vstmxcsr ; загрузка/сохранение управляющих параметров AVX xsaveopt ; получение подсказки, какие регистры содержат данные

Слайд 18
Описание слайда:
Поддержка в операционных системах Windows 7 Windows Server 2008 R2 Linux с ядром 2.6.30 и выше

Слайд 19
Описание слайда:
Использование AVX в ассемблерном коде GAS - начиная с версии binutils 2.19.50.0.1 MASM - начиная с версии 10 (входит в Visual Studio 2010) NASM - начиная с версии 2.03 YASM - начиная с версии 0.70

Слайд 20
Описание слайда:
Определение поддержки AVX системой Убедимся, что ОС сохраняет/восстанавливает контекст AVX с помощью инструкций XSAVE/XRSTOR:

Слайд 21
Описание слайда:
Определение поддержки AVX системой Инструкции XSAVE/XRSTOR конфигурируются с помощью extended control register (XCR0 - XFEATURE_ENABLED_MASK):

Слайд 22
Описание слайда:
Использование AVX-инструкций Нежелательно смешивать SSE- и AVX-инструкции. vzeroupper и vzeroall работают быстро. Команды загрузки/сохранения выровненных данных vmovaps/vmovapd/vmovdqa требуют, чтобы данные были выровнены на 16 байт. На Windows x64 подпрограмма не должна изменять регистры xmm6-xmm15. Ядро Sandy Bridge будет способно запускать на выполнение две 256-битные AVX-команды с плавающей точкой каждый такт. (одно умножение и одно сложение)

Слайд 23
Описание слайда:
Использование AVX-инструкций Пусть в функцию передали double a[4], double b[4]. Посчитаем a*b:

Слайд 24
Описание слайда:
Использование AVX в коде на C/C++ Поддержка AVX реализована в следующих популярных компиляторах: Microsoft C/C++ Compiler - начиная с версии 16 (входит в Visual Studio 2010) Intel C++ Compiler - начиная с версии 11.1 GCC - начиная с версии 4.4 Для использования 256-битных инструкций AVX в дистрибутив включен заголовочный файл immintrin.h.

Слайд 25
Описание слайда:
Использование AVX в коде на C/C++ Чтобы проверить, что процессор поддерживает AVX:

Слайд 26
Описание слайда:
Использование AVX в коде на C/C++ Пусть в функцию передали double a[4], double b[4]. Посчитаем a*b:

Слайд 27
Описание слайда:
Нормализация 3D-векторов Рассмотрим код: void Normalize(float Vec[][3],int N) { for (int i=0; i < N; ++i) { float *v=Vec[i]; float normal = 1.0f/sqrtf(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); v[0] *= normal; v[1] *= normal; v[2] *= normal; } }

Слайд 28
Описание слайда:
Нормализация 3D-векторов Рассмотрим код: void Normalize(float Vec [ ] [3],int N) { for (int i=0; i < N; ++i) { float *v=Vec[i]; float normal = 1.0f/sqrtf(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); v[0] *= normal; v[1] *= normal; v[2] *= normal; } }

Слайд 29
Описание слайда:
Нормализация 3D-векторов AVX позволяет делать параллельные вычисления с 8-ми float. Например, нормализовывать сразу 8 3D-векторов. Нам удобно работать с массивами, состоящими из координат 3D-векторов. Некоторые приложения требуют хранения 3D-векторов как массив структур.

Слайд 30
Описание слайда:
Нормализация 3D-векторов 128-bit AoS to SoA shuffle

Слайд 31
Описание слайда:
Нормализация 3D-векторов 128-bit AoS to SoA shuffle

Слайд 32
Описание слайда:
Нормализация 3D-векторов 128-bit SoA to AoS shuffle

Слайд 33
Описание слайда:
Нормализация 3D-векторов 128-bit SoA to AoS shuffle

Слайд 34
Описание слайда:
Нормализация 3D-векторов 256-bit AoS to SoA shuffle

Слайд 35
Описание слайда:
Нормализация 3D-векторов 256-bit AoS to SoA shuffle

Слайд 36
Описание слайда:
Нормализация 3D-векторов 256-bit SoA to AoS shuffle

Слайд 37
Описание слайда:
Нормализация 3D-векторов Тест конвертации вектора AoS -> SoA -> Aos

Слайд 38
Описание слайда:
Нормализация 3D-векторов Тест нормализации вектора в SoA

Слайд 39
Описание слайда:
Нормализация 3D-векторов Тест нормализации вектора в SoA

Слайд 40
Описание слайда:
Шифрование AES Стандарт шифрования AES является официальным стандартом правительства США для симметричного шифрования. Инструкции AVXобеспечивают быстрое и безопасное шифрование и дешифрование с помощью алгоритма AES. AESENC, AESENCLAST, AESDEC, и AESDELAST обеспечивают высокопроизводительное шифрование и дешифрование. AESIMC и AESKEYGENASSIST, позволяют производить расширение ключа AES.

Слайд 41
Описание слайда:
Шифрование AES AES-128, AES-192, AES-256 обрабатывают блоки данных за соответственно 10, 12 или 14 итераций. Блок данных последовательно проходит через следующие стадии: над ним выполняется операция XOR первыми 128 битами ключа, на выходе получается “текущий” блок. Затем текущий блок проходит через 10/12/14 раундов шифрования, после которых он превращается в шифрованный (или дешифрованный) блок.

Слайд 42
Описание слайда:
Шифрование AES AddRoundKey (128-bit, 128-bit) является 128-битным преобразованием, которое заключается в побитовой операции XOR “текущего” блока и ключа итерации.

Слайд 43
Описание слайда:
Шифрование AES S-Box (Блок подстановки) это 8-битное преобразование, которое определяется как аффинная функция x -> A x-1 + b, где А – двоичная матрица 8х8, а b – 8-битный вектор:

Слайд 44
Описание слайда:
Шифрование AES InvS-Box является обратным преобразованием по отношению к S-Box и определяется как у->(A y-1 + b)-1

Слайд 45
Описание слайда:
Шифрование AES SubBytes является 16-байтовым преобразованием, которое заключается в применении преобразования S-Box к каждому из 16 байтов на входе. InvSubBytes является 16-байтовым преобразованием, которое заключается в применении преобразования InvS-Box к каждому из 16 байтов на входе.

Слайд 46
Описание слайда:
Шифрование AES ShiftRows является побайтовой перестановкой: (15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) -> (11, 6, 1, 12, 7, 2, 13, 8, 3, 14, 9, 4, 15, 10, 5, 0). InvShiftRows является побайтовой перестановкой, обратной по отношению к ShiftRows: (15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) -> (3, 6, 9, 12, 15, 2, 5, 8, 11, 14, 1, 4, 7, 10, 13, 0).

Слайд 47
Описание слайда:
Шифрование AES MixColumns является 128-битным преобразованием, работающим со столбцами матрицы 4х4 байта, имеющейся на входе. Каждый столбец матрицы “текущего” блока умножается на полином a(x) = {03}x3 + {01}x2 + {01}x + {02} по модулю x4 + 1.

Слайд 48
Описание слайда:
Шифрование AES Инструкции AESENC, AESENCLAST, AESDEC, AESDECLAST можно описать приведенным ниже псевдо-кодом. Эти инструкции выполняют набор групповых преобразований, который соответствует потокам шифрования и дешифрования AES. AESENC xmm1, xmm2/m128 Tmp := xmm1; Round Key := xmm2/m128; Tmp := ShiftRows (Tmp); Tmp := SubBytes (Tmp); Tmp := MixColumns (Tmp); xmm1 := Tmp xor Round Key

Слайд 49
Описание слайда:
Шифрование AES Инструкции AESENC, AESENCLAST, AESDEC, AESDECLAST можно описать приведенным ниже псевдо-кодом. Эти инструкции выполняют набор групповых преобразований, который соответствует потокам шифрования и дешифрования AES. AESDEC xmm1, xmm2/m128; Tmp := xmm1; Round Key := xmm2/m128; Tmp := InvShift Rows (Tmp); Tmp := InvSubBytes (Tmp); Tmp := InvMix Columns (Tmp); xmm1 := Tmp xor Round Key

Слайд 50
Описание слайда:
Шифрование AES Пример шифрования AES-128: ; данные в xmm1. регистры xmm2 – xmm12 содежат ключи раундов. ; По завершении xmm1 содержит результат шифрования pxor xmm1, xmm2 ; Round 0 (Round 0) aesenc xmm1, xmm3 ; Round 1 aesenc xmm1, xmm4 ; Round 2 aesenc xmm1, xmm5 ; Round 3 aesenc xmm1, xmm6 ; Round 4 aesenc xmm1, xmm7 ; Round 5 aesenc xmm1, xmm8 ; Round 6 aesenc xmm1, xmm9 ; Round 7 aesenc xmm1, xmm10 ; Round 8 aesenc xmm1, xmm11 ; Round 9 aesenclast xmm1, xmm12 ; Round 10

Слайд 51
Описание слайда:
Шифрование AES Пример шифрования AES-128 (параллельная обработка): mov ecx, 9 main_loop: add rdx, 0x10 movdqu xmm1, OWORD PTR [rdx] ; Загружаем ключ aesenc xmm2, xmm1 ; Шифрование aesenc xmm3, xmm1 ; aesenc xmm4, xmm1 ; aesenc xmm5, xmm1 ; aesenc xmm6, xmm1 ; aesenc xmm7, xmm1 ; aesenc xmm8, xmm1 ; aesenc xmm9, xmm1 ; loop main_loop . . . . . . . . . . . . . . . . .

Слайд 52
Описание слайда:
Шифрование AES Пример шифрования AES-128 (параллельная обработка): movdqu xmm1, OWORD PTR [rdx] ; Загружаем ключ aesenclast xmm2, xmm1 ; Последний раунд aesenclast xmm3, xmm1 ; aesenclast xmm4, xmm1 ; aesenclast xmm5, xmm1 ; aesenclast xmm6, xmm1 ; aesenclast xmm7, xmm1 ; aesenclast xmm8, xmm1 ; aesenclast xmm9, xmm1 ;

Слайд 53
Описание слайда:
Заключение Наборы векторных данных большей разрядности могут обрабатываться со скоростью до двух раз быстрее, чем 128-битные наборы данных. Новый набор команд Intel AVX может использоваться любыми приложениями, в которых значительная доля вычислений приходится на операции SIMD. Наибольший прирост производительности новая технология даст для тех из них, которые преимущественно выполняют вычисления с плавающей запятой и могут быть распараллелены (программы обработки звука и аудио-кодеки, программы для редактирования изображений и видео, приложения для моделирования и финансового анализа, промышленные и инженерные приложения).

Слайд 54
Описание слайда:
Ссылки http://software.intel.com/en-us/avx/ http://ru.wikipedia.org/wiki/AVX/


Скачать презентацию на тему Advanced Vector Extensions (AVX) и их использование можно ниже:

Похожие презентации