続:Haskellのfibが遅い件

前回のあらすじ: http://togetter.com/li/31078 http://d.hatena.ne.jp/nishiohirokazu/20100720/1279595270 > まとめるのが大変なので誰かTwitter上の発言だけでもTogetter作ってくれないかなぁ(他力本願 続きを読む
3
前へ 1 ・・ 4 5
{白,黒}のカピバラの左随伴右随伴 @ainsophyao

@nishio 便利です。set log x はプロットのコマンドだったと思うので、fit は変わりましたっけ。僕は別ファイル作りましたが、using (log ($1)):(log ($2)) がいけたかと。(すいません、今サーバーが落ちていて試せないんです。) @shinh

2010-07-22 00:17:33
shinichiro hamaji @shinh

@kinaba あれうーんとそれつまり 1 回の allocation に対して N 回 GC が動くってことですか?それが何故妥当なのかわからないです。あと concurrent なんかなーと思ったのはgdbのstacktraceに実行してるプログラムが入ってなかったからです。

2010-07-22 01:09:42
shinichiro hamaji @shinh

@kinaba えーとつまりconcurrentっていうか、allocationのタイミングでメモリ足りないからGC呼ぶ実装なら bt で fib のスタックが見えるはずかなぁと思って、それが無いからallocationのタイミングとは別のタイミングでGC走らせてるのかなぁと

2010-07-22 01:12:57
shinichiro hamaji @shinh

でその仮定が正しいのなら頻度 O(1/N) とかもそういうこともあるんかのうという気もします。妥当なのかはわかりませんが割と GC のイヤな allocation パターンになっちゃってるというような感じというか。あと Ruby の GC ってどのタイミングで起動するんだっけ…

2010-07-22 01:15:18
kinaba @kinaba

@shinh ちゃいます。「N^2に比例する回数GCが動く」というのは「N^2回GCが動く」とは違います。

2010-07-22 01:15:26
kinaba @kinaba

@shinh たとえば「サイズNのブロックをN回allocateする」というプログラムで、「100MBメモリをallocateするたびにGCが動く」状況だと、「1億/N 回allocateするたびにGCが動く」ので「GCの動く回数はN/(1億/N) = N^2/1億 回」です。

2010-07-22 01:19:49
shinichiro hamaji @shinh

@kinaba あーなるほどつまり N が少ない時は 100 回中 1 回だった頻度が、 N が多くなったら毎回起動するようになった、みたいな話がありえるって話ですね。そうかなるほど…

2010-07-22 01:21:41
kinaba @kinaba

@shinh はいはい。allocate回数Nに比例して一度に確保するメモリ量も増える変な状況じゃないとこうはならないと思いますけど、今回fibの場合は実際にNに比例してIntegerの桁数が伸びるので、そこまで大きく外してはいないんじゃないかなーと。

2010-07-22 01:26:18
kinaba @kinaba

@shinh スタックはどうなるのか僕もよくわからんですね…。並列で動いてるんだろうか。この辺は @shelarcy さんならきっとご存じなような…(召還)

2010-07-22 01:30:07
shinichiro hamaji @shinh

@kinaba なにか一通り納得できた気がします。というかそのくらい想像できるべきでつまり僕は手動かさずに机上で考えるとダメだな。あとは Java は何故このヘンな allocation pattern に負けてないか、とかですかねー

2010-07-22 01:30:27
shinichiro hamaji @shinh

なんか今回面白いなと思ったのは GC とかって不自然にシンプルなコードに対して不可思議な挙動することがあるんだなぁということで、これはつまりマイクロベンチでの調整がしにくいということで、そのへんで GC の奥の深さみたいなのが生成されてるのかなーと

2010-07-22 01:33:24
shinichiro hamaji @shinh

あと2変数で fit すると多少ヘンな関数でもそれっぽい曲線になってくれちゃうから、 0.001*N^3 + N^2 みたいなのが N^2.5 に見えたりするから気をつけよーね、ということも学んだ

2010-07-22 01:41:38
前へ 1 ・・ 4 5