Project

General

Profile

Feature #13482

Improve performance of "set instance variable"

Added by watson1978 (Shizuo Fujita) over 2 years ago. Updated about 2 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:80789]

Description

"set instance variable" will be faster around 14%.

macOS 10.12 + clang-802.0.41

Before

       user     system      total        real
   1.550000   0.000000   1.550000 (  1.555161)

After

       user     system      total        real
   1.400000   0.000000   1.400000 (  1.398825)

macOS 10.12 + gcc 6.3.0_1

Before

       user     system      total        real
   1.660000   0.000000   1.660000 (  1.659721)

After

       user     system      total        real
   1.450000   0.000000   1.450000 (  1.454589)

Ubuntu 16.04 + gcc 5.4.0

Before

       user     system      total        real
   0.890000   0.000000   0.890000 (  0.891217)

After

       user     system      total        real
   0.790000   0.000000   0.790000 (  0.783157)

Test code

require 'benchmark'

Benchmark.bmbm do |x|
  x.report do
    i = 0
    while (i < 50000000)
      @obj = 42
      i+=1
    end
  end

end

Patch

https://github.com/ruby/ruby/pull/1590

History

#1

Updated by watson1978 (Shizuo Fujita) over 2 years ago

  • Description updated (diff)

Updated by watson1978 (Shizuo Fujita) over 2 years ago

It has already ensured inlining in where vm_getivar()
(https://github.com/ruby/ruby/blob/524fb0138b773f2ed01441abbcffeda0271175c5/vm_insnhelper.c#L908)

So,I'm guessing that there is no reason what avoid inlining at vm_setivar()

#3

Updated by jeremyevans0 (Jeremy Evans) about 2 months ago

  • Backport deleted (2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN)
  • Tracker changed from Bug to Feature

Also available in: Atom PDF