File: schedulingProps.sig

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 (74 lines) | stat: -rw-r--r-- 2,383 bytes parent folder | download | duplicates (6)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(*
 * This signature describes the machine properties needed by the 
 * global schedulers. 
 *
 * -- Allen
 *)
signature SCHEDULING_PROPERTIES =
sig

   structure I : INSTRUCTIONS

   (* 
    * Type reservation_table is used to represent the state 
    * of the pipeline as a partial schedule is constructed.
    * Type resource represents the resources used by an instruction
    * during its execution.  Normally this is represented by a
    * reservation table.   These are kept abstract so that the
    * client can have freedom on how to implement these things.
    *)
   type reservation_table 
   type pipeline
   type latency = int
   type time = int

   type cpu (* name identifying the implementaton *)

   (* special instructions *)
   val source : I.instruction
   val sink   : I.instruction 

   (* convert a name to a specific implementation *)
   val cpu    : string -> cpu

   datatype cpu_info = 
      CPU_INFO of
      { (* maximum number of instructions issued per cycle *)
        maxIssues : int, 
        (* 
         * Definition/use.  Definitions contain latencies.
         *)
        defUse : I.instruction -> (I.C.cell * latency) list * I.C.cell list,

        (*
         * Create a new reservation table of at most n time steps.
         * If the backward flag is on then we are actually building
         * the schedule in backwards manner.
         *)
        newTable : int -> reservation_table,

        (*
         * Extract the pipeline characteristics of an instruction 
         *)
        pipeline : I.instruction -> pipeline,
        (*
         * Take a reservation table, a time step t, and an instruction. 
         * Find a slot to insert the instruction into the reservation 
         * table at the earliest (latest) feasible time no earlier (later) 
         * than t.  
         *)
        findSlot : reservation_table * time * pipeline -> time,
        insert   : reservation_table * time * pipeline -> unit
      }

   (* This function takes an architecture name and returns
    * a bunch of properties specific to the architecture.
    * It is structured this way so that we can dynamically change the
    * architecture parameter.
    *)
   val info : {cpu:cpu, backward:bool (* backward scheduling? *)} -> cpu_info

   val splitCopies : (I.C.cell -> I.C.cell) -> 
                         I.instruction -> I.instruction list

end