Skip to content

Commit e78be6d

Browse files
ggerganovjimbothigpen
authored andcommitted
metal : reduce rset heartbeat from 500ms -> 5ms (ggml-org#24074)
(cherry picked from commit 3d19986)
1 parent 63efa0f commit e78be6d

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

ggml/src/ggml-metal/ggml-metal-device.m

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,8 @@ void ggml_metal_encoder_end_encoding(ggml_metal_encoder_t encoder) {
547547
// number of seconds since the last graph computation
548548
// keep the residency sets wired for that amount of time to avoid being collected by the OS
549549
int keep_alive_s;
550+
int loops_per_s;
551+
int time_per_loop_ms;
550552

551553
// background heartbeat thread to keep the residency sets alive
552554
atomic_bool d_stop;
@@ -573,10 +575,13 @@ ggml_metal_rsets_t ggml_metal_rsets_init(void) {
573575
res->keep_alive_s = 3*60;
574576
}
575577

578+
res->time_per_loop_ms = 5;
579+
res->loops_per_s = 1000/res->time_per_loop_ms;
580+
576581
GGML_LOG_INFO("%s: creating a residency set collection (keep_alive = %d s)\n", __func__, res->keep_alive_s);
577582

578583
atomic_store_explicit(&res->d_stop, false, memory_order_relaxed);
579-
atomic_store_explicit(&res->d_loop, 2*res->keep_alive_s, memory_order_relaxed);
584+
atomic_store_explicit(&res->d_loop, res->loops_per_s*res->keep_alive_s, memory_order_relaxed);
580585

581586
res->d_group = dispatch_group_create();
582587

@@ -599,8 +604,7 @@ ggml_metal_rsets_t ggml_metal_rsets_init(void) {
599604
[res->lock unlock];
600605
}
601606

602-
// half a second
603-
usleep(500 * 1000);
607+
usleep(res->time_per_loop_ms * 1000);
604608
}
605609
}
606610
#endif
@@ -979,7 +983,7 @@ void ggml_metal_device_rsets_keep_alive(ggml_metal_device_t dev) {
979983
return;
980984
}
981985

982-
atomic_store_explicit(&dev->rsets->d_loop, 2*dev->rsets->keep_alive_s, memory_order_relaxed);
986+
atomic_store_explicit(&dev->rsets->d_loop, dev->rsets->loops_per_s*dev->rsets->keep_alive_s, memory_order_relaxed);
983987
}
984988

985989
struct ggml_metal_event {

0 commit comments

Comments
 (0)