トップ «前の日記(2010-01-24) 最新 次の日記(2010-01-27)» 月表示 編集

日々の流転


2010-01-25 [長年日記]

λ. “Runtime support for multicore Haskell” by Simon Marlow, Simon P. Jones, Satnam Singh

In ICFP '09: Proceedings of the 14th ACM SIGPLAN international conference on Functional programming (2009), pp. 65-78.

を読んだ。 Parallel Haskell に着目してGHCのランタイムのデザインを見直したという話。 Haskell忘年会のときのmaoeさんの発表で面白そうだったので読んでみた。 色々な改善点があるのだけど、GC周りの話とかは色々面白かった。

通常の並列のコピーGC(copying GC)では、重複してコピーしないためにHEC(Haskell Execution Context, ≒CPU)間で同期を行う。 だけど、実際に重複してコピーされるのはまれだし、Haskellの場合そもそも大多数のイミュータブルなオブジェクトは重複してコピーされても別に問題ないので、ミュータブルなオブジェクトのコピー時にしか同期をとらないようにしたというのは、「おおぉ」と思った。

それから、並列GCのHEC間のロードバランシングを無効にしたほうが速いという話も驚いた。これはその方が局所性が高くなるから。他にもかなり局所性は意識していて、ナイーブにロードバランシングしてるだけじゃだめなんだなぁ、と思った。

Strategiesの話はよく知らなかったので勉強になった。 spark pool のGCとStrategiesの話は悩ましそうだ。

他の、CPU間のsparkのロードバランシングに bounded workstealing queue を使うようにしたとか、spark毎にHaskellスレッドを生成するのではなくバッチ処理するようにしたとかは、地道に改善しているなという感じ。

関連