Constructive Computer Architecture: Well formed BSV programs

Slides:



Advertisements
Similar presentations
Elastic Pipelines and Basics of Multi-rule Systems Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February.
Advertisements

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.
Folding and Pipelining complex combinational circuits Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February.
EHRs: Designing modules with concurrent methods Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology February 27,
Computer Architecture: A Constructive Approach EHRs: Designing modules with concurrent methods Teacher: Yoav Etsion Taken (with permission) from Arvind.
Constructive Computer Architecture: FIFO Lab Comments Revisiting CF FIFOs Andy Wright TA October 20, 2014http://csg.csail.mit.edu/6.175L14-1.
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.
December 10, 2009 L29-1 The Semantics of Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute.
December 12, 2006http://csg.csail.mit.edu/6.827/L24-1 Scheduling Primitives for Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts.
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: Guards Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology September 24, 2014.
Constructive Computer Architecture Tutorial 2 Advanced BSV Andy Wright TA September 26, 2014http://csg.csail.mit.edu/6.175T02-1.
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.
Constructive Computer Architecture: Control Hazards Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology October.
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,
Simple Inelastic and Folded Pipelines Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February 14, 2011L04-1.
Multiple Clock Domains (MCD) Arvind with Nirav Dave Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology.
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
EHRs: Designing modules with concurrent methods
EHRs: Designing modules with concurrent methods
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
Pipelining combinational circuits
Multirule Systems and Concurrent Execution of Rules
Constructive Computer Architecture: Lab Comments & RISCV
Constructive Computer Architecture: Guards
Sequential Circuits Constructive Computer Architecture Arvind
Pipelining combinational circuits
EHR: Ephemeral History Register
Constructive Computer Architecture: Well formed BSV programs
Blusepc-5: Dead cycles, bubbles and Forwarding in Pipelines Arvind
Control Hazards Constructive Computer Architecture: Arvind
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
IP Lookup: Some subtle concurrency issues
Computer Science & Artificial Intelligence Lab.
Elastic Pipelines: Concurrency Issues
Pipelined Processors Arvind
Elastic Pipelines and Basics of Multi-rule Systems
Constructive Computer Architecture: Guards
Elastic Pipelines and Basics of Multi-rule Systems
Control Hazards Constructive Computer Architecture: Arvind
Pipelined Processors Constructive Computer Architecture: Arvind
Simple Synchronous Pipelines
Multirule systems and Concurrent Execution of Rules
IP Lookup: Some subtle concurrency issues
Modular Refinement Arvind
Control Hazards Constructive Computer Architecture: Arvind
Simple Synchronous Pipelines
Presentation transcript:

Constructive Computer Architecture: Well formed BSV programs Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology September 17, 2014 http://csg.csail.mit.edu/6.175

A semantic questions Is a rule well-formed? That is, is there a possibility of double write error or does it contain a combinational cycle? This question can be answered by analyzing the properties of the methods called by the rules September 17, 2014 http://csg.csail.mit.edu/6.175

Illegal Actions – Double Write x <= e1; x <= e2; x <= e1; if( p ) x <= e2; if( p ) x <= e1; else x <= e2; Not an error Parallel composition of two actions is illegal if it creates the possibility of a double-write error, that is, if its constituent (sub)actions invoke the same action method September 17, 2014 http://csg.csail.mit.edu/6.175

Illegal actions: Dataflow violations Assume that x and y are EHRs x[0] <= x[1] Syntax mandated: EHR def: if (x[1]) x[0] <= e; x[0] <= y[1]; y[0] <= x[1] Read “<“ as happens before read x[1] < write x[0] contradiction! write x[0] < read x[1] read x[1] < write x[0] contradiction! write x[0] < read x[1] read y[1] < write x[0], read x[1] < write y[0] write x[0] < read x[1], write y[0] < read y[1] Contradiction! No total ordering of methods What is the general rule for detecting violations? September 17, 2014 http://csg.csail.mit.edu/6.175

Total ordering of methods It should be possible to put a total order on methods without violating the syntax or CM imposed restrictions x[0] <= y[1]; y[0] <= x[1] x <= y ; y <= x read y[1] < write x[0] , read x[1] < write y[0] from EHR CM < contradiction! {read x, read y} < {write x, write y} No contradiction! September 17, 2014 http://csg.csail.mit.edu/6.175

“Happens before” (<) relation “happens before” relation between the methods of a module governs how the methods behave when called by a rule, action, method or exp f < g : f happens before g (g cannot affect f within an action) f > g : g happens before f C : f and g conflict and cannot be called together CF : f and g are conflict free and do not affect each other This relation is defined as a conflict matrix (CM) for the methods of primitive modules like registers and EHRs an derived for the methods of all other modules September 17, 2014 http://csg.csail.mit.edu/6.175

Conflict Matrix of Primitive modules: Registers and EHRs reg.r reg.w CF < > C Register EHR.r0 EHR.w0 EHR.r1 EHR.w1 CF < > C EHR September 17, 2014 http://csg.csail.mit.edu/6.175

Some definitions mcalls(x) is the set of method called by x mcalls(x) <s mcalls(y) means that every pair of methods (a,b) such that a  mcalls(x) and b  mcalls(y), either (a < b) or (a CF b) September 17, 2014 http://csg.csail.mit.edu/6.175

Deriving the Conflict Matrix (CM) of a module Let g1 and g2 be the two methods defined by a module, such that mcalls(g1)={g11,g12...g1n} mcalls(g2)={g21,g22...g2m} Derivation CM[g1,g2] = conflict(g11,g21)  conflict(g11,g22) ...  conflict(g12,g21)  conflict(g12,g22) ... …  conflict(g1n,g21)  conflict(g12,g22) ... conflict(x,y) = if x and y are methods of the same module then CM[x,y] else CF Conflict relation is not transitive m1.g1 < m2.g2, m2.g2 < m3.g3 does not imply m1.g1 < m3.g3 Compiler can derive the CM for a module by starting with the innermost modules in the module instantiation tree September 17, 2014 http://csg.csail.mit.edu/6.175

Deriving CM for One-Element Pipeline FIFO module mkPipelineFifo(Fifo#(1, t)) provisos(Bits#(t, tSz)); Reg#(t) d <- mkRegU; Ehr#(2, Bool) v <- mkEhr(False); method Bool notFull = !v[1]; method Bool notEmpty = v[0]; method Action enq(t x); d <= x; v[1] <= True; endmethod method Action deq; v[0] <= False; method t first; return d; endmodule mcalls(enq) = mcalls(deq) = mcalls(first) = {d.w, v.w1} {v.w0} {d.r} September 17, 2014 http://csg.csail.mit.edu/6.175

CM for One-Element Pipeline FIFO mcalls(enq) = {d.w, v.w1} mcalls(deq) = {v.w0} mcalls(first) = {d.r} CM[enq,deq] = conflict[d.w,v.w0]  conflict[v.w1,v.w0] = {>} This is what we expected! notFull notEmpty Enq Deq First CF < > C September 17, 2014 http://csg.csail.mit.edu/6.175

Deriving CM for One-Element Bypass FIFO module mkBypassFifo(Fifo#(1, t)) provisos(Bits#(t, tSz)); Ehr#(2, t) d <- mkEhr(?); Ehr#(2, Bool) v <- mkEhr(False); method Bool notFull = !v[0]; method Bool notEmpty = v[1]; method Action enq(t x); d[0] <= x; v[0] <= True; endmethod method Action deq; v[1] <= False; method t first; return d[1]; endmodule mcalls(enq) = mcalls(deq) = mcalls(first) = {d.w0, v.w0} {v.w1} {d.r1} September 17, 2014 http://csg.csail.mit.edu/6.175

CM for One-Element Bypass FIFO mcalls(enq) = {d.w0, v.w0} mcalls(deq) = {v.w1} mcalls(first) = {d.r1} CM[enq,deq] = conflict[d.w0,v.w1]  conflict[v.w0,v.w1] = {<} This is what we expected! notFull notEmpty Enq Deq First CF < > C September 17, 2014 http://csg.csail.mit.edu/6.175

CM for Two-Element Conflict-free FIFO db da module mkCFFifo(Fifo#(2, t)) provisos(Bits#(t, tSz)); Ehr#(2, t) da <- mkEhr(?); Ehr#(2, Bool) va <- mkEhr(False); Ehr#(2, t) db <- mkEhr(?); Ehr#(2, Bool) vb <- mkEhr(False); rule canonicalize; if(vb[1] && !va[1]) (da[1] <= db[1]| va[1] <= True| vb[1] <= False) endrule method Bool notFull = !vb[0]; method Bool notEmpty = va[0]; method Action enq(t x); db[0] <= x; vb[0] <= True; endmethod method Action deq; va[0] <= False; endmethod method t first; return da[0]; endmethod endmodule Derive the CM September 17, 2014 http://csg.csail.mit.edu/6.175

CM for Two-Element Conflict-free FIFO mcalls(enq) = { } mcalls(deq) = { } mcalls(first) = { } Fill the CM CM[enq,deq] = notFull notEmpty Enq Deq First Canon CF C September 17, 2014 http://csg.csail.mit.edu/6.175

General rule for determining legal actions: syntax imposed restrictions a1 ; a2 either mcalls(a1) <s mcalls(a2) or mcalls(a2) <s mcalls(a1) if (e) a mcalls(e) <s mcalls(a) m.g(e) mcalls(e) <s {m.g} t = e ; a An action is legal if these syntax imposed constraints are consistent with constraints defined by CM for each module allow a total ordering of methods September 17, 2014 http://csg.csail.mit.edu/6.175

Legal rule analysis x fifo1 inQ f1 f2 f3 fifo2 outQ rule ArithPipe; if(inQ.notEmpty && fifo1.notFull) begin fifo1.enq(f1(inQ.first); inQ.deq end; if(fifo1.notEmpty && fifo2.notFull) begin fifo2.enq(f2(fifo1.first); fifo1.deq end; if(fifo2.notEmpty && outQ.notFull) begin outQ.enq(f3(fifo2.first); fifo2.deq end; endrule Syntactic constraints {inQ.notEmpty,fifo1.notFull} <s {fifo1.enq,inQ.first,inQ.deq} {inQ.first} <s {fifo1.enq} {fifo1.notEmpty,fifo2.notFull} <s {fifo2.enq,fifo1.first,fifo1.deq} {fifo1.first} <s {fifo2.enq} {fifo2.notEmpty,outQ.notFull} <s {outQ.enq,fifo2.first,fifo2.deq} {fifo2.first} <s {outQ.enq} 1. Are these constraints consistent with the CM for various FIFOs? 2. Can these method calls be put in a total order? September 17, 2014 http://csg.csail.mit.edu/6.175

Legal rule analysis syntactic constraints for each module x fifo1 inQ f1 f2 f3 fifo2 outQ Syntactic constraints of the rule {inQ.notEmpty,fifo1.notFull} <s {fifo1.enq,inQ.first,inQ.deq} {inQ.first} <s {fifo1.enq} {fifo1.notEmpty,fifo2.notFull} <s {fifo2.enq,fifo1.first,fifo1.deq} {fifo1.first} <s {fifo2.enq} {fifo2.notEmpty,outQ.notFull} <s {outQ.enq,fifo2.first,fifo2.deq} {fifo2.first} <s {outQ.enq} Syntactic constraints for each FIFO {inQ.notEmpty} <s {inQ.first,inQ.deq} {fifo1.notFull} <s {fifo1.enq} {fifo1.notEmpty} <s {fifo1.first,fifo1.deq} {fifo2.notFull} <s {fifo2.enq} {fifo2.notEmpty} <s {fifo2.first,fifo2.deq} {outQ.notFull} <s {outQ.enq} True for all types of FIFOs! 2. Can these method calls be put in a total order? September 17, 2014 http://csg.csail.mit.edu/6.175

Legal rule analysis assume all FIFOs are pipeline FIFOs x fifo1 inQ f1 f2 f3 fifo2 outQ Additional constraints because of pipeline FIFOs fifo1 fifo1.notFull < fifo1.enq fifo1.notEmpty CF fifo1.first fifo1.notEmpty < fifo1.deq fifo1.deq < fifo1.enq fifo1.first < fifo1.enq fifo1.notEmpty < fif01.enq fifo1.notFull > fifo1.deq Effect of additional constraints {inQ.notEmpty,fifo1.notFull} <s fifo1.enq,inQ.first,inQ.deq} {inQ.first} <s {fifo1.enq} {fifo1.notEmpty,fifo2.notFull} <s {fifo2.enq,fifo1.first,fifo1.deq} … Can the method calls be put in a total order? September 17, 2014 http://csg.csail.mit.edu/6.175

Legal rule analysis all FIFOs are pipeline FIFOs x fifo1 inQ f1 f2 f3 fifo2 outQ Syntactic constraints of the rule {inQ.notEmpty,fifo1.notFull} <s fifo1.enq,inQ.first,inQ.deq} {inQ.first} <s {fifo1.enq} {fifo1.notEmpty,fifo2.notFull} <s {fifo2.enq,fifo1.first,fifo1.deq} {fifo1.first} <s {fifo2.enq} {fifo2.notEmpty,outQ.notFull} <s {outQ.enq,fifo2.first,fifo2.deq} {fifo2.first} <s {outQ.enq} A total order {fifo2.notEmpty,outQ.notFull} <s {fifo2.first} <s {outQ.enq} <s {fifo2.deq} <s {fifo1.notEmpty,fifo2.notFull} <s {fifo1.first} <s {fifo2.enq} <s {fifo1.deq} <s {inQ.notEmpty,fifo1.notFull} <s {inQ.first} <s {fifo1.enq} <s {inQ.deq} September 17, 2014 http://csg.csail.mit.edu/6.175

Legal rule analysis Can we find a total order on methods, assuming x fifo1 inQ f1 f2 f3 fifo2 outQ Syntactic constraints of the rule {inQ.notEmpty,fifo1.notFull} <s fifo1.enq,inQ.first,inQ.deq} {inQ.first} <s {fifo1.enq} {fifo1.notEmpty,fifo2.notFull} <s {fifo2.enq,fifo1.first,fifo1.deq} {fifo1.first} <s {fifo2.enq} {fifo2.notEmpty,outQ.notFull} <s {outQ.enq,fifo2.first,fifo2.deq} {fifo2.first} <s {outQ.enq} Can we find a total order on methods, assuming All FIFOs are Pipeline FIFOs All FIFOs are Bypass FIFOs All FIFOs are CF The design mixes different types of FIFOs September 17, 2014 http://csg.csail.mit.edu/6.175

Real legal-rule analysis is more complicated: Predicated calls The analysis we presented would reject the following rule because of method conflicts if (p) m.g(e1) ; if (!p) m.g(e2) We need to keep track of the predicates associated with each method call m.g is called with predicates p and !p which are disjoint – therefore no conflict September 13, 2013 http://csg.csail.mit.edu/6.s195