Muutke küpsiste eelistusi

E-raamat: Modern Parallel Programming with C++ and Assembly Language: X86 SIMD Development Using AVX, AVX2, and AVX-512

  • Formaat: EPUB+DRM
  • Ilmumisaeg: 14-Mar-2022
  • Kirjastus: APress
  • Keel: eng
  • ISBN-13: 9781484279182
  • Formaat - EPUB+DRM
  • Hind: 67,91 €*
  • * hind on lõplik, st. muud allahindlused enam ei rakendu
  • Lisa ostukorvi
  • Lisa soovinimekirja
  • See e-raamat on mõeldud ainult isiklikuks kasutamiseks. E-raamatuid ei saa tagastada.
  • Formaat: EPUB+DRM
  • Ilmumisaeg: 14-Mar-2022
  • Kirjastus: APress
  • Keel: eng
  • ISBN-13: 9781484279182

DRM piirangud

  • Kopeerimine (copy/paste):

    ei ole lubatud

  • Printimine:

    ei ole lubatud

  • Kasutamine:

    Digitaalõiguste kaitse (DRM)
    Kirjastus on väljastanud selle e-raamatu krüpteeritud kujul, mis tähendab, et selle lugemiseks peate installeerima spetsiaalse tarkvara. Samuti peate looma endale  Adobe ID Rohkem infot siin. E-raamatut saab lugeda 1 kasutaja ning alla laadida kuni 6'de seadmesse (kõik autoriseeritud sama Adobe ID-ga).

    Vajalik tarkvara
    Mobiilsetes seadmetes (telefon või tahvelarvuti) lugemiseks peate installeerima selle tasuta rakenduse: PocketBook Reader (iOS / Android)

    PC või Mac seadmes lugemiseks peate installima Adobe Digital Editionsi (Seeon tasuta rakendus spetsiaalselt e-raamatute lugemiseks. Seda ei tohi segamini ajada Adober Reader'iga, mis tõenäoliselt on juba teie arvutisse installeeritud )

    Seda e-raamatut ei saa lugeda Amazon Kindle's. 

Learn the fundamentals of x86 Single instruction multiple data (SIMD) programming using C++ intrinsic functions and x86-64 assembly language. This book emphasizes x86 SIMD programming topics and technologies that are relevant to modern software development in applications which can exploit data level parallelism, important for the processing of big data, large batches of data and related important in data science and much more.





Modern Parallel Programming with C++ and Assembly Language is an instructional text that explains x86 SIMD programming using both C++ and assembly language. The books content and organization are designed to help you quickly understand and exploit the SIMD capabilities of x86 processors. It also contains an abundance of source code that is structured to accelerate learning and comprehension of essential SIMD programming concepts and algorithms. 





After reading this book, you will be able to code performance-optimized AVX, AVX2, andAVX-512 algorithms using either C++ intrinsic functions or x86-64 assembly language. 





What You Will Learn













Understand the essential details about x86 SIMD architectures and instruction sets including AVX, AVX2, and AVX-512. Master x86 SIMD data types, arithmetic instructions, and data management operations using both integer and floating-point operands. Code performance-enhancing functions and algorithms that fully exploit the SIMD capabilities of a modern x86 processor. Employ C++ intrinsic functions and x86-64 assembly language code to carry out arithmetic calculations using common programming constructs including arrays, matrices, and user-defined data structures. Harness the x86 SIMD instruction sets to significantly accelerate the performance of computationally intense algorithms in applications such as machine learning, image processing, computer graphics, statistics, and matrix arithmetic. Apply leading-edge coding strategies and techniques to optimally exploit the x86 SIMD instruction sets for maximum possible performance. 





























 Who This Book Is For





Intermediate to advanced programmers/developers in general. Readers of this book should have previous programming experience with modern C++ (i.e., ANSI C++11 or later) and Assembly. Some familiarity with Microsofts Visual Studio or the GNU toolchain will be helpful. The target audience for Modern X86 SIMD Programming are experienced software developers, programmers and maybe some hobbyists.
About the Author xi
About the Technical Reviewer xiii
Acknowledgments xv
Introduction xvii
Chapter 1 SIMD Fundamentals
1(16)
What Is SIMD?
1(3)
Historical Overview of x86 SIMD
4(1)
SIMD Data Types
5(2)
SIMD Arithmetic
7(5)
SIMD Integer Arithmetic
7(3)
SIMD Floating-Point Arithmetic
10(2)
SIMD Data Manipulation Operations
12(3)
SIMD Programming
15(1)
Summary
16(1)
Chapter 2 AVX C++ Programming: Part 1
17(36)
Integer Arithmetic
17(13)
Integer Addition
17(5)
Integer Subtraction
22(2)
Integer Multiplication
24(6)
Integer Bitwise Logical and Shift Operations
30(5)
Bitwise Logical Operations
30(3)
Shift Operations
33(2)
C++ SIMD Intrinsic Function Naming Conventions
35(2)
Image Processing Algorithms
37(13)
Pixel Minimum and Maximum
37(8)
Pixel Mean Intensity
45(5)
Summary
50(3)
Chapter 3 AVX C++ Programming: Part 2
53(44)
Floating-Point Operations
53(15)
Floating-Point Arithmetic
53(6)
Floating-Point Compares
59(5)
Floating-Point Conversions
64(4)
Floating-Point Arrays
68(20)
Mean and Standard Deviation
69(9)
Distance Calculations
78(10)
Floating-Point Matrices
88(7)
Column Means
89(6)
Summary
95(2)
Chapter 4 AVX2 C++ Programming: Part 1
97(48)
Integer Arithmetic
97(16)
Addition and Subtraction
97(5)
Unpacking and Packing
102(5)
Size Promotions
107(6)
Image Processing
113(29)
Pixel Clipping
114(5)
RGB to Grayscale
119(9)
Thresholding
128(9)
Pixel Conversions
137(5)
Summary
142(3)
Chapter 5 AVX2 C++ Programming: Part 2
145(44)
Floating-Point Arrays
145(6)
Least Squares
146(5)
Floating-Point Matrices
151(37)
Matrix Multiplication
152(9)
Matrix (4 × 4) Multiplication
161(8)
Matrix (4 × 4) Vector Multiplication
169(12)
Matrix Inverse
181(7)
Summary
188(1)
Chapter 6 AVX2 C++ Programming: Part 3
189(34)
Convolution Primer
189(5)
Convolution Math: 1D
189(3)
Convolution Math: 2D
192(2)
1D Convolutions
194(12)
2D Convolutions
206(16)
Nonseparable Kernel
206(9)
Separable Kernel
215(7)
Summary
222(1)
Chapter 7 AVX-512 C++ Programming: Part 1
223(36)
AVX-512 Overview
223(1)
Integer Arithmetic
224(13)
Basic Arithmetic
224(6)
Merge Masking and Zero Masking
230(7)
Image Processing
237(18)
RGB to Grayscale
237(3)
Image Thresholding
240(7)
Image Statistics
247(8)
Summary
255(4)
Chapter 8 AVX-512 C++ Programming: Part 2
259(44)
Floating-Point Arithmetic
259(10)
Basic Arithmetic
259(6)
Compare Operations
265(4)
Floating-Point Arrays
269(3)
Floating-Point Matrices
272(17)
Covariance Matrix
272(7)
Matrix Multiplication
279(4)
Matrix (4 × 4) Vector Multiplication
283(6)
Convolutions
289(11)
1D Convolutions
289(5)
2D Convolutions
294(6)
Summary
300(3)
Chapter 9 Supplemental C++ SIMD Programming
303(30)
Using CPUID
303(12)
Short Vector Math Library
315(16)
Rectangular to Polar Coordinates
316(9)
Body Surface Area
325(6)
Summary
331(2)
Chapter 10 X86-64 Processor Architecture
333(16)
Data Types
333(3)
Fundamental Data Types
334(1)
Numerical Data Types
335(1)
SIMD Data Types
335(1)
Strings
335(1)
Internal Architecture
336(7)
General-Purpose Registers
337(1)
Instruction Pointer
338(1)
RFLAGS Register
338(2)
Floating-Point and SIMD Registers
340(2)
MXCSR Register
342(1)
Instruction Operands
343(1)
Memory Addressing
344(2)
Condition Codes
346(1)
Summary
347(2)
Chapter 11 Core Assembly Language Programming: Part 1
349(40)
Integer Arithmetic
349(13)
Addition and Subtraction
350(3)
Multiplication
353(4)
Division
357(5)
Calling Convention: Part 1
362(6)
Memory Addressing Modes
368(5)
For-Loops
373(3)
Condition Codes
376(5)
Strings
381(5)
Summary
386(3)
Chapter 12 Core Assembly Language Programming: Part 2
389(44)
Scalar Floating-Point Arithmetic
389(20)
Single-Precision Arithmetic
389(4)
Double-Precision Arithmetic
393(4)
Compares
397(3)
Conversions
400(9)
Scalar Floating-Point Arrays
409(2)
Calling Convention: Part 2
411(20)
Stack Frames
412(4)
Using Nonvolatile General-Purpose Registers
416(4)
Using Nonvolatile SIMD Registers
420(5)
Macros for Function Prologues and Epilogues
425(6)
Summary
431(2)
Chapter 13 AVX Assembly Language Programming: Part 1
433(22)
Integer Arithmetic
433(11)
Addition and Subtraction
433(4)
Multiplication
437(4)
Bitwise Logical Operations
441(2)
Arithmetic and Logical Shifts
443(1)
Image Processing Algorithms
444(9)
Pixel Minimum and Maximum
444(4)
Pixel Mean Intensity
448(5)
Summary
453(2)
Chapter 14 AVX Assembly Language Programming: Part 2
455(28)
Floating-Point Operations
455(10)
Floating-Point Arithmetic
455(6)
Floating-Point Compares
461(4)
Floating-Point Arrays
465(12)
Mean and Standard Deviation
466(4)
Distance Calculations
470(7)
Floating-Point Matrices
477(4)
Summary
481(2)
Chapter 15 AVX2 Assembly Language Programming: Part 1
483(22)
Integer Arithmetic
483(7)
Basic Operations
483(3)
Size Promotions
486(4)
Image Processing
490(14)
Pixel Clipping
491(4)
RGB to Grayscale
495(6)
Pixel Conversions
501(3)
Summary
504(1)
Chapter 16 AVX2 Assembly Language Programming: Part 2
505(28)
Floating-Point Arrays
505(5)
Floating-Point Matrices
510(15)
Matrix Multiplication
510(4)
Matrix (4 × 4) Multiplication
514(4)
Matrix (4 × 4) Vector Multiplication
518(7)
Signal Processing
525(5)
Summary
530(3)
Chapter 17 AVX-512 Assembly Language Programming: Part 1
533(20)
Integer Arithmetic
533(9)
Basic Operations
533(4)
Masked Operations
537(5)
Image Processing
542(10)
Image Thresholding
542(4)
Image Statistics
546(6)
Summary
552(1)
Chapter 18 AVX-512 Assembly Language Programming: Part 2
553(34)
Floating-Point Arithmetic
553(8)
Basic Arithmetic
553(5)
Compare Operations
558(3)
Floating-Point Matrices
561(25)
Covariance Matrix
561(7)
Matrix Multiplication
568(5)
Matrix (4 × 4) Vector Multiplication
573(5)
Signal Processing
578(8)
Summary
586(1)
Chapter 19 SIMD Usage and Optimization Guidelines
587(16)
SIMD Usage Guidelines
587(2)
C++ SIMD Intrinsic Functions or x86 Assembly Language
588(1)
SIMD Software Development Guidelines
589(2)
Identify Functions for SIMD Techniques
589(1)
Select Default and Explicit SIMD Instruction Sets
589(1)
Establish Benchmark Timing Objectives
590(1)
Code Explicit SIMD Functions
590(1)
Benchmark Code to Measure Performance
590(1)
Optimize Explicit SIMD Code
591(1)
Repeat Benchmarking and Optimization Steps
591(1)
Optimization Guidelines and Techniques
591(3)
General Techniques
591(1)
Assembly Language Optimization Techniques
592(2)
SIMD Code Complexity vs. Performance
594(8)
Summary
602(1)
Appendix A Source Code and Development Tools
603(18)
Source Code Download and Setup
603(1)
Development Tools
604(17)
Visual Studio and Windows
604(12)
GCC and Linux
616(5)
Appendix B References and Resources
621(4)
C++ SIMD Intrinsic Function Documentation
621(1)
X86 Programming References
621(1)
X86 Processor Information
622(1)
Software Development Tools
622(1)
Algorithm References
622(1)
C++ References
623(1)
Utilities, Tools, and Libraries
624(1)
Index 625
Daniel Kusswurm has over 35 years of professional experience as a software developer, computer scientist, and author. During his career, he has developed innovative software for medical devices, scientific instruments, and image processing applications. On many of these projects, he successfully employed C++ intrinsic functions, x86 assembly language, and SIMD programming techniques to significantly improve the performance of computationally intense algorithms or solve unique programming challenges. His educational background includes a BS in electrical engineering technology from Northern Illinois University along with an MS and PhD in computer science from DePaul University. Daniel Kusswurm is also the author of Modern X86 Assembly Language Programming (ISBN: 978-1484200650), Modern X86 Assembly Language Programming, Second Edition (ISBN: 978-1484240625), and Modern Arm Assembly Language Programming (ISBN: 978 1484262665), all published by Apress.