Input: ReadyNodeSet, FreePESet, current schedule step S |
Output: MappedNodeSet |
(1) for each in FreePESet {CandidateNodeSet(PEi) = {empty};} |
(2) for each node n in ReadyNodeSet { |
(3) CapablePESet(n) = all PE capable of the function of n; |
(4) S_src1 = the time when n’s operand 1 is produced; |
(5) L_src1 = the PE where n’s operand 1 is stored; |
(6) S_src2 = the time when n’s operand 2 is produced; |
(7) L_src2 = the PE where n’s operand 2 is stored; |
//all PEs which can be reached within |
//(S-S_src1) cycles from PE L_src1; |
(8) RoutableSet1 = RoutableSet(L_src1, (S-S_src1)); |
//all PEs which can be reached within |
//(S-S_src2) cycles from PE L_src2; |
(9) RoutableSet2 = RoutableSet(L_src2, (S-S_src2)); |
(10) CandidatePESet = RoutableSet1 RoutableSet2 |
FreePESet CapablePESet(n); |
(11) for each PEi in CandidatePESet{Add to CandidateNodeSet ;} |
(12) } |
(13) MappedNodeSet = {empty}; |
(14) for each in CandidatePESet{ |
(15) Sort all nodes in CandidateNodeSet according to criticality; |
(16) M = most critical from CandidateNodeSet and |
M MappedNodeSet; |
(17) Place on PEi at schedule step S; |
(18) Insert into MappedNodeSet; |
(19) Remove from ReadyNodeSet; |
(20) } |