0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-12-26 15:33:54 +01:00

ircd::gpt::gpu: Limit dispatch to the number of control frame buffers.

This commit is contained in:
Jason Volk 2022-10-18 22:10:04 +00:00
parent a50f9fbd1b
commit e89703aa97
2 changed files with 16 additions and 12 deletions

View file

@ -939,14 +939,9 @@ ircd::gpt::samp::tokenize()
bool
ircd::gpt::samp::dispatche()
{
if(!dispatch)
return false;
assert(accept < 0);
assert(count > 0);
assert(tokens >= count);
assert(cycle < count);
assert(dispatch > 0);
if(queue.size() >= dispatch)
return false;
if(cycle == 0)
{
@ -954,11 +949,20 @@ ircd::gpt::samp::dispatche()
ctrl.prof.released = prof::cycles();
}
assert(queue.size() < opts.frames);
queue.emplace_back(*this);
assert(tokens >= count);
desc.cached = tokens;
tokens += count >= tokens;
assert(count > 0);
count += 1;
assert(cycle < count);
cycle += 1;
assert(dispatch > 0);
dispatch -= 1;
return true;
}

View file

@ -1068,25 +1068,25 @@ ircd_gpt_accept(__local struct ircd_gpt_ctrl *const ctrl,
if(opts->limit == 0 && unprocessed)
{
accept = -1;
accept = accept >= 0? accept: -1;
dispatch = min((uint)remain, unproc);
}
if(opts->limit != 0 && !acceptable)
{
accept = -1;
accept = accept >= 0? accept: -1;
dispatch = max(dispatch, 1);
}
ctrl->accept = accept;
ctrl->dispatch = dispatch;
ctrl->dispatch = min((uint)dispatch, opts->frames);
}
int
ircd_gpt_accept_check(__local struct ircd_gpt_ctrl *const ctrl,
__constant const struct ircd_gpt_opts *const opts)
{
int best = 8;
int best = opts->frames;
for(uint i = 0; i < 4; ++i)
{
const int
@ -1110,7 +1110,7 @@ ircd_gpt_accept_match(__local struct ircd_gpt_ctrl *const ctrl,
const uint
len = ircd_gpt_accept_len(ctrl, opts, i),
n = min(ctrl->count, len),
maxlen = 8;
maxlen = opts->frames;
uint ret = len?: maxlen;
for(uint j = 1; j <= n; ++j)