Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
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 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Даниэль Куссвюрм

Профессиональное 
программирование  
на ассемблере 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 с.: ил.

ISBN978-5-97060-928-6

Вкнигерассматриваетсяпрограммированиедля64­разряднойархитектурыx86ииспользованиерасширенногонаборавекторныхкоманд(AVX).Изучивэтотматериал,высможетекодироватьбыстродействующиефункциииалгоритмысиспользованием64­разрядногоязыкаассемблераx86ирасширенийнаборакомандAVX,AVX2иAVX­512.
ПримерыисходногокодаразработанысиспользованиемVisualStudioC++иMASM;дляихзапускарекомендуетсяПКна базеx86с64­разряднойОСWindows10ипроцессором,поддерживающимAVX.
Предполагается,чточитателиимеютопытпрограммированиянаязыкахвысокогоуровняибазовыезнанияC++.Основнаяаудиториякниги–разработчикипрограммногообеспечения,которыехотятнаучитьсяписатькодсиспользованиемязыкаассемблераx86­64,атакжете,ктоужеимеетбазовыепредставленияопрограммированиина32­битномили64­битномязыкеассемблераx86и стремитсяузнать,какиспользоватьвозможностиSIMDвAVX,AVX2иAVX­512.

УДК004.4
ББК32.972

ModernX86AssemblyLanguageProgramming;Coversx8664­bit,AVX,AVX2,and

AVX­512byDanielKusswurm,edition:2

Copyright©DanielKusswurm,2018*

ThiseditionhasbeentranslatedandpublishedunderlicencefromAPressMedia,LLC,partofSpringerNature.

APressMedia,LLC,partofSpringerNaturetakesnoresponsibilityandshallnotbemadeliablefortheaccuracyofthetranslation.

Всеправазащищены.Любаячастьэтойкнигине можетбытьвоспроизведенав какойбытонибылоформеи какимибытонибылосредствамибезписьменногоразрешениявладельцевавторскихправ.

©2018byDanielKusswurm
©Оформление,издание,перевод,ДМКПресс,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

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

6 Оглавление

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

   7

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

8 Оглавление

Глава 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

   9

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.VisualStudio.............................................................................................611

П.2.1.Запускпримераисходногокода......................................................612
П.2.2.СозданиепроектаVisualStudioC ++...............................................612

П.3.Основныеи дополнительныематериалы.............................................620

П.3.1.СправочныеруководствапопрограммированиюнаX86.............620
П.3.2.Справочныематериалыпоx86и микроархитектуре....................621
П.3.3.Вспомогательныересурсы...............................................................622
П.3.4.Ссылкинаресурсыпоалгоритмам.................................................622
П.3.5.СсылкинаресурсыпоC ++..............................................................623

Предметный указатель..............................................................................624

10 Оглавление

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