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
Updated by tarellel (Brandon Hicks) almost 2 years ago
- Subject changed from Significant change in loop speeds (regressing in while loop on ARM chips) to Significant change in loop speeds (regressing using while loop on ARM chips)
Updated by alanwu (Alan Wu) almost 2 years ago
Interesting! Can you post the output of:
$ ruby -ve 'pp RbConfig::CONFIG, RubyVM::OPTS'
For your ARM build of Ruby? I suspect the performance difference
could be explained by compiler differences.
Updated by alanwu (Alan Wu) almost 2 years ago
- Status changed from Open to Feedback
Updated by tarellel (Brandon Hicks) almost 2 years ago
- File arm_rbconfig.rb arm_rbconfig.rb added
- File intel_rbconfig.rb intel_rbconfig.rb added
Attached are both the Intel and ARM rbconfigs.
Note: both have the ruby version installed through ASDF and running the same ruby versions side-by-side.