- Latency analysis
- Meta state analysis
- Error analysis
- Label analysis
- Latency analysis
- Discovering
- Unrolling
- Scheduling and revamp latency
- Resource usage with sharing
- Transform
AccessExpr
andUpdateExpr
- II reduction in subexpressions
- Faster error analysis?
- Benchmarks
- Comparison with actual results
- Code generation
- Plotting changes
- Fix sequential loop partitioning
- Fix Simplifier may not reduce properly
- Fix unroll problem on some large factors
- Add conversion operators, and infer them automatically
- FSM and multiplexer resource utilization
- Consider what is a reasonable thing to do with non-terminating expressions
- {Possible} Better code generation by expanding expressions with locals
- Instead of sets of edges, consider using bags of edges to model dependency graph.
- Boolean-typed variables
- Relational domain (if possible)
- Multiple mantissa widths
- Fixed point format
- Fix and write more test cases
- More operators, needs parsing, transform rules, metasemantics analysis,
numerical analysis, resource usage analysis
- Comparisons?
- Power, exponentiation, logarithm
- Actually use
context.window_depth
andcontext.precision
- Deprecate
prec
arguments, because of context support
- Use Xilinx statistics, update it to support int to float conversion.
- [?] Fix caching because pickling is non-deterministic.
- [?] Fix some constant analysis bug found in
basal.soap
.- Temporary fix: avoid constant errors
- [-] Generated code has boolean expressions assigned to variables, consider other approaches to analysing conditionals because of this.
- [-] {Possible} Add dependency ordering utility function
- For labelling determinism
- For code generation node ordering determinism
- For loop merging
- Fix improper
out_vars
usage, workaround: use full variable list- Codegen not generating part of loop body because of
improper
out_vars
analysis - Resource usage analysis should not count unnecessary part of the
program, specified by
out_vars
Example:: greedy( flow_to_meta_state( 'y = 1\nwhile y < 10:\n x = x + 1 / y\n y = y + 1'), s['x':[0.0, 1.1]])
- Codegen not generating part of loop body because of
improper
- Ensure singly update paths
- Transitive distances
- Fix nested loop extraction
- Get rid of identifier based analysis, no longer required.
- Code generation
- Hierarchical dependency graph
- SSA code generation
- lazy execution of if statement branches
- Fusion
- Move fusion stuff to
soap.semantics.state.fusion
- Restructure
FixExpr
to usebool_expr
,meta_state
andvar
- Consider how to deal with duplicates. Example:
Program
n := n + 1; while (x < n) (x := x + 1)
gives [x ↦ fix(λe̲.(x < n ? e̲ % [x ↦ x + 1] : x)) % [x ↦ x, n ↦ n + 1], n ↦ n + 1] -
loop_fusion
-
inner_meta_fusion
-
outer_scope_fusion
- Move fusion stuff to
-
FixExpr
code generation-
DependencyGraph
External
expression special casing -
emit_FixExpr
-
- Fix crazy closure edges generated by
expression_dependencies
- Hierarchical dependency graph
- Fix nested loop code generation generating incorrect variable names
- Equivalent expression relations for the following expressions/operators:
-
SelectExpr
-
FixExpr
-
MetaState
-
- Special casing for
FixExpr
expansion, because simply expanding (unrolling) preserves floating-point semantics (same error) but double the resource usage, thus optimised away by the Pareto frontier. - Make use of loop invariants in optimisation
- Resource usage statistics generation with XST for the following
operators:
- Comparisons
- Branches (Multiplexer?)
- Divisions
- Squarer
- Power
- Exponentiation
- Logarithm
- Equivalence rules for the following operator/expression types
-
SelectExpr
- Distributivity
- Commutativity?
-
- Use fusion in resource usage analysis.
- Add
out_vars
to discoverer and labelling arguments.
- Add
- Check why short Pareto frontier on unrolling, since there should always be trade-offs between unroll levels. Turns out to be a bug in LUTs counting
- Check
inner_meta_state
fusion is using the correctout_vars
, potential bug when non-existent variable is used to fuse stuff. - Add a util function for code gen
- Integer types resource usage estimation
- Fix numerical analysis bugs in corner cases.
- Infinite bounds
- Bottoms and tops
- Float interval only rather than float interval + error interval in analysis results.
- Check if it keeps changing precision and invalidating caches.
- Optimization gives smaller Pareto set because of some minuscule
differences can no longer be detected when using
mpfr
instead ofmpq
.