Project

General

Profile

Actions

Misc #18834

closed

Significant change in loop speeds (regressing using while loop on ARM chips)

Added by tarellel (Brandon Hicks) about 2 months ago. Updated about 1 month ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
[ruby-core:108967]

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

arm_rbconfig.rb (11 KB) arm_rbconfig.rb tarellel (Brandon Hicks), 06/29/2022 12:59 AM
intel_rbconfig.rb (10.9 KB) intel_rbconfig.rb tarellel (Brandon Hicks), 06/29/2022 12:59 AM
Actions #1

Updated by tarellel (Brandon Hicks) about 2 months 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) about 2 months 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.

Actions #3

Updated by alanwu (Alan Wu) about 2 months ago

  • Status changed from Open to Feedback

Updated by tarellel (Brandon Hicks) about 1 month ago

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.

Actions

Also available in: Atom PDF