AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm an CPU-Kern binden

Ein Thema von Namenloser · begonnen am 3. Mai 2009 · letzter Beitrag vom 4. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Programm an CPU-Kern binden

  Alt 3. Mai 2009, 21:51
Hallo Delphianer,

ich benutze in einem Spiel von mir den Performancecounter um flüssige Bewegungen darzustellen. Der Performancecounter läuft ja bekanntlich nicht auf allen CPU-Kernen synchron, daher kommt es manchmal zu Rucklern, wenn das Programm von Windows zwischen den Kernen verschoben wird. Wenn ich das Programm mit dem Taskmanager an einen Kern bindet, läuft es flüssig.

Wie stellt man das per Programmcode an? Am liebsten wäre es mir sogar, wenn man Windows irgendwie sagen könnte, dass das Programm "nur im Notfall" oder z.B. maximal alle 2 Sekunden verschoben werden darf, statt den Kern fest vorzugeben.

Ich konnte über die Suche und Google nichts dazu finden.

Vielen Dank
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 21:55
In der CLR heißt diese Funktion SetThreadAffinityMask, also wirst du vermutlich unter "thread affinity" etwas brauchbares finden.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 21:55
MSDN-Library durchsuchenSetProcessAffinityMask() und MSDN-Library durchsuchenSetThreadAffinityMask()
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#4

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 22:20
Zitat von NamenLozer:
ich benutze ... den Performancecounter ...
wie DEN?
welchen denn?

der QueryPerformanceCounter ist aber kernunabhängig

und was RDTSC (Read Time-Stamp Counter) betrifft ...

vielleicht solltest du dir diese vorgehensweise nochmals überdenken.
meine CPU ist z.B. dynamisch getaket und selbst wenn du nun dein Programm an einen der Kerne bindest läuft somit der CPU-Counter (RDSTC) nicht gleihmäßig, da sich ja der CPU-Takt und somit auch der Takt des Time-Stamp-Counterständig ändert
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 22:51
Danke euch für die Antworten.

Ich habe jetzt noch MSDN-Library durchsuchenSetThreadIdealProcessor gefunden. Wäre das vielleicht eine bessere (weniger strikte) Lösung?

Zitat von himitsu:
der QueryPerformanceCounter ist aber kernunabhängig
Sicher? Ich dachte immer, dass QueryPerformanceCounter kernabhängig sei. Ich glaube, dass ich diese Information urpsprünglich aus diesem Beitrag im DGL-Forum hatte. Seitdem hatte ich immer im Hinterkopf, dass QueryPerformanceCounter bei Multicore problematisch ist. Das würde sich auch mit meiner eigenen Erfahrung decken, dass einige Spiele/Programme ruckeln, wenn man sie nicht manuell einem Kern zuweist. Das kann natürlich auch andere Gründe haben.

Kann hier mal jemand Klarheit schaffen?
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#6

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 23:02
Zitat von NamenLozer:
Kann hier mal jemand Klarheit schaffen?
Ja, Microsoft:

Zitat:
Remarks
On a multiprocessor computer, it should not matter which processor is called. However, you can get different results on different processors due to bugs in the basic input/output system (BIOS) or the hardware abstraction layer (HAL). To specify processor affinity for a thread, use the SetThreadAffinityMask function.
Fazit: Theoretisch sollte es egal sein, praktisch eben nicht. Daher machst du so auch nichts falsch.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#7

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 23:06
hmmm, ich dachte eigentlich bisher das Teil wäre unabhängig, hab aber nochma schnell nachgesehn

Zitat von MSDN:
MSDN-Library durchsuchenQueryPerformanceCounter

On a multiprocessor computer, it should not matter which processor is called. However, you can get different results on different processors due to bugs in the basic input/output system (BIOS) or the hardware abstraction layer (HAL). To specify processor affinity for a thread, use the SetThreadAffinityMask function.
[edit] zu langsam geguckt

nja, zumindestens sollte dessen Takt hoffentlich nicht von dynamisch getakteten CPU beeinflußt werden ... hoff ich mal ... hab's nie getestet, da ich ja dachte es wäre unabhängig
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#8

Re: Programm an CPU-Kern binden

  Alt 3. Mai 2009, 23:11
Zitat von himitsu:
nja, zumindestens sollte dessen Takt hoffentlich nicht von dynamisch getackteten CPU beeinflußt werden ... hoff ich mal ... hab's nie getestet, da ich ja dachte es wäre unabhängig


Zitat:
The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter, if one exists. The frequency cannot change while the system is running.
Es scheint also, dass Prozessoren, die dynamisch getaktet sind, dafür sorgen müssen, dass der Wert gleich bleibt. Oder der Wert ändert sich tatsächlich, müsste man vielleicht mal mit einer entsprechenden Anwendung testen.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Programm an CPU-Kern binden

  Alt 4. Mai 2009, 00:37
Zitat von Daniel G:
Zitat:
The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter, if one exists. The frequency cannot change while the system is running.
Es scheint also, dass Prozessoren, die dynamisch getaktet sind, dafür sorgen müssen, dass der Wert gleich bleibt. Oder der Wert ändert sich tatsächlich, müsste man vielleicht mal mit einer entsprechenden Anwendung testen.
Der bleibt konstant, auch bei Power Down. Das ist so von allen x86 CPU Anbietern spezifiziert und alle halten sich dran.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#10

Re: Programm an CPU-Kern binden

  Alt 4. Mai 2009, 00:41
Zitat von Muetze1:
Der bleibt konstant, auch bei Power Down. Das ist so von allen x86 CPU Anbietern spezifiziert und alle halten sich dran.
Ok, danke.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz