[#65451] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...

Issue #10333 has been updated by Koichi Sasada.

9 messages 2014/10/07

[ruby-core:65450] [ruby-trunk - Feature #10326] [PATCH] optimize: recv << "literal string"

From: normalperson@...
Date: 2014-10-07 01:21:45 UTC
List: ruby-core #65450
Issue #10326 has been updated by Eric Wong.


 normalperson@yhbt.net wrote:
 > Future optimizations:
 > 
 > * recv << "interpolated #{dstr}"
 >   (immediate free + force recycle)
 
 Tried, not worth it from what I can tell:
 http://80x24.org/spew/m/7c7dd29f45920fb8fc9d2c72858334c60e0a9c58.txt
 (however, a good learning experience for me)
 
 > * elide allocation for equality comparisons:
 >   str == "literal" and "literal" == str
 
 See [Feature #10329] and [Feature #10333]
 
 > * optimize << recv is IO << (str|dstr) (maybe)
 
 I doubt it's worth the effort because of syscall overhead.  This
 (#10326) is fairly minor compared to the "==" optimizations in #10329
 and #10333

----------------------------------------
Feature #10326: [PATCH] optimize: recv << "literal string"
https://bugs.ruby-lang.org/issues/10326#change-49234

* Author: Eric Wong
* Status: Open
* Priority: Normal
* Assignee: 
* Category: core
* Target version: current: 2.2.0
----------------------------------------
Concatenating literal strings to existing strings seems fairly common
practice, so avoid extra garbage when doing it.  I don't know if escape
analysis is coming to Ruby, but this seems easier-to-do for now:

vm2_strcat

i = 0
str = ""
while i<6_000_000 # benchmark loop 2
  i += 1
  str << "const"
  str.clear
end

trunk	1.020890216
trunk	1.018797116
trunk	0.992393447
built	0.626914306
built	0.627910138
built	0.644469095
-----------------------------------------------------------
benchmark results:
minimum results in each 3 measurements.
Execution time (sec)
name	trunk	built
loop_whileloop2	0.160	0.159
vm2_strcat*	0.833	0.468

Speedup ratio: compare with the result of `trunk' (greater is better)
name	built
loop_whileloop2	1.006
vm2_strcat*	1.779

Future optimizations:

* recv << "interpolated #{dstr}"
  (immediate free + force recycle)

* elide allocation for equality comparisons:
  str == "literal" and "literal" == str

* optimize << recv is IO << (str|dstr) (maybe)


---Files--------------------------------
0001-optimize-recv-literal-string.patch (3.28 KB)


-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next