Multithreading von Software erhöhen

Waly

Cadet 2nd Year
Registriert
Apr. 2009
Beiträge
17
Hallo,

kann man im Allgemeinen die Thread Anzahl von Softwware erhöhen? Bei den meisten Tools ist mit 15 Threads of schluss, oder es wird langsamer dass mehr Threads oft in Windows10 nichts bringen.
Gibt es da vielleicht ein paar Möglichkeiten, die Thread Anzahl generell bei Software erhöhen ohne Hardwareänderungen?
 
ja als Programmierer der Software.
 
  • Gefällt mir
Reaktionen: PHuV, bytejunky, Z_E_R_O und 3 andere
ich sag mal so. ja es klappt bedingt.
allerdings NICHT in dem fall das du die threads die ein programm nutzt erhöhst, sondern indem du die anzahl der programme erhöhst.

beispiel:
du hast einen 16C/32T prozessor und dein programm für videoschnitt nutzt nur 8 threads. dann ruf das programm doch einfach mehrfach auf und lass jeder instanz eine andere arbeit machen. so kannst du deine cpu voll auslasten.
ansonsten gilt das was @icetom gesagt hat.
 
Waly schrieb:
Bei den meisten Tools ist mit 15 Threads of schluss, oder es wird langsamer dass mehr Threads oft in Windows10 nichts bringen.

Für einzelne Programme bieten mehrere Threads irgendwann keine Vorteile mehr.
Die Verwaltung parallel laufender Threads wird mit zunehmender Threadanzahl immer größer, sofern man diese Threads an einer gemeinsamen Aufgabe rechnen lässt. Irgendwann sind die Zugewinne an Leistung nur noch gering im Verhältnis zum Verwaltungsaufwand innerhalb des Programms.

Ideal sind immer Anwendungsfälle wo Threads unabhängig voneinander eine Aufgabe bearbeiten und wo der Managementaufeand dadurch wegfällt, aber diese Fälle sind recht überschaubar.

Waly schrieb:
Gibt es da vielleicht ein paar Möglichkeiten, die Thread Anzahl generell bei Software erhöhen ohne Hardwareänderungen?

Blende dir im Taskmanager mal die Spalte "Threads" ein und du wirst sehen dass sehr viele Programme bereits viele Threads starten. Das Problem ist halt, dass nicht alle Threads zu jeder Zeit etwas zu tun haben.
 
  • Gefällt mir
Reaktionen: adAstra
DocWindows schrieb:
Für einzelne Programme bieten mehrere Threads irgendwann keine Vorteile mehr.
Die Verwaltung parallel laufender Threads wird mit zunehmender Threadanzahl immer größer, sofern man diese Threads an einer gemeinsamen Aufgabe rechnen lässt. Irgendwann sind die Zugewinne an Leistung nur noch gering im Verhältnis zum Verwaltungsaufwand innerhalb des Programms.

Eben. Und manche Probleme lassen sich erst gar nicht parallelisieren weil entsprechende logische Abhängigkeiten bestehen.
 
Addiere A+B, addiere C+D, addiere E+F...
-> Parallelisierbar, kannst du auf mehrere Kerne verteilen und parallel ausführen.

Addiere A+B, nehme Ergebnis und addiere C, nehme Ergebnis und addiere D...
-> Nicht Parallelisierbar. Kannst du zwar verteilen, aber es wird zu jedem Zeitpunkt immer nur ein Kern rechnen und ein anderer auf das Ergebnis warten. Der Rest macht nix.

Wie hier schon dargestellt lassen sich manche dinge parallelisieren, andere nicht. Es kommt auf die Software an und was die Software machen muss. Wenn sich ein Problem nicht parallelisieren lässt, kann auch der Programmierer nichts dran ändern. und du erst recht nicht.
 
Schönes anderes Beispiel:

Ein Foto lässt sich einfach parallelisiert abdunkeln, indem bei 1 Megapixel 1 Million Threads jeweils einen Pixel in der Helligkeit um 10% runterrechnen. Ist natürlich nur ein Beispiel zum Verstehen. Nur ein Irrer würde versuchen 1 Thread pro Pixel anzustoßen.

Um aber z.B. einen linearen Farbverlauf in diesem Foto von links nach rechts zu berechnen, braucht der Algorithmus wahrscheinlich immer den Wert des vorhergehenden Pixels, weils ja sonst kein Verlauf werden kann. Das ist also nicht gut parallelisierbar. Jedoch ist hier etwas anderes parallelisierbar. Sofern man nicht nur einen 1 Pixel hohen Farbverlauf machen möchte, könnte man jede Reihe, sagen wir mal 10 Reihen für einen 10 Pixel dicken Farbverlauf, auf jeweils einen Thread verteilen und hätte so 10 Threads die parallel arbeiten.
 
Kommt darauf an, was das Programm machen soll.

Von einander unabhängige Berechnungen wie z.B. das rendern mit raytracing in cinebench kann man praktisch auf beliebig viele Threads aufteilen.

Jeder Thread berechnet eine Kachel....alles Super.

Auch Internet Browser können viele gleichzeitig....jedes Tab, jede Werbeeinblendung, usw. Kann ein eigener Thread sein.....nur mehrere Threads auf ein Problem loslassen wird schwer.

Spiele sind ein Problem weil da viele Abhängigkeiten existieren....und es chronologisch korrekt sein muss.

Da müssen sich die Threads unterhalten und das verursacht irgendwann mehr Arbeit, als man durch das aufteilen sparen kann..... Wenn man das aufteilen überhaupt hinbekommt.

Ich denke da ist noch einiges an versteckem Potential.... Vor allem die drawcalls sind nur selten gut aufgeteilt obwohl dx12 und vulkan das eigentlich könnten.
 
Zurück
Oben