Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] View of /branches/vis15/src/compiler/TODO
ViewVC logotype

View of /branches/vis15/src/compiler/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5116 - (download) (annotate)
Tue Jul 18 21:32:07 2017 UTC (23 months, 4 weeks ago) by jhr
File size: 3981 byte(s)
  fixes for printing: use std::alphabool to get "true"/"false" for
  booleans and set the output precision based on the default
  numeric precision
========================================================
Bugs:
============================

========================================================
High-priority things to fix:
============================

High priority FIXMEs (from FIXME.md)

  - support dynamic sequences of sequences (compiler/cxx-util)
  - RealToInt translation when the argument has multiple
    pieces (compiler/low-to-tree)
  - Support IR operators Clamp, MapClamp, and Lerp on
    higher-order tensor types (mid-to-low.sml).
  - Handle AST.E_ParallelMap expressions (simplify.sml)
  - generate better code for outputing empty nrrds
    (gen-outputs.sml)
  - handle create iterations over sequences (gen-world.sml)
  - check all of the nrrd-file metadata that the compiler uses
    when loading an image file (image-inst.hxx)

redirection of printing for libraries

migrate source code to github

Use of numStable(), etc. in strand methods means that we
need to run in BSP mode!

Figure out the memory-management policy for nrrd data
that is passed into a generated library.  Should we make
a copy of the data or require that the caller keep the
data live as long as the world object exists?

Add flag for ensuring deterministic execution for the parallel
target (e.g., "--force-determinism" or something similar).
We should also add a warning message for when the target
is "parallel" and the program has new/die.

========================================================
Medium-priority things to fix:
============================

Improve parallel runtime in various ways:
  - more efficient barrier sync and spin locks
  - parallel tree building
  - parallel reduction

A configuration/compiler support for producing shared-libraries.
This feature is required to use Diderot libraries with Python.

Name-mangle Diderot identifiers that have non-ASCII
characters in their names (e.g., greek letters)

Support for map-reduce fusion

Support for variance

Direct dynamic sequence initialization from E_Seq

Mechanism to dump basis library for documentation purposes

Apply value numbering to globals to eliminate redundancy (e.g., inside3 test).

Support vector arguments to user functions and strand-creation

Bad propagation of error type leads to an extra error message
Also, when overloading fails, we should print a list of candidates
(see bug008.diderot).

Better naming of meta variables in types when printing error messages.

Code generation improvements:
  complex conditionals
  more use of vector arithmetic
  constant propagation

Allow field definitions at strand scope; to do so means that we need
to prune them away later (since fields don't have a runtime
representation).  We will also need to introduce new shadow
parameters when the field is defined in terms of a parameter.
E.g.,
	strand S (real r) { field#2(3)[] G = r*F; ... }

Fuse run function and update method for non-bsp programs (this optimization
will reduce memory traffic and should allow for better optimization of
the generated C++ code)

Small space leak with image wrappers (the wrappers are necessary because
border control produces multiple globals that are the same underlying
image).  Two possible solutions:

  1) runtime reference counting, but this has to be both thread safe
     and avoid introducing a serial bottleneck (as was the case
     when we used std::unique_ptr<> as a wrapper.

  2) do some sort of alias analysis in the compiler to coalesce the
     multiple image globals into a single global.  Then we can just
     use a descructor for the image.

========================================================
Low-priority things to fix:
============================

Typechecker overhaul: use poly-types for basis, but mono-types for
typechecking expressions (e.g., SimpleTypes).  Use matching instead
of unification.  This approach would require passing the expected type
down into expression checking, but would allow a richer notation for
poly types (e.g., min constraints).

Add tuple types.


root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0