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

SCM Repository

[diderot] Annotation of /branches/vis15/src/compiler/ein/ein.sml
ViewVC logotype

Annotation of /branches/vis15/src/compiler/ein/ein.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5570 - (view) (download)

1 : jhr 3470 (* ein.sml
2 :     *
3 :     * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     *
5 :     * COPYRIGHT (c) 2015 The University of Chicago
6 :     * All rights reserved.
7 :     *)
8 :    
9 :     structure Ein =
10 :     struct
11 :    
12 :     datatype param_kind
13 : jhr 4317 = TEN of bool * int list (* the boolean specifies if the parameter is substitutable *)
14 : jhr 3470 | FLD of int
15 :     | KRN
16 : jhr 3477 | IMG of int * int list
17 : cchiw 3978
18 :     (* placement in argument list *)
19 :     type param_id= int
20 :     (* variable index *)
21 : jhr 3470 type index_id = int
22 : cchiw 3978 (* binding of variable index *)
23 :     type index_bind = int
24 : jhr 3470
25 :     datatype ein = EIN of {
26 : jhr 4317 params : param_kind list,
27 :     (* Parameters to equation are either tensors or fields *)
28 :     (* These variables are named using de Bruijn indexing *)
29 : cchiw 3978 (* QUESTION: why is this index_bind list and not index_id list?
30 :     * Answer: index_bind is the range of the index_ids.
31 :     * Both ints but ultimately different types
32 :     *)
33 : jhr 4317 index : index_bind list, (* Index variables in the equation. *)
34 :     body : ein_exp
35 : jhr 3470 }
36 :    
37 :     and mu
38 :     = V of index_id
39 :     | C of int
40 :    
41 :     and unary
42 :     = Neg
43 :     | Exp
44 :     | Sqrt
45 :     | Cosine
46 :     | ArcCosine
47 :     | Sine
48 :     | ArcSine
49 :     | Tangent
50 :     | ArcTangent
51 : jhr 3478 (* QUESTION: should the int be IntInf.int? *)
52 : jhr 3470 | PowInt of int
53 : cchiw 5006 | Abs
54 : jhr 5292 | Sgn (* sign (positive or negative) *)
55 : jhr 3470
56 :     and binary = Sub | Div
57 :    
58 : cchiw 5241 and ternary = Clamp
59 :    
60 : jhr 3470 and opn = Add | Prod
61 : jhr 3762
62 : jhr 5570 and input_ty = T | F (* treat as a tensor or field during differentiaton *)
63 :    
64 :     (* other kinds of fields *)
65 :     and ofield = CFExp of (param_id * input_ty) list (* input variables TT and TF*)
66 :    
67 : jhr 3512 and ein_exp
68 :     (* Basic terms *)
69 : jhr 3470 = Const of int
70 : jhr 3486 (* QUESTION: should this be RealLit.t? *)
71 : jhr 3470 | ConstR of Rational.t
72 : cchiw 3978 | Tensor of param_id * alpha
73 : jhr 5570 | Zero of alpha
74 : cchiw 4289 | Delta of mu * mu
75 :     | Epsilon of mu * mu * mu
76 :     | Eps2 of mu * mu
77 : jhr 3470 (* High-IL Terms *)
78 : cchiw 3978 | Field of param_id * alpha
79 : jhr 3470 | Lift of ein_exp
80 : cchiw 3978 | Conv of param_id * alpha * param_id * alpha
81 : jhr 3470 | Partial of alpha
82 :     | Apply of ein_exp * ein_exp
83 :     | Probe of ein_exp * ein_exp
84 : jhr 5570 | OField of ofield * ein_exp * ein_exp (* field arg T, exp, E.Partial dx *) (* FIXME: need more info *)
85 : jhr 3470 (* Mid-IL Terms *)
86 : jhr 3512 | Value of index_id (* Lift index *)
87 : cchiw 5314 | Img of param_id * alpha * pos list * int
88 : cchiw 3978 | Krn of param_id * (mu * mu) list * int
89 : jhr 5570 | Poly of ein_exp * int * alpha (* ein_exp^n dx *)
90 : jhr 3470 (* Ops *)
91 :     | Sum of sumrange list * ein_exp
92 :     | Op1 of unary * ein_exp
93 :     | Op2 of binary * ein_exp * ein_exp
94 : jhr 5258 | Op3 of ternary * ein_exp * ein_exp * ein_exp
95 : jhr 3470 | Opn of opn * ein_exp list
96 :    
97 :     withtype alpha = mu list
98 : jhr 4317 and pos = ein_exp
99 :     and sumrange = index_id * int * int
100 : jhr 5007
101 :     end
102 :    

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