5

チャンクパーティション分割よりもレンジパーティション分割の方が適切なシナリオはどれですか? (そして万力の詩)

私はすでにそれを知っています

  • チャンク パーティショニング: 入力からプロセスへの要素の小さなチャンクを取得し、小さなチャンクから始めて、チャンク サイズを増やします。

  • 範囲分割では、各ワーカーに同数の要素を事前に割り当てます

また、このコードの理由: (100000 までの素数の検索)

IEnumerable<int> numbers = Enumerable.Range (3, 100000-3);
var parallelQuery =    from n in numbers.AsParallel()
                       where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0)
                       select n;

範囲分割ではパフォーマンスが低下する可能性がありますか?

このコード: (最初の100万個の数字の平方和を求める)

ParallelEnumerable.Range (1, 10000000).Sum (i => Math.Sqrt (i))

範囲パーティショニングで使用するより良い選択はありますか?

4

2 に答える 2

5

最初のサンプルでは、​​アイテムごとの所要時間は によって異なりますn。90000 の後の次の素数の検索は、11 の後の素数の検索よりも時間がかかります。

その結果、均等な範囲に分割すると、最後の範囲は最初の範囲よりもはるかに多くの作業を実行する必要があります。

2 番目のサンプルでは、​​オペレーションごとの時間は範囲全体で等しくなっています。したがって、範囲分割はうまく機能します。

于 2012-09-01T15:41:10.283 に答える