1 |
|
*************************************************** |
2 |
|
*************************************************** |
3 |
|
THIS TODO HAS BEEN MOVED TO THE DIDEROT WIKI: |
4 |
|
|
5 |
|
http://diderot-wiki.cs.uchicago.edu/index.php/Todo |
6 |
|
|
7 |
|
PLEASE USE THAT PAGE TO UPDATE PROBLEMS AND PROGESS |
8 |
|
*************************************************** |
9 |
|
*************************************************** |
10 |
|
|
11 |
NOTE: GLK's approximate ranking of 8 most important tagged with |
NOTE: GLK's approximate ranking of 8 most important tagged with |
12 |
[GLK:1], [GLK:2], ... |
[GLK:1], [GLK:2], ... |
13 |
|
|
15 |
SHORT TERM ============= (*needed* for streamlines & tractography) |
SHORT TERM ============= (*needed* for streamlines & tractography) |
16 |
======================== |
======================== |
17 |
|
|
18 |
Remove CL from compiler |
[GLK:2] Add sequence types (needed for evals & evecs) |
|
|
|
|
[GLK:3] Add sequence types (needed for evals & evecs) |
|
19 |
syntax |
syntax |
20 |
types: ty '{' INT '}' |
types: ty '{' INT '}' |
21 |
value construction: '{' e1 ',' … ',' en '}' |
value construction: '{' e1 ',' … ',' en '}' |
22 |
indexing: e '{' e '}' |
indexing: e '{' e '}' |
23 |
|
|
24 |
[GLK:4] evals & evecs for symmetric tensor[2,2] and |
[GLK:3] evals & evecs for symmetric tensor[2,2] and |
25 |
tensor[3,3] (requires sequences) |
tensor[3,3] (requires sequences) |
26 |
|
|
27 |
ability to emit/track/record variables into dynamically re-sized |
ability to emit/track/record variables into dynamically re-sized |
28 |
runtime buffer |
runtime output buffer |
29 |
|
|
30 |
tensor fields: convolution on general tensor images |
[GLK:4] tensor fields from tensor images: Initially need at least |
31 |
|
convolution on tensor[2,2] and tensor[3,3] (the same component-wise |
32 |
|
convolution as for vectors). |
33 |
|
|
34 |
======================== |
======================== |
35 |
SHORT-ISH TERM ========= (to make using Diderot less annoying to |
SHORT-ISH TERM ========= (to make using Diderot less annoying to |
36 |
======================== program in, and slow to execute) |
======================== program in, and slow to execute) |
37 |
|
|
|
value-numbering optimization [DONE] |
|
|
|
|
38 |
Allow ".ddro" file extensions in addition to ".diderot" |
Allow ".ddro" file extensions in addition to ".diderot" |
39 |
|
|
40 |
Be able to output values of type tensor[2,2] and tensor[3,3]; |
Be able to output values of type tensor[2,2] and tensor[3,3]; |
41 |
(currently only scalars & vectors). Want to add some regression tests |
(currently only scalars & vectors). Want to add some regression tests |
42 |
based on this and currently can't |
based on this and currently can't |
43 |
|
|
44 |
[GLK:1] Add a clamp function, which takes three arguments; either |
[GLK:1] Proper handling of stabilize method |
|
three scalars: |
|
|
clamp(lo, hi, x) = max(lo, min(hi, x)) |
|
|
or three vectors of the same size: |
|
|
clamp(lo, hi, [x,y]) = [max(lo[0], min(hi[0], x)), |
|
|
max(lo[1], min(hi[1], y))] |
|
|
This would be useful in many current Diderot programs. |
|
|
One question: clamp(x, lo, hi) is the argument order used in OpenCL |
|
|
and other places, but clamp(lo, hi, x) is much more consistent with |
|
|
lerp(lo, hi, x), hence GLK's preference |
|
|
[DONE] |
|
45 |
|
|
46 |
[GLK:2] Proper handling of stabilize method |
Convolution on general tensor images (order > 2) |
47 |
|
|
48 |
allow "*" to represent "modulate": per-component multiplication of |
allow "*" to represent "modulate": per-component multiplication of |
49 |
vectors, and vectors only (not tensors of order 2 or higher). Once |
vectors, and vectors only (not tensors of order 2 or higher). Once |
53 |
implicit type promotion of integers to reals where reals are |
implicit type promotion of integers to reals where reals are |
54 |
required (e.g. not exponentiation "^") |
required (e.g. not exponentiation "^") |
55 |
|
|
56 |
[GLK:5] Save Diderot output to nrrd, instead of "mip.txt" |
[Nick working on this] Save Diderot output to nrrd, instead of "mip.txt" |
57 |
For grid of strands, save to similarly-shaped array |
For grid of strands, save to similarly-shaped array |
58 |
For list of strands, save to long 1-D (or 2-D for non-scalar output) list |
For list of strands, save to long 1-D (or 2-D for non-scalar output) list |
59 |
For ragged things (like tractography output), will need to save both |
For ragged things (like tractography output), will need to save both |
60 |
complete list of values, as well as list of start indices and lengths |
complete list of values, as well as list of start indices and lengths |
61 |
to index into complete list |
to index into complete list |
62 |
|
|
63 |
[GLK:6] Use of Teem's "hest" command-line parser for getting |
[GLK:6] ability to declare a field so that probe positions are |
|
any "input" variables that are not defined in the source file. |
|
|
|
|
|
[GLK:7] ability to declare a field so that probe positions are |
|
64 |
*always* "inside"; with various ways of mapping the known image values |
*always* "inside"; with various ways of mapping the known image values |
65 |
to non-existant index locations. One possible syntax emphasizes that |
to non-existant index locations. One possible syntax emphasizes that |
66 |
there is a index mapping function that logically precedes convolution: |
there is a index mapping function that logically precedes convolution: |
83 |
rgb = real{3} |
rgb = real{3} |
84 |
rgba = real{4} |
rgba = real{4} |
85 |
|
|
86 |
|
Revisit how images are created within the language. |
87 |
|
The "load" operator should probably go away, and its strangs |
88 |
|
that strings are there only as a way to refer to nrrd filenames |
89 |
|
|
90 |
============================== |
============================== |
91 |
MEDIUM TERM ================== (*needed* for particles) |
MEDIUM TERM ================== (*needed* for particles) |
92 |
============================== |
============================== |
93 |
|
|
94 |
run-time birth of strands |
[Lamont working on this] run-time birth of strands |
95 |
|
|
96 |
"initially" supports lists |
"initially" supports lists |
97 |
|
|
100 |
e.g. using output of iso2d.diderot for one isovalue to seed the input |
e.g. using output of iso2d.diderot for one isovalue to seed the input |
101 |
to another invocation of the same program) |
to another invocation of the same program) |
102 |
|
|
103 |
Communication between strands: they have to be able to learn each |
[Lamont working on this] Communication between strands: they have to |
104 |
other's state (at the previous iteration). Early version of this can |
be able to learn each other's state (at the previous iteration). |
105 |
have the network of neighbors be completely static (for running one |
Early version of this can have the network of neighbors be completely |
106 |
strand/pixel image computations). Later version with strands moving |
static (for running one strand/pixel image computations). Later |
107 |
through the domain will require some spatial data structure to |
version with strands moving through the domain will require some |
108 |
optimize discovery of neighbors. |
spatial data structure to optimize discovery of neighbors. |
109 |
|
|
110 |
============================ |
============================ |
111 |
MEDIUM-ISH TERM ============ (to make Diderot more useful/effective) |
MEDIUM-ISH TERM ============ (to make Diderot more useful/effective) |
112 |
============================ |
============================ |
113 |
|
|
114 |
|
[GLK:5] Want code-generation working for tensors of order three. |
115 |
|
Order three matters for edge detection in scalar fields (to get |
116 |
|
second derivatives of gradient magnitude), second derivatives |
117 |
|
of vector fields (for some feature extraction), and first |
118 |
|
derivatives of diffusion tensor fields. |
119 |
|
|
120 |
Python/ctypes interface to run-time |
Python/ctypes interface to run-time |
121 |
|
|
122 |
support for Python interop and GUI |
support for Python interop and GUI |
124 |
Allow integer exponentiation ("^2") to apply to square matrices, |
Allow integer exponentiation ("^2") to apply to square matrices, |
125 |
to represent repeated matrix multiplication |
to represent repeated matrix multiplication |
126 |
|
|
|
Alow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C, |
|
|
provided that X*Y, X/Y, X+Y, X-Y are already supported. |
|
|
Nearly every Diderot program would be simplified by this. |
|
|
[DONE] |
|
|
|
|
127 |
Put small 1-D and 2-D fields, when reconstructed specifically by tent |
Put small 1-D and 2-D fields, when reconstructed specifically by tent |
128 |
and when differentiation is not needed, into faster texture buffers. |
and when differentiation is not needed, into faster texture buffers. |
129 |
test/illust-vr.diderot is good example of program that uses multiple |
test/illust-vr.diderot is good example of program that uses multiple |
130 |
such 1-D fields basically as lookup-table-based function evaluation |
such 1-D fields basically as lookup-table-based function evaluation |
131 |
|
|
|
expand trace in mid to low translation [DONE] |
|
|
|
|
132 |
extend norm (|exp|) to all tensor types [DONE for vectors and matrices] |
extend norm (|exp|) to all tensor types [DONE for vectors and matrices] |
133 |
|
|
134 |
determinant ("det") for tensor[3,3] |
determinant ("det") for tensor[3,3] |
152 |
tensor construction [DONE] |
tensor construction [DONE] |
153 |
tensor indexing [DONE] |
tensor indexing [DONE] |
154 |
tensor slicing |
tensor slicing |
|
verify that hessians work correctly [DONE] |
|
155 |
|
|
156 |
Better handling of variables that determines the scope of a variable |
Better handling of variables that determines the scope of a variable |
157 |
based on its actual use, instead of where the user defined it. So, |
based on its actual use, instead of where the user defined it. So, |
165 |
(but we should only duplicate over the live-range of the result of the |
(but we should only duplicate over the live-range of the result of the |
166 |
conditional. |
conditional. |
167 |
|
|
168 |
[GLK:8] Want: non-trivial field expressions & functions. |
[GLK:7] Want: non-trivial field expressions & functions. |
169 |
scalar fields from scalar fields F and G: |
scalar fields from scalar fields F and G: |
170 |
field#0(2)[] X = (sin(F) + 1.0)/2; |
field#0(2)[] X = (sin(F) + 1.0)/2; |
171 |
field#0(2)[] X = F*G; |
field#0(2)[] X = F*G; |
218 |
field#0(2)[] F = lambda([x,y], Ft([x,y,42.0])) // restriction to time=42.0 |
field#0(2)[] F = lambda([x,y], Ft([x,y,42.0])) // restriction to time=42.0 |
219 |
vec2 grad = ∇F([x,y]); // 2D gradient |
vec2 grad = ∇F([x,y]); // 2D gradient |
220 |
|
|
|
Tensors of order 3 (e.g. gradients of diffusion tensor fields, or |
|
|
hessians of vector fields) and order 4 (e.g. Hessians of diffusion |
|
|
tensor fields). |
|
|
|
|
221 |
representation of tensor symmetry |
representation of tensor symmetry |
222 |
(have to identify the group of index permutations that are symmetries) |
(have to identify the group of index permutations that are symmetries) |
223 |
|
|
263 |
// uncaught exception Size [size] |
// uncaught exception Size [size] |
264 |
// raised at c-target/c-target.sml:47.15-47.19 |
// raised at c-target/c-target.sml:47.15-47.19 |
265 |
//field#4(3)[] F = img ⊛ bspln5; |
//field#4(3)[] F = img ⊛ bspln5; |
266 |
|
|