1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add NEWS entries about JIT in Jul ~ Dec

* Instance variables
  * Merge ivar guards on JIT a69dd699ee e4f7eee009
  * Prefer RB_OBJ_FROZEN_RAW 5611066e03
  * Skip checking ROBJECT_EMBED 81a8d1cf09
* Method inlining
  * Mark some Integer methods as inline 0703e01471
  * Allow inlining Integer#-@ and #~ dbb4f19969
  * Inline builtin struct aref 167d139487
  * Make Kernel#then, #yield_self, #frozen? builtin 24fa37d87a
  * (For future) Rewrite Kernel#tap with Ruby f3a0d7a203
* Other optimizations
  * Inline constant references 53babf35ef
  * Lazily move PC with RUBY_VM_CHECK_INTS 5d74894f2b
  * Cache access to reg_cfp->self on JIT d409837729
* JIT compaction
  * Shrink the blocking region for compile_compact_jit_code ed8e552d4d
  * Stop leaving .c files for JIT compaction in /tmp fa1250a506
* GC of JIT-ed code
  * Run unload_units in the JIT worker thread 16dab6b692
  * Avoid unloading units which have enough total_calls d80226e7bd
  * Throttle unload_units 122cd35939
  * Throttle JIT compaction 096f54428d
* Compilation speed
  * Eliminate IVC sync between JIT and Ruby threads 0960f56a1d
  * Lazily move units from active_units to stale_units 5d8f227d0e

Please see 200c5f4075 for other improvements in Jan ~ Jun.
This commit is contained in:
Takashi Kokubun 2020-12-23 22:59:57 -08:00
parent 8aa299de24
commit 176b75747c
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD

47
NEWS.md
View file

@ -630,22 +630,51 @@ Excluding feature bug fixes.
### JIT
* Native functions shared by multiple methods are deduplicated on JIT compaction.
* Performance improvements of JIT-ed code
* Decrease code size of hot paths by some optimizations and partitioning cold paths.
* Microarchitectural optimizations
* Not only pure Ruby methods but also some C methods skip pushing a method frame.
* Native functions shared by multiple methods are deduplicated on JIT compaction.
* `Kernel#class`, `Integer#zero?`
* Decrease code size of hot paths by some optimizations and partitioning cold paths.
* Always generate appropriate code for `==`, `nil?`, and `!` calls depending on
a receiver class.
* Instance variables
* Optimize instance variable access in some core classes like Hash and their subclasses.
* Eliminate some redundant checks.
* Eliminate VM register access on a method return.
* Skip checking a class and a object multiple times in a method when possible.
* Optimize C method calls a little.
* Optimize accesses in some core classes like Hash and their subclasses.
* Method inlining support for some C methods
* `Kernel`: `#class`, `#frozen?`
* `Integer`: `#-@`, `#~`, `#abs`, `#bit_length`, `#even?`, `#integer?`, `#magnitude`,
`#odd?`, `#ord`, `#to_i`, `#to_int`, `#zero?`
* `Struct`: reader methods for 10th or later members
* Constant references are inlined.
* Always generate appropriate code for `==`, `nil?`, and `!` calls depending on
a receiver class.
* Reduce the number of VM register accesses on branches and method returns.
* Optimize C method calls a little.
* Compilation process improvements
* It does not keep temporary files in /tmp anymore.
* Throttle GC and compaction of JIT-ed code.
* Avoid GC-ing JIT-ed code when not necessary.
* GC-ing JIT-ed code is executed in a background thread.
* Reduce the number of locks between Ruby and JIT threads.
## Static analysis