Schlechte Skalierbarkeit von Parallelcode

Kürzlich habe ich analysiert, wie meine parallelen Berechnungen auf 16-Kern-Prozessoren tatsächlich beschleunigt werden. Und die allgemeine Formel, die ich gezogen habe - je mehr Threads Sie haben, desto weniger Geschwindigkeit pro Kern erhalten Sie - ist mir peinlich. Hier sind die Diagramme meiner CPU-Auslastung und Verarbeitungsgeschwindigkeit:

Sie sehen also, dass die Prozessorlast zunimmt, die Geschwindigkeit jedoch viel langsamer. Ich möchte wissen, warum ein solcher Effekt auftritt und wie man den Grund für unskalierbares Verhalten findet. Ich habe dafür gesorgt, zu verwendenServer-GC-Modus. Ich habe dafür gesorgt, dass ich den entsprechenden Code parallelisiere, sobald der Code nichts weiter tut als

Lädt Daten aus dem RAM (Server hat 96 GB RAM, Auslagerungsdatei sollte nicht getroffen werden)Führt keine komplexen Berechnungen durchSpeichert Daten im RAM

Ich habeprofiliert Ich habe meine Bewerbung sorgfältig bearbeitet und keine Engpässe festgestellt - es sieht so aus, als würde jeder Vorgang langsamer, wenn die Anzahl der Threads zunimmt.

Ich stecke fest, was stimmt mit meinem Szenario nicht?

Ich verwende die .Net 4 Task Parallel Library.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage