17

Click here to load reader

並列処理は本当に早いのか

  • Upload
    surf244

  • View
    79

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 並列処理は本当に早いのか

並列処理は本当に早いのか?

Page 2: 並列処理は本当に早いのか

実行環境

• Windows7

• プロセッサ:Intel Core i7

• メモリ:4GB

• 64ビット

• コア数:8Core

Page 3: 並列処理は本当に早いのか

AsParallelの場合

Page 4: 並列処理は本当に早いのか

ケース1

• データ件数:1000万件

• 2で割り切れる数値のみ取得する

Page 5: 並列処理は本当に早いのか

ソースコード

• Function Index() As ActionResult

• Dim number = Enumerable.Range(1, 10000000) • Debug.WriteLine("並列処理開始") • sw.Start() • Dim query = number.AsParallel.Where(Function(e) e Mod 2 = 0).ToList() • sw.Stop() • str = "並列処理は" + sw.Elapsed.ToString + "で終了しました" • Debug.WriteLine(str) • ViewData("Pararell") = str

• Debug.WriteLine("並行処理開始") • sw.Restart() • Dim query2 = number.Where(Function(e) e Mod 2 = 0).ToList() • sw.Stop() • str = "並行処理は" + sw.Elapsed.ToString + "で終了しました" • Debug.WriteLine(str) • ViewData("Concurrent") = str

• Return View() • End Function

Page 6: 並列処理は本当に早いのか

実行結果

えっ????!!!!! 何かの手違いだと思うのでもう一度

Page 7: 並列処理は本当に早いのか

ケース2

• データ件数:3000万件

• 2で割り切れる数値のみ取得する

※ソースコード割愛

Page 8: 並列処理は本当に早いのか

実行結果

データ件数:1000万件

データ件数:3000万件

Page 9: 並列処理は本当に早いのか

まとめ

• 並行処理と比べ、理論上早くなると思われたが、データ件数に比例し並列処理が早くなる事はなかった。

Page 10: 並列処理は本当に早いのか

Parallel.ForEachの場合

Page 11: 並列処理は本当に早いのか

ケース1

• データ件数:10件

• 割り振られたスレッドIDと取得データを出力する

Page 12: 並列処理は本当に早いのか

ソースコード • Function Index() As ActionResult

• For i As Integer = 1 To 10 • numberList.Add(i) • Next

• Debug.WriteLine("並列処理開始") • sw.Start() • Parallel.ForEach( • numberList, • Sub(num) • Debug.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString + ":" + num.ToString) • End Sub • ) • sw.Stop()

• str = "並列処理は" + sw.Elapsed.ToString + "で終了しました" • Debug.WriteLine(str) • ViewData("Pararell") = str

• Debug.WriteLine("並行処理開始") • sw.Restart() • numberList.ForEach( • Sub(num) • Debug.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString + ":" + num.ToString) • End Sub) • sw.Stop() • str = "並行処理は" + sw.Elapsed.ToString + "で終了しました" • Debug.WriteLine(str) • ViewData("Concurrent") = str

• Return View() • End Function

Page 13: 並列処理は本当に早いのか

実行結果

並列処理開始 12:1 11:4 7:2 5:6 10:7 9:9 12:5 11:10 6:3 8:8 並列処理は00:00:00.0232729で終了しました

並行処理開始 12:1 12:2 12:3 12:4 12:5 12:6 12:7 12:8 12:9 12:10 並行処理は00:00:00.0033474で終了しました

んっ????!!!!!

Page 14: 並列処理は本当に早いのか

ケース2

• データ件数:1000件

• 割り振られたスレッドIDと取得データを出力する

※ソースコード割愛

Page 15: 並列処理は本当に早いのか

実行結果

9:743 9:744 9:745 9:746 9:747 9:748 9:749 9:750 並列処理は00:00:05.2150791で終了しました

6:993 6:994 6:995 6:996 6:997 6:998 6:999 6:1000 並行処理は00:00:00.3551537で終了しました

件数が多い為、割愛

Page 16: 並列処理は本当に早いのか

まとめ

• 単に並列処理にしたからといって、処理が早くなる事はない。

どのような時に処理速度の改善が見込まれ

るかをきちんと精査した上で適切に使用し、

パフォーマンスの改善を行いましょう!!

Page 17: 並列処理は本当に早いのか

ご静聴ありがとうございました。