Higher-precision timing in Python

moves, metrics, and microseconds

cubing 🤝 computing

Agriya Khetarpal

QShare, Camp Quansight

08 October 2025

Operating system timing characteristics: Windows

 

BOOL QueryPerformanceCounter(
  [out] LARGE_INTEGER *lpPerformanceCount
);

 

Sub-microsecond resolution

Based on hardware timers (TSC, ACPI, or HPET), depending on your computer's processor and its architecture

Operating system timing characteristics: Linux

clock_gettime(CLOCK_MONOTONIC) via vDSO (virtual dynamic shared object), a small shared library used by the Linux kernel as an abstraction between user-space applications and kernel's syscalls

 

Nanosecond precision (if your hardware timer is stable)

Operating system timing characteristics: macOS (Apple Silicon)

mach_absolute_time(), a monotonic hardware timer

 

Nanosecond resolution, via CNTVCT (Counter-timer Virtual Count) registers

accuracy vs precision

time.time()

import time

 

def measure_solve():
    start = time.time()
    # solve    
    end = time.time()
    elapsed_time = end - start
   
    return elapsed_time

time.perf_counter()

import time

def measure_solve():
    start = time.perf_counter()
    # solve
    end = time.perf_counter()
    elapsed = end - start
   
    return elapsed
 

time.perf_counter_ns()

import time

def measure_solve():
    start = time.time()
    # solve    
    end = time.time()
    elapsed_time = end - start
   
    return elapsed_time

This is the most precise one out there!

uvx cubetimer
pipx run cubetimer

Future improvements?

Thank you!

Higher precision timing in Python and a speedcubing Textual app

By Agriya Khetarpal

Higher precision timing in Python and a speedcubing Textual app

  • 54