وبلاگ بلیان

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

معرفی کتاب «Профессиональное программирование на ассемблере x64 с расшире­ниями AVX, AVX2 и AVX­512» نوشتهٔ Куссвюрм Даниэль، منتشرشده توسط نشر ДМК Пресс در سال 2021. این کتاب در فرمت pdf، زبان ru ارائه شده است.

Изучите язык ассемблера x64, сосредоточившись на обновлениях набора команд x86, наиболее актуальных для разработки прикладных программ. Рассматриваемые темы: - 64-разрядная платформа x86: архитектура, типы данных, регистры, режимы адресации памяти и базовый набор команд; - набор команд x86 для создания быстродействующих функций, которые можно вызывать из языка высокого уровня (C++); - использование языка ассемблера x64 для эффективной работы с общими типами данных и конструкциями программирования, включая целые числа, текстовые строки, массивы и структуры; - использование набора команд AVX для выполнения скалярных арифметических операций с плавающей запятой; - повышение быстродействия ресурсоемких алгоритмов в проблемных областях, таких как обработка изображений, компьютерная графика, математика и статистика, за счет команд AVX, AVX2 и AVX-512; - применение различных стратегий и методов кодирования, а также наборов команд x64, AVX, AVX2 и AVX-512 для достижения максимального быстродействия. Профессиональное программирование на ассемблере x64 с расширениями_переплет Профессионально программирование на Асссемблере_30_05_.pdf Предисловие от издательства Об авторе О техническом редакторе Благодарности Вступление О чем эта книга Глава 1 Архитектура ядра x86-64 1.1. Исторический обзор 1.2. Типы данных 1.2.1. Основные типы данных 1.2.2. Числовые типы данных 1.2.3. Типы данных SIMD 1.2.4. Прочие типы данных 1.3. Внутренняя архитектура 1.3.1. Регистры общего назначения 1.3.2. Регистр RFLAGS 1.3.3. Указатель команд 1.3.4. Операнды команд 1.3.5. Адресация памяти 1.4. Различия между программированием x86-64 и x86-32 1.4.1. Недопустимые команды 1.4.2. Устаревшие команды 1.5. Обзор набора команд 1.6. Заключение Глава 2 Программирование ядра x86-64. Часть 1 2.1. Простая целочисленная арифметика 2.1.1. Сложение и вычитание 2.1.2 Логические операции 2.1.3 Операции сдвига 2.2. Расширенная целочисленная арифметика 2.2.1. Умножение и деление 2.2.2. Вычисления с использованием смешанных типов 2.3. Команды адресации памяти и состояния 2.3.1. Режимы адресации памяти 2.3.2. Условные команды 2.4. Заключение Глава 3 Программирование ядра x86-64. Часть 2 3.1. Массивы 3.1.1. Одномерные массивы 3.1.2. Двумерные массивы 3.3. Строки 3.3.1. Подсчет символов 3.3.2. Конкатенация строк 3.3.3. Сравнение массивов 3.3.4. Обращение массива 3.4. Заключение Глава 4 Векторное расширение набора команд AVX 4.1. Обзор AVX 4.2. Концепции программирования SIMD 4.3. Арифметика с переносом или арифметика с насыщением? 4.4. Среда выполнения AVX 4.4.1. Набор регистров 4.4.2. Типы данных 4.4.3. Синтаксис команд 4.5. Скалярные вычисления AVX с плавающей запятой 4.5.1. Концепция программирования с плавающей запятой 4.5.2. Набор скалярных регистров с плавающей запятой 4.5.3. Регистр управления и состояния 4.5.4. Обзор набора команд 4.6. Операции с упакованными числами с плавающей запятой в AVX 4.6.1. Обзор набора команд 4.7. Операции с упакованными целыми числами в AVX 4.7.1. Обзор набора команд 4.8. Различия между x86-AVX и x86-SSE 4.9. Заключение Глава 5 Программирование AVX – cкалярные вычисления с плавающей запятой 5.1. Скалярная арифметика с плавающей запятой 5.1.1. Арифметика с плавающей запятой одинарной точности 5.1.1. Арифметика с плавающей запятой двойной точности 5.2. Скалярные сравнения и преобразования с плавающей запятой 5.2.1. Сравнение с плавающей запятой 5.2.2. Преобразования чисел с плавающей запятой 5.3. Скалярные массивы и матрицы с плавающей запятой 5.3.1. Массивы значений с плавающей запятой 5.3.2. Матрицы значений с плавающей запятой 5.4. Соглашение о вызовах 5.4.1. Базовые фреймы стека 5.4.2. Использование энергонезависимых регистров общего назначения 5.4.3. Использование энергонезависимых регистров XMM 5.4.4. Макросы для прологов и эпилогов 5.5. Заключение Глава 6 Программирование AVX – упакованные числа с плавающей запятой 6.1. Упакованная арифметика с плавающей запятой 6.2. Сравнение упакованных чисел с плавающей запятой 6.3. Преобразования упакованных чисел с плавающей запятой 6.4. Массивы упакованных чисел с плавающей запятой 6.4.1. Квадратные корни из упакованных чисел с плавающей запятой 6.4.2. Поиск минимального и максимального значений массива упакованных значений с плавающей запятой 6.4.3. Наименьшие квадраты упакованных чисел с плавающей запятой 6.5. Упакованные матрицы значений с плавающей запятой 6.5.1. Транспонирование матрицы 6.5.2. Умножение матриц 6.6. Заключение Глава 7 Программирование AVX – упакованные целые числа 7.1. Сложение и вычитание упакованных целых чисел 7.2. Сдвиг упакованных целых чисел 7.3. Умножение упакованных целых чисел 7.4. Обработка изображений с применением упакованных целых чисел 7.4.1. Минимальные и максимальные значения пикселей 7.4.2. Средняя интенсивность пикселей 7.4.3. Преобразования пикселей 7.4.4. Гистограммы изображений 7.4.5. Пороговая обработка изображений 7.5. Заключение Глава 8 Подробнее про AVX2 8.1. Среда выполнения AVX2 8.2. Команды AVX2 для упакованных чисел с плавающей запятой 8.3. Команды AVX2 для упакованных целых чисел 8.4. Расширения набора команд X86 8.4.1. Числа с плавающей запятой половинной точности 8.4.2. Слитное умножение-сложение (FMA) 8.4.3. Расширения набора команд для регистров общего назначения 8.5. Заключение Глава 9 Программирование AVX2 – упакованные числа с плавающей запятой 9.1. Арифметика упакованных чисел с плавающей запятой 9.2. Массивы упакованных чисел с плавающей запятой 9.2.1. Простые вычисления 9.2.2. Среднее арифметическое значение столбца 9.2.3. Коэффициент корреляции 9.3. Умножение и транспонирование матриц 9.4. Обращение матриц 9.5. Команды смешивания и перестановки 9.6. Команды извлечения данных 9.7. Заключение Глава 10 Программирование AVX2 – упакованные целые числа 10.1. Основные операции над упакованными целыми числами 10.1.1. Основные арифметические операции 10.1.2. Упаковка и распаковка 10.1.3. Увеличение размера 10.2. Обработка изображений с упакованными целочисленными пикселями 10.2.1. Усечение пикселей 10.2.2. Поиск минимального и максимального значений RGB 10.2.3. Преобразование RGB в оттенки серого 10.3. Заключение Глава 11 Программирование AVX2 – расширенные команды 11.1. Программирование операций FMA 11.1.1. Свертки 11.1.2. Скалярные операции FMA 11.1.3. Операции FMA с упакованными операндами 11.2. Команды для работы с регистрами общего назначения 11.2.1. Бесфлаговое умножение и сдвиги 11.2.2. Расширенные манипуляции битами 11.3. Преобразования с плавающей запятой половинной точности 11.4. Заключение Глава 12 Система векторных команд AVX-512 12.1. Обзор AVX-512 12.2. Среда выполнения AVX-512 12.2.2.Типы данных 12.2.3. Синтаксис команды 12.3. Обзор набора команд 12.3.1. AVX512F 12.3.2. AVX512CD 12.3.3. AVX512BW 12.3.4. AVX512DQ 12.3.5. Регистры маски операции 12.4. Заключение Глава 13 Программирование AVX-512 – числа с плавающей запятой 13.1. Скалярные операнды с плавающей точкой 13.1.1. Маскирование слиянием 13.1.2. Маскирование нулем 13.1.3. Округление на уровне команды 13.2. Упакованные числа с плавающей запятой 13.2.1. Арифметика упакованных чисел с плавающей запятой 13.2.2. Сравнение упакованных чисел с плавающей запятой 13.2.3. Средние значения столбца упакованных чисел с плавающей запятой 13.2.4. Векторные перекрестные произведения 13.2.5. Умножение матрицы на вектор 13.2.6. Свертки 13.3. Заключение Глава 14 Программирование AVX-512 – упакованные целые числа 14.1. Базовая арифметика 14.2. Обработка изображений 14.2.1. Пиксельные преобразования 14.2.2. Пороговая обработка изображений 14.2.3. Статистика изображений 14.2.4. Преобразование формата RGB в оттенки серого 14.3. Заключение Глава 15 Стратегии и методы оптимизации 15.1. Микроархитектура процессора 15.1.1. Обзор архитектуры процессора 15.1.2. Функциональная схема конвейера микроархитектуры 15.1.3. Механизм выполнения 15.2. Оптимизация кода на языке ассемблера 15.2.1. Основные методы 15.2.2. Операции с плавающей запятой 15.2.3. Ветвление программы 15.2.4. Выравнивание данных 15.2.5. Методы SIMD 15.3. Заключение Глава 16 Продвинутое программирование 16.2. Постоянные хранилища в памяти 16.3. Предварительная выборка данных 16.4. Многопоточность 16.5. Заключение Приложение П.1. Программные утилиты для процессоров x86 П.2. Visual Studio П.2.1. Запуск примера исходного кода П.2.2. Создание проекта Visual Studio C ++ П.3. Основные и дополнительные материалы П.3.1. Справочные руководства по программированию на X86 П.3.2. Справочные материалы по x86 и микроархитектуре П.3.3. Вспомогательные ресурсы П.3.4. Ссылки на ресурсы по алгоритмам П.3.5. Ссылки на ресурсы по C ++ Gain The Fundamentals Of X86 64-bit Assembly Language Programming And Focus On The Updated Aspects Of The X86 Instruction Set That Are Most Relevant To Application Software Development. This Book Covers Topics Including X86 64-bit Programming And Advanced Vector Extensions (avx) Programming. The Focus In This Second Edition Is Exclusively On 64-bit Base Programming Architecture And Avx Programming. Modern X86 Assembly Language Programming’s Structure And Sample Code Are Designed To Help You Quickly Understand X86 Assembly Language Programming And The Computational Capabilities Of The X86 Platform. After Reading And Using This Book, You’ll Be Able To Code Performance-enhancing Functions And Algorithms Using X86 64-bit Assembly Language And The Avx, Avx2 And Avx-512 Instruction Set Extensions. What You Will Learn Discover Details Of The X86 64-bit Platform Including Its Core Architecture, Data Types, Registers, Memory Addressing Modes, And The Basic Instruction Set Use The X86 64-bit Instruction Set To Create Performance-enhancing Functions That Are Callable From A High-level Language (c++) Employ X86 64-bit Assembly Language To Efficiently Manipulate Common Data Types And Programming Constructs Including Integers, Text Strings, Arrays, And Structures Use The Avx Instruction Set To Perform Scalar Floating-point Arithmetic Exploit The Avx, Avx2, And Avx-512 Instruction Sets To Significantly Accelerate The Performance Of Computationally-intense Algorithms In Problem Domains Such As Image Processing, Computer Graphics, Mathematics, And Statistics Apply Various Coding Strategies And Techniques To Optimally Exploit The X86 64-bit, Avx, Avx2, And Avx-512 Instruction Sets For Maximum Possible Performance Who This Book Is For Software Developers Who Want To Learn How To Write Code Using X86 64-bit Assembly Language. It’s Also Ideal For Software Developers Who Already Have A Basic Understanding Of X86 32-bit Or 64-bit Assembly Language Programming And Are Interested In Learning How To Exploit The Simd Capabilities Of Avx, Avx2 And Avx-512. Gain the fundamentals of x86 assembly language programming and focus on the updated aspects of the x86 instruction set that are most relevant to application software development. This book covers topics including the new Advanced Vector Extensions (AVX) 512 programming, from the latest x86 instructions set, and the MMX technology and instruction set. The focus in this second edition is exclusively on 64-bit base programming architecture and AVX programming. Modern X86 Assembly Language Programming's structure and sample code are designed to help you quickly understand x86 assembly language programming and the computational capabilities of the x86 platform. After reading and using this book, you'll be able to code performance-enhancing functions and algorithms using x86 64-bit assembly language and the AVX, AVX2 and AVX-512 instruction set extensions. You will: Discover details of the x86 64-bit platform including its core architecture, data types, registers, memory addressing modes, and the basic instruction set Use the x86 64-bit instruction set to create performance-enhancing functions that are callable from a high-level language (C++) Employ x86 64-bit assembly language to efficiently manipulate common data types and programming constructs including integers, text strings, arrays, and structures Use the AVX instruction set to perform scalar floating-point arithmetic Exploit the AVX, AVX2, and AVX-512 instruction sets to significantly accelerate the performance of computationally-intense algorithms in problem domains such as image processing, computer graphics, mathematics, and statistics Apply various coding strategies and techniques to optimally exploit the x86 64-bit, AVX, AVX2, and AVX-512 instruction sets for maximum possible performance Пер. с анг. В. С. Яценкова. В книге рассматривается программирование для 64­разрядной архитектуры x86 и использование расширенного набора векторных команд (AVX). Изучив этот материал, вы сможете кодировать быстродействующие функции и алгоритмы с использованием 64­разрядного языка ассемблера x86 и расширений набора команд AVX, AVX2 и AVX­512. Примеры исходного кода разработаны с использованием Visual Studio C++ и MASM; для их запуска рекомендуется ПК на базе x86 с 64­разрядной ОС Windows 10 и процессором, поддерживающим AVX. Предполагается, что читатели имеют опыт программирования на языках высокого уровня и базовые знания C++. Книга предназначена разработчикам, которые хотят научиться писать код с использованием языка ассемблера x64.
دانلود کتاب Профессиональное программирование на ассемблере x64 с расшире­ниями AVX, AVX2 и AVX­512