Hint-directed fast arithmetic: loop-carried variable typing (round 2)
A loop binding whose init is double and whose every recur arg stays double (a bounded monotone fixpoint) is typed :double, so its arithmetic — and the recur args feeding it — emit fl-ops. Chez can then keep the accumulator unboxed in a float register across the loop. Integer loop vars stay untyped: a bare integer init never seeds :long (same rule as round 1), so a bignum-producing loop keeps arbitrary precision rather than overflowing a fixnum. recur-kinds walks only tail position (if/do-ret/let-body), stopping at nested loop/fn so a loop sees only its own recur. A/B on a loop-carried double accumulator: 735ms generic -> 500ms typed (1.47x), closing the gap to the JVM from ~3.3x to ~2.2x. The integer counter stays generic, which is most of the residual.
This commit is contained in:
parent
59905a71fd
commit
7d85b3892f
3 changed files with 207 additions and 153 deletions
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue