1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/benchmark
normal cee7f6911b io.c: avoid kwarg parsing in C API
* benchmark/bm_io_nonblock_noex2.rb: new benchmark based
  on bm_io_nonblock_noex.rb
* io.c (io_read_nonblock): move documentation to prelude.rb
  (io_write_nonblock): ditto
  (Init_io): private, internal methods for prelude.rb use only
* prelude.rb (IO#read_nonblock): wrapper + documentation
  (IO#write_nonblock): ditto
  [ruby-core:71439] [Feature #11339]

rb_scan_args and hash lookups for kwargs in the C API are clumsy and
slow.  Instead of improving the C API for performance, use Ruby
instead :)

Implement IO#read_nonblock and IO#write_nonblock in prelude.rb
to avoid argument parsing via rb_scan_args and hash lookups.

This speeds up IO#write_nonblock and IO#read_nonblock benchmarks
in both cases, including the original non-idiomatic case where
the `exception: false' hash is pre-allocated to avoid GC pressure.

Now, writing the kwargs in natural, idiomatic Ruby is fastest.
I've added the noex2 benchmark to show this.

2015-11-12 01:41:12 +0000
target 0: a (ruby 2.3.0dev (2015-11-11 trunk 52540) [x86_64-linux])
target 1: b (ruby 2.3.0dev (2015-11-11 avoid-kwarg-capi 52540)
-----------------------------------------------------------
benchmark results:
minimum results in each 10 measurements.
Execution time (sec)
name              a       b
io_nonblock_noex    2.508   2.382
io_nonblock_noex2   2.950   1.882

Speedup ratio: compare with the result of `a' (greater is better)
name              b
io_nonblock_noex    1.053
io_nonblock_noex2   1.567

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-12 02:00:41 +00:00
..
gc
other-lang
bm_app_answer.rb
bm_app_aobench.rb
bm_app_erb.rb
bm_app_factorial.rb
bm_app_fib.rb
bm_app_lc_fizzbuzz.rb
bm_app_mandelbrot.rb
bm_app_pentomino.rb
bm_app_raise.rb
bm_app_strconcat.rb
bm_app_tak.rb
bm_app_tarai.rb
bm_app_uri.rb
bm_array_shift.rb * array.c: Improve performance of Array#shift. use shared instead of 2015-01-03 02:27:50 +00:00
bm_hash_aref_dsym.rb new benchmarks for hashing dsyms and fixnums 2015-07-29 19:54:12 +00:00
bm_hash_aref_dsym_long.rb new benchmarks for hashing dsyms and fixnums 2015-07-29 19:54:12 +00:00
bm_hash_aref_fix.rb new benchmarks for hashing dsyms and fixnums 2015-07-29 19:54:12 +00:00
bm_hash_aref_flo.rb bm_hash_aref_flo.rb: fix data 2015-03-25 02:20:43 +00:00
bm_hash_aref_miss.rb
bm_hash_aref_str.rb
bm_hash_aref_sym.rb
bm_hash_aref_sym_long.rb
bm_hash_flatten.rb
bm_hash_ident_flo.rb fix flonum hashing regression from r45384 2015-01-22 07:48:59 +00:00
bm_hash_ident_num.rb
bm_hash_ident_obj.rb
bm_hash_ident_str.rb
bm_hash_ident_sym.rb
bm_hash_keys.rb
bm_hash_shift.rb
bm_hash_to_proc.rb bm_hash_to_proc.rb 2015-11-10 09:22:37 +00:00
bm_hash_values.rb
bm_io_file_create.rb
bm_io_file_read.rb
bm_io_file_write.rb
bm_io_nonblock_noex.rb delay `exception: false' checks for minor speedup 2015-07-02 22:22:14 +00:00
bm_io_nonblock_noex2.rb io.c: avoid kwarg parsing in C API 2015-11-12 02:00:41 +00:00
bm_io_select.rb
bm_io_select2.rb
bm_io_select3.rb
bm_loop_for.rb
bm_loop_generator.rb
bm_loop_times.rb
bm_loop_whileloop.rb
bm_loop_whileloop2.rb
bm_marshal_dump_flo.rb benchmark/bm_marshal_dump_flo.rb: new benchmark for [Bug #10761] 2015-01-23 08:13:59 +00:00
bm_marshal_dump_load_geniv.rb variable.c: avoid compatibility table with generic ivars 2015-05-30 00:20:15 +00:00
bm_marshal_dump_load_time.rb variable.c: avoid compatibility table with generic ivars 2015-05-30 00:20:15 +00:00
bm_require.rb * benchmark/bm_require.rb: new benchmark for require. 2015-10-08 21:31:49 +00:00
bm_require_thread.rb * benchmark/bm_require.rb: new benchmark for require. 2015-10-08 21:31:49 +00:00
bm_securerandom.rb
bm_so_ackermann.rb
bm_so_array.rb
bm_so_binary_trees.rb
bm_so_concatenate.rb
bm_so_count_words.rb
bm_so_exception.rb
bm_so_fannkuch.rb
bm_so_fasta.rb
bm_so_k_nucleotide.rb
bm_so_lists.rb
bm_so_mandelbrot.rb
bm_so_matrix.rb
bm_so_meteor_contest.rb * benchmark/bm_so_meteor_contest.rb: fix a typo. 2015-04-20 03:45:35 +00:00
bm_so_nbody.rb
bm_so_nested_loop.rb
bm_so_nsieve.rb
bm_so_nsieve_bits.rb
bm_so_object.rb
bm_so_partial_sums.rb
bm_so_pidigits.rb
bm_so_random.rb
bm_so_reverse_complement.rb
bm_so_sieve.rb
bm_so_spectralnorm.rb
bm_vm1_attr_ivar.rb
bm_vm1_attr_ivar_set.rb
bm_vm1_block.rb
bm_vm1_const.rb
bm_vm1_ensure.rb
bm_vm1_float_simple.rb
bm_vm1_gc_short_lived.rb
bm_vm1_gc_short_with_complex_long.rb
bm_vm1_gc_short_with_long.rb
bm_vm1_gc_short_with_symbol.rb
bm_vm1_gc_wb_ary.rb * benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase. 2015-03-18 05:15:08 +00:00
bm_vm1_gc_wb_ary_promoted.rb * benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase. 2015-03-18 05:15:08 +00:00
bm_vm1_gc_wb_obj.rb * benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase. 2015-03-18 05:15:08 +00:00
bm_vm1_gc_wb_obj_promoted.rb * benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase. 2015-03-18 05:15:08 +00:00
bm_vm1_ivar.rb
bm_vm1_ivar_set.rb
bm_vm1_length.rb
bm_vm1_lvar_init.rb
bm_vm1_lvar_set.rb
bm_vm1_neq.rb
bm_vm1_not.rb
bm_vm1_rescue.rb
bm_vm1_simplereturn.rb
bm_vm1_swap.rb
bm_vm1_yield.rb
bm_vm2_array.rb
bm_vm2_bigarray.rb
bm_vm2_bighash.rb
bm_vm2_case.rb
bm_vm2_defined_method.rb
bm_vm2_dstr.rb
bm_vm2_eval.rb
bm_vm2_method.rb
bm_vm2_method_missing.rb
bm_vm2_method_with_block.rb
bm_vm2_mutex.rb
bm_vm2_newlambda.rb
bm_vm2_poly_method.rb
bm_vm2_poly_method_ov.rb
bm_vm2_proc.rb
bm_vm2_raise1.rb
bm_vm2_raise2.rb
bm_vm2_regexp.rb
bm_vm2_send.rb
bm_vm2_string_literal.rb string.c: fix non-embedded string 2015-10-07 11:43:17 +00:00
bm_vm2_struct_big_aref_hi.rb struct: avoid all O(n) behavior on access 2014-12-09 15:43:49 +00:00
bm_vm2_struct_big_aref_lo.rb struct: avoid all O(n) behavior on access 2014-12-09 15:43:49 +00:00
bm_vm2_struct_big_aset.rb struct: avoid all O(n) behavior on access 2014-12-09 15:43:49 +00:00
bm_vm2_struct_big_href_hi.rb add benchmarks for struct[:name] 2015-06-22 20:10:07 +00:00
bm_vm2_struct_big_href_lo.rb add benchmarks for struct[:name] 2015-06-22 20:10:07 +00:00
bm_vm2_struct_big_hset.rb add benchmarks for struct[:name] 2015-06-22 20:10:07 +00:00
bm_vm2_struct_small_aref.rb struct: avoid all O(n) behavior on access 2014-12-09 15:43:49 +00:00
bm_vm2_struct_small_aset.rb struct: avoid all O(n) behavior on access 2014-12-09 15:43:49 +00:00
bm_vm2_struct_small_href.rb add benchmarks for struct[:name] 2015-06-22 20:10:07 +00:00
bm_vm2_struct_small_hset.rb add benchmarks for struct[:name] 2015-06-22 20:10:07 +00:00
bm_vm2_super.rb
bm_vm2_unif1.rb
bm_vm2_zsuper.rb
bm_vm3_backtrace.rb
bm_vm3_clearmethodcache.rb
bm_vm3_gc.rb bm_vm3_gc.rb: no shebang 2015-09-29 08:03:12 +00:00
bm_vm_symbol_block_pass.rb bm_vm_symbol_block_pass.rb: rename 2015-09-29 00:21:10 +00:00
bm_vm_thread_alive_check1.rb
bm_vm_thread_close.rb
bm_vm_thread_create_join.rb
bm_vm_thread_mutex1.rb
bm_vm_thread_mutex2.rb
bm_vm_thread_mutex3.rb
bm_vm_thread_pass.rb
bm_vm_thread_pass_flood.rb
bm_vm_thread_pipe.rb
bm_vm_thread_queue.rb
driver.rb driver.rb: load-rawdata 2015-03-06 01:33:43 +00:00
make_fasta_output.rb
prepare_require.rb * benchmark/prepare_require.rb: skip file creation if it already 2015-10-08 21:53:48 +00:00
prepare_require_thread.rb * benchmark/bm_require.rb: new benchmark for require. 2015-10-08 21:31:49 +00:00
prepare_so_count_words.rb
prepare_so_k_nucleotide.rb
prepare_so_reverse_complement.rb
report.rb
run.rb
runc.rb
wc.input.base