Nested Parallel.ForEach Loops on the same list?
c#, parallel-processing, task-parallel-library
Solution
Couldn't you just have one Parallel and one normal loop? So either
Parallel.ForEach(list, delegate(A element1)
{
foreach(A element2 in list)
foo(element1, element2)
});
or
foreach(A element1 in list)
{
Parallel.ForEach(list, delegate(A element2)
{
foo(element1, element2);
});
}
Should speed it up as well. There was never going to be a thread per cycle anyway, so this would probably be just as fast or slightly slower than nested parallel loops.
Problem
I need to parallelize a method that does an exhaustive pairwise comparison on elements in a list. The serial implementation is straight-forward: ``` foreach (var element1 in list) foreach (var element2 in list) foo(element1, element2); ``` In this case, foo won't alter the state of element1 or element2. I know it's not safe to simply do nested Parallel.ForEach statements: ``` Parallel.ForEach(list, delegate(A element1) { Parallel.ForEach(list, delegate(A element2) { foo(element1, element2); }); }); ``` What would be the ideal way to implement this using the parallel tasks library?