2 Stimmen

Warum skaliert die Leistung meiner Anwendung nicht mit mehr CPUs?

Ich führe ein Softwarestück aus, das sehr parallel ist. Es gibt etwa 400 Befehle, die ich ausführen muss, die überhaupt nicht voneinander abhängen, also gabel ich sie einfach ab und hoffe, dass mehr CPUs bedeuten, dass mehr Prozesse pro Zeiteinheit ausgeführt werden.

Code:

foreach cmd ($CMD_LIST)
    $cmd &    # gabel es ab
end

Sehr einfach. Hier sind meine Testergebnisse:

Auf 1 CPU dauert dies 1006 Sekunden oder 16 Minuten 46 Sekunden.

Mit 10 CPUs dauerte dies 600 Sekunden oder 10 Minuten!

Warum würde die benötigte Zeit sich nicht (ungefähr) durch 10 teilen? Ich fühle mich hier betrogen =(

Bearbeitung – natürlich bin ich bereit, zusätzliche Details bereitzustellen, die Sie wissen möchten, bin mir jedoch nicht sicher, was relevant ist, weil ich in einfachsten Begriffen das hier mache.

3voto

thedayofcondor Punkte 3832

Sie gehen davon aus, dass Ihre Prozesse zu 100% CPU-gebunden sind.

Wenn Ihre Prozesse Festplatten- oder Netzwerk-E/A-Vorgänge ausführen, liegt der Engpass bei diesen Vorgängen, die nicht parallelisierbar sind (z. B. wird ein Prozess eine Datei mit 100k/s herunterladen, 2 Prozesse mit jeweils 50k/s, sodass keine Verbesserung zu erkennen ist. Sie könnten sogar eine Leistungseinbuße aufgrund von Overheads erfahren).

Siehe: Amdahls Gesetz - dadurch können Sie die Leistungsverbesserung bei der Parallelisierung von Aufgaben abschätzen, indem Sie das Verhältnis zwischen dem parallelisierbaren Teil und dem nicht-parallelisierbaren Teil kennen)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X