Misc #18834
closedSignificant change in loop speeds (regressing using while loop on ARM chips)
Description
I was benchmarking some code and one of the benchmarks I came across was fast-ruby's while vs each_with_index. I ran these test multiple times and got very similar results.
Both of these machines benchmarks were ran with ruby v3.1.2.
Intel - i9/32gb Ram (I also ran this on a linux VM or similar specs and got similar results)
ARM - AppleSilicon/32gb Ram
The reason I bring this up, is because most people develop on a Mac and now more than likely on AppleSilicon. But once deployed on a VM or container it's more than likely running on an intel based architecture. I'm kind of curious why there is such a massive change in the loop speeds between the two architectures such as while
being 31% slower on ARM but also at the same time each_with_index
is 42% faster.
If someone develops their code on their ARM devises and using the faster of the methods. Once deployed it may run significantly slower than expected because of the architecture speed differences.
# Intel
Warming up --------------------------------------
While Loop 37.108k i/100ms
each_with_index 15.900k i/100ms
Calculating -------------------------------------
While Loop 390.930k (± 2.3%) i/s - 1.967M in 5.033609s
each_with_index 158.754k (± 1.7%) i/s - 795.000k in 5.009286s
Comparison:
While Loop: 390930.1 i/s
each_with_index: 158753.7 i/s - 2.46x (± 0.00) slower
# ARM
Warming up --------------------------------------
While Loop 26.594k i/100ms
each_with_index 27.316k i/100ms
Calculating -------------------------------------
While Loop 268.372k (± 0.1%) i/s - 1.356M in 5.053798s
each_with_index 273.584k (± 0.2%) i/s - 1.393M in 5.092110s
Comparison:
each_with_index: 273584.4 i/s
While Loop: 268371.7 i/s - 1.02x (± 0.00) slower
Files