Benutzung mehrerer CPU-Kernels durch Multithreading

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
g1b
Rookie
Rookie
Beiträge: 6
Registriert: Di, 16. Mär 2010 8:45

Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von g1b »

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von brandelh »

Ja, wenn man C++ oder Delphi nutzt UND sich die Aufgabe eignet (viele unabhängige Threads).
Nein, wenn es um Xbase++ Programme geht.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von Tom »

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.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von Tom »

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. :wink:
Herzlich,
Tom
RolandG
Rookie
Rookie
Beiträge: 8
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Benutzung mehrerer CPU-Kernels durch Multithreading

Beitrag von RolandG »

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...
Antworten