Skip to content

ggml: Fix internal overflow in ggml_time_us on Windows#1702

Merged
ggerganov merged 1 commit intoggml-org:masterfrom
grahameth:timeoverflow
Jun 5, 2023
Merged

ggml: Fix internal overflow in ggml_time_us on Windows#1702
ggerganov merged 1 commit intoggml-org:masterfrom
grahameth:timeoverflow

Conversation

@grahameth
Copy link
Copy Markdown
Contributor

The implementation of ggml_time_us() on Windows can realistically overflow and produce wrong data (It happened to me and messed up a bunch of benchmark results).

With a timer frequency of 10,000,000 ticks per second (which I have on my machine) the internal result of the multiplication (t.QuadPart * 1000000) overflows the 63 bits after 2^63 / 1000000 / 10000000 seconds. That's about 10.5 days. Because that product is then divided by the timer frequency, the upper bits are essentially lost and the calculated timings from using this function will be wrong.

This PR changes the code so that the startup time is subtracted. That means it won't overflow when the uptime of the OS crosses these 10 day, but only when the process runs longer than 10 days.

Ideally, you'd want to use something like MulDiv for 64-bits to prevent the overflow entirely, but I couldn't find a simple implementation for that.

@ggerganov ggerganov merged commit efe0507 into ggml-org:master Jun 5, 2023
Seunghhon pushed a commit to Seunghhon/llama.cpp that referenced this pull request Apr 26, 2026
phuongncn pushed a commit to phuongncn/llama.cpp-gx10-dgx-sparks-deepseekv4 that referenced this pull request Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants