Alaska Software Inc. - nur einen Prozessor!?
Username: Password:
AuthorTopic: nur einen Prozessor!?
Markus Ratzesbergernur einen Prozessor!?
on Thu, 09 Jul 2015 10:54:02 +0200
Das XBase++ Programme nur einen Prozessor verwenden können habe ich 
schon mitbekommen. Jetzt habe ich aber das Problem, dass alle Programme 
die ich mit runshell (oder tdRunShell) starte auch nur einen, den ersten 
Prozessor #0 verwenden.

Mit XBase++ habe ich es nicht geschafft bei fremden laufenden Prozessen 
die Prozessor Affinity umzustellen. Selbst nicht dann wenn ich ein CMD 
File zum starten verwendet habe.

Manuell aus dem Explorer gestartet:
start /AFFINITY F c:\dev\devsrc\prog.exe /NORUNCHECK

funktioniert und es werden 4 Prozessoren verwendet. Starte ich das 
gleiche via Shell aus dem XBase++ Programm wird wieder nur Prozessor 0 
verwendet.

Wir haben das jetzt so lösen können, dass mein Kollege in seinen VC++ 
Programmen selbst beim Start die Prozessor Affinity umstellt.

Aktuell ist das für mich eines der größten Probleme von XBase++. Ein 
Programm das 2015 nur einen Prozessor verwenden kann ist eigentlich ein 
nogo.

Das einzige das geht ist, das ich das eigene Programm auf einen anderen 
Prozessor legen kann.

Ist da in absehbarer Zeit etwas geplant?

MfG
Markus Ratzesberger
Gerd BaumgartenRe: nur einen Prozessor!?
on Fri, 24 Jul 2015 17:04:38 +0200
Hallo Markus,

man kann die CPU aus dem Programm heraus umschalten.

Aktuelle CPU: exponent( dllCall( "xpprt1.dll" , DLL_CDECL , "_sysGetCPU" 
) ) +1
Anzahl der CPUs: val( getenv( "NUMBER_OF_PROCESSORS" ) )
CPU setzen: dllCall( "xpprt1.dll" , DLL_CDECL , "_sysSetCPU" , 2 ^ ( 
pa_CPU -1 ) )

Wir haben für Terminalserver eine recht umfangreiche Routine 
geschrieben, die zählt die Anzahl der laufenden Programme über alle 
Benutzer, und legt dann das aktuelle Programm (sich selbst) auf eine CPU.

Mehere CPUs nutzt ein Programm, dass in mehreren Threads arbeitet. Also 
Threads programmieren und mit den o.g. Tips die CPU einstellen.

Grüße
Ulrich

On 09.07.15 10:54, Markus Ratzesberger wrote:
> Das XBase++ Programme nur einen Prozessor verwenden können habe ich
> schon mitbekommen. Jetzt habe ich aber das Problem, dass alle Programme
> die ich mit runshell (oder tdRunShell) starte auch nur einen, den ersten
> Prozessor #0 verwenden.
>
> Mit XBase++ habe ich es nicht geschafft bei fremden laufenden Prozessen
> die Prozessor Affinity umzustellen. Selbst nicht dann wenn ich ein CMD
> File zum starten verwendet habe.
>
> Manuell aus dem Explorer gestartet:
> start /AFFINITY F c:\dev\devsrc\prog.exe /NORUNCHECK
>
> funktioniert und es werden 4 Prozessoren verwendet. Starte ich das
> gleiche via Shell aus dem XBase++ Programm wird wieder nur Prozessor 0
> verwendet.
>
> Wir haben das jetzt so lösen können, dass mein Kollege in seinen VC++
> Programmen selbst beim Start die Prozessor Affinity umstellt.
>
> Aktuell ist das für mich eines der größten Probleme von XBase++. Ein
> Programm das 2015 nur einen Prozessor verwenden kann ist eigentlich ein
> nogo.
>
> Das einzige das geht ist, das ich das eigene Programm auf einen anderen
> Prozessor legen kann.
>
> Ist da in absehbarer Zeit etwas geplant?
>
> MfG
> Markus Ratzesberger
Hubert BrandelRe: nur einen Prozessor!?
on Tue, 11 Aug 2015 15:57:33 +0200
solange die CMD die EXE stoppen muss, sind beide auf dem gleichen 
Prozessor, wenn man aber asyncron arbeitet so scheinen auch mehrere 
Prozessoren benutzt zu werden, falls die EXE in der CMD das zuläßt.

Ich meine auch gesehen zu haben (richtig prüfen kann ich es nicht), dass 
eine Anwendung die QuickPDF (delphi dll) aufruft auch 2 Kerne benutzt ...

Ansonsten ist eine reine Zufallsvergabe beim Prozessorkern eine gute Lösung.