Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ggml: Fix internal overflow in ggml_time_us on Windows #1702

Merged
merged 1 commit into from
Jun 5, 2023

Conversation

grahameth
Copy link
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.

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