Benutzer:MovGP0/Parallel/Loops
Zur Navigation springen
Zur Suche springen
MovGP0 | Über mich | Hilfen | Artikel | Weblinks | Literatur | Zitate | Notizen | Programmierung | MSCert | Physik |
Parallel Loops[Bearbeiten | Quelltext bearbeiten]
Methods[Bearbeiten | Quelltext bearbeiten]
Loop State[Bearbeiten | Quelltext bearbeiten]
Loop Cancellation Token[Bearbeiten | Quelltext bearbeiten]
int n = ...;
var token = cancellationTokenSource.Token;
var options = new ParallelOptions {
CancellationToken = token
};
try
{
Parallel.For(0, n, options, i => {
if(token.IsCancellationRequested)
{
return;
}
// do some work
});
}
catch(OperationCancelledException)
{
// ...
}
Exception Handling[Bearbeiten | Quelltext bearbeiten]
Partitioner[Bearbeiten | Quelltext bearbeiten]
int n = ...;
var result = double[n];
Parallel.ForEach(Partitioner.Create(0, n), range =>
{
foreach(var index in range)
{
// ...
}
});
Degree of Parallelism[Bearbeiten | Quelltext bearbeiten]
var n = ...;
var options = new ParallelOptions() {
MaxDegreeOfParallelism = 2
};
Parallel.For(0, n, options, i => {
// ...
});
enumerable.AsParallel().WithDegreeOfParallelism(n)
Task-Local State[Bearbeiten | Quelltext bearbeiten]
int numberOfSteps = ...;
var result = new double[numberOfSteps];
var partitioner = Partitioner.Create(0, numberOfSteps);
var options = new ParallelOptions { /* ... */ };
Parallel.ForEach(partitioner, options, () => new Random(MakeRandomSeed()), (range, loopState, localRandom) =>
{
foreach(var index in range)
{
result[i] = localRandom.NextDouble();
return localRandom;
}
}, localRandom => { /* finally */ });
Note:
Task Scheduler[Bearbeiten | Quelltext bearbeiten]
int n = ...;
var taskScheduler = new TaskScheduler(/* ... */);
var options = new ParallelOptions
{
TaskScheduler = taskScheduler
};
Parallel.For(0, j, options, i => { /* ... */});
Antipatterns[Bearbeiten | Quelltext bearbeiten]Step size other than one[Bearbeiten | Quelltext bearbeiten]
Hidden loop body dependencies[Bearbeiten | Quelltext bearbeiten]
Small loop bodies with few iterations[Bearbeiten | Quelltext bearbeiten]
Processor oversubscription and undersubscription[Bearbeiten | Quelltext bearbeiten]
Parallel.ForEach on PLINQ Query[Bearbeiten | Quelltext bearbeiten]
Duplicates in Input Enumeration[Bearbeiten | Quelltext bearbeiten]
Design Notes[Bearbeiten | Quelltext bearbeiten]
|