Skip to content

valarauca/amd64_timer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

x86/x86_64 Timer

This is a low level CPU cycle count timer. What it returns is the value held within the processor time stamp counter. This counter is incremented every CPU cycle.

Considerations

When bench marking with this crate you want to assure your CPU is set to a fixed multipler. This mean Intel Turbo Boost must be OFF. You can do this in via the bios.

This crate requires Rust Nightly (as it uses llvm_asm! macro), you will need to enable !#[feature(llvm_asm)].

Functions

fn ticks() -> u64;

This returns the number of CPU cycles that have passed since the last time the CPU counter has rolled over. OR Power on.

In Depth Documentation

This function step by step:

#Intel Syntax

ldfence		#cheapest fence on x86
		    #this prevents instruction re-ordering
		    #ensures all loads are complete
		    #on x64 this is done for you by the memory model
		    #so this fence is _free_
		    #this fence is here to prevent speculative
		    #execution of rdtsc.

rdtsc		#puts timestamp counter values into the low
		    #32bits of rdx and rax.


shl rdx, $32	#move the high section, into the high 32bits of
		        #its register

or rax, rdx	#combine bits

retq		#leave function

Reference

License

Consider this crate licensed under the MIT.

x86 support

This crate does implement 32bit x86 support, but it is untested.

About

Count CPU cycles

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages