Sonntag, 11. August 2013

Extremgenaue Zeitmessung mit Assemblerbefehl RDTSC bei neueren Intelprozessoren wieder möglich

Ich hatte den Assemblerbefehl RDTSC in früheren Zeiten mit einem Prozessor, sprich "Single Core", sehr gerne für genaue Zeitmessungen/Profiling von Delphi-Programmroutinen verwendet. Doch mit der Verwendung von Dual Core oder Mehrkernprozessoren und Stromsparfunktionen arbeitete RDTSC nicht mehr mit einer konstanten Rate, sodass damit verläßliche Zeitmessungen nicht mehr möglich wurden und verwendete stattdessen die Windows API Queryperformancecounter. Doch vor einiger Zeit habe ich bemerkt, dass der RDTSC bei neueren Prozessoren wieder mit einer konstanten Rate arbeitet. Es scheint so zu sein, dass ab der Intel Nehalem Generation der RDTSC ähnlich wie bei AMD mit konstanter Rate unabhängig von der aktuellen Taktfrequenz läuft. Dieses Feature wird bei Intel mit "invariant TSC" bezeichnet.