December 12, 2006http://csg.csail.mit.edu/6.827/L24-1 Scheduling Primitives for Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts.

Slides:



Advertisements
Similar presentations
BSV execution model and concurrent rule scheduling Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology February.
Advertisements

Elastic Pipelines and Basics of Multi-rule Systems Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February.
An EHR based methodology for Concurrency management Arvind (with Asif Khan) Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology.
Constructive Computer Architecture: Multirule systems and Concurrent Execution of Rules Arvind Computer Science & Artificial Intelligence Lab. Massachusetts.
March 2007http://csg.csail.mit.edu/arvindSemantics-1 Scheduling Primitives for Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts.
Constructive Computer Architecture: FIFO Lab Comments Revisiting CF FIFOs Andy Wright TA October 20, 2014http://csg.csail.mit.edu/6.175L14-1.
Stmt FSM Richard S. Uhler Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology (based on a lecture prepared by Arvind)
Asynchronous Pipelines: Concurrency Issues Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology October 13, 2009http://csg.csail.mit.edu/koreaL12-1.
February 21, 2007http://csg.csail.mit.edu/6.375/L07-1 Bluespec-4: Architectural exploration using IP lookup Arvind Computer Science & Artificial Intelligence.
March, 2007http://csg.csail.mit.edu/arvindIPlookup-1 IP Lookup Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology.
September 24, L08-1 IP Lookup: Some subtle concurrency issues Arvind Computer Science & Artificial Intelligence Lab.
IP Lookup: Some subtle concurrency issues Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February 22, 2011L06-1.
IP Lookup: Some subtle concurrency issues Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology March 4, 2013
December 10, 2009 L29-1 The Semantics of Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute.
Pipelining combinational circuits Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology February 20, 2013http://csg.csail.mit.edu/6.375L05-1.
Constructive Computer Architecture: Bluespec execution model and concurrency semantics Arvind Computer Science & Artificial Intelligence Lab. Massachusetts.
September 3, 2009L02-1http://csg.csail.mit.edu/korea Introduction to Bluespec: A new methodology for designing Hardware Arvind Computer Science & Artificial.
Constructive Computer Architecture: Guards Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology September 24, 2014.
September 22, 2009http://csg.csail.mit.edu/koreaL07-1 Asynchronous Pipelines: Concurrency Issues Arvind Computer Science & Artificial Intelligence Lab.
Constructive Computer Architecture Sequential Circuits Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology
Elastic Pipelines: Concurrency Issues Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February 28, 2011L08-1http://csg.csail.mit.edu/6.375.
Constructive Computer Architecture Sequential Circuits - 2 Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology.
February 20, 2009http://csg.csail.mit.edu/6.375L08-1 Asynchronous Pipelines: Concurrency Issues Arvind Computer Science & Artificial Intelligence Lab Massachusetts.
Modular Refinement Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology March 8,
October 22, 2009http://csg.csail.mit.edu/korea Modular Refinement Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology.
Computer Architecture: A Constructive Approach Bluespec execution model and concurrent rule scheduling Teacher: Yoav Etsion Taken (with permission) from.
October 20, 2009L14-1http://csg.csail.mit.edu/korea Concurrency and Modularity Issues in Processor pipelines Arvind Computer Science & Artificial Intelligence.
Elastic Pipelines: Concurrency Issues
Bluespec-3: A non-pipelined processor Arvind
Concurrency properties of BSV methods and rules
Bluespec-6: Modeling Processors
Folded “Combinational” circuits
Scheduling Constraints on Interface methods
Blusepc-5: Dead cycles, bubbles and Forwarding in Pipelines Arvind
Sequential Circuits Constructive Computer Architecture Arvind
Sequential Circuits: Constructive Computer Architecture
Stmt FSM Arvind (with the help of Nirav Dave)
Performance Specifications
Pipelining combinational circuits
Multirule Systems and Concurrent Execution of Rules
Constructive Computer Architecture: Guards
Sequential Circuits Constructive Computer Architecture Arvind
Pipelining combinational circuits
Modular Refinement Arvind
Modular Refinement Arvind
EHR: Ephemeral History Register
Constructive Computer Architecture: Well formed BSV programs
Blusepc-5: Dead cycles, bubbles and Forwarding in Pipelines Arvind
Bluespec-7: Scheduling & Rule Composition
Modeling Processors: Concurrency Issues
Modules with Guarded Interfaces
Pipelining combinational circuits
Sequential Circuits - 2 Constructive Computer Architecture Arvind
Elastic Pipelines: Concurrency Issues
Bluespec-3: A non-pipelined processor Arvind
Multirule systems and Concurrent Execution of Rules
Stmt FSM Arvind (with the help of Nirav Dave)
IP Lookup: Some subtle concurrency issues
Computer Science & Artificial Intelligence Lab.
Elastic Pipelines: Concurrency Issues
Elastic Pipelines and Basics of Multi-rule Systems
Constructive Computer Architecture: Guards
Elastic Pipelines and Basics of Multi-rule Systems
Bluespec-7: Scheduling & Rule Composition
Control Hazards Constructive Computer Architecture: Arvind
Multirule systems and Concurrent Execution of Rules
IP Lookup: Some subtle concurrency issues
Bluespec-7: Semantics of Bluespec
Bluespec-5: Scheduling & Rule Composition
Constructive Computer Architecture: Well formed BSV programs
Presentation transcript:

December 12, 2006http://csg.csail.mit.edu/6.827/L24-1 Scheduling Primitives for Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology Work in progress

December 12, 2006 L24-2http://csg.csail.mit.edu/6.827/ mem fifo Done? outQ LPM in Bluespec module lpm rule “recirculate” action method enter(x) = mem.req(addr(x)) ; fifo.enq(x) x = mem.res(); y = fifo.first(); if done?(x) then fifo.deq() ; mem.deq() ; outQ.enq(x) else mem.deq(); mem.req(addr(x)); fifo.deq(); fifo.enq(y) What do we expect when enq & deq are done together?

December 12, 2006 L24-3http://csg.csail.mit.edu/6.827/ module mkFIFO1 (FIFO#(t)); Reg#(t) data <- mkRegU(); Reg#(Bool) full <- mkReg(False); method Action enq(t x) if (!full); full <= True; data <= x; endmethod method Action deq() if (full); full <= False; endmethod method t first() if (full); return (data); endmethod endmodule One Element FIFO enq and deq cannot be enabled together! Rule “recirculate” will never fire! Two-element FIFO does not solve the problem

December 12, 2006 L24-4http://csg.csail.mit.edu/6.827/ mem fifo Done? outQ What is missing? rule “recirculate” x = mem.res(); y = fifo.first(); if done?(x) then fifo.deq() ; mem.deq() ; outQ.enq(x) else mem.deq(); mem.req(addr(x)); fifo.deq(); fifo.enq(y) Need a way of - saying deq happens before enq within the same rule - building such a FIFO

December 12, 2006http://csg.csail.mit.edu/6.827/L24-5 Extending the Bluespec language with the “sequential connective”

December 12, 2006 L24-6http://csg.csail.mit.edu/6.827/ BS: A Language of Atomic Actions A program is a collection of instantiated modules m 1 ; m 2 ;... Module ::= Module name [State variable r] [Rule R a] [Action method g (x) = a] [Read method f (x) = e] e ::= r | c | t | Op(e, e) | e ? e : e | (t = e in e) | m.f(e) | e when e a ::= r := e | if e then a | a | a ; a | (t = e in a) | m.g(e) | a when e Conditional action Parallel Composition Sequential Composition Method call Guarded action

December 12, 2006 L24-7http://csg.csail.mit.edu/6.827/ Guards vs If’s Guards affect the surroundings (a1 when p1) | a2 ==> (a1 | a2) when p1 Effect of an “if” is local (if p1 then a1) | a2 ==> if p1 then (a1 | a2) else a2 p1 has no effect on a2

December 12, 2006 L24-8http://csg.csail.mit.edu/6.827/ Conditionals & Cases if p then a1 else a2  if p then a1 | if !p then a2 Similarly for cases

December 12, 2006 L24-9http://csg.csail.mit.edu/6.827/ Semantics of a rule execution Specify which state elements the rule modifies Let  represent the value of all the registers before the rule executes Let U be the set of updates implied by the rule execution

December 12, 2006 L24-10http://csg.csail.mit.edu/6.827/ BS Action Rules reg-update  ├ e  v  ├ (r := e)  {(r, v)} Like a set union but blows up if there are any duplicates Like pmerge but U2 dominates U1 if-true  ├ e  true,  ├ a  U  ├ (if e then a)  U if-false  ├ e  false  ├ (if e then a)   par  ├ a1  U1,  ├ a2  U2  ├ (a1 | a2)  pmerge(U1,U2) seq  ├ a1  U1, update(,U1) ├ a2  U2  ├ ( a1 ; a2)  smerge(U1,U2)

December 12, 2006 L24-11http://csg.csail.mit.edu/6.827/ BS Action Rules cont a-let-sub  ├ e  v, smerge(, {(t,v)}) ├ a  U  ├ ((t = e) in a)  U Expression rules are similar a-meth-call  ├ e  v, x.a = lookup(m.g), smerge(,{(x,v)}) ├ a  U  ├ m.g(e)  U (v != ┴)

December 12, 2006 L24-12http://csg.csail.mit.edu/6.827/ Guard Semantics If no rule applies then the system is stuck and the effect of the whole atomic action is “no action” (returns ┴ ). For example, if e evaluates to false then not just (a when e) results in no updates but the whole atomic action of which (a when e) is a part results in no updates. a-when-ready  ├ e  true,  ├ a  U   ├ (a when e)  U

December 12, 2006 L24-13http://csg.csail.mit.edu/6.827/ mem fifo Done? outQ LPM in Bluespec using the sequential connective module lpm rule “recirculate” action method enter(x) = mem.req(addr(x)) | fifo.enq(x) (x = mem.res() in (y = fifo.first() in (if done?(x) then fifo.deq() | mem.deq() | outQ.enq(x) else (mem.deq(); mem.req(addr(x))) | (fifo.deq(); fifo.enq(y))) Notice

December 12, 2006 L24-14http://csg.csail.mit.edu/6.827/ Execution model Repeatedly: Select a rule to execute Compute the state updates Make the state updates Highly non- deterministic

December 12, 2006 L24-15http://csg.csail.mit.edu/6.827/ Current Implementation sans guards All guards are evaluated in parallel and the compiler selects only among those rules whose guards are true. Requires lifting Guards to the top Among the enabled rules the compiler schedules for concurrent execution all the rules that do not “conflict” with each other Among the enabled and conflicting rules the compiler selects a rule for execution based on some user specified static priority

December 12, 2006 L24-16http://csg.csail.mit.edu/6.827/ Nondeterminism & Scheduling A Bluespec description admits non- determinism but a compilation (with a scheduler) results in a deterministic implementation. Experience has shown that the user wants more control in the selection for both functionality and efficiency...

December 12, 2006 L24-17http://csg.csail.mit.edu/6.827/ mem fifo Done? outQ LPM: Scheduling issues module lpm rule “recirculate” action method enter(x) = mem.req(addr(x)) | fifo.enq(x) (x = mem.res() in (y = fifo.first() in (if done?(x) then fifo.deq() | mem.deq() | outQ.enq(x) else (mem.deq(); mem.req(addr(x))) | (fifo.deq(); fifo.enq(y))) Can a rule calling method “enter” execute concurrently with the “recirculate” rule ? If not who should have priority? Bluespec scheduling is not good enough for this level of specificity

December 12, 2006 L24-18http://csg.csail.mit.edu/6.827/ LW: Lifting “whens” to the top sans let blocks A1. (a1 when p) | a2  (a1 | a2) when p A2. a1 | (a2 when p)  (a1 | a2) when p A3. (a1 when p) ; a2  (a1 ; a2) when p A4. a1 ; (a2 when p)  (a1 ; a2) when p’ where p’ is p after the effect of a1 A5. if (p when q) then a  (if p then a) when q A6. if p then (a when q) (if p then a) when (q || !p) A7. (a when p1) when p2  a when (p1 && p2) A8. r := (e when p)  (r := e) when p A9. m.g(e when p)  m.g(e) when p similarly for expressions...

December 12, 2006 L24-19http://csg.csail.mit.edu/6.827/ Complete when-lifting procedure 1. Apply LW procedure to each rule and method 2. Split each action method definition g = x.(a when p) into two methods g B = x.a and g G = x.p Similarly for value methods. 3. For each rule of the form Rule R ((if p then a ) when q) replace it with Rule R (a when p && q) Repeat step 3 while applicable.

December 12, 2006 L24-20http://csg.csail.mit.edu/6.827/ A property of rule-based systems A derived rule does not add new behaviors rule R a rule R b rule R a,b S1S2 S3

December 12, 2006 L24-21http://csg.csail.mit.edu/6.827/ Concurrent Scheduling & Rule composition Rule R1 a1 when p1 Rule R2 a2 when p2 Suppose we want to schedule R1 and R2 concurrently. The user writes: S = par(R1,R2) where the meaning of rule S is Rule S ((if p1 then a1)|(if p2 then a2)) when p1 v p2 Parallel Scheduling can be expressed as a rule composition This composition is NOT always valid because it may introduce new behaviors! Is there is a loss of some behaviors if S replaces R1 and R2?

December 12, 2006 L24-22http://csg.csail.mit.edu/6.827/ Value forwarding & Sequential composition of rules Rule R1 a1 when p1 Rule R2 a2 when p2 Suppose we want to schedule R1 and R2 concurrently and they conflict. Furthermore assume we want the effect to be R1 followed by R2 The user writes: S = seq(R1,R2) where the meaning of rule S is Rule S ((if p1 then a1);(if p2 then a2)) when p1 v p2’ where p2’ is p2 after the effect of (if p1 then a1) This composition is always valid! S allows forwarding of values from a1 to a2

December 12, 2006 L24-23http://csg.csail.mit.edu/6.827/ Rule Priorities Rule R1 a1 when p1 Rule R2 a2 when p2 Suppose rules R1 and R2 conflict and we want to give priority to R1 The user writes: R2’ = pri(R1,R2) where the meaning of rule R2’ is Rule R2’ (a2 when ¬p1 ^ p2) R1 and R2’ are mutually exclusive and can be composed using par

December 12, 2006 L24-24http://csg.csail.mit.edu/6.827/ Schedules Grammar S ::= R | seq(S, S) | par(S, S) | pri(S, S) 1. The user must specify a schedule 2. A rule can occur multiple times in a schedule Notice par is commutative, i.e. par(R1,R2) = par(R2,R1) Both par and seq are associative, i.e., par(R1,R2,R3) = par(R1,par(R2,R3)) = par(par(R1,R2),R3) seq(R1,R2,R3) = seq(R1,seq(R2,R3)) = seq(seq(R1,R2),R3)

December 12, 2006 L24-25http://csg.csail.mit.edu/6.827/ Sample Schedules par(R1, pri(R1,R2)) par(R1, seq(R2,R2)) par(R1, pri(R1,seq(R2,R2)))

December 12, 2006 L24-26http://csg.csail.mit.edu/6.827/ Rule splitting One can provide greater control in scheduling by rule splitting rule “foo” (if p(x) then a1 else a2) can be split into the following two rules rule “foo-then” (if p(x) then a1) rule “foo-else” (if !p(x) then a2)

December 12, 2006 L24-27http://csg.csail.mit.edu/6.827/ mem fifo Done? outQ LPM Revisited module lpm rule “recirculate” action method enter(x) = mem.req(addr(x)) | fifo.enq(x) (x = mem.res() in (y = fifo.first() in (if done?(x) then fifo.deq() | mem.deq() | outQ.enq(x) else (mem.deq(); mem.req(addr(x))) | (fifo.deq(); fifo.enq(y))) Goal – A schedule which introduces no dead cycle while exiting

December 12, 2006 L24-28http://csg.csail.mit.edu/6.827/ LPM: Split the Internal rule module lpm rule “recirculate” (x = mem.res() in (y = fifo.first() in (if !done?(x) then (mem.deq(); mem.req(addr(x))) | (fifo.deq(); fifo.enq(y))) rule “exit” (x = mem.res() in (y = fifo.first() in (if done?(x) then fifo.deq() | mem.deq() | outQ.enq(x) action method enter(x) = mem.req(addr(x)) | fifo.enq(x)

December 12, 2006 L24-29http://csg.csail.mit.edu/6.827/ LPM: Turn rules into methods module lpm action method recirculate () = (x = mem.res() in (y = fifo.first() in (if !done?(x) then (mem.deq(); mem.req(addr(x))) | (fifo.deq(); fifo.enq(y))) action method exit () = (x = mem.res() in (y = fifo.first() in (if done?(x) then fifo.deq() | mem.deq() | outQ.enq(x) action method enter(x) = mem.req(addr(x)) | fifo.enq(x) rule “recirculate” lpm.recirculate() rule “exit” lpm.exit() rule “foo”... lpm.enter(a) Outside the module

December 12, 2006 L24-30http://csg.csail.mit.edu/6.827/ LPM Schedule Schedule-1 r’ = pri(enter,recirc) S1 = par(r’,exit, enter) Schedule-2 r’ = pri(enter,recirc) ee = seq(exit,enter) S2 = par(r’,ee) Schedule-3 e’ = pri(recirc, enter) ee = seq(exit,e’) S3 = par(recirc,ee) S1 is invalid Assume enq/deq conflict enter has priority over recirculate; no dead cycles recirculate has priority over enter; no dead cycles Difficult to pick between S2 and S3!