Ich habe einen parallelen Algorithmus in C# geschrieben, um ein Array in zwei Listen, eine, die Elemente enthält, die ein bestimmtes Prädikat erfüllt und die andere Liste enthält die Elemente, die nicht erfüllt erfüllen das Prädikat. Es ist ein Ordnung konservierender Algorithmus.Parallel Partition Algorithmus in C#: Wie Parallelität zu maximieren
Ich habe es wie folgt geschrieben, aber ich möchte wissen, wie Sie die Möglichkeit maximieren können, von Hardware-Nebenläufigkeit zu profitieren.
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);
}
Ihre bessere weg fragen hier: http://codereview.stackexchange.com/ – asawyer
Ich hoffe, dass Beta in einem brennenden Autounfall stirbt. – cdiggins
Hat es mehr in Frage gestellt, so dass es nicht wie ein Code-Review klingt. – cdiggins