[#43465] GVL改善案 — KOSAKI Motohiro <kosaki.motohiro@...>
小崎です
[#43467] [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...>
kosakiです
ささだです.
> ささだです.
ささだです.
> ささだです.
自己解決しました
ささだです.
>> ということは危ないのは RUBY_VM_SET_INTERRUPT() がロストしたときに、タイムアウトなしの
>>> ということは危ないのは RUBY_VM_SET_INTERRUPT() がロストしたときに、タイムアウトなしの
[#43468] Re: [ruby-changes:19438] Ruby:r31478 (trunk): * test/date/*.rb: use skip /w messages. — KOSAKI Motohiro <kosaki.motohiro@...>
2011/5/8 tadf <ko1@atdot.net>:
> 表示したい場合を除いてはskipよりもreturnを使うようお願いしています。
>> 表示したい場合を除いてはskipよりもreturnを使うようお願いしています。
[#43476] [Ruby 1.9 - Feature #4653][Open] [PATCH 1/1] new method Enumerable#rude_map — Shyouhei Urabe <shyouhei@...>
遠藤です。
(05/08/2011 11:21 PM), Yusuke ENDOH wrote:
遠藤です。
卜部です。
At Mon, 9 May 2011 16:35:31 +0900,
遠藤です。
[#43493] [Ruby 1.9 - Feature #4657][Open] add option to hide skip messages on unit/test — Shota Fukumori <sorah@...>
> -q, --hide-skipでskipメッセージが表示されなくなります。
(05/09/2011 06:31 PM), Shota Fukumori wrote:
> (05/09/2011 06:31 PM), Shota Fukumori wrote:
2011/5/9 KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>:
> 2011/5/9 KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>:
[#43502] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
Hi
Hello,
(ruby-coreはずしました)
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#43549] RubyKaigi2011に'CRuby'コミッタの皆さまを招待いたします(締切:2011-06-15) — Kakutani Shintaro <shintaro.kakutani@...>
'CRuby'コミッタの皆さまへ
[#43554] [Ruby 1.9 - Bug #4696][Assigned] thread.c#lock_func() が spurious wakeup unsafe — Motohiro KOSAKI <kosaki.motohiro@...>
[#43606] [Ruby 1.9 - Bug #4808][Open] thread_wait_for() eats 100% of CPU power — Hidetoshi Nagai <nagai@...>
> いつからかは把握できていませんが (少なくとも 1.9.2p0 では発生しません),
[ruby-dev:43465] GVL改善案
小崎です
大型連休のさなか、みなさん如何お過ごしでしょうか。わたしは元気です。ごふっ
えっと、以前から指摘されていた事ですが、現在のtrunkのGVL実装だと1.9.2よりも
ある種のベンチが遅くなってます。ぐたいてきには、pipeやThread.passで2つのスレッドが
ギッコンバッタンするケースですね。
simple-mutex r31433
vm4_pipe 1.262 2.495
vm4_thread_pass 0.183 2.034
なので、別実装をつくってみました。以下のようになります。
simple-mutex r31433 newgvl
vm4_pipe 1.262 2.495 1.493
vm4_thread_pass 0.183 2.034 0.089
パッチは以下です
https://gist.github.com/000b3b46004dd6f1156f
添付したファイルのうち、bm.txtが元データ(CSV)で、性能グラフ.pngがエクセルさんが
作ってくれたグラフです。
一割以上性能がかわったベンチをピックアップすると以下
r31433 newgvl ratio (1以下なら高速)
so_sieve 1.642 1.43 0.87088916
vm1_ivar_set* 1.401 1.647 1.175588865
vm3_thread_mutex 17.083 1.168 0.068372066
vm4_pipe 2.495 1.493 0.598396794
vm4_thread_pass 2.034 0.089 0.043756146
全体のアベレージでは、1.3% 程度の改善といったところです。コメント待ってます
※ 正直言うと vm1_ivar_set が直せなくて困っているので誰か助けてくださいませ
個人的には、vm3_thread_mutexがやっと1.8なみに戻ってくれたので達成感が
あったりなかったり。
1.8.7 r31433 newgvl
vm3_thread_mutex 1.106 17.083 1.168
あと、感想としては benchmarkディレクトリの大半のベンチマークはthreadつくらないんですが、
競合がないと仮定すると1.9.2のsimple mutex最強ですね。何もしないのが速いにきまっとる。
今の方針で、これ以上やるなら、アセンブラ書いてfutexを直接叩くとかそういったやな世界がまってるので、
次の一手をどうしようかなぁ。とかとか
Attachments (2)
app_answer,2.022,2.016 app_erb,0.957,0.970 app_factorial,1.108,1.165 app_fib,1.719,1.800 app_mandelbrot,0.937,0.957 app_pentomino,32.693,33.986 app_raise,1.135,1.170 app_strconcat,0.793,0.804 app_tak,2.638,2.726 app_tarai,2.093,2.093 app_uri,1.719,1.750 io_file_create,3.283,3.335 io_file_read,2.597,2.660 io_file_write,4.942,5.093 io_select,2.954,2.878 io_select2,8.587,8.868 io_select3,0.923,0.945 loop_for,2.873,2.901 loop_generator,0.933,0.945 loop_times,2.557,2.630 loop_whileloop,1.161,1.174 loop_whileloop2,2.296,2.304 so_ackermann,2.025,2.009 so_array,2.636,2.489 so_binary_trees,0.940,0.935 so_concatenate,0.831,0.833 so_count_words,0.615,0.618 so_exception,2.382,2.333 so_fannkuch,3.225,3.198 so_fasta,4.680,4.778 so_k_nucleotide,3.344,3.545 so_lists,1.291,1.236 so_mandelbrot,4.113,4.233 so_matrix,0.875,0.948 so_meteor_contest,9.772,9.825 so_nbody,1.674,1.630 so_nested_loop,2.359,2.421 so_nsieve,8.084,8.021 so_nsieve_bits,5.415,5.297 so_object,1.697,1.771 so_partial_sums,2.046,2.049 so_pidigits,1.897,1.847 so_random,3.014,2.963 so_reverse_complement,3.585,3.578 so_sieve,1.642,1.430 so_spectralnorm,7.512,7.569 vm1_block*,3.593,3.550 vm1_const*,0.696,0.753 vm1_ensure*,0.938,1.021 vm1_ivar*,1.259,1.326 vm1_ivar_set*,1.382,1.682 vm1_length*,1.399,1.456 vm1_neq*,1.076,1.124 vm1_not*,0.638,0.624 vm1_rescue*,11.348,11.754 vm1_simplereturn*,2.809,2.775 vm1_swap*,1.026,1.032 vm2_array*,2.31840109825134,2.30743288993835 vm2_case*,1.93026208877563,2.10426092147827 vm2_eval*,1.98840093612671,2.02307105064392 vm2_method*,4.12153005599976,4.05255699157715 vm2_mutex*,2.11638998985291,2.15670800209045 vm2_poly_method*,5.45742392539978,5.44394898414612 vm2_poly_method_ov*,2.37126493453979,2.3899290561676 vm2_proc*,1.29540395736694,1.28760695457458 vm2_regexp*,2.58529186248779,2.82527804374695 vm2_send*,1.62940311431885,1.789705991745 vm2_super*,1.38157606124878,1.41898798942566 vm2_unif1*,1.63438701629639,1.82808303833008 vm2_zsuper*,1.52519106864929,1.53979992866516 vm3_gc,3.372,3.429 vm3_thread_create_join,5.310,5.432 vm3_thread_mutex,17.083,1.168 vm4_pipe,2.495,1.553 vm4_thread_pass,2.034,0.122