• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

CPU-Last in der Bildbearbeitung

Hi,
es ist derzeitig kein echtes Problem aber sehr auffällig.
http://susepaste.org/73109743

Wie man sieht arbeitet in dem Quadcore nur ein Kern mit voller Leistung, einer fast überhaupt nicht.
Es ist nicht so, dass ein Kern defekt ist, jeder der Vieren bringt alternierend die angezeigten hundert Prozent aber nicht zusammen mit anderen, einer schläft fast.
Habe ich irgendwo eine Möglichkeit eine Art Lastbalance der CPU einzurichten?

Da die Kiste meist nur bunte Bilder macht wenn ich schlafe, ist das jetzt eher eine Zufallsenddeckung, aber doch eigentlich nicht normal :???:

Gruß Ganymed
 
A

Anonymous

Gast
Die meisten Applikationen sind so geschrieben das sie nur von einer CPU abgearbeitet werden. Bei Bildbearbeitung ist das aufgrund der Libraries die dort benutzt werden meist auch der Fall. Die Geschwindigkeit mit der die Programme laufen ist dann nur abhängig von der CPU Einzelleistung und deren Geschwindigkeit. Bei mehreren CPU-Kernen arbeite dann immer nur einer am Bild/Script/was_auch immer und einer der anderen hat noch ein bisschen mit dem Betriebssystem und eventuell der grafischen Oberfläche zu tun. Die restlichen CPUs schlafen und wartet darauf, dass sie auch mal was abbekommen. Welche CPU jetzt was macht, unterliegt folgender Systematik. kommt ein neuer Prozess, oder wacht ein schlafender Prozess auf, der arbeiten will, wird die nächste freie CPU dafür genommen. Es ist also nicht so, das immer nur eine CPU arbeitet, arbeiten tun sie alle, ist wie bei den Taxis, die müssen auch immer der Reihe nach die Fahrgäste so nehmen wie sie kommen und können sich nicht aussuchen wieweit und wohin sie fahren wollen.

Das lässt sich so überhaupt nicht beeinflussen oder ändern, nur ausnutzen kann man das gut. Wenn man zB viele Bilder bearbeiten will, dann schreibt man ein Bearbeitungscript so, dass so viele Bearbeitungsprozesse immer parallel gestartet werden, wie man logische CPUs im Rechner hat, oder startet entsprechend mehrere Scripte oder Subscripte nebeneinander. Braucht man aber ein bisschen Übung um solche Scripte optimal zu schreiben, damit es nicht passieren kann, das dann immer neue Prozesse gestartet werden obwohl die anderen noch nicht fertig sind und letztlich extrem viele Prozesse laufen die alle an die CPU wollen und jeder davon das Potentioal hat eine CPU einen längeren Zeitraum 100% auslasten zu können. Dann läuft das im Endergebnis alles wieder langsamer ab, da ein Großteil der CPU Leistung dazu benutzt werden muss, um die viel zu vielen aktiven Prozesse zu verwalten.

Etwas anders ist das bei einigen Programmen (insbesondere sehr rechenintensiven zB Spielen oder zum Beispiel Videobearbeitung). hier ist es möglich das das Programm so geschrieben wurde das es aus mehren Prozessen besteht oder, das ein einzelner Prozess in mehreren Threads gleichzeitig abgearbeitet werden kann die dann auch auf verschiedenen CPUs gleichzeitig laufen können, (soweit mehrere CPUs vorhanden) und jeder Thread macht dann nur einen Teilbereich zB bei der Video Verarbeitung. Einer Entpackt das Originalformat, einer kodiert das Video um, einer filtert im Video noch was aus oder korrigiert die Farbe, und einer packt ein neues Videoformat, ein weiterer würde dann eventuell noch den Status oder das Ergebnis anzeigen können usw. Solche Prozesse sind dann oftmals in Mehrprozessor Maschinen leicht im top daran zu erkennen, dass Einzelprozesse mehr als 100% CPU Auslastung anzeigen. Aber prinzipell muss die paralelle Verarbeitung schon bei der Programmierung oder im ablaufenden Script eingearbeitet worden sein. Du selbst kannst da keinen Einfluss drauf.


robi
 
Danke robi, für die ausführliche Antwort - ist aber auch ernüchternd :???:
Eigentlich dachte ich, dass moderne Programme jetzt ohne Weiteres mit mehreren Kernen ja sogar mit mehreren CPUs klarkommen.

An so einem HDR-Panorama oder einem Fokusstapel rechnet meine etwas betagte Workstation schon mal länger als meine Nachtruhe dauert. :???:

Gruß Ganymed
 
Du kannst mit numactrl bzw. taskset die Prozessoraffinität eines Prozesses steuern. D.h. du kannst einer Anwendung z.B. explizit die CPU Kerne 3 u. 4 zuweisen.
 
A

Anonymous

Gast
spoensche schrieb:
Du kannst mit numactrl bzw. taskset die Prozessoraffinität eines Prozesses steuern. D.h. du kannst einer Anwendung z.B. explizit die CPU Kerne 3 u. 4 zuweisen.
Das bringt hier aber nichts und schon gar nicht solange noch reichlich CPUs nur untätig warten. Es gibt Dinge die kann man wunderbar parallel abarbeiten. Zum Beispiel Passwort knacken. da können viele Rechner oder viele Prozesse auf mehreren CPUs problemlos versuchen gleichzeitig an der selben Aufgabe zu arbeiten.
Bei der Bildbearbeitung ist das jedoch ein Problem. Wenn du aus mehreren Bildern ein Panoramabild errechnen willst, macht es wenig Sinn mit Einzelprozessen jeweils die Farben einzeln zu berechnen, oder das Bild in einzelne Sektoren zu zerlegen und diese Bild-Abschnitte einzeln berechnen zu lassen. Die Berechnung der Verzerrung und die optische Korrektur sowie die Angleichung von Farbe, Kontrast und Sättigung sowie die nachfolgende Anwendung der Filter die hierbei wohl den Hauptteil der Rechenzeit in Anspruch nehmen, müssen in einem festgelegtem Ablauf der Reihe nach immer auf das Gesamtbild berechnet werden. Das zeitaufwendige ist die dabei intern entstehende riesige Bilddatei die der Reihe nach durch sämtliche Standard-Einzelprozeduren muss. Ob das jetzt eine CPU alleine der Reihe nach macht, oder eine 2. CPU mit dem nächstem Schritt immer erst so lange warten muss bis die erste mit ihrer Arbeit fertig ist, bevor sie anfangen kann, macht hierbei wenig oder keinen zeitlichen Unterschied.
Für eine parallele Berechnung einer solchen hochspeziellen Aufgabe müsste ein ganz spezieller Lösungsalgorithmus erfunden und programmiert werden, der währe dann aber so speziell für diese eine Aufgabe optimiert, das man diesen Programmteil wohl für andere Aufgaben nicht ohne weiteres wieder verwenden kann und eventuell auch nicht alle schon fertigen Standard Bauteile aus den Bildbearbeitungs Libraries einfach mal so benutzen kann. Solcherart speziell hoch optimierter Bildbearbeitungs Programme sind sehr aufwendig programmiert und im Open Source nur selten bis gar nicht zu finden. Sowas kostet richtiges fettes Geld, ist dann auch mit Patenten und Lizenzen gepflastert.

Du kannst nur mehrere Bilder zu gleichen Zeit mit mehreren CPUs parallel berechnen lassen, in dem du das Programm mehrfach zur gleichen Zeit arbeiten lässt, aber die Zeit die ein einzelnes Bild auf dieser CPU mit diesem Programm benötigt, kann damit nicht verkürzt werden.

robi
 
Schade eigentlich,
hier gilt scheinbar nicht Alle (Kerne) für Einen (Bild). :???:

Na ja, mit etwas Anderem weiterarbeiten während ein Bild gerechnet wird, ist auch etwas Feines.

Die Zweite Instanz von Hugin für ein zweites Bild hatte zur Folge, dass die Systempartition durch das /tmp voll lief.
Als ich versuchsweise das Tmp-Verzeichnis auf eine separate Partition auslagerte war wieder alles gut aber selbst der dann noch zusätzlich aktivierte Firefox brauchte eine gefühlte Ewigkeit zum Start.
Dann liefen auch alle Kerne auf nahezu hundert Prozent :D

Für mich ist die Frage erst einmal beantwortet. Dann bewege ich mich halt in Grenzen der open Source.
(Die Fotoapparate haben heute einfach zu viele Pixel :D )
Danke,
Gruß Ganymed
 
Ganymed schrieb:
Die Zweite Instanz von Hugin für ein zweites Bild hatte zur Folge, dass die Systempartition durch das /tmp voll lief.

/tmp ist ein Mountpoint für das tmpfs und liegt i.d.R. größtenteils im RAM.

Ganymed schrieb:
Als ich versuchsweise das Tmp-Verzeichnis auf eine separate Partition auslagerte war wieder alles gut aber selbst der dann noch zusätzlich aktivierte Firefox brauchte eine gefühlte Ewigkeit zum Start.

Je nach größe deiner /tmp Partition wird der Kernel anfangen zu swappen und dementsprechend länger dauert das starten eines Programms.
[/quote]

Ganymed schrieb:
Für mich ist die Frage erst einmal beantwortet. Dann bewege ich mich halt in Grenzen der open Source.

Du bewegst dich nicht an der Grenze von Opensource Software, sondern an der Leistungsgrenze deiner Hardware.
 
Hey - sag nix gegen das alte Schätzchen :D - mehr geht auf dem Board nicht. Das war auch kein Lästern gegen OpenSource.
Aller höchstens ein RAID0 an einem SATA600-Controler auf einem PCIex-Slot.

Wenn ich hier im Forum sehe welche Schwierigkeiten hier einige mit ihrer Hardware haben, bin ich recht zufrieden.

Wenn Du den Screenshot im ersten Beitrag betrachtest - fehlt mir dort Speicher- , CPU- oder Festplattenleistung ?

Gruß Ganymed
 
Oben