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

SCM Repository

[diderot] Annotation of /branches/vis12/TODO
ViewVC logotype

Annotation of /branches/vis12/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1167 - (view) (download)
Original Path: trunk/TODO

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

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