GHC 7.0.x―7.2.1 現在のスレッド実装について
Haskell (GHC) のユーザースレッドは軽量
@repeatedly はい、これ。 http://shootout.alioth.debian.org/u64q/performance.php?test=threadring コード: http://j.mp/ivEPKc
2011-06-12 19:59:37@repeatedly はい、6年ぐらい前からそうですね。 http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/index.htm
2011-06-12 20:03:02@repeatedly @cpp_akira シングルコアならもっと良い結果が出ているので、Erlang の SMP 対応の実装がまだまだなんだと思います http://j.mp/mLEbzw > Erlang が(思ったより)重い
2011-06-12 20:11:36@repeatedly @cpp_akira あっ、しまった。GHC がマルチコアで threadring の性能が下がらないのは、forkOnIO をつかって前処理を同じ CPU に割り振ってるからですね。Erlang の場合、シングルコアでの性能を見たほうが良いかも。
2011-06-12 20:16:39Erlangのスレッドの軽さは認知されてるのに、なんでHaskellのは認知されてないのか?そのあたりにHaskellの普及を阻むものがありそうである。
2011-06-12 20:05:24@tanakh ポインタがほしいです。haskell thread あたりで見まわってもそれっぽい情報がほとんどないです。
2011-06-12 20:08:00@gusmachine 扱いが小さくて煽り度は低めですが、Wikipedia のグリーンスレッドの項目とか。 http://j.mp/iKnrz3
2011-06-12 20:29:03@kazu_yamamoto "Runtime Support for Multicore Haskell" [http://j.mp/lBWECq ] の "4.1 The basic setup" では、15ワード + スタックのサイズだと書いてありますね。
2011-08-03 11:27:23@kazu_yamamoto あっ、+ スレッドの状態です。 "The size of a TSO is around 15 words plus the stack, and constitutes the whole state of a Haskell thread."
2011-08-03 11:30:25(さっきの話の流れの中で示し忘れたのですが、)Haskell のスレッドや並列処理(par 関数)用の spark が軽いっていうのは、この辺のスライドにも出てますね。 http://j.mp/mhVPBX http://j.mp/kxjkvP
2011-06-12 22:13:39.。oO(ただし、par関数は使い方によってはspace leakを起こすので、その辺に気をつける必要がありますが。 http://j.mp/iNLdzq (parallelパッケージでは問題をある程度考慮しているので、par関数を直接使わずにそちらを使うことをお勧めします。))
2011-06-12 22:25:49GHC 7.2.1 でのスレッドやスタックの実装の変更点
ちなみに GHC 7.2.1 でスレッドを使った処理は現在よりももっと軽くなる予定です。 http://hackage.haskell.org/trac/ghc/blog/stack-chunks
2011-06-12 22:26:20GHC Current で、スタックをヒープ上の TSO に置くのを止めて、スタック・チャンクを作成してそこにスタックを置くようにしたそうです。 http://hackage.haskell.org/trac/ghc/blog/stack-chunks
2010-12-16 10:27:42この変更の結果、threadring など一部のプログラムでは大きく性能が向上しているみたいですね。(表の中ではプログラム Size の変化が一番目立ちますが、これは -split-objs を使ってオブジェクトを分割したかどうかの違いなので、関係ないとのことです。)
2010-12-16 10:38:33補足:GHC 7.2.1 での CPU アフィニティ(affinity)を指定する機能
forkOnIO に対する補足説明です。実装ではなく機能の紹介をしているので、興味のない方は次の節まで読み飛ばしてください。
GHC Current (HEAD) にて、指定した CPU (HEC) 上で実行されるスレッドを作成するための forkOn 関数が Control.Concurrent に追加されました。 http://j.mp/gWW1Nj http://j.mp/gyXBXT
2011-03-30 21:52:26