Skip to content

Latest commit

 

History

History
143 lines (124 loc) · 5.31 KB

TODO.md

File metadata and controls

143 lines (124 loc) · 5.31 KB

Ultra Short Term TODOs

  • Latency analysis
    • Meta state analysis
    • Error analysis
    • Label analysis
    • Latency analysis
    • Discovering
    • Unrolling
    • Scheduling and revamp latency
    • Resource usage with sharing
    • Transform AccessExpr and UpdateExpr
    • II reduction in subexpressions
    • Faster error analysis?
    • Benchmarks
    • Comparison with actual results
    • Code generation
    • Plotting changes

Ultra Short Term FIXMEs

  • Fix sequential loop partitioning
  • Fix Simplifier may not reduce properly
  • Fix unroll problem on some large factors

Ugliness, fix if have the time to

  • 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.

Future Considerations

  • 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

Reminders

  • Actually use context.window_depth and context.precision
  • Deprecate prec arguments, because of context support

Can't remember / No longer relevant

  • 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]])

Completed

  • 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 use bool_expr, meta_state and var
      • 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
    • FixExpr code generation
      • DependencyGraph External expression special casing
      • emit_FixExpr
    • Fix crazy closure edges generated by expression_dependencies
  • 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.
  • 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 correct out_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 of mpq.