SIMD means 'single instruction, multiple data,' which is when you use multiple data points at once rather than doing one. This can significantly improve performance in math-intensive workloads, such as noise generation or 3D rendering (in fact, a GPU is just a huge floating-point SIMD engine). Scratch doesn't support SIMD, but SIMD addition and subtraction can be implemented with some clever logic. Unfortunately, this logic can often completely eliminate the performance gains if done wrong. Thus, I've put this battery of tests together to get an idea. An explanation of the data points: - Incrementing Conventional: add one to a variable over and over again (using addition, not the 'change by' block). - Accumulating Incrementing SIMD: adding one to four data points over and over again, recalculating the one every time, and then putting the result in a list. - Incrementing Static Accumulating SIMD: adding one to four data points, without recalculating the one, and then putting the result in a list. - Recalculating Conventional: adding four preset random numbers to another four preset random numbers one at a time, each from a list, and then putting the result in a list. - Recalculating SIMD: adding four preset random numbers to another four preset random numbers, each from a list, and then putting the result in a list.
0.1: Release 0.1.1: Fixed issue where SIMD performance was reporting 4x lower than actual 0.1.2: Added Carrying SIMD and reduced bench time in exchange for more variability. Also fixed a bug causing one of the SIMD functions to be skipped 0.2.0: Added Accumulating SIMD 0.2.1: Added Repeat Accumulation SIMD 0.2.2: Cleaned up some code; changed Conventional to Incrementing Conventional and changed logic (Slight but negligible benchmark reduction), Accumulating SIMD to Incrementing Accumulating SIMD, and Repeating Accumulating SIMD to Incrementing Static Accumulating SIMD. Also fixed bugs that caused calculations to be incorrect. 0.2.3: Improved SIMD list fetching algorithm 0.3.0: Removed Carry SIMD Result as it was basically identical to Non-carry SIMD Result, renamed Non-Carry SIMD Result to Recalculating SIMD Result, added some explanations 0.4.0: Added Recalculating Conventional Result for comparison purposes