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

SCM Repository

[diderot] Diff of /branches/charisee_dev/src/compiler/high-to-mid/split.sml
ViewVC logotype

Diff of /branches/charisee_dev/src/compiler/high-to-mid/split.sml

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

branches/charisee/src/compiler/high-to-mid/split.sml revision 3229, Thu Jul 30 16:10:54 2015 UTC branches/charisee_dev/src/compiler/high-to-mid/split.sml revision 3353, Wed Oct 28 23:08:21 2015 UTC
# Line 1  Line 1 
1  (* Currently under construction  (* Currently under construction
2   *   *
3   * COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)   * 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.   * All rights reserved.
7   *)   *)
8    
# Line 34  Line 36 
36    
37      val numFlag=1   (*remove common subexpression*)      val numFlag=1   (*remove common subexpression*)
38      val testing=0      val testing=0
39      fun setEin(params,index,body)=Ein.EIN{params=params, index=index, body=body}      fun mkEin e = E.mkEin e
40      fun assignEinApp(y,params,index,body,args)= (y,DstIL.EINAPP(setEin(params,index,body),args))      val einappzero= DstIL.EINAPP(mkEin([],[],E.Const 0),[])
     val einappzero=DstIL.EINAPP(setEin([],[],E.Const 0),[])  
41      fun setEinZero y=  (y,einappzero)      fun setEinZero y=  (y,einappzero)
42      fun cleanParams e =cleanP.cleanParams e      fun cleanParams e =cleanP.cleanParams e
43      fun cleanIndex e =cleanI.cleanIndex e      fun cleanIndex e =cleanI.cleanIndex e
44      fun printEINAPP e=MidToString.printEINAPP e      fun toStringBind e= MidToString.toStringBind e
45      fun itos i =Int.toString i      fun itos i =Int.toString i
     fun filterSca e=Filter.filterSca e  
46      fun err str=raise Fail str      fun err str=raise Fail str
47      val cnt = ref 0      val cnt = ref 0
48      fun incUse (DstIL.V{useCnt, ...}) = (useCnt := !useCnt + 1)      fun incUse (DstIL.V{useCnt, ...}) = (useCnt := !useCnt + 1)
# Line 116  Line 116 
116          | _           => 2          | _           => 2
117      (*end case*))      (*end case*))
118    
   
   
119      fun rewriteOp3(name,sx,e1,x)=let      fun rewriteOp3(name,sx,e1,x)=let
120          val ((y, DstIL.EINAPP(ein,args)),fieldset,flag)=x          val ((y, DstIL.EINAPP(ein,args)),fieldset,flag)=x
121          val params=Ein.params ein          val params=Ein.params ein
# Line 138  Line 136 
136          | 2     => (e1,params,args,[],fieldset)             (*not lifted*)          | 2     => (e1,params,args,[],fieldset)             (*not lifted*)
137          (*end*))          (*end*))
138    
   
   
   
139      fun rewriteOps(name,list1,params,index,sx,args,fieldset0,flag)=let      fun rewriteOps(name,list1,params,index,sx,args,fieldset0,flag)=let
140          fun m([],rest,params,args,code,fieldset)=(rest,params,args,code,fieldset)          fun m([],rest,params,args,code,fieldset)=(rest,params,args,code,fieldset)
141          | m(e1::es,rest,params,args,code,fieldset)=let          | m(e1::es,rest,params,args,code,fieldset)=let
# Line 350  Line 345 
345              | E.Sum(sx,E.Tensor _)    => default              | E.Sum(sx,E.Tensor _)    => default
346              | E.Sum(sx,_)             => err(" summation not distributed:"^str)              | E.Sum(sx,_)             => err(" summation not distributed:"^str)
347              | E.Add e1                => handleAdd(y,e1,params,index,args,fieldset,flag)              | E.Add e1                => handleAdd(y,e1,params,index,args,fieldset,flag)
348                | E.Prod[E.Tensor(id0,[]),E.Tensor(id1,[i]),E.Tensor(id2,[])]=>
349                        rewrite (E.Prod[E.Prod[E.Tensor(id0,[]),E.Tensor(id2,[])],E.Tensor(id1,[i])])
350              | E.Prod e1               => handleProd(y,e1,params,index,args,fieldset,flag)              | E.Prod e1               => handleProd(y,e1,params,index,args,fieldset,flag)
351              | E.Partial _             => err(" Partial used after normalize")              | E.Partial _             => err(" Partial used after normalize")
352              | E.Krn _                 => err("Krn used before expand")              | E.Krn _                 => err("Krn used before expand")
# Line 363  Line 360 
360          |split((y,app),fieldset,_) =(((y,app),[]),fieldset)          |split((y,app),fieldset,_) =(((y,app),[]),fieldset)
361    
362    
363      fun iterMultiple(einapp2,newbies2,fieldset)=let  (*
364          fun itercode([],rest,code,_)=(rest,code)  B
365    NoISSUE (1,3,4)
366    Fail(2,5,6)
367    
368    *)
369    
370        fun iterAll2(einapp2,fields2)=let
371            val fieldset= einSet.EinSet.empty
372            fun itercode([],rest,code,cnt)=(("\n Empty-SplitCount: "^Int.toString(cnt));(rest,code))
373            | itercode(e1::newbies,rest,code,cnt)=let            | itercode(e1::newbies,rest,code,cnt)=let
374                  val ((einapp3,code3),_) = split(e1,fieldset,numFlag)                  val ((einapp3,code3),_) = split(e1,fieldset,numFlag)
375                      val (rest4,code4)=itercode(code3,[],[],cnt+1)                      val (rest4,code4)=itercode(code3,[],[],cnt+1)
376                val _ =testp [toStringBind(e1),"\n\t===>\n",toStringBind(einapp3),"\nand\n",(String.concatWith",\n\t"(List.map toStringBind (code4@rest4)))]
377          in          in
378              itercode(newbies,rest@[einapp3],code4@( rest4)@code,cnt+2)                  if (length(rest@newbies@code) > 500) then let
379                            val _ =("\n SplitCount: "^Int.toString(cnt))
380                            val code5=code4@rest4@code
381                            val rest5=rest@[einapp3]
382                            in
383    (*
384                                (newbies,code5@rest5)(*tab1*)
385                                (newbies,rest5@code5)(*tab2*)
386                                (rest5,newbies@code5)(*tab3*)
387    *)
388                                (rest5,code5@newbies)(*tab4*)
389    (*
390                                (code5,rest5@newbies)(*tab5*)
391                                (code5,newbies@rest5)(*tab6*)
392    *)
393                            end
394                    else  itercode(newbies,rest@[einapp3],code4@rest4@code,cnt+2)
395          end          end
396              val(rest,code)= itercode(newbies2,[],[],1)          val(rest,code)= itercode([einapp2],[],[],0)
397          in          in
398              ((code)@rest@[einapp2])              (*fields2@rest@code (*A*)*)
399                  fields2@code@rest (*B*)
400          end          end
401    
402    
403    
404    
405      fun iterAll(einapp2,fieldset)=let      fun iterAll(einapp2,fieldset)=let
406          fun itercode([],rest,code,_)=(rest,code)          fun itercode([],rest,code,_)=(rest,code)
407          | itercode(e1::newbies,rest,code,cnt)=let          | itercode(e1::newbies,rest,code,cnt)=let
408              val ((einapp3,code3),_) = split(e1,fieldset,numFlag)              val ((einapp3,code3),_) = split(e1,fieldset,numFlag)
409              val (rest4,code4)=itercode(code3,[],[],cnt+1)              val (rest4,code4)=itercode(code3,[],[],cnt+1)
410                  val _ =testp [printEINAPP(e1),"\n\t===>\n",printEINAPP(einapp3),"\nand\n",(String.concatWith",\n\t"(List.map printEINAPP (code4@rest4)))]                  val _ =testp [toStringBind(e1),"\n\t===>\n",toStringBind(einapp3),"\nand\n",(String.concatWith",\n\t"(List.map toStringBind (code4@rest4)))]
411              in              in
412                  itercode(newbies,rest@[einapp3],code4@( rest4)@code,cnt+2)                  itercode(newbies,rest@[einapp3],code4@( rest4)@code,cnt+2)
413              end              end
# Line 391  Line 416 
416              (code@rest)              (code@rest)
417          end          end
418    
     fun splitEinApp einapp3= let  
         val fieldset= einSet.EinSet.empty  
419    
         (* **** split in parts **** *)  
         (*  
         val ((einapp4,newbies4),fieldset)=split(einapp3,fieldset,0)  
         val _ =testp["\n\t===>\n",printEINAPP(einapp4),"\nand\n",(String.concatWith",\n\t"(List.map printEINAPP newbies4))]  
         val (newbies5)= iterMultiple(einapp4,newbies4,fieldset)  
         *)  
   
         (* **** split all at once **** *)  
         val (newbies5)= iterAll([einapp3],fieldset)  
420    
421        fun splitEinApp (einapp3,splitflag)= let
422            val fieldset= einSet.EinSet.empty
423            val (newbies5)=(case splitflag
424                of 1 =>let
425                    (* **** split single **** *)
426                    val ((einapp4,newbies4),fieldset)=split(einapp3,fieldset,0)
427                    in newbies4@[einapp4] end
428                | _=>   (* **** split all at once **** *)
429                    iterAll([einapp3],fieldset)
430            (* end case *))
431          in          in
432              newbies5              newbies5
433          end          end

Legend:
Removed from v.3229  
changed lines
  Added in v.3353

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