Skip to content

Commit e089c9e

Browse files
committed
chunk getcoeff
1 parent cb4c04a commit e089c9e

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

src/systems/alias_elimination.jl

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,31 @@ end
383383
swap!(v, i, j) = v[i], v[j] = v[j], v[i]
384384

385385
function getcoeff(vars, coeffs, var)
386-
for (vj, v) in enumerate(vars)
387-
v == var && return coeffs[vj]
386+
Nvars = length(vars)
387+
i = 0
388+
chunk_size = 8
389+
@inbounds while i < Nvars - chunk_size + 1
390+
btup = let vars = vars, var = var, i = i
391+
ntuple(Val(chunk_size)) do j
392+
@inbounds vars[i + j] == var
393+
end
394+
end
395+
inds = ntuple(Base.Fix2(-, 1), Val(8))
396+
eights = ntuple(Returns(8), Val(8))
397+
inds = map(ifelse, btup, inds, eights)
398+
inds4 = (min(inds[1], inds[5]),
399+
min(inds[2], inds[6]),
400+
min(inds[3], inds[7]),
401+
min(inds[4], inds[8]))
402+
inds2 = (min(inds4[1], inds4[3]), min(inds4[2], inds4[4]))
403+
ind = min(inds2[1], inds2[2])
404+
if ind != 8
405+
return coeffs[i + ind + 1]
406+
end
407+
i += chunk_size
408+
end
409+
@inbounds for vj in (i + 1):Nvars
410+
vars[vj] == var && return coeffs[vj]
388411
end
389412
return 0
390413
end

0 commit comments

Comments
 (0)