先日Parallel.Forについて質問したのですが、再度質問させていただきます。
順序性が求められる計算にParallel.Forを突っ込んで、
正しい計算結果を出すには排他制御をするしかないのでしょうか?
内容によって出来るかどうかは変わってくるかもしれないですが
とりあえずは下記コードを参考に教えていただけないでしょうか。
C#
1private void Button2_Click(object sender, EventArgs e) 2 { 3 int i = 1; 4 int j = 2; 5 Int64 ansewr = 0; 6 var sw = new System.Diagnostics.Stopwatch(); 7 sw.Start(); 8 9 Parallel.For(0, 10, y => 10 { 11 for (int x = 0; x < 10; x++) 12 { 13 ansewr += i * j + x; 14 } 15 }); 16 17 sw.Stop(); 18 textBox1.Text = ansewr.ToString(); 19 label2.Text = sw.Elapsed.ToString(); 20 }
普通に for を使えばいいのでは?
Parallel.forで処理できるかどうかを知りたいのです…
> とりあえずは下記コードを参考に
並列以前に500回繰り返す意味がない処理に見えるので,順序性の話との関連性がわからないです.
これParallel.Forの処理順で計算結果変わります?
申し訳ありません。。計算式を間違えてました…
500回回してたのは処理時間を計測で時間を掛かるのを試しており、修正忘れです…
なんなら二重ループでもいいですよね。。修正します。
どっちにしろ順序関係ないように見えます。この処理なら並列に計算した結果を終わった順に足していけばいいだけだと思います。
例えばフィボナッチ数の計算なら順序関係ありますが、これを非同期で行う意味はありません。
想定するケースがよくわかりません。
自分が順序性を間違えて理解してました…
お恥ずかしい限りです。。申し訳ありません…
私が前回の質問で「順序性」という言葉を使ったからですね。
前回は「似たような記述のint型、計算処理プログラムを作成するも」とあるだけで、ソースが無かったために、ループ順番が関係する処理だったのでは?思ったため「順序性」という言葉を使いました。
前回ソースを上げず、勝手に思い込んだ自分が悪いので気になさらないでください。
そもそも順序性という漢字を見ればある程度想像付くはずなのに、意味の分からない思い込みをしてた自分が悪いです。
質問のコードは、計算の順序性を含まないように思われます。変数xは利用されていないし、変数ansewrは代入されるだけで、結局最後に代入された値が残るだけ。Parallel.For を使う必要があるコード例はないのでしょうか?

回答1件
あなたの回答
tips
プレビュー