Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512

Покупка
Артикул: 833975.01.99
Доступ онлайн
1 649 ₽
В корзину
В книге рассматривается программирование для 64-разрядной архитектуры x86 и использование расширенного набора векторных команд (AVX). Изучив этот материал, вы сможете кодировать быстродействующие функции и алгоритмы с использованием 64-разрядного языка ассемблера x86 и расширений набора команд AVX, AVX2 и AVX-512. Примеры исходного кода разработаны с использованием Visual Studio C++ и MASM; для их запуска рекомендуется ПК на базе x86 с 64-разрядной ОС Windows 10 и процессором, поддерживающим AVX. Предполагается, что читатели имеют опыт программирования на языках высокого уровня и базовые знания C++. Основная аудитория книги - разработчики программного обеспечения, которые хотят научиться писать код с использованием языка ассемблера x86-64, а также те, кто уже имеет базовые представления о программировании на 32-битном или 64-битном языке ассемблера x86 и стремится узнать, как использовать возможности SIMD в AVX, AVX2 и AVX-512.
Куссвюрм, Д. Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512 : практическое руководство / Д. Куссвюрм ; пер. с анг. В. С. Яценкова. - Москва : ДМК Пресс, 2021. - 628 с. - ISBN 978-5-97060-928-6. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2155901 (дата обращения: 21.01.2025). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Даниэль Куссвюрм
Профессиональное 
программирование  
на ассемблере x64 
с расширениями  
AVX, AVX2 и AVX-512


Modern X86 Assembly 
Language Programming
Covers x86 64-bit, AVX, AVX2,  
and AVX-512
Second Edition
Daniel Kusswurm


Профессиональное 
программирование  
на ассемблере x64 
с расширениями  
AVX, AVX2 и AVX-512
Даниэль Куссвюрм
Москва, 2021


УДК 004.4
ББК  32.972
K94
Даниэль Куссвюрм
К94 
Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512 / пер. с анг. В. С. Яценкова. – М.: ДМК Пресс, 
2021. – 628 с.: ил.
ISBN 978-5-97060-928-6
В книге рассматривается программирование для 64-разрядной архитектуры 
x86 и использование расширенного набора векторных команд (AVX). Изучив 
этот материал, вы сможете кодировать быстродействующие функции и алгоритмы с использованием 64-разрядного языка ассемблера x86 и расширений 
набора команд AVX, AVX2 и AVX-512.
Примеры исходного кода разработаны с использованием Visual Studio C++ 
и MASM; для их запуска рекомендуется ПК на базе x86 с 64-разрядной ОС 
Windows 10 и процессором, поддерживающим AVX.
Предполагается, что читатели имеют опыт программирования на языках высокого уровня и базовые знания C++. Основная аудитория книги – разработчики 
программного обеспечения, которые хотят научиться писать код с использованием языка ассемблера x86-64, а также те, кто уже имеет базовые представления о программировании на 32-битном или 64-битном языке ассемблера x86 
и стремится узнать, как использовать возможности SIMD в AVX, AVX2 и AVX-512.
УДК 004.4
ББК 32.972
Modern X86 Assembly Language Programming; Covers x86 64-bit, AVX, AVX2, and
AVX-512 by Daniel Kusswurm, edition: 2
Copyright © Daniel Kusswurm, 2018 *
This edition has been translated and published under licence from APress Media, LLC, part 
of Springer Nature.
APress Media, LLC, part of Springer Nature takes no responsibility and shall not be made 
liable for the accuracy of the translation.
Все права защищены. Любая часть этой книги не может быть воспроизведена 
в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
©  2018 by Daniel Kusswurm
©  Оформление, издание, перевод, ДМК Пресс, 2021
ISBN  (анг.) 978-1-4842-4062-5
ISBN  (рус.) 978-5-97060-928-6


Оглавление
Предисловие от издательства.
...................................................................11
Об авторе.
...........................................................................................................12
О техническом редакторе.
...........................................................................13
Благодарности..................................................................................................14
Вступление.........................................................................................................15
О чем эта книга................................................................................................16
Глава 1. Архитектура ядра x86-64...........................................................19
1.1. Исторический обзор...................................................................................19
1.2. Типы данных...............................................................................................22
1.2.1. Основные типы данных.
......................................................................22
1.2.2. Числовые типы данных.......................................................................24
1.2.3. Типы данных SIMD..............................................................................24
1.2.4. Прочие типы данных...........................................................................26
1.3. Внутренняя архитектура............................................................................26
1.3.1. Регистры общего назначения.............................................................27
1.3.2. Регистр RFLAGS ...................................................................................29
1.3.3. Указатель команд.................................................................................31
1.3.4. Операнды команд................................................................................32
1.3.5. Адресация памяти...............................................................................33
1.4. Различия между программированием x86-64 и x86-32...........................35
1.4.1. Недопустимые команды.
.....................................................................37
1.4.2. Устаревшие команды ..........................................................................38
1.5. Обзор набора команд.
.................................................................................38
1.6. Заключение.................................................................................................41
Глава 2. Программирование ядра x86-64. Часть 1...........................42
2.1. Простая целочисленная арифметика........................................................42
2.1.1. Сложение и вычитание.
.......................................................................43
2.1.2. Логические операции..........................................................................46
2.1.3. Операции сдвига..................................................................................49
2.2. Расширенная целочисленная арифметика...............................................53
2.2.1. Умножение и деление..........................................................................53
2.2.2. Вычисления с использованием смешанных типов...........................57


6    Оглавление
2.3. Команды адресации памяти и состояния.................................................63
2.3.1. Режимы адресации памяти.................................................................63
2.3.2. Условные команды ..............................................................................68
2.4. Заключение.................................................................................................72
Глава 3. Программирование ядра x86-64. Часть 2 ..........................74
3.1. Массивы.......................................................................................................74
3.1.1. Одномерные массивы.
.........................................................................74
3.1.2. Двумерные массивы............................................................................81
3.3. Строки.
.........................................................................................................94
3.3.1. Подсчет символов................................................................................94
3.3.2. Конкатенация строк.
............................................................................97
3.3.3. Сравнение массивов..........................................................................103
3.3.4. Обращение массива...........................................................................106
3.4. Заключение...............................................................................................110
Глава 4. Векторное расширение набора команд AVX....................111
4.1. Обзор AVX..................................................................................................111
4.2. Концепции программирования SIMD.....................................................113
4.3. Арифметика с переносом или арифметика с насыщением?.................114
4.4. Среда выполнения AVX............................................................................116
4.4.1. Набор регистров.
................................................................................116
4.4.2. Типы данных......................................................................................117
4.4.3. Синтаксис команд.
.............................................................................118
4.5. Скалярные вычисления AVX с плавающей запятой...............................119
4.5.1. Концепция программирования с плавающей запятой.
..................119
4.5.2. Набор скалярных регистров с плавающей запятой.
........................123
4.5.3. Регистр управления и состояния......................................................123
4.5.4. Обзор набора команд.
........................................................................125
4.6. Операции с упакованными числами с плавающей запятой в AVX.......126
4.6.1. Обзор набора команд.
........................................................................129
4.7. Операции с упакованными целыми числами в AVX.
..............................130
4.7.1. Обзор набора команд.........................................................................131
4.8. Различия между x86-AVX и x86-SSE........................................................133
4.9. Заключение...............................................................................................135
Глава 5. Программирование AVX – cкалярные вычисления  
с плавающей запятой..................................................................................137
5.1. Скалярная арифметика с плавающей запятой.......................................138
5.1.1. Арифметика с плавающей запятой одинарной точности.
..............138
5.1.1. Арифметика с плавающей запятой двойной точности.
..................141
5.2. Скалярные сравнения и преобразования с плавающей запятой..........146
5.2.1. Сравнение с плавающей запятой.....................................................147
5.2.2. Преобразования чисел с плавающей запятой.................................156



    7
5.3. Скалярные массивы и матрицы с плавающей запятой.........................163
5.3.1. Массивы значений с плавающей запятой.
.......................................163
5.3.2. Матрицы значений с плавающей запятой.......................................167
5.4. Соглашение о вызовах..............................................................................171
5.4.1. Базовые фреймы стека......................................................................172
5.4.2. Использование сохраняемых регистров  
общего назначения.....................................................................................176
5.4.3. Использование сохраняемых регистров XMM.
................................181
5.4.4. Макросы для прологов и эпилогов...................................................187
5.5. Заключение...............................................................................................194
Глава 6. Программирование AVX – упакованные числа  
с плавающей запятой..................................................................................196
6.1. Упакованная арифметика с плавающей запятой...................................196
6.2. Сравнение упакованных чисел с плавающей запятой.
..........................203
6.3. Преобразования упакованных чисел с плавающей запятой.................208
6.4. Массивы упакованных чисел с плавающей запятой..............................213
6.4.1. Квадратные корни из упакованных чисел с плавающей запятой......213
6.4.2. Поиск минимального и максимального значений массива  
упакованных значений с плавающей запятой.
.........................................217
6.4.3. Наименьшие квадраты упакованных чисел  
с плавающей запятой..................................................................................222
6.5. Упакованные матрицы значений с плавающей запятой.......................228
6.5.1. Транспонирование матрицы............................................................229
6.5.2. Умножение матриц............................................................................236
6.6. Заключение...............................................................................................242
Глава 7. Программирование AVX –  
упакованные целые числа........................................................................244
7.1. Сложение и вычитание упакованных целых чисел................................244
7.2. Сдвиг упакованных целых чисел.
.............................................................250
7.3. Умножение упакованных целых чисел....................................................255
7.4. Обработка изображений с применением упакованных целых чисел...261
7.4.1. Минимальные и максимальные значения пикселей.
......................262
7.4.2. Средняя интенсивность пикселей.
....................................................270
7.4.3. Преобразования пикселей.................................................................275
7.4.4. Гистограммы изображений...............................................................283
7.4.5. Пороговая обработка изображений..................................................290
7.5. Заключение.
...............................................................................................302
Глава 8. Подробнее про AVX2..................................................................304
8.1. Среда выполнения AVX2.
..........................................................................304
8.2. Команды AVX2 для упакованных чисел с плавающей запятой.............305
8.3. Команды AVX2 для упакованных целых чисел.......................................307


8    Оглавление
8.4. Расширения набора команд X86.
.............................................................308
8.4.1. Числа с плавающей запятой половинной точности........................308
8.4.2. Слитное умножение-сложение (FMA)..............................................309
8.4.3. Расширения набора команд для регистров общего назначения.
.... 311
8.5. Заключение...............................................................................................312
Глава 9. Программирование AVX2 – упакованные числа  
с плавающей запятой..................................................................................314
9.1. Арифметика упакованных чисел с плавающей запятой.
.......................315
9.2. Массивы упакованных чисел с плавающей запятой..............................321
9.2.1. Простые вычисления.........................................................................321
9.2.2. Среднее арифметическое значение столбца...................................328
9.2.3. Коэффициент корреляции.
................................................................334
9.3. Умножение и транспонирование матриц...............................................341
9.4. Обращение матриц...................................................................................349
9.5. Команды смешивания и перестановки...................................................361
9.6. Команды извлечения данных..................................................................367
9.7. Заключение.
...............................................................................................373
Глава 10. Программирование AVX2 –  
упакованные целые числа........................................................................375
10.1. Основные операции над упакованными целыми числами.................375
10.1.1. Основные арифметические операции...........................................376
10.1.2. Упаковка и распаковка....................................................................380
10.1.3. Увеличение размера.
........................................................................386
10.2. Обработка изображений с упакованными  
целочисленными пикселями .........................................................................391
10.2.1. Усечение пикселей...........................................................................391
10.2.2. Поиск минимального и максимального значений RGB................396
10.2.3. Преобразование RGB в оттенки серого..........................................403
10.3. Заключение.
.............................................................................................411
Глава 11. Программирование AVX2 –  
расширенные команды..............................................................................412
11.1. Программирование операций FMA.......................................................412
11.1.1. Свертки.............................................................................................413
11.1.2. Скалярные операции FMA.
..............................................................415
11.1.3. Операции FMA с упакованными операндами...............................424
11.2. Команды для работы с регистрами общего назначения......................431
11.2.1. Бесфлаговое умножение и сдвиги.
..................................................432
11.2.2. Расширенные манипуляции битами..............................................436
11.3. Преобразования с плавающей запятой половинной точности...........440
11.4. Заключение.
.............................................................................................443



    9
Глава 12. Система векторных команд AVX-512................................445
12.1. Обзор AVX-512.........................................................................................445
12.2. Среда выполнения AVX-512...................................................................446
12.2.1. Наборы регистров............................................................................447
12.2.2.Типы данных.....................................................................................448
12.2.3. Синтаксис команды.........................................................................448
12.3. Обзор набора команд.
.............................................................................452
12.3.1. AVX512F............................................................................................453
12.3.2. AVX512CD.
.........................................................................................455
12.3.3. AVX512BW.........................................................................................456
12.3.4. AVX512DQ.........................................................................................456
12.3.5. Регистры маски операции...............................................................457
12.4. Заключение.
.............................................................................................458
Глава 13. Программирование AVX-512 –  
числа с плавающей запятой.....................................................................459
13.1. Скалярные операнды с плавающей точкой..........................................459
13.1.1. Маскирование слиянием.................................................................460
13.1.2. Маскирование нулем.......................................................................463
13.1.3. Округление на уровне команды.
.....................................................466
13.2. Упакованные числа с плавающей запятой.
...........................................470
13.2.1. Арифметика упакованных чисел с плавающей запятой.
..............471
13.2.2. Сравнение упакованных чисел с плавающей запятой..................478
13.2.3. Средние значения столбца упакованных чисел  
с плавающей запятой..................................................................................483
13.2.4. Векторные перекрестные произведения.......................................491
13.2.5. Умножение матрицы на вектор......................................................501
13.2.6. Свертки.............................................................................................512
13.3. Заключение.
.............................................................................................516
Глава 14. Программирование AVX-512 –  
упакованные целые числа........................................................................517
14.1. Базовая арифметика...............................................................................517
14.2. Обработка изображений.
........................................................................523
14.2.1. Пиксельные преобразования..........................................................523
14.2.2. Пороговая обработка изображений................................................530
14.2.3. Статистика изображений................................................................535
14.2.4. Преобразование формата RGB в оттенки серого...........................546
14.3. Заключение.
.............................................................................................553
Глава 15. Стратегии и методы оптимизации......................................555
15.1. Микроархитектура процессора..............................................................555
15.1.1. Обзор архитектуры процессора......................................................556


10    Оглавление
15.1.2. Функциональная схема конвейера микроархитектуры................557
15.1.3. Механизм выполнения....................................................................560
15.2. Оптимизация кода на языке ассемблера.
..............................................561
15.2.1. Основные методы............................................................................562
15.2.2. Операции с плавающей запятой.
....................................................563
15.2.3. Ветвление программы.....................................................................564
15.2.4. Выравнивание данных.
....................................................................565
15.2.5. Методы SIMD....................................................................................566
15.3. Заключение.
.............................................................................................567
Глава 16. Продвинутое программирование.
......................................568
16.1. Команда CPUID.
.......................................................................................568
16.2. Постоянные хранилища в памяти.........................................................584
16.3. Предварительная выборка данных.
.......................................................589
16.4. Многопоточность....................................................................................596
16.5. Заключение.
.............................................................................................609
Приложение.
....................................................................................................611
П.1. Программные утилиты для процессоров x86.
........................................611
П.2. Visual Studio..............................................................................................611
П.2.1. Запуск примера исходного кода.
......................................................612
П.2.2. Создание проекта Visual Studio C ++................................................612
П.3. Основные и дополнительные материалы..............................................620
П.3.1. Справочные руководства по программированию на X86..............620
П.3.2. Справочные материалы по x86 и микроархитектуре.....................621
П.3.3. Вспомогательные ресурсы.
...............................................................622
П.3.4. Ссылки на ресурсы по алгоритмам..................................................622
П.3.5. Ссылки на ресурсы по C ++...............................................................623
Предметный указатель...............................................................................624


Похожие

Доступ онлайн
1 649 ₽
В корзину