[#58730] [ruby-trunk - misc #9188][Open] r43870 make benchmark/bm_so_k_nucleotide.rb slow — "authorNari (Narihiro Nakamura)" <authorNari@...>

17 messages 2013/12/01

[#58732] [ruby-trunk - Bug #9189][Open] Build failure on Windows in case of nonascii TEMP environment. — "phasis68 (Heesob Park)" <phasis@...>

11 messages 2013/12/01

[#58750] [ruby-trunk - Feature #9190][Open] Expose serial helper macros — "simeonwillbanks (Simeon Willbanks)" <sfw@...>

13 messages 2013/12/01

[#58756] [ruby-trunk - Bug #9192][Open] Inconsistent comparison between Float and BigDecimal — "vatsu (Gustavo Sales)" <vatsu21@...>

18 messages 2013/12/02

[#58797] [ruby-trunk - Bug #9198][Open] Segfault in TestException#test_machine_stackoverflow — "vo.x (Vit Ondruch)" <v.ondruch@...>

11 messages 2013/12/02

[#58833] [ruby-trunk - Bug #9205][Open] Assertion failed: heap_pages_deferred_final == 0 — "phasis68 (Heesob Park)" <phasis@...>

11 messages 2013/12/03

[#58866] [ruby-trunk - misc #9215][Open] Maintenance Policy for Future Releases (2.1.0 & beyond) — "hone (Terence Lee)" <hone02@...>

17 messages 2013/12/05

[#58876] [ruby-trunk - Bug #9221][Open] Time.parse performance becomes exponentially worse as string length grows — "mpelzsherman (Michael Pelz-Sherman)" <mpelzsherman@...>

15 messages 2013/12/05

[#58948] [ruby-trunk - Bug #9226][Open] Getting method `inspect' called on unexpected T_NODE object (0x000000025ddea8 flags=0x109089c klass=0x0) (NotImplementedError) from Hash#inspect — "myronmarston (Myron Marston)" <myron.marston@...>

11 messages 2013/12/07

[#59032] [ruby-trunk - Bug #9239][Open] Array#to_h ignores flat arrays — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

15 messages 2013/12/10

[#59122] [ruby-trunk - Bug #9251][Open] ! operator has lower precedence than = in an assignment expression — "rits (First Last)" <redmine@...>

26 messages 2013/12/15

[#59198] [ruby-trunk - Bug #9262][Open] global_method_cache should be configurable or grow automatically — "tmm1 (Aman Gupta)" <ruby@...1.net>

28 messages 2013/12/19

[#59209] [ruby-trunk - Bug #9264][Open] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — "spastorino (Santiago Pastorino)" <santiago@...>

15 messages 2013/12/19
[#59211] [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — "zzak (Zachary Scott)" <e@...> 2013/12/19

[#59212] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Santiago Pastorino <spastorino@...> 2013/12/19

zzak, make distclean is the first thing I've ran. Read the gist again :),

[#59213] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Zachary Scott <e@...> 2013/12/19

Sorry I missed the gist, can you try building outside of $srcdir?

[#59214] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Santiago Pastorino <spastorino@...> 2013/12/19

It works if I do ...

[#59215] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Zachary Scott <e@...> 2013/12/19

I've been using the following:

[#59255] [ruby-trunk - Bug #9276][Open] "RUBY_FREE_MIN is obsolete. Use RUBY_GC_HEAP_FREE_SLOTS instead" warning should not be issued when both ENV vars are set. — "myronmarston (Myron Marston)" <myron.marston@...>

10 messages 2013/12/21

[#59260] [ruby-trunk - Feature #9278][Open] Magic comment "immutable: string" makes "literal".freeze the default for that file — "colindkelley (Colin Kelley)" <colin@...>

12 messages 2013/12/22

[#59343] [ruby-trunk - Bug #9309][Open] Crash while running tests — "mdemare (Michiel de MAre)" <merloen@...>

12 messages 2013/12/27

[#59345] [ruby-trunk - Bug #9310][Open] inheritance.rb: 27: [BUG] Segmentation fault at 0x00000c — "jasnow (Al Snow)" <jasnow@...>

10 messages 2013/12/27

[#59349] [ruby-trunk - Bug #9312][Open] Build the ruby executable in bin/ — "postmodern (Hal Brodigan)" <postmodern.mod3@...>

13 messages 2013/12/28

[#59365] [ruby-trunk - Bug #9316][Open] BigDecimal division in Ruby 2.1 — "abernardes (Andre Oliveira)" <abernardes@...>

15 messages 2013/12/28

[#59398] [ruby-trunk - Bug #9321][Open] rb_mod_const_missing does not generate a c-return event — "drkaes (Stefan Kaes)" <stkaes@...>

41 messages 2013/12/30

[#59429] [ruby-trunk - Feature #9330][Open] [PATCH 0/3] avoid redundant fcntl/fstat syscalls for cloexec sockets — "normalperson (Eric Wong)" <normalperson@...>

10 messages 2013/12/31

[ruby-core:58955] [ruby-trunk - misc #9188] r43870 make benchmark/bm_so_k_nucleotide.rb slow

From: "tmm1 (Aman Gupta)" <ruby@...1.net>
Date: 2013-12-08 01:56:36 UTC
List: ruby-core #58955
Issue #9188 has been updated by tmm1 (Aman Gupta).


@charliesome helped me with my compiler patch. It adds a new opt_aset_str instruction that handles the string literal hash_aset case (hsh["abc"]=).

Unfortunately, it did not make a big difference in long-lived strings generated in our app. The patch follows for posterity.

diff --git a/compile.c b/compile.c
index 812f692..1cc038c 100644
--- a/compile.c
+++ b/compile.c
@@ -5290,6 +5290,24 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
 	break;
       }
       case NODE_ATTRASGN:{
+	if (node->nd_mid == idASET &&
+	    node->nd_recv != (NODE *)1 &&
+	    node->nd_args &&
+	    nd_type(node->nd_args) == NODE_ARRAY &&
+	    node->nd_args->nd_alen == 2 &&
+	    nd_type(node->nd_args->nd_head) == NODE_STR)
+	{
+	    COMPILE(ret, "recv", node->nd_recv);
+	    COMPILE(ret, "value", node->nd_args->nd_next->nd_head);
+	    ADD_INSN2(ret, line, opt_aset_str,
+		      new_callinfo(iseq, idASET, 2, 0, 0),
+		      rb_fstring(node->nd_args->nd_head->nd_lit));
+	    if (poped) {
+		ADD_INSN(ret, line, pop);
+	    }
+	    break;
+	}
+
 	DECL_ANCHOR(recv);
 	DECL_ANCHOR(args);
 	VALUE flag = 0;
diff --git a/hash.c b/hash.c
index 1321b83..8bbd569 100644
--- a/hash.c
+++ b/hash.c
@@ -2368,7 +2368,7 @@ static VALUE rb_hash_compare_by_id_p(VALUE hash);
  *     h1["a"]        #=> 100
  *     h1.compare_by_identity
  *     h1.compare_by_identity? #=> true
- *     h1["a"]        #=> nil  # different objects.
+ *     h1["a".dup]    #=> nil  # different objects.
  *     h1[:c]         #=> "c"  # same symbols are all same.
  *
  */
diff --git a/insns.def b/insns.def
index 63a36b3..dcecfdc 100644
--- a/insns.def
+++ b/insns.def
@@ -1903,6 +1903,27 @@ opt_aset
 
 /**
   @c optimize
+  @e recv[str] = set
+  @j 最適化された recv[str] = set。
+ */
+DEFINE_INSN
+opt_aset_str
+(CALL_INFO ci, VALUE key)
+(VALUE recv, VALUE val)
+(VALUE val)
+{
+    if (!SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash && BASIC_OP_UNREDEFINED_P(BOP_ASET, HASH_REDEFINED_OP_FLAG)) {
+	rb_hash_aset(recv, key, val);
+    } else {
+	PUSH(recv);
+	PUSH(rb_str_resurrect(key));
+	PUSH(val);
+	CALL_SIMPLE_METHOD(recv);
+    }
+}
+
+/**
+  @c optimize
   @e optimized length
   @j 最適化された recv.length()。
  */
diff --git a/test/ruby/test_hash.rb b/test/ruby/test_hash.rb
index 4244b86..ef606bf 100644
--- a/test/ruby/test_hash.rb
+++ b/test/ruby/test_hash.rb
@@ -209,6 +209,13 @@ class TestHash < Test::Unit::TestCase
     assert_equal(256,     h[z])
   end
 
+  def test_ASET_fstring_key
+    a, b = {}, {}
+    a["abc"] = 1
+    b["abc"] = 1
+    assert_same a.keys[0], b.keys[0]
+  end
+
   def test_NEWHASH_fstring_key
     a = {"ABC" => :t}
     b = {"ABC" => :t}
@@ -897,7 +904,7 @@ class TestHash < Test::Unit::TestCase
     h = @cls[]
     h.compare_by_identity
     h["a"] = 1
-    h["a"] = 2
+    h["a".dup] = 2
     assert_equal(["a",1], h.assoc("a"))
   end
 

----------------------------------------
misc #9188: r43870 make benchmark/bm_so_k_nucleotide.rb slow
https://bugs.ruby-lang.org/issues/9188#change-43505

Author: authorNari (Narihiro Nakamura)
Status: Closed
Priority: Normal
Assignee: tmm1 (Aman Gupta)
Category: core
Target version: current: 2.1.0


Hi.

I think r43870 make benchmark/bm_so_k_nucleotide.rb slow.

r43870
% time ./miniruby ./benchmark/bm_so_k_nucleotide.rb
./miniruby ./benchmark/bm_so_k_nucleotide.rb  1.70s user 0.01s system 99% cpu 1.718 total

r43869
% time ./miniruby ./benchmark/bm_so_k_nucleotide.rb
./miniruby ./benchmark/bm_so_k_nucleotide.rb  1.52s user 0.03s system 99% cpu 1.559 total


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

In This Thread