Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
TSC Namespace Reference

Access to the Timestamp Counter. More...

Enumerations

enum  Instruction {
  RDTSC,
  RDTSCP,
  CPUID_RDTSC,
  RDTSCP_CPUID,
  CR0_RDTSC
}
 

Functions

uint32_t ticks (bool use_pit=false)
 Returns the TSC frequency in ticks per milliseconds. More...
 
bool available (Instruction instruction=RDTSC)
 Check availability of TSC. More...
 
uint64_t nanoseconds (uint64_t delta)
 Convert a timestamp delta value to nanoseconds. More...
 
void delay (uint64_t us)
 Actively wait the provided waiting time. More...
 
uint64_t read (Instruction instruction=RDTSC)
 Reads the current timestamp counter. More...
 

Detailed Description

Access to the Timestamp Counter.

Intel Manual Vol. 3, 17.17 Time-Stamp Counter

Enumeration Type Documentation

◆ Instruction

Enumerator
RDTSC 

TSC Read with possible out-of-order execution.

RDTSCP 

Pseudo serializing.

CPUID_RDTSC 

Serializing (via CPUID) TSC read for begin of benchmark.

RDTSCP_CPUID 

Serializing (via CPUID) TSC read for end of benchmark.

CR0_RDTSC 

Serializing (via CR0) TSC read for end of benchmark if RDTSCP is not supported.

Function Documentation

◆ ticks()

uint32_t TSC::ticks ( bool  use_pit = false)

Returns the TSC frequency in ticks per milliseconds.

Parameters
use_pitEnforces the usage of the PIT if set, otherwise the processor infos are queried, at first.
Returns
Number of TSC ticks per milliseconds

◆ available()

bool TSC::available ( Instruction  instruction = RDTSC)

Check availability of TSC.

Parameters
instructionTest for the (unserialized) RDTSC or pseudo serializing RDTSCP instruction
Returns
true if RDTSC[P] is available

◆ nanoseconds()

uint64_t TSC::nanoseconds ( uint64_t  delta)

Convert a timestamp delta value to nanoseconds.

Parameters
deltaDelta between two timestamps
Returns
Equivalent time in nanoseconds

◆ delay()

void TSC::delay ( uint64_t  us)

Actively wait the provided waiting time.

Parameters
uswaiting time in microseconds

◆ read()

uint64_t TSC::read ( Instruction  instruction = RDTSC)
inline

Reads the current timestamp counter.

While reading the timestamp counter is quite easy, it is difficult to prevent out-of-order execution.

See also
How to Benchmark Code Execution Times on Intel® IA-32 and IA-64 Instruction Set Architectures [benchmark_code_execution.pdf]
Parameters
instructionInstruction(s) used to read timestamp counter
Returns
Timestamp in TSC ticks