Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
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 (дата обращения: 18.05.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 Оглавление
Предисловие от издательства

Отзывы и пОжелания

Мывсегдарадыотзывамнашихчитателей.Расскажитенам,чтовыдумаетеобэтойкниге –чтопонравилосьили,можетбыть,не понравилось.Отзывыважныдлянас,чтобывыпускатькниги,которыебудутдлявасмаксимальнополезны.
Выможетенаписатьотзывнанашемсайтеwww.dmkpress.com,зайдянастраницукнигии оставивкомментарийв разделе«Отзывыи рецензии».Такжеможнопослатьписьмоглавномуредакторупоадресуdmkpress@gmail.com;приэтомукажитеназваниекнигив темеписьма.
Есливыявляетесьэкспертомв какой­либообластии заинтересованыв написанииновойкниги,заполнитеформунанашемсайтепоадресуhttp://dmkpress.com/authors/publish_book/илинапишитев издательствопоадресуdmkpress@gmail.com.

СпиСОк ОпечатОк

Хотямыприняливсевозможныемерыдлятого,чтобыобеспечитьвысокоекачествонашихтекстов,ошибкивсеравнослучаются.Есливынайдетеошибкув однойизнашихкниг –возможно,ошибкув основномтекстеилипрограммномкоде, –мыбудемоченьблагодарны,есливысообщитенамо ней.Сделавэто,выизбавитедругихчитателейотнедопониманияи поможетенамулучшитьпоследующиеизданияэтойкниги.
Есливынайдетекакие­либоошибкив коде,пожалуйста,сообщитео нихглавномуредакторупоадресуdmkpress@gmail.com,и мыисправимэтов следующихтиражах.

нарушение автОрСких прав

Пиратствов интернетепо­прежнемуостаетсянасущнойпроблемой.Издательство«ДМКПресс»оченьсерьезноотноситсяк вопросамзащитыавторскихправи лицензирования.Есливыстолкнетесьв интернетес незаконнойпубликациейкакой­либоизнашихкниг,пожалуйста,пришлитенамссылкунаинтернет­ресурс,чтобымымоглиприменитьсанкции.
Ссылкунаподозрительныематериалыможноприслатьпоадресуdmkpress@gmail.com.
Мывысокоценимлюбуюпомощьпозащитенашихавторов,благодарякотороймыможемпредоставлятьвамкачественныематериалы.
Об авторе

ДаниэльКуссвюрмболее30летзанимаетсяразработкойпрограммногообеспеченияи информационнымитехнологиями.За своюкарьеруонразработалинновационноепрограммноеобеспечениедляразличногомедицинскогои научногооборудованияи приложениядляобработкиизображений.Во многихизэтихпроектовонуспешноиспользовалязыкассемблераx86длязначительногоповышениябыстродействияресурсоемкихалгоритмови решенияуникальныхзадачпрограммирования.Он получилстепеньбакалавраэлектроникии электротехникив УниверситетеСеверногоИллинойса,а такжестепеньмагистраи доктораинформатикив УниверситетеДеПола.
О техническом редакторе

ПолКоэнпришелв корпорациюIntelнасамыхпервыхэтапахразвитияархитектурыx86,начинаяс 8086,и ушелизIntelпосле26летработыв сферепродаж,маркетингаи управления.В настоящеевремяонявляетсяпартнеромDouglasTechnologyGroupи специализируетсянанаписаниитехническойлитературыпозаказуIntelи другихкорпораций.Полтакжесовместнос Академиеймолодыхпредпринимателей(YEA)ведетучебныйкурс,которыйпревращаетучениковсреднихи старшихклассовв настоящих,уверенныхв себепредпринимателей.Он такжеявляетсякомиссаромповопросамдорожногодвижениягородаБивертон,штатОрегон,и входитв советдиректоровнесколькихнекоммерческихорганизаций.
Благодарности

Производствофильмаи изданиекнигив чем­топохожи.Трейлерык фильмучествуютактеров,играющихглавныхгероев.На обложкекнигизвучатименаавторов.Актерыи авторыв конечномитогеполучаютпризнаниепубликизасвоиусилия.Однаконевозможносоздатьфильмилиопубликоватькнигубезпреданностиделу,опытаи творческогоподходапрофессиональнойзакадровойкоманды.Этакниганеисключение.
ЯхочупоблагодаритьзапрекраснуюработуталантливыйредакционныйколлективApress,особенноСтиваЭнглина,МаркаПауэрсаи МэтьюМуди.ПолКоэнзаслуживаетотдельнойпохвалызаеготщательныйтехническийобзори практическиепредложения.КорректорЭд Куссвюрмзаслуживаетаплодисментови признательностизаегоупорныйтруди конструктивныеотзывы.Я берунасебяполнуюответственностьзалюбыеоставшиесянедостатки.
ЯтакжехочупоблагодаритьНирмалаСелвараджа,ДулсиНирмала,КезиюЭндсли,ДханешаКумараи весьредакционныйперсоналApressзаихвклад,а моихпрофессиональныхколлегзаиходобрениеи поддержку.Наконец,я хотелбыпоблагодаритьродителейАрмина(вечнаяемупамять)и Мэри,а такжедвоюроднуюсеструМэрии двоюродныхбратьевТома,Эдаи Джона,которыевдохновлялименянанаписаниеэтойкниги.
Вступление

Смоментаизобретенияперсональногокомпьютера(ПК)разработчикипрограммногообеспеченияиспользовалиязыкассемблераx86длясозданияинновационныхрешенийприменительнок широкомуспектруалгоритмическихзадач.В первыедниэрыПКбылообычнойпрактикойписатьбольшиефрагментыпрограммногокодаилиполныеприложенияс использованиемязыкаассемблераx86.Учитываяпреобладаниев XXIвекеязыковвысокогоуровня,такихкакC++,C#,Javaи Python,можетбытьудивительноузнать,чтомногиеразработчикипрограммногообеспечениявсеещеиспользуютязыкассемблерадлякодированиякритическиважныхв планебыстродействияучастковсвоихпрограмм.И хотяс годамикомпиляторызаметноулучшилисьс точкизрениягенерациимашинногокода,которыйсталэффективнеепообъемуи производительности,всеещеостаютсяситуации,когдаразработчикупрограммногообеспеченияимеетсмыслиспользоватьпреимуществапрограммированиянаязыкеассемблера.
Архитектурасовременныхпроцессоровx86с одним потоком команд и множеством 
потоков данных(SIMD,singleinstructionstream –multipledatastream)являетсяещеоднимобъяснениемпостоянногоинтересак программированиюнаязыкеассемблера.Процессорс поддержкойSIMDобладаетвычислительнымиресурсами,которыеупрощаютпараллельныевычисленияс использованиемнесколькихзначенийданных,чтоможетзначительноповыситьбыстродействиеприложений,обеспечивающихвысокуюскоростьоткликав реальномвремени.АрхитектурыSIMDтакжехорошоподходятдляресурсоемкихпроблемныхобластей,такихкакобработкаизображений,кодированиеаудиои видео,автоматизированноепроектирование,компьютернаяграфикаи интеллектуальныйанализданных.К сожалению,многиеязыкивысокогоуровняи инструментыразработкипо­прежнемунемогутполностьюилихотябычастичноиспользоватьвозможностиSIMDсовременногопроцессораx86.С другойстороны,языкассемблераоткрываетразработчикупрограммногообеспеченияполныйдоступк ресурсамSIMDпроцессора.
О чем эта книга

Этакнигарассказываето программированиина64­битном(x86­64)языкеассемблераx86.Содержаниеи структуракнигипризваныпомочьвамбыстроосвоитьпрограммированиенаязыкеассемблераx86­64и вычислительныересурсывекторныхрасширенийнаборакомандAdvancedVectorExtensions 
(AVX)1.Онатакжесодержитмножествопримеровисходногокода,которыеспособствуютускоренномуизучениюи пониманиюосновныхконструкцийязыкаассемблераx86­64и концепцийпрограммированияSIMD.Послепрочтенияэтойкнигивысможетекодироватьбыстродействующиефункциии алгоритмыс помощьюязыкаассемблераx86­64и наборовинструкцийAVX,AVX2и AVX­512.
Преждечемпродолжить,я долженобратитьвашевнимание,чтов этой книге 
не рассматривается программирование на языке ассемблера x86-32.В немтакженеобсуждаютсяустаревшиетехнологииx86,такиекакмодульс плавающейзапятойx87,MMXи StreamingSIMDExtensions.Есливызаинтересованыв изученииэтихтем,прочтитепервоеизданиекниги(в переводенеиздавалось –прим. перев.).Этакниганеобъясняетархитектурныеособенностиx86илипривилегированныекомандыпроцессора,которыеиспользуютсяв операционныхсистемах.Однаковамвсеравнопридетсядоскональноизучитьматериал,представленныйв даннойкниге,чтобыразрабатыватькоднаязыкеассемблераx86дляиспользованияв операционнойсистеме.
Хотятеоретическивозможнонаписатьцелуюприкладнуюпрограмму,используятолькоязыкассемблера,высокиетребованияк разработкесовременногопрограммногообеспеченияделаюттакойподходнепрактичными нецелесообразным.Вместоэтогов даннойкнигеосновноевниманиеуделяетсякодированиюфункцийязыкаассемблераx86­64,вызываемыхизC++.Каждыйпримерисходногокодабылсозданс использованиемMicrosoftVisualStudioC++и MicrosoftMacroAssembler(MASM).

Целевая аудитория
Целеваяаудиторияэтойкниги –разработчикипрограммногообеспечения,в томчисле:
разработчики,которыесоздаютприкладныепрограммыдляплатформнабазеWindowsи хотятнаучитьсяписатьалгоритмыи функциивысокогобыстродействияс использованиемязыкаассемблераx86­64;
разработчики,которыесоздаютприкладныепрограммыдлясред,отличныхотWindows,и хотятизучитьпрограммированиенаязыкеассемблераx86­64;

1Расширениесистемыкомандx86длямикропроцессоровIntelи AMD,предложенноеIntelв марте2008. –Прим. перев.
Доступ онлайн
1 649 ₽
В корзину