SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
SIMD Programming Introduction
Champ Yen (嚴梓鴻)
champ.yen@gmail.com
http://champyen.blogspt.com
Agenda
2
● What & Why SIMD
● SIMD in different Processors
● SIMD for Software Optimization
● What are important in SIMD?
● Q & A
Link of This Slides
https://goo.gl/Rc8xPE
What is SIMD (Single Instruction Multiple Data)
3
for(y = 0; y < height; y++){
for(x = 0; x < width; x+=8){
//process 8 point simutaneously
uin16x8_t va, vb, vout;
va = vld1q_u16(a+x);
vb = vld1q_u16(b+x);
vout = vaddq_u16(va, vb);
vst1q_u16(out, vout);
}
a+=width; b+=width; out+=width;
}
for(y = 0; y < height; y++){
for(x = 0; x < width; x++){
//process 1 point
out[x] = a[x]+b[x];
}
a+=width; b+=width; out+=width;
}
one lane
Why do we need to use SIMD?
4
Why & How do we use SIMD?
5
Image
Processing
Scientific Computing
Gaming
Deep
Neural
Network
SIMD in different Processor - CPU
6
● x86
− MMX
− SSE
− AVX/AVX-512
● ARM - Application
− v5 DSP Extension
− v6 SIMD
− v7 NEON
− v8 Advanced SIMD (NEON)
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf
SIMD in different Processor - GPU
7
● SIMD
− AMD GCN
− ARM Mali
● WaveFront
− Nvidia
− Imagination PowerVR Rogue
SIMD in different Processor - DSP
8
● Qualcomm Hexagon 600 HVX
● Cadence IVP P5
● Synopsys EV6x
● CEVA XM4
SIMD Optimization
9
SIMD
Hardware
Design
SIMD
Framework /
Programming
Model
SIMD
Framework /
Programming
Model
Software
SIMD Optimization
10
● Auto/Semi-Auto Method
● Compiler Intrinsics
● Specific Framework/Infrastructure
● Coding in Assembly
● What are the difficult parts of SIMD Programming?
SIMD Optimization – Auto/SemiAuto
11
● compiler
− auto-vectorization optimization options
− #pragma
− IR optimization
● CilkPlus/OpenMP/OpenACC
Serial Code
for(i = 0; i < N; i++){
A[i] = B[i] + C[i];
}
#pragma omp simd
for(i = 0; i < N; i++){
A[i] = B[i] + C[i];
}
SIMD Pragma
https://software.intel.com/en-us/articles/performance-essentials-with-openmp-40-vectorization
SIMD Optimization – Intrinsics
12
● Arch-Dependent Intrinsics
− Intel SSE/AVX
− ARM NEON/MIPS ASE
− Vector-based DSP
● Common Intrisincs
− GCC/Clang vector intrinsics
− OpenCL / SIMD.js
● take Vector Width into consideration
● Portability between compilers
SIMD.js example from:
https://01.org/node/1495
SIMD Optimization – Intrinsics
13
4x4 Matrix Multiplication ARM NEON Example
http://www.fixstars.com/en/news/?p=125
//...
//Load matrixB into four vectors
uint16x4_t vectorB1, vectorB2, vectorB3, vectorB4;
vectorB1 = vld1_u16 (B[0]);
vectorB2 = vld1_u16 (B[1]);
vectorB3 = vld1_u16 (B[2]);
vectorB4 = vld1_u16 (B[3]);
//Temporary vectors to use with calculating the dotproduct
uint16x4_t vectorT1, vectorT2, vectorT3, vectorT4;
// For each row in A...
for (i=0; i<4; i++){
//Multiply the rows in B by each value in A's row
vectorT1 = vmul_n_u16(vectorB1, A[i][0]);
vectorT2 = vmul_n_u16(vectorB2, A[i][1]);
vectorT3 = vmul_n_u16(vectorB3, A[i][2]);
vectorT4 = vmul_n_u16(vectorB4, A[i][3]);
//Add them together
vectorT1 = vadd_u16(vectorT1, vectorT2);
vectorT1 = vadd_u16(vectorT1, vectorT3);
vectorT1 = vadd_u16(vectorT1, vectorT4);
//Output the dotproduct
vst1_u16 (C[i], vectorT1);
}
//...
A B C
A B C
SIMD Optimization –
Data Parallel Frameworks
14
● OpenCL/Cuda/C++AMP
● OpenVX/Halide
● SIMD-Optimized Libraries
− Apple Accelerate
− OpenCV
− ffmpeg/x264
− fftw/Ne10
core idea of Halide Lang
workitems in OpenCL
SIMD Optimization –
Coding in Assembly
15
● WHY !!!!???
● Extreme Performance Optimization
− precise code size/cycle/register usage
● The difficulty depends on ISA design and
assembler
SIMD Optimization –
The Difficult Parts
16
● Finding Parallelism in Algorithm
● Portability between different intrinsics
− sse-to-neon
− neon-to-sse
● Boundary handling
− Padding, Predication, Fallback
● Divergence
− Predication, Fallback to scalar
● Register Spilling
− multi-stages, # of variables + braces, assembly
● Non-Regular Access/Processing Pattern/Dependency
− Multi-stages/Reduction ISA/Enhanced DMA
● Unsupported Operations
− Division, High-level function (eg: math functions)
● Floating-Point
− Unsupported/cross-deivce Compatiblilty
What are important in SIMD?
17
TLP Programming
ILP Programming
Data Parallel Algorithm
Architecture
What are important in SIMD?
18
● ISA design
● Memory Model
● Thread / Execution Model
● Scalability / Extensibility
● The Trends
What are important in SIMD?
ISA Design
19
● SuperScalar vs VLIW
● vector register design
− Unified or Dedicated float/predication/accumulators
registers
● ALU
● Inter-Lane
− reduction, swizzle, pack/unpack
● Multiply
● Memory Access
− Load/Store, Scatter/Gather, LUT, DMA ...
● Scalar ↔ Vector
What are important in SIMD?
Memory Model
20
● DATA! DATA! DATA!
− it takes great latency to pull data from DRAM to register!
● Buffers Between Host Processor and SIMD Processor
− Handled in driver/device-side
● TCM
− DMA
− relative simple hw/control/understand
− fixed cycle (good for simulation/estimation)
● Cache
− prefetch
− transparent
− portable
− performance scalability
− simple code flow
● Mixed
− powerful
What are important in SIMD?
Thread / Execution Model
21
● The flow to trigger DSP to work
Qualcomm FastRPC
w/ IDL Compiler CEVA Link
TI DSP Link
Synopsys EV6x SW
ecosystem
What are important in SIMD?
Scalability/Extensibility
22
● What to do when ONE core doesn’t meet
performance requirement?
● HWA/Co-processor Interface
● Add another core?
− Cost
− Multicore Programming Mode
What are important in SIMD?
Trends
23
Vector Width
128/256 bit vector width
CEVA DSP/SSE/AVX
64 bit vector width
Hexagon/ARM DSP/MIPS ASE/MMX
512 bit vector width
AVX-512/IVP P5/EV6x/HVX
1024/2048 bit vector width
HVX/ARM SVE
ILP/TLP
Count
Explicit
vector
programming
Autovectorization
Time
Thank You, Q & A
24

Más contenido relacionado

La actualidad más candente

2 introduction to arm architecture
2 introduction to arm architecture2 introduction to arm architecture
2 introduction to arm architecture
satish1jisatishji
 

La actualidad más candente (20)

Introduction to arm architecture
Introduction to arm architectureIntroduction to arm architecture
Introduction to arm architecture
 
Delivering a new level of visual performance in an SoC AMD "Raven Ridge" APU
Delivering a new level of visual performance in an SoC AMD "Raven Ridge" APUDelivering a new level of visual performance in an SoC AMD "Raven Ridge" APU
Delivering a new level of visual performance in an SoC AMD "Raven Ridge" APU
 
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
 
Soc architecture and design
Soc architecture and designSoc architecture and design
Soc architecture and design
 
2 introduction to arm architecture
2 introduction to arm architecture2 introduction to arm architecture
2 introduction to arm architecture
 
Andes RISC-V vector extension demystified-tutorial
Andes RISC-V vector extension demystified-tutorialAndes RISC-V vector extension demystified-tutorial
Andes RISC-V vector extension demystified-tutorial
 
Provision Intel® Optane™ DC Persistent Memory in Linux*
Provision Intel® Optane™ DC Persistent Memory in Linux*Provision Intel® Optane™ DC Persistent Memory in Linux*
Provision Intel® Optane™ DC Persistent Memory in Linux*
 
Webinar: Practical DDR Testing for Compliance, Validation and Debug
Webinar: Practical DDR Testing for Compliance, Validation and DebugWebinar: Practical DDR Testing for Compliance, Validation and Debug
Webinar: Practical DDR Testing for Compliance, Validation and Debug
 
eMMC Embedded Multimedia Card overview
eMMC Embedded Multimedia Card overvieweMMC Embedded Multimedia Card overview
eMMC Embedded Multimedia Card overview
 
Understanding DPDK algorithmics
Understanding DPDK algorithmicsUnderstanding DPDK algorithmics
Understanding DPDK algorithmics
 
ISSCC 2018: "Zeppelin": an SoC for Multi-chip Architectures
ISSCC 2018: "Zeppelin": an SoC for Multi-chip ArchitecturesISSCC 2018: "Zeppelin": an SoC for Multi-chip Architectures
ISSCC 2018: "Zeppelin": an SoC for Multi-chip Architectures
 
RISC-V Introduction
RISC-V IntroductionRISC-V Introduction
RISC-V Introduction
 
DDR SDRAM : Notes
DDR SDRAM : NotesDDR SDRAM : Notes
DDR SDRAM : Notes
 
ARM architcture
ARM architcture ARM architcture
ARM architcture
 
Hot Chips: AMD Next Gen 7nm Ryzen 4000 APU
Hot Chips: AMD Next Gen 7nm Ryzen 4000 APUHot Chips: AMD Next Gen 7nm Ryzen 4000 APU
Hot Chips: AMD Next Gen 7nm Ryzen 4000 APU
 
Arm Processors Architectures
Arm Processors ArchitecturesArm Processors Architectures
Arm Processors Architectures
 
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
 
Inside the Volta GPU Architecture and CUDA 9
Inside the Volta GPU Architecture and CUDA 9Inside the Volta GPU Architecture and CUDA 9
Inside the Volta GPU Architecture and CUDA 9
 
Arm architecture
Arm architectureArm architecture
Arm architecture
 
DDR3
DDR3DDR3
DDR3
 

Similar a Simd programming introduction

Vectorization on x86: all you need to know
Vectorization on x86: all you need to knowVectorization on x86: all you need to know
Vectorization on x86: all you need to know
Roberto Agostino Vitillo
 
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
Edge AI and Vision Alliance
 
SIMD inside and outside oracle 12c
SIMD inside and outside oracle 12cSIMD inside and outside oracle 12c
SIMD inside and outside oracle 12c
Laurent Leturgez
 
tau 2015 spyrou fpga timing
tau 2015 spyrou fpga timingtau 2015 spyrou fpga timing
tau 2015 spyrou fpga timing
Tom Spyrou
 

Similar a Simd programming introduction (20)

Vectorization on x86: all you need to know
Vectorization on x86: all you need to knowVectorization on x86: all you need to know
Vectorization on x86: all you need to know
 
Joel Falcou, Boost.SIMD
Joel Falcou, Boost.SIMDJoel Falcou, Boost.SIMD
Joel Falcou, Boost.SIMD
 
Building a Big Data Machine Learning Platform
Building a Big Data Machine Learning PlatformBuilding a Big Data Machine Learning Platform
Building a Big Data Machine Learning Platform
 
Anatomy of ROCgdb presentation at gcc cauldron 2022
Anatomy of ROCgdb presentation at gcc cauldron 2022Anatomy of ROCgdb presentation at gcc cauldron 2022
Anatomy of ROCgdb presentation at gcc cauldron 2022
 
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
 
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
 
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019 Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
 
Raspberry Pi - HW/SW Application Development
Raspberry Pi - HW/SW Application DevelopmentRaspberry Pi - HW/SW Application Development
Raspberry Pi - HW/SW Application Development
 
Fedor Polyakov - Optimizing computer vision problems on mobile platforms
Fedor Polyakov - Optimizing computer vision problems on mobile platforms Fedor Polyakov - Optimizing computer vision problems on mobile platforms
Fedor Polyakov - Optimizing computer vision problems on mobile platforms
 
Cryptography and secure systems
Cryptography and secure systemsCryptography and secure systems
Cryptography and secure systems
 
SIMD inside and outside oracle 12c
SIMD inside and outside oracle 12cSIMD inside and outside oracle 12c
SIMD inside and outside oracle 12c
 
GBM in H2O with Cliff Click: H2O API
GBM in H2O with Cliff Click: H2O APIGBM in H2O with Cliff Click: H2O API
GBM in H2O with Cliff Click: H2O API
 
Megamodeling of Complex, Distributed, Heterogeneous CPS Systems
Megamodeling of Complex, Distributed, Heterogeneous CPS SystemsMegamodeling of Complex, Distributed, Heterogeneous CPS Systems
Megamodeling of Complex, Distributed, Heterogeneous CPS Systems
 
A Journey into Hexagon: Dissecting Qualcomm Basebands
A Journey into Hexagon: Dissecting Qualcomm BasebandsA Journey into Hexagon: Dissecting Qualcomm Basebands
A Journey into Hexagon: Dissecting Qualcomm Basebands
 
Vectorization in ATLAS
Vectorization in ATLASVectorization in ATLAS
Vectorization in ATLAS
 
Data-Level Parallelism in Microprocessors
Data-Level Parallelism in MicroprocessorsData-Level Parallelism in Microprocessors
Data-Level Parallelism in Microprocessors
 
tau 2015 spyrou fpga timing
tau 2015 spyrou fpga timingtau 2015 spyrou fpga timing
tau 2015 spyrou fpga timing
 
SIMD inside and outside Oracle 12c In Memory
SIMD inside and outside Oracle 12c In MemorySIMD inside and outside Oracle 12c In Memory
SIMD inside and outside Oracle 12c In Memory
 
Happy To Use SIMD
Happy To Use SIMDHappy To Use SIMD
Happy To Use SIMD
 
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
 

Más de Champ Yen (8)

Halide tutorial 2019
Halide tutorial 2019Halide tutorial 2019
Halide tutorial 2019
 
Linux SD/MMC Driver Stack
Linux SD/MMC Driver Stack Linux SD/MMC Driver Stack
Linux SD/MMC Driver Stack
 
Video Compression Standards - History & Introduction
Video Compression Standards - History & IntroductionVideo Compression Standards - History & Introduction
Video Compression Standards - History & Introduction
 
OpenCL Kernel Optimization Tips
OpenCL Kernel Optimization TipsOpenCL Kernel Optimization Tips
OpenCL Kernel Optimization Tips
 
OpenGL ES 2.x Programming Introduction
OpenGL ES 2.x Programming IntroductionOpenGL ES 2.x Programming Introduction
OpenGL ES 2.x Programming Introduction
 
Chrome OS Observation
Chrome OS ObservationChrome OS Observation
Chrome OS Observation
 
Play With Android
Play With AndroidPlay With Android
Play With Android
 
Linux Porting
Linux PortingLinux Porting
Linux Porting
 

Último

%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Último (20)

%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

Simd programming introduction

  • 1. SIMD Programming Introduction Champ Yen (嚴梓鴻) champ.yen@gmail.com http://champyen.blogspt.com
  • 2. Agenda 2 ● What & Why SIMD ● SIMD in different Processors ● SIMD for Software Optimization ● What are important in SIMD? ● Q & A Link of This Slides https://goo.gl/Rc8xPE
  • 3. What is SIMD (Single Instruction Multiple Data) 3 for(y = 0; y < height; y++){ for(x = 0; x < width; x+=8){ //process 8 point simutaneously uin16x8_t va, vb, vout; va = vld1q_u16(a+x); vb = vld1q_u16(b+x); vout = vaddq_u16(va, vb); vst1q_u16(out, vout); } a+=width; b+=width; out+=width; } for(y = 0; y < height; y++){ for(x = 0; x < width; x++){ //process 1 point out[x] = a[x]+b[x]; } a+=width; b+=width; out+=width; } one lane
  • 4. Why do we need to use SIMD? 4
  • 5. Why & How do we use SIMD? 5 Image Processing Scientific Computing Gaming Deep Neural Network
  • 6. SIMD in different Processor - CPU 6 ● x86 − MMX − SSE − AVX/AVX-512 ● ARM - Application − v5 DSP Extension − v6 SIMD − v7 NEON − v8 Advanced SIMD (NEON) https://software.intel.com/sites/landingpage/IntrinsicsGuide/ http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf
  • 7. SIMD in different Processor - GPU 7 ● SIMD − AMD GCN − ARM Mali ● WaveFront − Nvidia − Imagination PowerVR Rogue
  • 8. SIMD in different Processor - DSP 8 ● Qualcomm Hexagon 600 HVX ● Cadence IVP P5 ● Synopsys EV6x ● CEVA XM4
  • 10. SIMD Optimization 10 ● Auto/Semi-Auto Method ● Compiler Intrinsics ● Specific Framework/Infrastructure ● Coding in Assembly ● What are the difficult parts of SIMD Programming?
  • 11. SIMD Optimization – Auto/SemiAuto 11 ● compiler − auto-vectorization optimization options − #pragma − IR optimization ● CilkPlus/OpenMP/OpenACC Serial Code for(i = 0; i < N; i++){ A[i] = B[i] + C[i]; } #pragma omp simd for(i = 0; i < N; i++){ A[i] = B[i] + C[i]; } SIMD Pragma https://software.intel.com/en-us/articles/performance-essentials-with-openmp-40-vectorization
  • 12. SIMD Optimization – Intrinsics 12 ● Arch-Dependent Intrinsics − Intel SSE/AVX − ARM NEON/MIPS ASE − Vector-based DSP ● Common Intrisincs − GCC/Clang vector intrinsics − OpenCL / SIMD.js ● take Vector Width into consideration ● Portability between compilers SIMD.js example from: https://01.org/node/1495
  • 13. SIMD Optimization – Intrinsics 13 4x4 Matrix Multiplication ARM NEON Example http://www.fixstars.com/en/news/?p=125 //... //Load matrixB into four vectors uint16x4_t vectorB1, vectorB2, vectorB3, vectorB4; vectorB1 = vld1_u16 (B[0]); vectorB2 = vld1_u16 (B[1]); vectorB3 = vld1_u16 (B[2]); vectorB4 = vld1_u16 (B[3]); //Temporary vectors to use with calculating the dotproduct uint16x4_t vectorT1, vectorT2, vectorT3, vectorT4; // For each row in A... for (i=0; i<4; i++){ //Multiply the rows in B by each value in A's row vectorT1 = vmul_n_u16(vectorB1, A[i][0]); vectorT2 = vmul_n_u16(vectorB2, A[i][1]); vectorT3 = vmul_n_u16(vectorB3, A[i][2]); vectorT4 = vmul_n_u16(vectorB4, A[i][3]); //Add them together vectorT1 = vadd_u16(vectorT1, vectorT2); vectorT1 = vadd_u16(vectorT1, vectorT3); vectorT1 = vadd_u16(vectorT1, vectorT4); //Output the dotproduct vst1_u16 (C[i], vectorT1); } //... A B C A B C
  • 14. SIMD Optimization – Data Parallel Frameworks 14 ● OpenCL/Cuda/C++AMP ● OpenVX/Halide ● SIMD-Optimized Libraries − Apple Accelerate − OpenCV − ffmpeg/x264 − fftw/Ne10 core idea of Halide Lang workitems in OpenCL
  • 15. SIMD Optimization – Coding in Assembly 15 ● WHY !!!!??? ● Extreme Performance Optimization − precise code size/cycle/register usage ● The difficulty depends on ISA design and assembler
  • 16. SIMD Optimization – The Difficult Parts 16 ● Finding Parallelism in Algorithm ● Portability between different intrinsics − sse-to-neon − neon-to-sse ● Boundary handling − Padding, Predication, Fallback ● Divergence − Predication, Fallback to scalar ● Register Spilling − multi-stages, # of variables + braces, assembly ● Non-Regular Access/Processing Pattern/Dependency − Multi-stages/Reduction ISA/Enhanced DMA ● Unsupported Operations − Division, High-level function (eg: math functions) ● Floating-Point − Unsupported/cross-deivce Compatiblilty
  • 17. What are important in SIMD? 17 TLP Programming ILP Programming Data Parallel Algorithm Architecture
  • 18. What are important in SIMD? 18 ● ISA design ● Memory Model ● Thread / Execution Model ● Scalability / Extensibility ● The Trends
  • 19. What are important in SIMD? ISA Design 19 ● SuperScalar vs VLIW ● vector register design − Unified or Dedicated float/predication/accumulators registers ● ALU ● Inter-Lane − reduction, swizzle, pack/unpack ● Multiply ● Memory Access − Load/Store, Scatter/Gather, LUT, DMA ... ● Scalar ↔ Vector
  • 20. What are important in SIMD? Memory Model 20 ● DATA! DATA! DATA! − it takes great latency to pull data from DRAM to register! ● Buffers Between Host Processor and SIMD Processor − Handled in driver/device-side ● TCM − DMA − relative simple hw/control/understand − fixed cycle (good for simulation/estimation) ● Cache − prefetch − transparent − portable − performance scalability − simple code flow ● Mixed − powerful
  • 21. What are important in SIMD? Thread / Execution Model 21 ● The flow to trigger DSP to work Qualcomm FastRPC w/ IDL Compiler CEVA Link TI DSP Link Synopsys EV6x SW ecosystem
  • 22. What are important in SIMD? Scalability/Extensibility 22 ● What to do when ONE core doesn’t meet performance requirement? ● HWA/Co-processor Interface ● Add another core? − Cost − Multicore Programming Mode
  • 23. What are important in SIMD? Trends 23 Vector Width 128/256 bit vector width CEVA DSP/SSE/AVX 64 bit vector width Hexagon/ARM DSP/MIPS ASE/MMX 512 bit vector width AVX-512/IVP P5/EV6x/HVX 1024/2048 bit vector width HVX/ARM SVE ILP/TLP Count Explicit vector programming Autovectorization Time
  • 24. Thank You, Q & A 24