Parallel and Concurrent Programming in Haskell 読書会 第3回
Map なのか IntMap なのか import qualified Data.IntMap.Strict as Map https://t.co/ogVGv3WTpR #PCPjH
2013-09-08 16:10:13「IList どこー?」 「自前で定義してます。」 https://t.co/CX6MdgJsma #PCPjH
2013-09-08 16:19:32古のバージョン(0.1.0.x)では monad-par パッケージに含まれてました [http://t.co/VKlsOWD1Qp ] が、現在では提供せず #PCPjH
2013-09-08 16:21:35#PCPjH streamFromList では x:xs と IVar v を取り、v に head と 次の IVar w を put し (ここで head が正規形まで評価される)、tail と w に進む。こうしてパイプラインの生産者を作る。
2013-09-08 16:28:30#PCPjH map decrypt . map encrypt みたいなパイプラインを並列化する場合は fold は (:) をfold することで IList a を [a] に直す。
2013-09-08 16:31:56#PCPjH decrypt . encrypt では decrypt の方が倍ぐらい速く、encrypt が律速段階になる。理想的なスピードアップは 1.5 倍ぐらい。
2013-09-08 16:32:55#PCPjH 生産者が消費者に対して早すぎる場合、在庫が積もってメモリをどんどん食ってしまうので、生産側でも消費側でも一定以上仕事した時点で新たな fork をする必要がある(?)
2013-09-08 16:37:50#PCPjH 違うな。テイク2。生産者が消費者に対して早すぎる場合、在庫が積もってメモリをどんどん食ってしまうので、一定以上生産したら IVar に加えて "その IVar に値を置く計算" を消費者に渡す。消費者はそれを fork する。
2013-09-08 16:41:34#PCPjH 生産者は一定量生産したら "IVar に put する計算" という名の携帯番号を残して休暇に出る。消費者は在庫を食い尽くして携帯番号に行き着いたら生産者を呼び出す。まさに社会
2013-09-08 16:44:04ParIO モナド: http://t.co/iWMWk44VNv http://t.co/dtcSnRC8HK #PCPjH
2013-09-08 16:44:30#PCPjH (生産調整なしの) rsa を見ると、消費者側の streamFold は全ての要素をリストに突っ込むまで runPar を脱しない。これは IVar を含む IList は runPar から返すとバグるから。
2013-09-08 16:52:51#PCPjH だから並列ストリーム処理に関して言えば、Par は「一旦入ると最後まで出れない」IO みたいな性格を持つ。 Par「出たいか? 俺の影響下から出たいか? だったら全部の要素を含むリストを作るんだな!!」まさに外道
2013-09-08 16:54:35あっ、そっか。ParIO モナドは lazy I/O のように振る舞えるのね。その代わり結果が非決定的になっちゃうけれど。 #PCPjH
2013-09-08 16:58:33#PCPjH 探索木を分割統治的に処理してくアルゴリズムでは Strategies は使いにくい。探索木全体を遅延データ構造として作ることになり、処理が進むにしたがって歯に近い方まで遅延が剥がれていくのに根っこは最後までGCされないのでメモリが大変なことに。
2013-09-08 17:12:30Pattern Guard か。 http://t.co/q5MTBEAZNm http://t.co/tBTy0ffsFf #PCPjH
2013-09-08 17:18:56.@jun0inoue あっ、すみません。さっきの解釈間違っていたかもしれません。とりあえず、(答えが決定的にならない、実行時エラーやデッドロックなどのリスクを潜在的に含むものの、)IVar を返すことは普通の Par モナドでもできてしまうことは確認しました。 #PCPjH
2013-09-08 17:20:03