Parallel alle Kerne nutzen! Wie?

18/06/2010 - 20:42 von Marc | Report spam
Hallo,

in einer parellelen Schleife bearbeite ich eine Bitmap.

Parallel.For(0, height, j =>
{
// Zeile bearbeiten!
});

Ich habe eine CPU mit 8 Kernen, wobei aber laut Windows Task Manager -
Leistung,
nur 4 benutzt werden! Wieso?
Ich besitze Demos, die ebenfalls parallele Aufgaben abarbeiten und
dabei alle 8 Kerne
voll auslasten!

An zuwenig Auslastung kann es nicht liegen!
Selbst bei riesengroßen Bitmaps tun 4 Kerne absolut gar nichts.
Der interne "Taskplaner" verteilt sàmtliche Last nicht auf alle 8
Kerne, sondern immer nur auf 4.

Wie kann ich alle Kerne dazu bewegen zu arbeiten?

Gruß
Marc
 

Lesen sie die antworten

#1 Thomas Scheidegger
18/06/2010 - 21:13 | Warnen spam
Hallo Marc


Parallel.For(0, height, j =>
CPU mit 8 Kernen, wobei aber ... nur 4 benutzt werden! Wieso?



Einfluss etwa per:
ParallelOptions.MaxDegreeOfParallelism
http://msdn.microsoft.com/en-us/lib...elism.aspx

àhnlich:
Parallel.ForEach(x, new ParallelOptions { MaxDegreeOfParallelism =
numProcs }

IMHO aber wirklich exakte (oft gar optimalste) Kontrolle ist wohl nur mit
'eigenen' Threads machbar,
die TPL (Parallel.For usw) ist stellenweise (noch?) ein 'Versuchsballon',
oder vielleicht gar nicht unbedingt der beste Ansatz für zukünftiges
Multi/Many-Core.
Ich persönlich mache ein grosses Fragezeichen für Lösungen auf
dieser Ebene (Syntax).


nicht auf alle 8 Kerne, sondern immer nur auf 4.



ist dies eine CPU mit 'Hyper-Threading' (oà)?
dann gibt es evtl. (ungeprüft) in der TPL entsprechende 'Limitierungen',
da eine Volllast des Core-Paares nicht unbedingt
das Optimum ist...



Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen