only wait for async signal on first lane

This commit is contained in:
jacob 2025-12-16 14:26:20 -06:00
parent a2226a2fb8
commit 778651411a
2 changed files with 25 additions and 25 deletions

View File

@ -39,30 +39,27 @@ void AsyncWorkerEntryPoint(WaveLaneCtx *lane)
AsyncTickCtx tick = ZI; AsyncTickCtx tick = ZI;
tick.arena = AcquireArena(Gibi(64)); tick.arena = AcquireArena(Gibi(64));
i64 last_signal = 0;
/* Tick forever */ /* Tick forever */
for (;;) for (;;)
{ {
AsyncWorkerCtx *w = &Base.async.worker; AsyncWorkerCtx *w = &Base.async.worker;
////////////////////////////// //////////////////////////////
//- Wait for signal //- Begin tick
/* TODO: Passive ticks that run every N seconds */
if (lane->idx == 0)
{
/* Wait for signal */
{
i64 cur_signal = Atomic64Fetch(&Base.async.signal.v); i64 cur_signal = Atomic64Fetch(&Base.async.signal.v);
while (cur_signal <= last_signal) while (cur_signal <= w->last_seen_signal)
{ {
FutexYieldNeq(&Base.async.signal.v, &cur_signal, sizeof(cur_signal)); FutexYieldNeq(&Base.async.signal.v, &cur_signal, sizeof(cur_signal));
cur_signal = Atomic64Fetch(&Base.async.signal.v); cur_signal = Atomic64Fetch(&Base.async.signal.v);
} }
last_signal = cur_signal; w->last_seen_signal = cur_signal;
}
////////////////////////////// /* Collect callbacks */
//- Collect async callbacks
if (lane->idx == 0)
{ {
Lock lock = LockE(&Base.async.mutex); Lock lock = LockE(&Base.async.mutex);
{ {
@ -77,6 +74,8 @@ void AsyncWorkerEntryPoint(WaveLaneCtx *lane)
} }
Unlock(&lock); Unlock(&lock);
} }
}
WaveSync(lane); WaveSync(lane);
////////////////////////////// //////////////////////////////

View File

@ -22,6 +22,8 @@ Struct(AsyncTickCtx)
Struct(AsyncWorkerCtx) Struct(AsyncWorkerCtx)
{ {
i64 last_seen_signal;
u64 callbacks_count; u64 callbacks_count;
AsyncTickCallback *callbacks; AsyncTickCallback *callbacks;
}; };
@ -34,7 +36,6 @@ Struct(AsyncCtx)
AsyncTickCallbackNode *last_callback_node; AsyncTickCallbackNode *last_callback_node;
AsyncWorkerCtx worker; AsyncWorkerCtx worker;
Atomic64Padded signal; Atomic64Padded signal;
}; };