私は、配列を2つのリストに分割するために並列アルゴリズムを作成しました.1つの述語を満たす要素を含むものと、他のリストには満足しない要素が含まれています述語。これは注文保存アルゴリズムです。C#の並列パーティションアルゴリズム
私は以下のように書いていますが、ハードウェアの同時性から利益を得る機会を最大限に生かす方法を知りたいと思います。
static void TestPLinqPartition(int cnt = 1000000)
{
Console.WriteLine("PLINQ Partition");
var a = RandomSequenceOfValuesLessThan100(cnt).ToArray();
var sw = new Stopwatch();
sw.Start();
var ap = a.AsParallel();
List<int> partA = null;
List<int> partB = null;
Action actionA =() => { partA = (from x in ap where x < 25 select x).ToList(); };
Action actionB =() => { partB = (from x in ap where !(x < 25) select x).ToList(); };
Parallel.Invoke(actionA, actionB);
sw.Stop();
Console.WriteLine("Partion sizes = {0} and {1}", partA.Count, partB.Count);
Console.WriteLine("Time elapsed = {0} msec", sw.ElapsedMilliseconds);
}
ここで尋ねる方が良い:http://codereview.stackexchange.com/ – asawyer
私はベータが激しい車のクラッシュで死ぬことを願っています。 – cdiggins
それはもっと質問に変わったので、コードレビューのようには聞こえません。 – cdiggins