mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-11-11 21:39:52 +00:00
ggml : fix internal overflow in ggml_time_us on Windows (#1702)
Co-authored-by: grahameth <->
This commit is contained in:
parent
e7fe66e670
commit
efe0507632
18
ggml.c
18
ggml.c
@ -404,21 +404,27 @@ void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, size_t n) {
|
|||||||
//
|
//
|
||||||
|
|
||||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
static int64_t timer_freq;
|
static int64_t timer_freq, timer_start;
|
||||||
void ggml_time_init(void) {
|
void ggml_time_init(void) {
|
||||||
LARGE_INTEGER frequency;
|
LARGE_INTEGER t;
|
||||||
QueryPerformanceFrequency(&frequency);
|
QueryPerformanceFrequency(&t);
|
||||||
timer_freq = frequency.QuadPart;
|
timer_freq = t.QuadPart;
|
||||||
|
|
||||||
|
// The multiplication by 1000 or 1000000 below can cause an overflow if timer_freq
|
||||||
|
// and the uptime is high enough.
|
||||||
|
// We subtract the program start time to reduce the likelihood of that happening.
|
||||||
|
QueryPerformanceCounter(&t);
|
||||||
|
timer_start = t.QuadPart;
|
||||||
}
|
}
|
||||||
int64_t ggml_time_ms(void) {
|
int64_t ggml_time_ms(void) {
|
||||||
LARGE_INTEGER t;
|
LARGE_INTEGER t;
|
||||||
QueryPerformanceCounter(&t);
|
QueryPerformanceCounter(&t);
|
||||||
return (t.QuadPart * 1000) / timer_freq;
|
return ((t.QuadPart-timer_start) * 1000) / timer_freq;
|
||||||
}
|
}
|
||||||
int64_t ggml_time_us(void) {
|
int64_t ggml_time_us(void) {
|
||||||
LARGE_INTEGER t;
|
LARGE_INTEGER t;
|
||||||
QueryPerformanceCounter(&t);
|
QueryPerformanceCounter(&t);
|
||||||
return (t.QuadPart * 1000000) / timer_freq;
|
return ((t.QuadPart-timer_start) * 1000000) / timer_freq;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void ggml_time_init(void) {}
|
void ggml_time_init(void) {}
|
||||||
|
Loading…
Reference in New Issue
Block a user