Benutzung mehrerer CPU-Kernels durch Multithreading
Moderator: Moderatoren
Benutzung mehrerer CPU-Kernels durch Multithreading
Hallo,
ist es möglich, eine Applikation zu beschleunigen, indem durch Multithreading mehrere CPU-Kernels benützt werden?
Vielen Dank im Voraus für die Antwort
g1b
ist es möglich, eine Applikation zu beschleunigen, indem durch Multithreading mehrere CPU-Kernels benützt werden?
Vielen Dank im Voraus für die Antwort
g1b
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Ja, wenn man C++ oder Delphi nutzt UND sich die Aufgabe eignet (viele unabhängige Threads).
Nein, wenn es um Xbase++ Programme geht.
Nein, wenn es um Xbase++ Programme geht.
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Wie Hubert sagt: Xbase++-Programme können nicht auf mehreren Kernen gleichzeitig laufen. Man kann nur den Kern aussuchen, auf dem das Programm laufen soll. Ob das aber dann der mit der geringsten Belastung ist und damit wirklich was bringt ...
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Genau, JAN hat da völlig Recht, auf einem single User PC braucht man sich da keine Gedanken machen, der 1. Kern hat genug Power und verteilt andere Programme frei auf allen Prozessoren.
ABER wenn man eine Anwendung für Terminal Server schreibt, sollte man abfragen (einmalig) wie viele Kerne zur Verfügung stehen und dann beim Start per Zufallsgenerator einen auswählen.
Bei meinen Programmen, die fast 99 % auf User-Eingaben warten (SLE) spielte das aber nie eine Rolle, daher habe ich mir das alles erspart.
Im Task Manager des Servers sollen sie nie aufgefallen sein, auch wenn alle 12 Nutzer gleichzeitig darauf zugegriffen haben.
ABER wenn man eine Anwendung für Terminal Server schreibt, sollte man abfragen (einmalig) wie viele Kerne zur Verfügung stehen und dann beim Start per Zufallsgenerator einen auswählen.
Bei meinen Programmen, die fast 99 % auf User-Eingaben warten (SLE) spielte das aber nie eine Rolle, daher habe ich mir das alles erspart.
Im Task Manager des Servers sollen sie nie aufgefallen sein, auch wenn alle 12 Nutzer gleichzeitig darauf zugegriffen haben.
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Es wäre sicher auch im Einzelplatzfall sinnvoll, wenn sich Xbase++-Anwendungen verteilen würden, wenn man etwa intensiv mit Multithreading arbeitet, aber auch interne Threads könnten auf anderen Kernen laufen - ich denke da beispielsweise an den UI-Thread, der bei uns aufgrund des hohen Anteils an Ownerdrawing und HTML-Rendering ziemlich viel Kraft braucht. Allerdings ist denkbar, dass hier die Synchronisationsarbeit mehr Kraft kostet, als die Auslagerung an Benefit bringt.
In Terminal-Server-Situationen ist es unabdingbar, die Kerne im Bedarfsfall zu wechseln, wobei der Zufallsgenerator möglicherweise eine gute Wahlhilfe ist, aber je nach Topologie längst nicht ausreicht. Wenn, wie bei uns, zu 95 Prozent der Tageszeit mit unserer Anwendung gearbeitet wird, hilft eine Managementsystematik. Wir überwachen, wie viele Kerne von wie vielen Anwendern genutzt werden - und versuchen, das intelligent zu steuern. Beim Aufruf lastintensiver Module wird geprüft, ob weniger ausgelastete Kerne zur Verfügung stehen, usw. usf. Da steckt viel Arbeit drin, aber wir wären natürlich glücklich(er), wenn da mehr Unterstützung von der Sprache selbst käme. Siehe oben.
In Terminal-Server-Situationen ist es unabdingbar, die Kerne im Bedarfsfall zu wechseln, wobei der Zufallsgenerator möglicherweise eine gute Wahlhilfe ist, aber je nach Topologie längst nicht ausreicht. Wenn, wie bei uns, zu 95 Prozent der Tageszeit mit unserer Anwendung gearbeitet wird, hilft eine Managementsystematik. Wir überwachen, wie viele Kerne von wie vielen Anwendern genutzt werden - und versuchen, das intelligent zu steuern. Beim Aufruf lastintensiver Module wird geprüft, ob weniger ausgelastete Kerne zur Verfügung stehen, usw. usf. Da steckt viel Arbeit drin, aber wir wären natürlich glücklich(er), wenn da mehr Unterstützung von der Sprache selbst käme. Siehe oben.
Herzlich,
Tom
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2516
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Xbase++ bringt schon eine Möglichkeit mit das Programm bezw. der Runtime mitzuteilen dass diese mehr als einen CPU Kern nutzen soll.
Dazu werden dann spezielle Algorithmen initialisiert. Wegen den wechselseitig nötigen Ausschlüssen die bei der Nutzung eines Programm auf mehr als einer CPU nötig sind wird eine normale Xbase++ Anwendung um Größenordnungen langsamer ausgeführt als auf einer einzigen CPU. Wegen dieser genannten Seiteneffekte wird das ganze auch von Alaska nicht Supported.
Ich konnte mir bis jetzt damit helfen Aufgaben auf mehrere EXE Dateien aufzuteilen denen dann ein Kern oder ein Server zugeteilt wird. Oder auch mit dem Anschaffen bezw. Ersatz der Hardware durch leitstungsfähigere Modelle.
Wenn dies (die Performance) noch immer nicht ausreicht bleibt dann nur noch der Wechsel der Sprache bezw. der Umstieg auf C
Dazu werden dann spezielle Algorithmen initialisiert. Wegen den wechselseitig nötigen Ausschlüssen die bei der Nutzung eines Programm auf mehr als einer CPU nötig sind wird eine normale Xbase++ Anwendung um Größenordnungen langsamer ausgeführt als auf einer einzigen CPU. Wegen dieser genannten Seiteneffekte wird das ganze auch von Alaska nicht Supported.
Ich konnte mir bis jetzt damit helfen Aufgaben auf mehrere EXE Dateien aufzuteilen denen dann ein Kern oder ein Server zugeteilt wird. Oder auch mit dem Anschaffen bezw. Ersatz der Hardware durch leitstungsfähigere Modelle.
Wenn dies (die Performance) noch immer nicht ausreicht bleibt dann nur noch der Wechsel der Sprache bezw. der Umstieg auf C
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Das, was Carlo da skizziert, kann man auch ausprobieren. Jimmy hat das doch schon bis zum Gehtnichtmehr durchexerziert. TaskManager -> Details -> rechte Maustaste -> Zugehörigkeit festlegen -> alle Prozessoren wählen. Und dann schauen, was passiert.
Herzlich,
Tom
Tom
Re: Benutzung mehrerer CPU-Kernels durch Multithreading
Hallo Tom,
um die CPU optimaler zu nutzen arbeite ich seit vielen Jahren auch mit mehreren Exe. Für das Auswahlverfahren der CPU-Nr. habe ich manches ausprobiert (z.B. Belastungsabfrage).
Inzwischen gehe ich einfach her und zähle die CPU# weiter und vermeide die CPU #1 (2-3-4-2-3-4...).
Die CPU #1 auslassen ist aber auch nicht mehr sinnvoll seit Win 10 die Prozesse besser verteilt.
Den Versuch den ramses beschreibt dass Xbase mehrere Kernenutzen soll habe ich auch schon gemacht. Mächtig langsam das ganze - warum auch immer...
um die CPU optimaler zu nutzen arbeite ich seit vielen Jahren auch mit mehreren Exe. Für das Auswahlverfahren der CPU-Nr. habe ich manches ausprobiert (z.B. Belastungsabfrage).
Inzwischen gehe ich einfach her und zähle die CPU# weiter und vermeide die CPU #1 (2-3-4-2-3-4...).
Die CPU #1 auslassen ist aber auch nicht mehr sinnvoll seit Win 10 die Prozesse besser verteilt.
Den Versuch den ramses beschreibt dass Xbase mehrere Kernenutzen soll habe ich auch schon gemacht. Mächtig langsam das ganze - warum auch immer...