Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 634932)
Контекстум
Руконтекст антиплагиат система

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

0   0
Первый авторКуссвюрм Даниэль
ИздательствоМ.: ДМК Пресс
Страниц628
ID810710
АннотацияВ книге рассматривается программирование для 64-разрядной архитектуры x86 и использование расширенного набора векторных команд (AVX). Изучив этот материал, вы сможете кодировать быстродействующие функции и алгоритмы с использованием 64-разрядного языка ассемблера x86 и расширений набора команд AVX, AVX2 и AVX-512. Примеры исходного кода разработаны с использованием Visual Studio C++ и MASM; для их запуска рекомендуется ПК на базе x86 с 64-разрядной ОС Windows 10 и процессором, поддерживающим AVX. Предполагается, что читатели имеют опыт программирования на языках высокого уровня и базовые знания C++.
Кому рекомендованоКнига предназначена разработчикам, которые хотят научиться писать код с использованием языка ассемблера x64.
ISBN978-5-97060-928-6 (рус.)
УДК004.4
ББК32.972
Куссвюрм, Д. . Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512 / Д. . Куссвюрм .— пер. с анг. В. С. Яценкова .— Москва : ДМК Пресс, 2021 .— 628 с. : ил. — ISBN 978-1 -4842-4062 -5 (англ.) .— ISBN 978-5-97060-928-6 (рус.) .— URL: https://rucont.ru/efd/810710 (дата обращения: 29.04.2024)

Предпросмотр (выдержки из произведения)

Профессиональное_программирование_на_ассемблере_x64_с_расширениями_AVX,_AVX2_и_AVX-512.pdf
УДК 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. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN (анг.) 978­1­4842­4062­5 ISBN (рус.) 978­5­97060­928­6 © 2018 by Daniel Kusswurm © Оформление, издание, перевод, ДМК Пресс, 2021
Стр.5
Оглавление Предисловие от издательства ...................................................................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
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
 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  Оглавление 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
 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
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
Стр.11

Облако ключевых слов *


* - вычисляется автоматически
Антиплагиат система на базе ИИ