Lecture 24: High Performance Image Processing & Halide (19)
sean-dooher
The code in this slide is using the Intel SSE vector extensions. These increase performance on performing the same operation on many different pieces of data at once (SIMD). Intel's approach is known as a packed SIMD approach which has fixed sized vectors for adding code. However, this can lead to complicated code and it is not the only method of vectorization in architectures. RISC-V, for example, uses a style of vectorization with variable length vectors that is modelled after old Cray-style vector supercomputers. This can lead to easier to write and more flexible code with less remainder loops and so on. If you are interested in these and how they are implemented in computer architecture I highly recommend taking 152!
Here's an article by Dave Patterson on Intel SIMD vs RISC-V vectors: https://www.sigarch.org/simd-instructions-considered-harmful/
152 Lecture slides on vectors: http://www-inst.eecs.berkeley.edu/~cs152/sp19/lectures/L15-Vectors.pdf
nathanpetreaca
To add to the above, you may recall using these in CS61c for example in this project http://inst.eecs.berkeley.edu/~cs61c/fa18/projs/02/.
youtuyy
To be more specific about SMID, SIMD (Single Instruction Multiple Data) is an instruction set available mostly on all current processors. SIMD instructions give data-level parallelism on a unit (vector of data). A single instruction is executed in parallel on multiple data points as opposed to executing multiple instructions. This improves the performance of application.
Here is a detailed description from Intel https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference
The code in this slide is using the Intel SSE vector extensions. These increase performance on performing the same operation on many different pieces of data at once (SIMD). Intel's approach is known as a packed SIMD approach which has fixed sized vectors for adding code. However, this can lead to complicated code and it is not the only method of vectorization in architectures. RISC-V, for example, uses a style of vectorization with variable length vectors that is modelled after old Cray-style vector supercomputers. This can lead to easier to write and more flexible code with less remainder loops and so on. If you are interested in these and how they are implemented in computer architecture I highly recommend taking 152!
Here's an article by Dave Patterson on Intel SIMD vs RISC-V vectors: https://www.sigarch.org/simd-instructions-considered-harmful/
152 Lecture slides on vectors: http://www-inst.eecs.berkeley.edu/~cs152/sp19/lectures/L15-Vectors.pdf
To add to the above, you may recall using these in CS61c for example in this project http://inst.eecs.berkeley.edu/~cs61c/fa18/projs/02/.
To be more specific about SMID, SIMD (Single Instruction Multiple Data) is an instruction set available mostly on all current processors. SIMD instructions give data-level parallelism on a unit (vector of data). A single instruction is executed in parallel on multiple data points as opposed to executing multiple instructions. This improves the performance of application. Here is a detailed description from Intel https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference