Click here to load reader
Upload
surf244
View
79
Download
0
Embed Size (px)
Citation preview
並列処理は本当に早いのか?
実行環境
• Windows7
• プロセッサ:Intel Core i7
• メモリ:4GB
• 64ビット
• コア数:8Core
AsParallelの場合
ケース1
• データ件数:1000万件
• 2で割り切れる数値のみ取得する
ソースコード
• 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
実行結果
えっ????!!!!! 何かの手違いだと思うのでもう一度
ケース2
• データ件数:3000万件
• 2で割り切れる数値のみ取得する
※ソースコード割愛
実行結果
データ件数:1000万件
データ件数:3000万件
まとめ
• 並行処理と比べ、理論上早くなると思われたが、データ件数に比例し並列処理が早くなる事はなかった。
Parallel.ForEachの場合
ケース1
• データ件数:10件
• 割り振られたスレッドIDと取得データを出力する
ソースコード • 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
実行結果
並列処理開始 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で終了しました
んっ????!!!!!
ケース2
• データ件数:1000件
• 割り振られたスレッドIDと取得データを出力する
※ソースコード割愛
実行結果
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で終了しました
件数が多い為、割愛
まとめ
• 単に並列処理にしたからといって、処理が早くなる事はない。
どのような時に処理速度の改善が見込まれ
るかをきちんと精査した上で適切に使用し、
パフォーマンスの改善を行いましょう!!
ご静聴ありがとうございました。