# HG changeset patch # User Daichi TOMA # Date 1392265658 -32400 # Node ID c119afd8e948acc44a40fe13e5800ea276975ae5 # Parent 98a55a9356198fb7849dcdac4c22de55f5ba371e describe rpar diff -r 98a55a935619 -r c119afd8e948 slides/master.html --- a/slides/master.html Thu Feb 13 13:02:59 2014 +0900 +++ b/slides/master.html Thu Feb 13 13:27:38 2014 +0900 @@ -107,20 +107,31 @@

モナドの例:IOモナド、エラーモナド、STMモナド

-
-

- Haskell の並列処理 -

-

- rparの例 -

-
+
+

Haskell の並列処理

+

sumという1つ目の引数から2つ目の引数までの全ての数を足す関数があるとする

+

rpar の引数にすることで関数が並列に実行可能であることを示せる

+

do ~ returnで rpar を 1 つにまとめ、runEvalに渡すことで実行する

+
+main = print (runEval test)
+
+test = do
+       a <- rpar (sum 0     10000)
+       b <- rpar (sum 10000 20000)
+       return (a,b)
+
+

a と b が並列に計算される

+

Haskell の遅延評価

並列実行は遅延評価が問題になる

haskell では値が必要となるまで式の評価が行われない

並列に実行するように指示しても、評価が行われなければ並列に動かない

+

さきほどの例ではprintを行うようにしていた

+
+main = print (runEval test)
+
@@ -365,9 +376,11 @@

まとめ

-

純粋関数型言語 Haskell を用いて並列データベースの実装をおこなった

+

Haskell を用いて信頼性の高い並列データベースの実装した

+

Haskell の並列処理は、最新のコンパイラで性能がでることがわかった

読み込みに関して 12 コアで実行した場合、10.37 倍 という性能向上率が確認できた

また、Web 掲示板サービスを開発し、Java と比較して読み込みで 3.25 倍、書き込みで 3.78 倍の性能が確認できた

+

Network 越しの計測では並列性能があまり出ていないことがわかった