1.9: CPU-Wechsel

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

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

1.9: CPU-Wechsel

Beitrag von Tom »

Huhu.

Hat jemand von Euch schon die Funktionen der neuen ASMP10.LIB/.DLL ausprobiert (CPULOAD)? Das Beispiel (TEST.EXE) liefert bei mir auf XP/Prof und mit einem 3-GHz-Pentium-4 (HT) zwar richtigerweise zwei Prozessoren, aber als Workload {0,0}, obwohl ich auf Prozessor 1 eine Xbase-App laufen habe, die den Prozessor voll auslastet. Als Antwort von _MPGetLeastUsed() erhalte ich immer Prozessor 1, ganz egal, was sonst noch so auf dem System läuft, zum Beispiel das Rendering eines Videos. Im Beispiel schaltet sich die CPU auch ordnungsgemäß um, aber meine App friert unmittelbar nach _MPSetCpu(2**(nProcessor-1)) ein (nProcessor ist der numerische Index des Prozessors mit der vermeintlich geringsten Last). Das funktionierte (bis auf die Messung des Workloads) mit den alten Funktionen (_sysSetCPU aus XPPRT1.DLL) ganz wunderbar, aber jetzt scheint der Wurm drin zu sein. Jemand eine Idee? :idea:
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 1.9: CPU-Wechsel

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben: Hat jemand von Euch schon die Funktionen der neuen ASMP10.LIB/.DLL ausprobiert (CPULOAD)? Das Beispiel (TEST.EXE) liefert bei mir auf XP/Prof und mit einem 3-GHz-Pentium-4 (HT) zwar richtigerweise zwei
em ... äh ... ASMP10.LIB ... woher kommt die ? (hab ich nicht ?)

gruss by OHR
Jimmy
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:

Beitrag von Tom »

Hallo, Jimmy.

Es gab beim Download (der Prof. Subscription, wie ich vermute) eine Datei namens "CPULOAD.ZIP", die enthielt alle nötigen Daten und Dateien. In der 1.8/1.82 standen die Funktionen _sysGetCPU() und _sysSetCPU() zur Verfügung, die man aber aus der XPPRT1.DLL explizit laden mußte. Wenn man _sysSetCPU() iterativ aufrief, konnte man die Anzahl der Prozessoren ermitteln, analog dann auch setzen, während des Programmlaufes. Die neuen Funktionalität sollen ergänzend die Workload der Prozessoren anzeigen und die am wenigsten ausgelastete CPU ermitteln. Tun sie aber irgendwie nicht ... ](*,)
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben: Es gab beim Download (der Prof. Subscription, wie ich vermute) eine Datei namens "CPULOAD.ZIP", die enthielt alle nötigen Daten und Dateien.](*,)
ah, das download hab ich noch gar nicht "ausgepackt"
schon mal mit dem sample :

C:\ALASKA\XPPW32\SOURCE\samples\solution\smp\

ausprobiert ob er "bis 2 zählen" kann ?

gruss by OHR
Jimmy
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:

Beitrag von Tom »

Hallo, Jimmy.

Genau diese Systematik habe ich zuvor genutzt. Sie funktioniert auch nach wie vor einwandfrei. Das Problem damit war, daß es keine Möglichkeit gab, die Auslastung des Prozessors zu ermitteln. Wir haben viele Kunden mit Terminal-Servern, die mit mehreren Prozessoren ausgestattet sind. Bisher haben wir über eine Flag die Anzahl der gestarteten Applikationsinstanzen mitgezählt und jeweils auf den Prozessor geladen, der die bisher geringste Anzahl Instanzen zu versorgen hatte. Das Problem damit war, daß zwar zwei Instanzen auf Prozessor 1 laufen konnten und eine auf 2, wodurch die nächste auch auf 2 geladen worden wäre, aber nicht berücksichtigt wurde, daß die zwei Instanzen auf Prozessor 1 möglicherweise überhaupt nichts taten, wohingegen die eine Instanz auf Prozessor 2 vielleicht eine monströse Auswertung fuhr und Vollast erzeugte. Die neuen Möglichkeiten sollten hier Abhilfe schaffen - einschließlich der Möglichkeit, während des Programmlaufs in einem neuen Thread alle dreißig Sekunden (oder so) die Lasten zu ermitteln und die App automatisch zu switchen.
Herzlich,
Tom
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Tom,

ist es nicht einfacher, mit den neuen Methoden die Last abzufragen und mit der alten den Prozessor zu setzen?
Gruß,

Andreas
VIP der XUG Osnabrück
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:

Beitrag von brandelh »

Hallo,

was habt Ihr denn für 'Megaauswertungen'. Meine Programme laufen auf 3 Citrix Rechnern konkurierend für etwa 200 Anwender, wobei nicht immer alle angemeldet und gerade mit dem Programm beschäftigt sind.

Dateneingabe erzeugt 0% Last. Nur beim Speichern (keine Sekunde) oder beim Drucken (eigener Thread oder regelmäßiger Aufruf von appevent mit Zeitparameter) sieht man kurz eine Prozessorbelastung steigen, beides ist aber kurz. Der Druckjob geht dann an einen Druckserver und der Citrixrechner ist wieder frei.
Ich bekomme regelmäßig bestätigt, dass meine Programme (Zins-, Renten-, Leistungsberechnung etc.) keine nennenswerte Belastung für das System darstellen. RAM sollte genug da sein. Jedenfalls kein Vergleich zu Word oder Excel.
Ich glaube nicht, dass die mehrere CPUs in den Rechner haben (sind nicht mehr ganz taufrisch).
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:

Beitrag von Tom »

Hallo, Andreas.
ist es nicht einfacher, mit den neuen Methoden die Last abzufragen und mit der alten den Prozessor zu setzen?
Habe ich in Erwägung gezogen, aber das ist ja die Krux: Mir wird immer Prozessor 1 als der am wenigsten ausgelastete angezeigt, und das Lastenarray ist immer {0,0} für beide Prozessoren. :(

@Hubert: Meine Applikation ist wirklich groß. Einzelne Auswertungen und Kalkulationen erzeugen hunderttausende Elemente umfassende multidimensionale Arrays, einige Druckjobs sind extrem intensiv, und einige Datenbankauswertungen und -erstellungen ebenfalls.
Herzlich,
Tom
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Tom,

ich habe die Test.exe aus dem CPULoad auf unserem Terminalserver laufen lassen und habe das gleiche Problem, wie bei dir. Das einzige, was funktioniert, ist die Funktion JumpProcessors()
Habe ich in Erwägung gezogen, aber das ist ja die Krux: Mir wird immer Prozessor 1 als der am wenigsten ausgelastete angezeigt, und das Lastenarray ist immer {0,0} für beide Prozessoren.
Gruß,

Andreas
VIP der XUG Osnabrück
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:

Beitrag von Tom »

Hallo, Andreas.

Ich habe ein Beispiel an den Alaska-Support gefunkt. :wink:
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Huhu *hicks*,
habt ihr mal die Antwort von Steffen in diesem Thread gelesen? Da gibt er interessante Hinweise zum Freigeben aller CPUs mittels des ARC-Files...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: habt ihr mal die Antwort von Steffen in diesem Thread gelesen? Da gibt er interessante Hinweise zum Freigeben aller CPUs mittels des ARC-Files...
typisch Steffen, ich frage mich bloss warum sowas nicht in den Help-File
steht ...

gruss by OHR
Jimmy
Antworten