File: dagScheduling.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (47 lines) | stat: -rw-r--r-- 1,528 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
(*
 * A region based scheduler.
 *
 * -- Allen
 *)

functor DAGScheduling
   (structure ListScheduler : LIST_SCHEDULER
    structure DDGBuilder    : SCHEDULER_DDG_BUILDER
    structure Ranks         : SCHEDULING_RANKS
                                where type edge = DDGBuilder.DDG.edge
    structure Viewer        : GLOBAL_SCHEDULER_DDG_VIEWER
       sharing DDGBuilder.DDG = ListScheduler.DDG = Ranks.DDG
       sharing DDGBuilder.CFG = ListScheduler.CFG
       sharing Viewer.IR = ListScheduler.IR
       sharing Viewer.DDG = DDGBuilder.DDG
   ) : GLOBAL_SCHEDULING_ALGORITHM =
struct
   structure IR  = ListScheduler.IR
   structure CFG = ListScheduler.CFG
   structure DDG = ListScheduler.DDG
   structure G   = Graph

   val i2s = Int.toString

   val view_IR = MLRiscControl.getFlag "view-IR"

   fun schedule cpu_info { ir, region, numberOfInstructions, blockIdTbl } = 
   let val DDG as G.GRAPH ddg = 
           DDGBuilder.buildDDG {cpu_info=cpu_info, 
                                cfg=region, blockIdTbl=blockIdTbl,
                                numberOfInstructions=numberOfInstructions}
       val _ = print("V(ddg)="^i2s(#order ddg ())^
                     " E(ddg)="^i2s(#size ddg ())^"\n")
       val _ = if !view_IR then Viewer.view ir DDG else ()
       val ranking = Ranks.rank DDG
   in  ListScheduler.listScheduler
          {cpu_info=cpu_info, 
           blockIdTbl=blockIdTbl,
           cfg=ir, 
           region=region, 
           ddg=DDG, 
           ranking=ranking
          } 
   end

end