Seite 1 von 1

Multi-CPU Unterstützung im AutoMATE: CPU Management

Verfasst: Mo Apr 18, 2011 4:46 pm
von theogott
Fast alle CPU's kommen heutzutage mit mehreren CPU Kernen daher.
Die neueren haben 4-8 Kerne und vielleicht sogar noch Hypethreading.

Läßt man Windows dabei freien Lauf, kann es vorkommen, dass man die Power der CPU nur teilweise ausschöpft.

So wird eine Applikation die vier Kerne bedient mit vier "echten Kernen" deutlich besser laufen, als wenn sie dann zwei echte Kerne und zwei "Hyperthreads" erwischt.

Ein anderes Beispiel wo man die Kerne zuweisen möchte sind, zeitkritischen Anwendungen, die von sich aus nur Single-threaded sind (also auf einem CPU Kern laufen).

Solche Anwendungen sind zum Beispiel Echtzeit-Maschinensteuerungen (Beckhoff), wo es darum geht, dass der Echtzeitkern möglichst "Im Cache" einer CPU bleibt und regelmäßig seine Rechenzeit-Quantums vom OS bekommt.

Die Isolation des Beckhoff-Systems auf eine CPU verbessert die Stabilität des Gesamtsystems, wenn auf dem gleichen PC noch eine andere CPU-intensive Anwendung wie zum Beispiel eine Bildverarbeitung läuft.

Auf der Seite haushaltsüblicher Anwendungen gehören dazu aber genauso auch Spielprogramme, wo es einfach nur um jeden Frame geht und um flüssiges Spielen.

Isoliert man das Spiel auf einen Kern, dann verwenden alle Windows-Programme, Anti-Virus, Firewall etc. den anderen Kern.

Dadurch kann das Spielprogramm zumeist im Cache der CPU verbleiben, was auch hier für flüssiges Spielen und für einen Stabilitätsgewinn sorgt.

Aktuell sind MultiCore CPU's defacto Marktstandard. Daher hat ACMP AutoMATE nun auch Befehle zum Zuweisen von Programmen an einzelne CPU-Kerne.

Und auch einen Befehl, um abzufragen, wie die aktuelle Zuweisung ist.

In Verbindung mit dem Befehl FEP\ und IEP\ kann man damit nun auch Programme auf einen Kern isolieren, was bei besagten Anwendungen zu einem Stabilitäts- und oft auch Performancegewinn führt.

Man könnte dafür auch extra Tools kaufen, die nichts anderes tun.
Wobei es im AutoMATE als Befehl schon eingebaut ist. Also in zwei der 800 Befehlen.

Code: Alles auswählen

"PAG\[Daten]" für "ProcessAffinityGet",
"PAS\[Daten]" für "ProcessAffinitySet",
"CPU\[Daten]" für "CPU-Usage".
Mit dem dritten Befehl, CPU\ , kann man die Auslastung des Systems ermitteln.

Beispielskript:

Code: Alles auswählen

SHK\3|27|1          '# Beenden mit Hotkey Shift+Escape
FOR\$$iii|1|200
 CPU\1              '# Prozessor/Kern 1
 VAR\$$cu1=$v1$
 CPU\2              '# Prozessor/Kern 2
 VAR\$$cu2=$v1$ 
 SBT\0|Kern 1: $$cu1$crlf$Kern 2: $$cu2#
 TDL\100
NXT\
@

'# Die Abfrage der CPU-Auslastung erfolgt alle $$int Sekunden. Wenn länger
'# als $$dur min unter $$use %, Messagebox anzeigen zwecks Herunterfahren
'# (bei Nichtbetätigung wird nach $$sec der Rechner heruntergefahren).
'# Die Datei kann aus jeder Rem-Datei mit der Zeile
'# LNR\cpu.rem*1,10,10,30
'# gestartet werden (die Zahlen sind Beispiele für individuelle Parameter;
'# wenn keine übergeben werden, greifen die Defaultparameter)

IEV\$$[X]       '# Prüfen, ob Parameter übergeben wurden
 '# übergebene Parameter
 SBD\*$$[X]*,*1
 VAR\$$int=$v1$ '# Abfrageintervall (sec)
 VAR\$$use=$v2$ '# Auslastung in %
 VAR\$$dur=$v3$ '# Zeit in min
 VAR\$$sec=$v4$ '# Wartezeit für AutoBox
 SBT\3|$$int,$$use,$$dur,$$sec#
ELSE
 '# Default-Parameter
 VAR\$$int=5    '# Abfrageintervall (sec)
 VAR\$$use=5    '# Auslastung in %
 VAR\$$dur=5    '# Zeit in min
 VAR\$$sec=15   '# Warezeit für AutoBox
EEV\
DTC\a|n|$$dur|$now$>$$aaa
:neu
CPU\            '# (durchschnittliche) Auslastung ermitteln
'SBT\2|$v1$
ISV\1<use>$$aaa
ESV\
CAS\$$int
GOTO neu
@
:shutdown
MBP\$$sec
MBX\Computer herunterfahren?|36
IMB\7           '# Nein gedrückt
 DTC\a|n|$$dur|$now$>$$aaa
 GOTO neu
EMB\
WSD\            '# Herunterfahren
@