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

SCM Repository

[diderot] Annotation of /trunk/TODO
ViewVC logotype

Annotation of /trunk/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1156 - (view) (download)

1 : jhr 1115 NOTE: GLK's approximate ranking of 5 most important tagged with
2 :     [GLK:1], [GLK:2], ...
3 :    
4 : glk 1156 ========================
5 :     SHORT TERM ============= (*needed* for streamlines & tractography)
6 :     ========================
7 : jhr 1115
8 :     [GLK:1] Add sequence types (needed for evals & evecs)
9 :     syntax
10 :     types: ty '{' INT '}'
11 :     value construction: '{' e1 ',' … ',' en '}'
12 :     indexing: e '{' e '}'
13 : glk 1156 [GLK:1] evals & evecs for symmetric tensor[3,3] (requires sequences)
14 : jhr 1115
15 : glk 1156 ability to emit/track/record variables into dynamically re-sized
16 :     runtime buffer
17 : jhr 1115
18 : glk 1156 tensor fields: convolution on general tensor images
19 : jhr 1115
20 : glk 1156 ========================
21 :     SHORT-ISH TERM ========= (to make using Diderot less annoying/slow)
22 :     ========================
23 : jhr 1115
24 :     value-numbering optimization
25 :    
26 : glk 1156 proper handling of stabilize method
27 : jhr 1115
28 :     [GLK:2] Save Diderot output to nrrd, instead of "mip.txt"
29 :     For grid of strands, save to similarly-shaped array
30 :     For list of strands, save to long 1-D (or 2-D for non-scalar output) list
31 :     For ragged things (like tractography output), will need to save both
32 :     complete list of values, as well as list of start indices and lengths
33 :     to index into complete list
34 :    
35 :     [GLK:3] Use of Teem's "hest" command-line parser for getting
36 :     any input variables that are not defined in the source file
37 :    
38 : glk 1120 [GLK:4] ability to declare a field so that probe positions are
39 :     *always* "inside"; with various ways of mapping the known image values
40 :     to non-existant index locations. One possible syntax emphasizes that
41 :     there is a index mapping function that logically precedes convolution:
42 : glk 1156 F = bspln3 ⊛ (img clamp)
43 : glk 1120 F = bspln3 ⊛ (img ◦ repeat)
44 :     F = bspln3 ⊛ (img ◦ mirror)
45 :     where "◦" or "∘" is used to indicate function composition
46 : jhr 1115
47 : glk 1156 Use ∇⊗ etc. syntax
48 :     syntax [DONE]
49 :     typechecking
50 :     IL and codegen
51 : jhr 1115
52 : glk 1156 Add a clamp function, which takes three arguments; either three scalars:
53 :     clamp(x, minval, maxval) = max(minval, min(maxval, x))
54 :     or three vectors of the same size:
55 :     clamp([x,y], minvec, maxvec) = [max(minvec[0], min(maxvec[0], x)),
56 :     max(minvec[1], min(maxvec[1], y))]
57 :     This would be useful in many current Diderot programs.
58 :     One question: clamp(x, minval, maxval) is the argument order
59 :     used in OpenCL and other places, but clamp(minval, maxval, x)
60 :     would be more consistent with lerp(minout, maxout, x).
61 : jhr 1115
62 : glk 1156 Level of differentiability in field type should be statement about how
63 :     much differentiation the program *needs*, rather than what the kernel
64 :     *provides*. The needed differentiability can be less than or equal to
65 :     the provided differentiability.
66 : jhr 1115
67 : glk 1156 Add type aliases for color types
68 :     rgb = real{3}
69 :     rgba = real{4}
70 : jhr 1115
71 :     ==============================
72 : glk 1156 MEDIUM TERM ================== (*needed* for particles)
73 : jhr 1115 ==============================
74 :    
75 :     run-time birth of strands
76 :    
77 :     "initially" supports lists
78 :    
79 :     "initially" supports lists of positions output from
80 :     different initalization Diderot program
81 :    
82 : glk 1156 Communication between strands: they have to be able to learn each
83 :     other's state (at the previous iteration). Early version of this can
84 :     have the network of neighbors be completely static (for running one
85 :     strand/pixel image computations). Later version with strands moving
86 :     through the domain will require some spatial data structure to
87 :     optimize discovery of neighbors.
88 : jhr 1115
89 : glk 1156 ============================
90 :     MEDIUM-ISH TERM ============ (to make Diderot more useful/effective)
91 :     ============================
92 : jhr 1115
93 : glk 1156 Python/ctypes interface to run-time
94 : jhr 1115
95 : glk 1156 support for Python interop and GUI
96 : jhr 1115
97 : glk 1156 Alow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C,
98 :     provided that X*Y, X/Y, X+Y, X-Y are already supported.
99 :     Nearly every Diderot program would be simplified by this.
100 : jhr 1115
101 : glk 1156 Put small 1-D and 2-D fields, when reconstructed specifically by tent
102 :     and when differentiation is not needed, into faster texture buffers.
103 :     test/illust-vr.diderot is good example of program that uses multiple
104 :     such 1-D fields basically as lookup-table-based function evaluation
105 :    
106 :     expand trace in mid to low translation
107 :    
108 :     extend norm (|exp|) to all tensor types [DONE for vectors and matrices]
109 :    
110 :     determinant ("det") for tensor[3,3]
111 :    
112 : jhr 1115 add ":" for tensor dot product (contracts out two indices
113 :     instead of one like •), valid for all pairs of tensors with
114 :     at least two indices
115 :    
116 : glk 1156 test/uninit.diderot:
117 :     documents need for better compiler error messages when output variables
118 :     are not initialized; the current messages are very cryptic
119 : jhr 1115
120 :     want: warnings when "D" (reserved for differentiation) is declared as
121 :     a variable name (get confusing error messages now)
122 :    
123 : glk 1156 ==============================
124 :     LONG TERM ==================== (make Diderot more interesting/attractive from
125 :     ============================== a research standpoint)
126 : jhr 1115
127 : glk 1156 IL support for higher-order tensor values (matrices, etc).
128 :     tensor construction [DONE]
129 :     tensor indexing [DONE]
130 :     tensor slicing
131 :     verify that hessians work correctly [DONE]
132 : jhr 1115
133 : glk 1156 Better handling of variables that determines the scope of a variable
134 :     based on its actual use, instead of where the user defined it. So,
135 :     for example, we should lift strand-invariant variables to global
136 :     scope. Also prune out useless variables, which should include field
137 :     variables after the translation to mid-il.
138 :    
139 :     test/vr-kcomp2.diderot: Add support for code like
140 :     (F1 if x else F2)@pos
141 :     This will require duplication of the continuation of the conditional
142 :     (but we should only duplicate over the live-range of the result of the
143 :     conditional.
144 :    
145 :     [GLK:5] Want: non-trivial field expressions & functions:
146 :     image(2)[2] Vimg = load(...);
147 :     field#0(2)[] Vlen = |Vimg ⊛ bspln3|;
148 :     to get a scalar field of vector length, or
149 :     field#2(2)[] F = Fimg ⊛ bspln3;
150 :     field#0(2)[] Gmag = |∇F|;
151 :     to get a scalar field of gradient magnitude, or
152 :     field#2(2)[] F = Fimg ⊛ bspln3;
153 :     field#0(2)[] Gmsq = ∇F•∇F;
154 :     to get a scalar field of squared gradient magnitude, which is simpler
155 :     to differentiate. However, there is value in having these, even if
156 :     the differentiation of them is not supported (hence the indication
157 :     of "field#0" for these above)
158 :    
159 :     Want: ability to apply "normalize" to a field itself, e.g.
160 :     field#0(2)[2] V = normalize(Vimg ⊛ ctmr);
161 :     so that V(x) = normalize((Vimg ⊛ ctmr)(x)).
162 :     Having this would simplify expression of standard LIC method, and
163 :     would also help express other vector field expressions that arise
164 :     in vector field feature exraction.
165 :    
166 :     Permit fields composition, especially for warping images by a
167 :     smooth field of deformation vectors
168 :     field#2(3)[3] warp = bspln3 ⊛ warpData;
169 :     field#2(3)[] F = bspln3 ⊛ img;
170 :     field#2(3)[] Fwarp = F ◦ warp;
171 :     So Fwarp(x) = F(warp(X)). Chain rule can be used for differentation
172 :    
173 : glk 1155 Allow the convolution to be specified either as a single 1D kernel
174 :     (as we have it now):
175 :     field#2(3)[] F = bspln3 ⊛ img;
176 :     or, as a tensor product of kernels, one for each axis, e.g.
177 :     field#0(3)[] F = (bspln3 ⊗ bspln3 ⊗ tent) ⊛ img;
178 :     This is especially important for things like time-varying data, or
179 :     other multi-dimensional fields where one axis of the domain is very
180 :     different from the rest. What is very unclear is how, in such cases,
181 :     we should notate the gradient, when we only want to differentiate with
182 :     respect to some of the axes.
183 :    
184 : jhr 1115 co- vs contra- index distinction
185 :    
186 :     some indication of tensor symmetry
187 :     (have to identify the group of index permutations that are symmetries)
188 :    
189 :     dot works on all tensors
190 :    
191 :     outer works on all tensors
192 :    
193 :     Einstein summation notation
194 :    
195 :     "tensor comprehension" (like list comprehension)
196 :    
197 :     ======================
198 :     BUGS =================
199 :     ======================
200 :    
201 :     test/zslice2.diderot:
202 :     // HEY (bug) bspln5 leads to problems ...
203 :     // uncaught exception Size [size]
204 :     // raised at c-target/c-target.sml:47.15-47.19
205 :     //field#4(3)[] F = img ⊛ bspln5;

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