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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/mid-to-low/gen-kernel.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/mid-to-low/gen-kernel.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2524, Fri Jan 17 20:17:12 2014 UTC revision 2525, Tue Jan 21 19:14:22 2014 UTC
# Line 12  Line 12 
12  structure VTbl = SrcIL.Var.Tbl  structure VTbl = SrcIL.Var.Tbl
13  structure DstIL = LowIL  structure DstIL = LowIL
14  structure DstTy = LowILTypes  structure DstTy = LowILTypes
15     structure Var = LowIL.Var
16      in      in
17    
18    
# Line 25  Line 25 
25    
26      fun subP e=(case e      fun subP e=(case e
27          of E.Tensor(t1,ix1)=>genHelper.mkSca(mapp,(t1,ix1,args))          of E.Tensor(t1,ix1)=>genHelper.mkSca(mapp,(t1,ix1,args))
28          | E.Value v1=> genHelper.aaV(DstOp.C (List.nth(mapp,v1)),[])          | E.Value v1=> genHelper.aaV(DstOp.C (List.nth(mapp,v1)),[],"Const",DstTy.TensorTy([]))
29          | E.Const c=> genHelper.aaV(DstOp.C 9,[])          | E.Const c=> genHelper.aaV(DstOp.C 9,[],"Const",DstTy.TensorTy([]))
30      (*end case*))      (*end case*))
31    
32      in (case e      in (case e
33          of E.Sub(e1,e2)=> let          of E.Sub(e1,e2)=> let
34              val (vA,A)=subP e1              val (vA,A)=subP e1
35              val (vB,B)=subP e2              val (vB,B)=subP e2
36              val (vD,D)=genHelper.aaV(DstOp.subSca,[vA,vB])              val (vD,D)=genHelper.aaV(DstOp.subSca,[vA,vB],"Subsca",DstTy.TensorTy([]))
37              in (vD,A@B@D) end              in (vD,A@B@D) end
38          | E.Add[e1,e2]=> let          | E.Add[e1,e2]=> let
39              val (vA,A)=subP e1              val (vA,A)=subP e1
40              val (vB,B)=subP e2              val (vB,B)=subP e2
41              val (vD,D)=genHelper.aaV(DstOp.addSca, [vA,vB])              val (vD,D)=genHelper.aaV(DstOp.addSca, [vA,vB],"addsca",DstTy.TensorTy([]))
42              in (vD,A@B@D) end              in (vD,A@B@D) end
43          (* ebd case*))          (* ebd case*))
44      end      end
45    
46    
47    (*FIX TYPE ON CONS TYPE HERE *)
48  (*con everything on the list, make a vectors*)  (*con everything on the list, make a vectors*)
49  fun peanut([],rest, code)=(rest,code)  fun peanut([],rest, code,dim)=(rest,code)
50      | peanut(e::es,rest,code)=let      | peanut(e::es,rest,code,dim)=let
51          val (vA,A)=genHelper.aaV(DstOp.cons(DstTy.einTy []),e)          val gg=length(e)
52          in peanut(es, [vA]@rest, A@code)          val (vA,A)=genHelper.aaV(DstOp.cons(DstTy.TensorTy [gg]),e,"Cons",DstTy.TensorTy([gg]))
53            in peanut(es, [vA]@rest, A@code,dim)
54          end          end
55    
56    
# Line 68  Line 70 
70    
71    
72    
73    
74    
75    
76  (*product of images and kernels*)  (*product of images and kernels*)
77  (*creates vectors of like terms, so does vector products*)  (*creates vectors of like terms, so does vector products*)
78  fun  mkkrns(a,(E.Prod e,sx,origargs,args))=let  fun  mkkrns(a,(E.Sum(sx,E.Prod e),h,args))=let
79      val ar=print "in mkkrn"      val ar=print "\n\n ************** new direction **********\n\n"
80    
81      val (img1,k1)=sortK([],[],e)      val (img1,k1)=sortK([],[],e)
          val ar=print "in A"  
82      val k= List.map (fn (id,d1,pos)=>(id,genHelper.evalDelta(d1,a),pos)) k1      val k= List.map (fn (id,d1,pos)=>(id,genHelper.evalDelta(d1,a),pos)) k1
83       val ar=print "B"  
     val nk=length(k)  
     val g=Int.toString(length(img1))  
      val ar=print "C"  
     val gg=Int.toString(nk)  
        val ggss=Int.toString(length sx)  
      val u=print (String.concat["IMG",g, "KRNS", gg,"sumx",ggss])  
84    
85      fun m([],lft,_,[],mapp,code)= ((lft,code))      fun m([],lft,_,[],mapp,code)= ((lft,code))
86          | m([],lft,e::rht,(id1,dels1,pos1)::krns,mapp,code)=let          | m([],lft,e::rht,(id1,dels1,pos1)::krns,mapp,code)=let
   
87              val (vF,code1)=mkSimpleOp(mapp,pos1,args)              val (vF,code1)=mkSimpleOp(mapp,pos1,args)
88                val ee'=[vF]@e
             val (vH,H)=genHelper.aaV(DstOp.krn(id1,dels1),[vF])  
   
             val e'=[vH]@e  
   
89              in              in
90              m([],lft@[e'], rht, krns,mapp, code1@H@code)                  m([],lft@[ee'],rht,krns,mapp,code1@code)
91              end              end
92      | m([(fid,ix,px)],[],e::rht,krns,mapp,code)=let      | m([(fid,ix,px)],[],e::rht,krns,mapp,code)=let
93                (*Evaluates Image Positions*)
94          fun mkpos([],rest,code)= (rest,code)          fun mkpos([],rest,code)= (rest,code)
95              | mkpos(pos1::es,rest,code)= let              | mkpos(pos1::es,rest,code)= let
96                  val (vF,code1)=mkSimpleOp(mapp,pos1,args)                  val (vF,code1)=mkSimpleOp(mapp,pos1,args)
97                  in mkpos(es,rest@[vF],code@code1)                  in mkpos(es,rest@[vF],code@code1)
98                  end                  end
   
   
99          val ix1=List.map (fn (e1)=> genHelper.mapIndex(e1,mapp)) ix          val ix1=List.map (fn (e1)=> genHelper.mapIndex(e1,mapp)) ix
100                val TT=print(String.concat["\n ----",Int.toString(length(px)),"*** \n"])
101          val (vF,F)= mkpos(px,[],[])          val (vF,F)= mkpos(px,[],[])
102          val (vA,A)=genHelper.aaV(DstOp.img(fid, DstTy.tensorTy ix1),vF)              val imgType=DstTy.tensorTy ix1
         val e'=[vA]@e  
103    
104                val (vA,A)=genHelper.aaV(DstOp.img(fid, imgType,length(k1)),vF,"img",imgType)
105    
106                 val e'=[vA]@e
107          in          in
108              m([],[e'],rht,krns,mapp,F@A@code)              m([],[e'],rht,krns,mapp,F@A@code)
109          end          end
110          | m _ =raise Fail "exceptooon"          | m _ =raise Fail "Too many images"
111    
112    
     val uu=print "post m"  
113    
114      fun sumI1(left,(0,lb1),[],emp,code)=let      fun sumI1(left,(0,lb1),[],emp,code)=let
115          val mapp=a@left@[lb1]          val mapp=a@left@[lb1]
116                (*img1*)
117          val (lft', code')=m(img1,[],emp,k,mapp,[])          val (lft', code')=m(img1,[],emp,k,mapp,[])
118          in (lft',code'@code)          in (lft',code'@code)
119          end          end
# Line 134  Line 129 
129          in sumI1(left,(s-1,lb1),(E.V 0,lb2,ub)::sx,lft',code') end          in sumI1(left,(s-1,lb1),(E.V 0,lb2,ub)::sx,lft',code') end
130    
131    
132        val nk=length(k)
133      val emp=List.tabulate(nk+1,(fn(e)=>[]))      val emp=List.tabulate(nk+1,(fn(e)=>[]))
   
134      val (_,lb,ub)=hd(sx)      val (_,lb,ub)=hd(sx)
   
135      val(lft,code)=sumI1([],(ub-lb,lb),tl(sx),emp,[])      val(lft,code)=sumI1([],(ub-lb,lb),tl(sx),emp,[])
136    
137      val (rest',code')=peanut(lft,[],[])      val supportRange=(ub-lb)+1
138      val d=length k  
     val (id,_,_)=hd(k)  
     val harg=List.nth(origargs,id)  
    (* val h=printgetRHS harg*)  
     fun evalK([],[],n)=[]  
     | evalK(kn::kns,x::xs,n)=let  
         val (_,dk,_) =kn  
         in evalKrn.expandEvalKernel (d, h, dk, x) @ evalK(kns,xs,n+1)  
         end  
     val mmm=evalK(k,tl(rest'),0)  
139    
140        val (rest',code')=peanut(lft,[],[],supportRange*(length k))
141        val d=length k
142        val rest'=List.rev rest'
143    
     val (vD,D)=genHelper.mkMultiple( rest',DstOp.prodVec)  
     val (vG,G)=genHelper.aaV(DstOp.sumVec,[vD])  
144    
145  in (vG,code@code'@D@G)      fun evalK([],[],n,code,newId)=(code,newId)
146        | evalK(kn::kns,x::xs,n,code,newId)=let
147            val (_,dk,_) =kn
148            val (id,kcode)= evalKrn.expandEvalKernel (supportRange, h, dk, x,n)
149            in      evalK(kns,xs,n+1,code@kcode,newId@[id])
150  end  end
151      |mkkrns _=raise Fail"Different structure"      val (evalKcode,ids)=evalK(k,tl(rest'),0,[],[])
   
152    
153        val qqw=print "\n Final Sum \n"
154    
155    
156        val m=print(String.concat[Int.toString(ub),Int.toString(lb),Int.toString(supportRange)])
157        val (vD,D)=genHelper.mkMultiple([hd(rest')]@ids,DstOp.prodVec(supportRange),DstTy.TensorTy([supportRange]))
158        val (vG,G)=genHelper.aaV(DstOp.sumVec(supportRange),[vD],"sumvec",DstTy.TensorTy([]))
159        val allcode=code@code'@evalKcode@D@G
160    
161        in
162            (vG,allcode)
163        end
164        |mkkrns _=raise Fail"Wrong structure for genKrn"
165    
166    
 (*  
 fun genfn(Ein.EIN{params, index, body})= let  
     val  sx= ref[]  
     val A=[DstOp.notDone]  
    fun gen body=(case body  
         of E.Field _ =>raise Fail(concat["Invalid Field here "]   )  
         | E.Partial _ =>raise Fail(concat["Invalid Field here "]   )  
         | E.Apply _ =>raise Fail(concat["Invalid Field here "]   )  
         | E.Probe _ =>raise Fail(concat["Invalid Field here "]   )  
         | E.Conv _ =>raise Fail(concat["Invalid Field here "]   )  
         | E.Sum(sx', e)=> (sx:=sx'; gen e)  
167    
         (*Images and kernels*)  
         | E.Prod(E.Img im::es)=>let  
             val ref x=sx  
             in prodIter(body,index,x,mkkrns)  
             end  
         | E.Prod(E.Krn k1::es)=>let  
             val ref x=sx  
             in prodIter(body,index,x,mkkrns)  
             end  
         |_ => A  
         (*end case*))  
    in gen body end  
 *)  
168    
169  end (* local *)  end (* local *)
170    

Legend:
Removed from v.2524  
changed lines
  Added in v.2525

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