Autor Beitrag
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 24.09.05 14:04 
Man kann ja mittels GetThreadAffinityMask \ SetThreadAffinityMask die erlaubten logischen CPU Cores ermitteln \ setzen, auf denen ein Thread ausgeführt werden darf. Gibt es auch eine Möglichkeit, zu ermitteln, auf welcher CPU der eigene Thread zur Zeit läuft?

Angenommen:
Ich hab 2 CPUs
1: Athlon 64 DualCore
2: Athlon 64 SingleCore

Die Affinity Mask ist nun auf 101b (jeweils erster Core der CPUs) gesetzt und mein Programm kommt zur Prüfroutine. Wie bekomme ich nun raus "Programm läuft auf CPU 1\Core 1, bzw. CPU 2?

Hintergrund: Für die Abfrage der CPU Informationen muss ich gezielt bestimmte CPUs ansprechen und benötige daher eine Möglichkeit festzustellen, ob der Sheduler bereits auf die entsprechende CPU umgeschaltet hat:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
GetCPUInfo(ItemID: Byte): TCPUInfo;
begin
    GetAffinity //Um's wiederherzustellen
    While not aufRichtigerCPU Do
    Begin
        SetAffinity;
        Sleep(1); //Force Taskswitch
    end;

    //Query required Information

    SetAffinity // Wiederherstellen
end;


Mir ist klar, dass diese Nutzung zur Sicherstellung der Unterbrechungsfreiheit RealTime Priority benötigt, da einige Abfragen nicht unterbrochen werden dürfen.

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Muffin
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 99

WinXP Pro SP2
D7 Personal
BeitragVerfasst: Mo 26.09.05 15:02 
Vielleicht hilft dir diese Komponente weiter: www.aldyn.ru/products/cpu_usage/
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 26.09.05 18:22 
Danke erstmal für die Info, werd mir die Komponente mal bei Gelegenheit angucken. Da ich aber ATM noch kein Multi-Prozessor-System hab, kann ich die Sache derzeit nicht vollständig testen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 26.09.05 21:52 
user profile iconBenBE hat folgendes geschrieben:

Mir ist klar, dass diese Nutzung zur Sicherstellung der Unterbrechungsfreiheit RealTime Priority benötigt, da einige Abfragen nicht unterbrochen werden dürfen.


Unter Windows kannst du das überhaupt nicht sicherstellen, höchstens mit Kernelcode. Die Priorität Realtime ist eigentlich nur "highest".