ruby-trunk-changes r42566 - r42586

今日は bignum.c のリファクタリングや性能向上、Windows 版の IO の性能向上のための変更などがありました。

akr:r42566 2013-08-15 23:25:19 +0900

bignum.c の big2str_karatsuba() で bary_divmod() を呼ぶかわりに r42543 で bigdivrem_normal() から切り出した bigdivrem_restoring() を利用するようにして中間バッファの利用を減らすパフォーマンス改善の変更です。

akr:r42567 2013-08-16 00:01:38 +0900

bigdivrem_normal() の不要なローカル変数を削除しています。

svn:r42568 2013-08-16 00:01:44 +0900

version.h の日付更新。

akr:r42569 2013-08-16 00:03:35 +0900

bignum.c の bary_divmod() で直前で変数に代入したのと同じ式を使ってたところを、その変数の参照におきかえるリファクタリング

akr:r42570 2013-08-16 00:36:00 +0900

bignum.c の rb_big2str1() で BDIGIT 配列の上位の 0 を切り詰めて不要な処理を削るようにしています。

akr:r42571 2013-08-16 01:16:08 +0900

bignum.c の bigdivrem_restoring() で BDIGIT の配列 yds が最上位の要素以外が全て 0 だった時の特別処理を追加しています。 最上位の要素だけで除算しておいて 0 のところはシフト(というか MEMMOVE() で移動するようにしています。

akr:r42572 2013-08-16 01:47:08 +0900

bignum.c の bigdivrem_single() で y が 2 の累乗だった時にシフト演算する特別処理を追加しています。

naruse:r42573 2013-08-16 02:18:45 +0900

Mac OS X 版で Process.clock_gettime の clock_id に :CLOCK_MONOTONIC のサポートを追加しています。 mach_absolute_time() と mach_timebase_info() というシステムコール? を使って実装しています。 [ruby-core:56087] [Feature #8658]

akr:r42574 2013-08-16 02:24:41 +0900

bignum.c の bary_mul_toom3() で詳細は理解していませんが bary_add() もしくは bary_sub() を呼び出す分岐を減らして MEMCPY() と BDIGITS_ZERO() の処理におきかえています。

akr:r42575 2013-08-16 09:19:51 +0900

bignum.c の bary_small_rshift() の引数 sign_bit を higher_bdigit という最上位の BDIGIT の値を受け取るように変更しています。

akr:r42576 2013-08-16 10:11:18 +0900

bignum.c のリファクタリング。 bigdivrem_single() を bigdivrem_single1() と改名して x_higher_bdigit という x の最上位の BDIGIT を受け取る引数を追加して、bigdivrem_restoring() の y が最上位の BDIGIT 以外 0 だった時の特別処理で MEMMOVE() を不要にしています。

usa:r42577 2013-08-16 11:26:28 +0900

r42564 で File#truncate 時に Windows 版だと fsync(2) を呼ばない rb_io_flush_raw() を呼ぶようにしましたが、同名の関数は Windows 環境以外でも io.c でも定義されていたのでプラットフォームによる条件分岐は消して常に rb_io_flush_raw() を呼ぶようにしています。また(たぶんこっちが本命) File#size および File#flock でも rb_io_flush_raw() を使うようにして fsync(2) を抑制しています。 Windows での IO の性能向上のため。

kazu:r42578 2013-08-16 14:19:05 +0900

r42559 の ChangeLog エントリの typo 修正。

kazu:r42579 2013-08-16 14:19:08 +0900

parse.y の rb_enc_symname_type() と rb_str_symname_type() の引数名の typo 修正。

kazu:r42580 2013-08-16 14:20:10 +0900

r42577 の ChangeLogtypo 修正。

nobu:r42582 2013-08-16 17:04:38 +0900

eval_string_with_cref() で "clobbered by 'longjmp' or 'vfork'" の警告が出ていたので引数 cref に const をつけた上で TH_EXEC_TAG() の中のブロック(longjmp() を実行した後のブロック)内の変数に代入するようにしています。こういう回避方法もあるんですね。

nobu:r42583 2013-08-16 17:15:09 +0900

r42573 で追加した Process.clock_gettime の Mac OS X 版の CLOCK_MONOTONIC の実装で計算結果をより小さい構造体メンバに代入するため明示的キャストを追加しています。

ko1:r42584 2013-08-16 17:46:21 +0900

make test-all をメモリプロファイラつきで実行するための test/profile_test_all.rb をリファクタリングして、計測方法に /proc/meminfo と /proc/self/status からの取得を追加しています。またメモリプロファイラつきで実行するための環境変数 RUBY_TEST_ALL_PROFILE を変数の内容によらず、設定されていれば有効になるように条件を変更してします。

ko1:r42585 2013-08-16 18:10:06 +0900

r42584 の続きで test/profile_test_all.rb でテスト名を表示する時に空白文字は除去するようにしています。

ko1:r42586 2013-08-16 18:12:36 +0900

test/profile_test_all.rb で表示する項目名の typo 修正。