在一个5段的流水线处理机上需经9拍才能完成一个任务,其预约表如表5-4所示。分别写出延迟禁止表F、冲...
创建于:2025年5月28日
创建于:2025年5月28日
在一个5段的流水线处理机上需经9拍才能完成一个任务,其预约表如表5-4所示。分别写出延迟禁止表F、冲突向量C;画出流水线状态转移图;求出最小平均延迟及流水线的最大吞吐率及其调度方案。按此流水调度方案输入6个任务,求实际吞吐率。
图中打钩的坐标是S1,t0;s1,t8;s2,t1;s2,t2;s3,t3;s3,t6;s3,t7;s4,t3;s4,t4;s5,t5;s5,t6
请你教我解决这道题
python# reservation table: 5 rows, 9 cols rows=5 cols=9 table=np.zeros((rows,cols),dtype=int) ticks=[(0,0),(0,8),(1,1),(1,2),(2,3),(2,6),(2,7),(3,3),(3,4),(4,5),(4,6)] for r,c in ticks: table[r,c]=1 table array([[1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 0, 0]])
python# Forbidden latencies up to 8 forbidden=set() for l in range(1,cols): overlapped=(table[:,:cols-l] & table[:,l:]).any() if overlapped: forbidden.add(l) forbidden {1, 3, 4, 8}
pythoncollision_vector=[1 if i in forbidden else 0 for i in range(1,cols)] collision_vector [1, 0, 1, 1, 0, 0, 0, 1]
pythoncollision_vector_str=''.join(str(b) for b in collision_vector) collision_vector_str '10110001'
python# Rather than implement, compute MAL via algorithm of maximum cycle mean on SCG. # Use algorithm: create directed edges labeled with latency values l which are allowed. # states are bit patterns length L. # forbidden latencies F fixed. def allowed_latencies(state): # state bits: if bit (l-1) set, then latency l is forbidden at this moment. # So allowed latencies are those l between 1..L where (state>>(l-1))&1==0 and l not in forbidden? # Wait there is double condition: l not forbidden due to base collision but maybe state prohibit. # Actually base forbidden latencies already in F; but state includes conflicts due to previous tasks. allowed=[] for l in range(1,L+1): if l in forbidden_latencies: # base structural hazard continue if (state>>(l-1))&1: continue allowed.append(l) return allowed def next_state(state,l): # shift right by l, dropping lowest l bits new_state=state>>l # now OR with base forbidden vector forbidden_bits=0 for f in forbidden_latencies: forbidden_bits |= 1<<(f-1) new_state |= forbidden_bits # mask to L bits new_state &= (1<<L)-1 return new_state forbidden_bits=0 for f in forbidden_latencies: forbidden_bits |=1<<(f-1) forbidden_bits 141
python# BFS build graph from state 0 graph=defaultdict(list) queue=deque([0]) visited=set([0]) while queue: s=queue.popleft() for l in allowed_latencies(s): ns=next_state(s,l) graph[s].append((ns,l)) if ns not in visited: visited.add(ns) queue.append(ns) len(visited) 4
pythonvisited {0, 141, 143, 175}
python# small graph of 4 states graph defaultdict(list, {0: [(141, 2), (141, 5), (141, 6), (141, 7)], 141: [(175, 2), (141, 5), (143, 6), (141, 7)], 175: [(141, 5), (141, 7)], 143: [(141, 5), (143, 6), (141, 7)]})
python# Now find minimal average latency cycle using Karp's algorithm states=list(visited) index={s:i for i,s in enumerate(states)} n=len(states) # adjacency lists with latency cost edges=[] for s in states: for ns,l in graph[s]: edges.append((index[s],index[ns],l)) edges [(0, 2, 2), (0, 2, 5), (0, 2, 6), (0, 2, 7), (1, 2, 5), (1, 1, 6), (1, 2, 7), (2, 3, 2), (2, 2, 5), (2, 1, 6), (2, 2, 7), (3, 2, 5), (3, 2, 7)]
python# Actually simpler: for each cycle we compute average latency. Graph is small; we can search cycles. cycles=[] def dfs(path,node): if node in path: idx=path.index(node) cycle=path[idx:] cycles.append(cycle) return if len(path)>n: return for ns,l in graph[node]: dfs(path+[(node,l)], ns) dfs([],0) len(cycles) 0
python# Let's brute enumerate cycles by exploring up to say 10 steps. def search_cycles(start,max_len=10): cycles=[] def backtrack(curr,path,costs): # curr state if len(path)>max_len: return for ns,l in graph[curr]: if ns==start: cycles.append((path+[l],costs+[l])) else: # avoid large path loops beyond 10 backtrack(ns,path+[l],costs+[l]) backtrack(start,[],[]) return cycles cycs=search_cycles(0,10) cycs []
python# hmm maybe because path visited duplicate lat? Let's do again with cycles from any node. def search_cycles_from(node,max_len=10): cycles=[] def backtrack(curr,path,latencies,visited): if len(latencies)>max_len: return for ns,l in graph[curr]: if ns==node: cycles.append(latencies+[l]) elif len(latencies)<max_len: backtrack(ns,path+[curr],latencies+[l],visited+[ns]) backtrack(node,[],[],[]) return cycles all_cycles=[] for s in visited: all_cycles+=search_cycles_from(s,10) all_cycles , 5, 2, 5, 5, 7, 5, 7, 6], [5, 2, 5, 5, 2, 5, 5, 7, 6], [5, 2, 5, 5, 2, 5, 5, 7, 7, 5, 6], [5, 2, 5, 5, 2, 5, 5, 7, 7, 6], [5, 2, 5, 5, 2, 5, 5, 7, 7, 7, 6], [5, 2, 5, 5, 2, 5, 6], [5, 2, 5, 5, 2, 5, 7, 2, 5, 5, 6], [5, 2, 5, 5, 2, 5, 7, 2, 5, 6], [5, 2, 5, 5, 2, 5, 7, 2, 5, 7, 6], [5, 2, 5, 5, 2, 5, 7, 2, 7, 5, 6], [5, 2, 5, 5, 2, 5, 7, 2, 7, 6], [5, 2, 5, 5, 2, 5, 7, 2, 7, 7, 6], [5, 2, 5, 5, 2, 5, 7, 5, 2, 5, 6], [5, 2, 5, 5, 2, 5, 7, 5, 2, 7, 6], [5, 2, 5, 5, 2, 5, 7, 5, 5, 5, 6], [5, 2, 5, 5, 2, 5, 7, 5, 5, 6], [5, 2, 5, 5, 2, 5, 7, 5, 5, 7, 6], [5, 2, 5, 5, 2, 5, 7, 5, 6], [5, 2, 5, 5, 2, 5, 7, 5, 7, 5, 6], [5, 2, 5, 5, 2, 5, 7, 5, 7, 6], [5, 2, 5, 5, 2, 5, 7, 5, 7, 7, 6], [5, 2, 5, 5, 2, 5, 7, 6], [5, 2, 5, 5, 2, 5, 7, 7, 2, 5, 6], [5, 2, 5, 5, 2, 5, 7, 7, 2, 7, 6], [5, 2, 5, 5, 2, 5, 7, 7, 5, 5, 6], [5, 2, 5, 5, 2, 5, 7, 7, 5, 6], [5, 2, 5, 5, 2, 5, 7, 7, 5, 7, 6], [5, 2, 5, 5, 2, 5, 7, 7, 6], [5, 2, 5, 5, 2, 5, 7, 7, 7, 5, 6], [5, 2, 5, 5, 2, 5, 7, 7, 7, 6], [5, 2, 5, 5, 2, 5, 7, 7, 7, 7, 6], [5, 2, 5, 5, 2, 7, 2, 5, 2, 5, 6], [5, 2, 5, 5, 2, 7, 2, 5, 2, 7, 6], [5, 2, 5, 5, 2, 7, 2, 5, 5, 5, 6], [5, 2, 5, 5, 2, 7, 2, 5, 5, 6], [5, 2, 5, 5, 2, 7, 2, 5, 5, 7, 6], [5, 2, 5, 5, 2, 7, 2, 5, 6], [5, 2, 5, 5, 2, 7, 2, 5, 7, 5, 6], [5, 2, 5, 5, 2, 7, 2, 5, 7, 6], [5, 2, 5, 5, 2, 7, 2, 5, 7, 7, 6], [5, 2, 5, 5, 2, 7, 2, 7, 2, 5, 6], [5, 2, 5, 5, 2, 7, 2, 7, 2, 7, 6], [5, 2, 5, 5, 2, 7, 2, 7, 5, 5, 6], [5, 2, 5, 5, 2, 7, 2, 7, 5, 6], [5, 2, 5, 5, 2, 7, 2, 7, 5, 7, 6], [5, 2, 5, 5, 2, 7, 2, 7, 6], [5, 2, 5, 5, 2, 7, 2, 7, 7, 5, 6], [5, 2, 5, 5, 2, 7, 2, 7, 7, 6], [5, 2, 5, 5, 2, 7, 2, 7, 7, 7, 6], [5, 2, 5, 5, 2, 7, 5, 2, 5, 5, 6], [5, 2, 5, 5, 2, 7, 5, 2, 5, 6], [5, 2, 5, 5, 2, 7, 5, 2, 5, 7, 6], [5, 2, 5, 5, 2, 7, 5, 2, 7, 5, 6], [5, 2, 5, 5, 2, 7, 5, 2, 7, 6], [5, 2, 5, 5, 2, 7, 5, 2, 7, 7, 6], [5, 2, 5, 5, 2, 7, 5, 5, 2, 5, 6], [5, 2, 5, 5, 2, 7, 5, 5, 2, 7, 6], [5, 2, 5, 5, 2, 7, 5, 5, 5, 5, 6], [5, 2, 5, 5, 2, 7, 5, 5, 5, 6], [5, 2, 5, 5, 2, 7, 5, 5, 5, 7, 6], [5, 2, 5, 5, 2, 7, 5, 5, 6], [5, 2, 5, 5, 2, 7, 5, 5, 7, 5, 6], [5, 2, 5, 5, 2, 7, 5, 5, 7, 6], [5, 2, 5, 5, 2, 7, 5, 5, 7, 7, 6], [5, 2, 5, 5, 2, 7, 5, 6], [5, 2, 5, 5, 2, 7, 5, 7, 2, 5, 6], [5, 2, 5, 5, 2, 7, 5, 7, 2, 7, 6], [5, 2, 5, 5, 2, 7, 5, 7, 5, 5, 6], [5, 2, 5, 5, 2, 7, 5, 7, 5, 6], [5, 2, 5, 5, 2, 7, 5, 7, 5, 7, 6], [5, 2, 5, 5, 2, 7, 5, 7, 6], [5, 2, 5, 5, 2, 7, 5, 7, 7, 5, 6], [5, 2, 5, 5, 2, 7, 5, 7, 7, 6], [5, 2, 5, 5, 2, 7, 5, 7, 7, 7, 6], [5, 2, 5, 5, 2, 7, 6], [5, 2, 5, 5, 2, 7, 7, 2, 5, 5, 6], [5, 2, 5, 5, 2, 7, 7, 2, 5, 6], [5, 2, 5, 5, 2, 7, 7, 2, 5, 7, 6], [5, 2, 5, 5, 2, 7, 7, 2, 7, 5, 6], [5, 2, 5, 5, 2, 7, 7, 2, 7, 6], [5, 2, 5, 5, 2, 7, 7, 2, 7, 7, 6], [5, 2, 5, 5, 2, 7, 7, 5, 2, 5, 6], [5, 2, 5, 5, 2, 7, 7, 5, 2, 7, 6], [5, 2, 5, 5, 2, 7, 7, 5, 5, 5, 6], [5, 2, 5, 5, 2, 7, 7, 5, 5, 6], [5, 2, 5, 5, 2, 7, 7, 5, 5, 7, 6], [5, 2, 5, 5, 2, 7, 7, 5, 6], [5, 2, 5, 5, 2, 7, 7, 5, 7, 5, 6], [5, 2, 5, 5, 2, 7, 7, 5, 7, 6], [5, 2, 5, 5, 2, 7, 7, 5, 7, 7, 6], [5, 2, 5, 5, 2, 7, 7, 6], [5, 2, 5, 5, 2, 7, 7, 7, 2, 5, 6], [5, 2, 5, 5, 2, 7, 7, 7, 2, 7, 6], [5, 2, 5, 5, 2, 7, 7, 7, 5, 5, 6], [5, 2, 5, 5, 2, 7, 7, 7, 5, 6], [5, 2, 5, 5, 2, 7, 7, 7, 5, 7, 6], [5, 2, 5, 5, 2, 7, 7, 7, 6], [5, 2, 5, 5, 2, 7, 7, 7, 7, 5, 6], [5, 2, 5, 5, 2, 7, 7, 7, 7, 6], [5, 2, 5, 5, 2, 7, 7, 7, 7, 7, 6], [5, 2, 5, 5, 5, 2, 5, 2, 5, 5, 6], [5, 2, 5, 5, 5, 2, 5, 2, 5, 6], [5, 2, 5, 5, 5, 2, 5, 2, 5, 7, 6], [5, 2, 5, 5, 5, 2, 5, 2, 7, 5, 6], [5, 2, 5, 5, 5, 2, 5, 2, 7, 6], [5, 2, 5, 5, 5, 2, 5, 2, 7, 7, 6], [5, 2, 5, 5, 5, 2, 5, 5, 2, 5, 6], [5, 2, 5, 5, 5, 2, 5, 5, 2, 7, 6], [5, 2, 5, 5, 5, 2, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 2, 5, 5, 5, 6], [5, 2, 5, 5, 5, 2, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 2, 5, 5, 6], [5, 2, 5, 5, 5, 2, 5, 5, 7, 5, 6], [5, 2, 5, 5, 5, 2, 5, 5, 7, 6], [5, 2, 5, 5, 5, 2, 5, 5, 7, 7, 6], [5, 2, 5, 5, 5, 2, 5, 6], [5, 2, 5, 5, 5, 2, 5, 7, 2, 5, 6], [5, 2, 5, 5, 5, 2, 5, 7, 2, 7, 6], [5, 2, 5, 5, 5, 2, 5, 7, 5, 5, 6], [5, 2, 5, 5, 5, 2, 5, 7, 5, 6], [5, 2, 5, 5, 5, 2, 5, 7, 5, 7, 6], [5, 2, 5, 5, 5, 2, 5, 7, 6], [5, 2, 5, 5, 5, 2, 5, 7, 7, 5, 6], [5, 2, 5, 5, 5, 2, 5, 7, 7, 6], [5, 2, 5, 5, 5, 2, 5, 7, 7, 7, 6], [5, 2, 5, 5, 5, 2, 7, 2, 5, 5, 6], [5, 2, 5, 5, 5, 2, 7, 2, 5, 6], [5, 2, 5, 5, 5, 2, 7, 2, 5, 7, 6], [5, 2, 5, 5, 5, 2, 7, 2, 7, 5, 6], [5, 2, 5, 5, 5, 2, 7, 2, 7, 6], [5, 2, 5, 5, 5, 2, 7, 2, 7, 7, 6], [5, 2, 5, 5, 5, 2, 7, 5, 2, 5, 6], [5, 2, 5, 5, 5, 2, 7, 5, 2, 7, 6], [5, 2, 5, 5, 5, 2, 7, 5, 5, 5, 6], [5, 2, 5, 5, 5, 2, 7, 5, 5, 6], [5, 2, 5, 5, 5, 2, 7, 5, 5, 7, 6], [5, 2, 5, 5, 5, 2, 7, 5, 6], [5, 2, 5, 5, 5, 2, 7, 5, 7, 5, 6], [5, 2, 5, 5, 5, 2, 7, 5, 7, 6], [5, 2, 5, 5, 5, 2, 7, 5, 7, 7, 6], [5, 2, 5, 5, 5, 2, 7, 6], [5, 2, 5, 5, 5, 2, 7, 7, 2, 5, 6], [5, 2, 5, 5, 5, 2, 7, 7, 2, 7, 6], [5, 2, 5, 5, 5, 2, 7, 7, 5, 5, 6], [5, 2, 5, 5, 5, 2, 7, 7, 5, 6], [5, 2, 5, 5, 5, 2, 7, 7, 5, 7, 6], [5, 2, 5, 5, 5, 2, 7, 7, 6], [5, 2, 5, 5, 5, 2, 7, 7, 7, 5, 6], [5, 2, 5, 5, 5, 2, 7, 7, 7, 6], [5, 2, 5, 5, 5, 2, 7, 7, 7, 7, 6], [5, 2, 5, 5, 5, 5, 2, 5, 2, 5, 6], [5, 2, 5, 5, 5, 5, 2, 5, 2, 7, 6], [5, 2, 5, 5, 5, 5, 2, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 2, 5, 5, 6], [5, 2, 5, 5, 5, 5, 2, 5, 5, 7, 6], [5, 2, 5, 5, 5, 5, 2, 5, 6], [5, 2, 5, 5, 5, 5, 2, 5, 7, 5, 6], [5, 2, 5, 5, 5, 5, 2, 5, 7, 6], [5, 2, 5, 5, 5, 5, 2, 5, 7, 7, 6], [5, 2, 5, 5, 5, 5, 2, 7, 2, 5, 6], [5, 2, 5, 5, 5, 5, 2, 7, 2, 7, 6], [5, 2, 5, 5, 5, 5, 2, 7, 5, 5, 6], [5, 2, 5, 5, 5, 5, 2, 7, 5, 6], [5, 2, 5, 5, 5, 5, 2, 7, 5, 7, 6], [5, 2, 5, 5, 5, 5, 2, 7, 6], [5, 2, 5, 5, 5, 5, 2, 7, 7, 5, 6], [5, 2, 5, 5, 5, 5, 2, 7, 7, 6], [5, 2, 5, 5, 5, 5, 2, 7, 7, 7, 6], [5, 2, 5, 5, 5, 5, 5, 2, 5, 5, 6], [5, 2, 5, 5, 5, 5, 5, 2, 5, 6], [5, 2, 5, 5, 5, 5, 5, 2, 5, 7, 6], [5, 2, 5, 5, 5, 5, 5, 2, 7, 5, 6], [5, 2, 5, 5, 5, 5, 5, 2, 7, 6], [5, 2, 5, 5, 5, 5, 5, 2, 7, 7, 6], [5, 2, 5, 5, 5, 5, 5, 5, 2, 5, 6], [5, 2, 5, 5, 5, 5, 5, 5, 2, 7, 6], [5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 5, 5, 7, 5, 6], [5, 2, 5, 5, 5, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 5, 5, 5, 7, 7, 6], [5, 2, 5, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 5, 7, 2, 5, 6], [5, 2, 5, 5, 5, 5, 5, 7, 2, 7, 6], [5, 2, 5, 5, 5, 5, 5, 7, 5, 5, 6], [5, 2, 5, 5, 5, 5, 5, 7, 5, 6], [5, 2, 5, 5, 5, 5, 5, 7, 5, 7, 6], [5, 2, 5, 5, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 5, 5, 7, 7, 5, 6], [5, 2, 5, 5, 5, 5, 5, 7, 7, 6], [5, 2, 5, 5, 5, 5, 5, 7, 7, 7, 6], [5, 2, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 7, 2, 5, 5, 6], [5, 2, 5, 5, 5, 5, 7, 2, 5, 6], [5, 2, 5, 5, 5, 5, 7, 2, 5, 7, 6], [5, 2, 5, 5, 5, 5, 7, 2, 7, 5, 6], [5, 2, 5, 5, 5, 5, 7, 2, 7, 6], [5, 2, 5, 5, 5, 5, 7, 2, 7, 7, 6], [5, 2, 5, 5, 5, 5, 7, 5, 2, 5, 6], [5, 2, 5, 5, 5, 5, 7, 5, 2, 7, 6], [5, 2, 5, 5, 5, 5, 7, 5, 5, 5, 6], [5, 2, 5, 5, 5, 5, 7, 5, 5, 6], [5, 2, 5, 5, 5, 5, 7, 5, 5, 7, 6], [5, 2, 5, 5, 5, 5, 7, 5, 6], [5, 2, 5, 5, 5, 5, 7, 5, 7, 5, 6], [5, 2, 5, 5, 5, 5, 7, 5, 7, 6], [5, 2, 5, 5, 5, 5, 7, 5, 7, 7, 6], [5, 2, 5, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 5, 7, 7, 2, 5, 6], [5, 2, 5, 5, 5, 5, 7, 7, 2, 7, 6], [5, 2, 5, 5, 5, 5, 7, 7, 5, 5, 6], [5, 2, 5, 5, 5, 5, 7, 7, 5, 6], [5, 2, 5, 5, 5, 5, 7, 7, 5, 7, 6], [5, 2, 5, 5, 5, 5, 7, 7, 6], [5, 2, 5, 5, 5, 5, 7, 7, 7, 5, 6], [5, 2, 5, 5, 5, 5, 7, 7, 7, 6], [5, 2, 5, 5, 5, 5, 7, 7, 7, 7, 6], [5, 2, 5, 5, 5, 6], [5, 2, 5, 5, 5, 7, 2, 5, 2, 5, 6], [5, 2, 5, 5, 5, 7, 2, 5, 2, 7, 6], [5, 2, 5, 5, 5, 7, 2, 5, 5, 5, 6], [5, 2, 5, 5, 5, 7, 2, 5, 5, 6], [5, 2, 5, 5, 5, 7, 2, 5, 5, 7, 6], [5, 2, 5, 5, 5, 7, 2, 5, 6], [5, 2, 5, 5, 5, 7, 2, 5, 7, 5, 6], [5, 2, 5, 5, 5, 7, 2, 5, 7, 6], [5, 2, 5, 5, 5, 7, 2, 5, 7, 7, 6], [5, 2, 5, 5, 5, 7, 2, 7, 2, 5, 6], [5, 2, 5, 5, 5, 7, 2, 7, 2, 7, 6], [5, 2, 5, 5, 5, 7, 2, 7, 5, 5, 6], [5, 2, 5, 5, 5, 7, 2, 7, 5, 6], [5, 2, 5, 5, 5, 7, 2, 7, 5, 7, 6], [5, 2, 5, 5, 5, 7, 2, 7, 6], [5, 2, 5, 5, 5, 7, 2, 7, 7, 5, 6], [5, 2, 5, 5, 5, 7, 2, 7, 7, 6], [5, 2, 5, 5, 5, 7, 2, 7, 7, 7, 6], [5, 2, 5, 5, 5, 7, 5, 2, 5, 5, 6], [5, 2, 5, 5, 5, 7, 5, 2, 5, 6], [5, 2, 5, 5, 5, 7, 5, 2, 5, 7, 6], [5, 2, 5, 5, 5, 7, 5, 2, 7, 5, 6], [5, 2, 5, 5, 5, 7, 5, 2, 7, 6], [5, 2, 5, 5, 5, 7, 5, 2, 7, 7, 6], [5, 2, 5, 5, 5, 7, 5, 5, 2, 5, 6], [5, 2, 5, 5, 5, 7, 5, 5, 2, 7, 6], [5, 2, 5, 5, 5, 7, 5, 5, 5, 5, 6], [5, 2, 5, 5, 5, 7, 5, 5, 5, 6], [5, 2, 5, 5, 5, 7, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 7, 5, 5, 6], [5, 2, 5, 5, 5, 7, 5, 5, 7, 5, 6], [5, 2, 5, 5, 5, 7, 5, 5, 7, 6], [5, 2, 5, 5, 5, 7, 5, 5, 7, 7, 6], [5, 2, 5, 5, 5, 7, 5, 6], [5, 2, 5, 5, 5, 7, 5, 7, 2, 5, 6], [5, 2, 5, 5, 5, 7, 5, 7, 2, 7, 6], [5, 2, 5, 5, 5, 7, 5, 7, 5, 5, 6], [5, 2, 5, 5, 5, 7, 5, 7, 5, 6], [5, 2, 5, 5, 5, 7, 5, 7, 5, 7, 6], [5, 2, 5, 5, 5, 7, 5, 7, 6], [5, 2, 5, 5, 5, 7, 5, 7, 7, 5, 6], [5, 2, 5, 5, 5, 7, 5, 7, 7, 6], [5, 2, 5, 5, 5, 7, 5, 7, 7, 7, 6], [5, 2, 5, 5, 5, 7, 6], [5, 2, 5, 5, 5, 7, 7, 2, 5, 5, 6], [5, 2, 5, 5, 5, 7, 7, 2, 5, 6], [5, 2, 5, 5, 5, 7, 7, 2, 5, 7, 6], [5, 2, 5, 5, 5, 7, 7, 2, 7, 5, 6], [5, 2, 5, 5, 5, 7, 7, 2, 7, 6], [5, 2, 5, 5, 5, 7, 7, 2, 7, 7, 6], [5, 2, 5, 5, 5, 7, 7, 5, 2, 5, 6], [5, 2, 5, 5, 5, 7, 7, 5, 2, 7, 6], [5, 2, 5, 5, 5, 7, 7, 5, 5, 5, 6], [5, 2, 5, 5, 5, 7, 7, 5, 5, 6], [5, 2, 5, 5, 5, 7, 7, 5, 5, 7, 6], [5, 2, 5, 5, 5, 7, 7, 5, 6], [5, 2, 5, 5, 5, 7, 7, 5, 7, 5, 6], [5, 2, 5, 5, 5, 7, 7, 5, 7, 6], [5, 2, 5, 5, 5, 7, 7, 5, 7, 7, 6], [5, 2, 5, 5, 5, 7, 7, 6], [5, 2, 5, 5, 5, 7, 7, 7, 2, 5, 6], [5, 2, 5, 5, 5, 7, 7, 7, 2, 7, 6], [5, 2, 5, 5, 5, 7, 7, 7, 5, 5, 6], [5, 2, 5, 5, 5, 7, 7, 7, 5, 6], [5, 2, 5, 5, 5, 7, 7, 7, 5, 7, 6], [5, 2, 5, 5, 5, 7, 7, 7, 6], [5, 2, 5, 5, 5, 7, 7, 7, 7, 5, 6], [5, 2, 5, 5, 5, 7, 7, 7, 7, 6], [5, 2, 5, 5, 5, 7, 7, 7, 7, 7, 6], [5, 2, 5, 5, 6], [5, 2, 5, 5, 7, 2, 5, 2, 5, 5, 6], [5, 2, 5, 5, 7, 2, 5, 2, 5, 6], [5, 2, 5, 5, 7, 2, 5, 2, 5, 7, 6], [5, 2, 5, 5, 7, 2, 5, 2, 7, 5, 6], [5, 2, 5, 5, 7, 2, 5, 2, 7, 6], [5, 2, 5, 5, 7, 2, 5, 2, 7, 7, 6], [5, 2, 5, 5, 7, 2, 5, 5, 2, 5, 6], [5, 2, 5, 5, 7, 2, 5, 5, 2, 7, 6], [5, 2, 5, 5, 7, 2, 5, 5, 5, 5, 6], [5, 2, 5, 5, 7, 2, 5, 5, 5, 6], [5, 2, 5, 5, 7, 2, 5, 5, 5, 7, 6], [5, 2, 5, 5, 7, 2, 5, 5, 6], [5, 2, 5, 5, 7, 2, 5, 5, 7, 5, 6], [5, 2, 5, 5, 7, 2, 5, 5, 7, 6], [5, 2, 5, 5, 7, 2, 5, 5, 7, 7, 6], [5, 2, 5, 5, 7, 2, 5, 6], [5, 2, 5, 5, 7, 2, 5, 7, 2, 5, 6], [5, 2, 5, 5, 7, 2, 5, 7, 2, 7, 6], [5, 2, 5, 5, 7, 2, 5, 7, 5, 5, 6], [5, 2, 5, 5, 7, 2, 5, 7, 5, 6], [5, 2, 5, 5, 7, 2, 5, 7, 5, 7, 6], [5, 2, 5, 5, 7, 2, 5, 7, 6], [5, 2, 5, 5, 7, 2, 5, 7, 7, 5, 6], [5, 2, 5, 5, 7, 2, 5, 7, 7, 6], [5, 2, 5, 5, 7, 2, 5, 7, 7, 7, 6], [5, 2, 5, 5, 7, 2, 7, 2, 5, 5, 6], [5, 2, 5, 5, 7, 2, 7, 2, 5, 6], [5, 2, 5, 5, 7, 2, 7, 2, 5, 7, 6], [5, 2, 5, 5, 7, 2, 7, 2, 7, 5, 6], [5, 2, 5, 5, 7, 2, 7, 2, 7, 6], [5, 2, 5, 5, 7, 2, 7, 2, 7, 7, 6], [5, 2, 5, 5, 7, 2, 7, 5, 2, 5, 6], [5, 2, 5, 5, 7, 2, 7, 5, 2, 7, 6], [5, 2, 5, 5, 7, 2, 7, 5, 5, 5, 6], [5, 2, 5, 5, 7, 2, 7, 5, 5, 6], [5, 2, 5, 5, 7, 2, 7, 5, 5, 7, 6], [5, 2, 5, 5, 7, 2, 7, 5, 6], [5, 2, 5, 5, 7, 2, 7, 5, 7, 5, 6], [5, 2, 5, 5, 7, 2, 7, 5, 7, 6], [5, 2, 5, 5, 7, 2, 7, 5, 7, 7, 6], [5, 2, 5, 5, 7, 2, 7, 6], [5, 2, 5, 5, 7, 2, 7, 7, 2, 5, 6], [5, 2, 5, 5, 7, 2, 7, 7, 2, 7, 6], [5, 2, 5, 5, 7, 2, 7, 7, 5, 5, 6], [5, 2, 5, 5, 7, 2, 7, 7, 5, 6], [5, 2, 5, 5, 7, 2, 7, 7, 5, 7, 6], [5, 2, 5, 5, 7, 2, 7, 7, 6], [5, 2, 5, 5, 7, 2, 7, 7, 7, 5, 6], [5, 2, 5, 5, 7, 2, 7, 7, 7, 6], [5, 2, 5, 5, 7, 2, 7, 7, 7, 7, 6], [5, 2, 5, 5, 7, 5, 2, 5, 2, 5, 6], [5, 2, 5, 5, 7, 5, 2, 5, 2, 7, 6], [5, 2, 5, 5, 7, 5, 2, 5, 5, 5, 6], [5, 2, 5, 5, 7, 5, 2, 5, 5, 6], [5, 2, 5, 5, 7, 5, 2, 5, 5, 7, 6], [5, 2, 5, 5, 7, 5, 2, 5, 6], [5, 2, 5, 5, 7, 5, 2, 5, 7, 5, 6], [5, 2, 5, 5, 7, 5, 2, 5, 7, 6], [5, 2, 5, 5, 7, 5, 2, 5, 7, 7, 6], [5, 2, 5, 5, 7, 5, 2, 7, 2, 5, 6], [5, 2, 5, 5, 7, 5, 2, 7, 2, 7, 6], [5, 2, 5, 5, 7, 5, 2, 7, 5, 5, 6], [5, 2, 5, 5, 7, 5, 2, 7, 5, 6], [5, 2, 5, 5, 7, 5, 2, 7, 5, 7, 6], [5, 2, 5, 5, 7, 5, 2, 7, 6], [5, 2, 5, 5, 7, 5, 2, 7, 7, 5, 6], [5, 2, 5, 5, 7, 5, 2, 7, 7, 6], [5, 2, 5, 5, 7, 5, 2, 7, 7, 7, 6], [5, 2, 5, 5, 7, 5, 5, 2, 5, 5, 6], [5, 2, 5, 5, 7, 5, 5, 2, 5, 6], [5, 2, 5, 5, 7, 5, 5, 2, 5, 7, 6], [5, 2, 5, 5, 7, 5, 5, 2, 7, 5, 6], [5, 2, 5, 5, 7, 5, 5, 2, 7, 6], [5, 2, 5, 5, 7, 5, 5, 2, 7, 7, 6], [5, 2, 5, 5, 7, 5, 5, 5, 2, 5, 6], [5, 2, 5, 5, 7, 5, 5, 5, 2, 7, 6], [5, 2, 5, 5, 7, 5, 5, 5, 5, 5, 6], [5, 2, 5, 5, 7, 5, 5, 5, 5, 6], [5, 2, 5, 5, 7, 5, 5, 5, 5, 7, 6], [5, 2, 5, 5, 7, 5, 5, 5, 6], [5, 2, 5, 5, 7, 5, 5, 5, 7, 5, 6], [5, 2, 5, 5, 7, 5, 5, 5, 7, 6], [5, 2, 5, 5, 7, 5, 5, 5, 7, 7, 6], [5, 2, 5, 5, 7, 5, 5, 6], [5, 2, 5, 5, 7, 5, 5, 7, 2, 5, 6], [5, 2, 5, 5, 7, 5, 5, 7, 2, 7, 6], [5, 2, 5, 5, 7, 5, 5, 7, 5, 5, 6], [5, 2, 5, 5, 7, 5, 5, 7, 5, 6], [5, 2, 5, 5, 7, 5, 5, 7, 5, 7, 6], [5, 2, 5, 5, 7, 5, 5, 7, 6], [5, 2, 5, 5, 7, 5, 5, 7, 7, 5, 6], [5, 2, 5, 5, 7, 5, 5, 7, 7, 6], [5, 2, 5, 5, 7, 5, 5, 7, 7, 7, 6], [5, 2, 5, 5, 7, 5, 6], [5, 2, 5, 5, 7, 5, 7, 2, 5, 5, 6], [5, 2, 5, 5, 7, 5, 7, 2, 5, 6], [5, 2, 5, 5, 7, 5, 7, 2, 5, 7, 6], [5, 2, 5, 5, 7, 5, 7, 2, 7, 5, 6], [5, 2, 5, 5, 7, 5, 7, 2, 7, 6], [5, 2, 5, 5, 7, 5, 7, 2, 7, 7, 6], [5, 2, 5, 5, 7, 5, 7, 5, 2, 5, 6], [5, 2, 5, 5, 7, 5, 7, 5, 2, 7, 6], [5, 2, 5, 5, 7, 5, 7, 5, 5, 5, 6], [5, 2, 5, 5, 7, 5, 7, 5, 5, 6], [5, 2, 5, 5, 7, 5, 7, 5, 5, 7, 6], [5, 2, 5, 5, 7, 5, 7, 5, 6], [5, 2, 5, 5, 7, 5, 7, 5, 7, 5, 6], [5, 2, 5, 5, 7, 5, 7, 5, 7, 6], [5, 2, 5, 5, 7, 5, 7, 5, 7, 7, 6], [5, 2, 5, 5, 7, 5, 7, 6], [5, 2, 5, 5, 7, 5, 7, 7, 2, 5, 6], [5, 2, 5, 5, 7, 5, 7, 7, 2, 7, 6], [5, 2, 5, 5, 7, 5, 7, 7, 5, 5, 6], [5, 2, 5, 5, 7, 5, 7, 7, 5, 6], [5, 2, 5, 5, 7, 5, 7, 7, 5, 7, 6], [5, 2, 5, 5, 7, 5, 7, 7, 6], [5, 2, 5, 5, 7, 5, 7, 7, 7, 5, 6], [5, 2, 5, 5, 7, 5, 7, 7, 7, 6], [5, 2, 5, 5, 7, 5, 7, 7, 7, 7, 6], [5, 2, 5, 5, 7, 6], [5, 2, 5, 5, 7, 7, 2, 5, 2, 5, 6], [5, 2, 5, 5, 7, 7, 2, 5, 2, 7, 6], [5, 2, 5, 5, 7, 7, 2, 5, 5, 5, 6], [5, 2, 5, 5, 7, 7, 2, 5, 5, 6], [5, 2, 5, 5, 7, 7, 2, 5, 5, 7, 6], [5, 2, 5, 5, 7, 7, 2, 5, 6], [5, 2, 5, 5, 7, 7, 2, 5, 7, 5, 6], [5, 2, 5, 5, 7, 7, 2, 5, 7, 6], [5, 2, 5, 5, 7, 7, 2, 5, 7, 7, 6], [5, 2, 5, 5, 7, 7, 2, 7, 2, 5, 6], [5, 2, 5, 5, 7, 7, 2, 7, 2, 7, 6], [5, 2, 5, 5, 7, 7, 2, 7, 5, 5, 6], [5, 2, 5, 5, 7, 7, 2, 7, 5, 6], [5, 2, 5, 5, 7, 7, 2, 7, 5, 7, 6], [5, 2, 5, 5, 7, 7, 2, 7, 6], [5, 2, 5, 5, 7, 7, 2, 7, 7, 5, 6], [5, 2, 5, 5, 7, 7, 2, 7, 7, 6], [5, 2, 5, 5, 7, 7, 2, 7, 7, 7, 6], [5, 2, 5, 5, 7, 7, 5, 2, 5, 5, 6], [5, 2, 5, 5, 7, 7, 5, 2, 5, 6], [5, 2, 5, 5, 7, 7, 5, 2, 5, 7, 6], [5, 2, 5, 5, 7, 7, 5, 2, 7, 5, 6], [5, 2, 5, 5, 7, 7, 5, 2, 7, 6], [5, 2, 5, 5, 7, 7, 5, 2, 7, 7, 6], [5, 2, 5, 5, 7, 7, 5, 5, 2, 5, 6], [5, 2, 5, 5, 7, 7, 5, 5, 2, 7, 6], [5, 2, 5, 5, 7, 7, 5, 5, 5, 5, 6], [5, 2, 5, 5, 7, 7, 5, 5, 5, 6], [5, 2, 5, 5, 7, 7, 5, 5, 5, 7, 6], [5, 2, 5, 5, 7, 7, 5, 5, 6], [5, 2, 5, 5, 7, 7, 5, 5, 7, 5, 6], [5, 2, 5, 5, 7, 7, 5, 5, 7, 6], [5, 2, 5, 5, 7, 7, 5, 5, 7, 7, 6], [5, 2, 5, 5, 7, 7, 5, 6], [5, 2, 5, 5, 7, 7, 5, 7, 2, 5, 6], [5, 2, 5, 5, 7, 7, 5, 7, 2, 7, 6], [5, 2, 5, 5, 7, 7, 5, 7, 5, 5, 6], [5, 2, 5, 5, 7, 7, 5, 7, 5, 6], [5, 2, 5, 5, 7, 7, 5, 7, 5, 7, 6], [5, 2, 5, 5, 7, 7, 5, 7, 6], [5, 2, 5, 5, 7, 7, 5, 7, 7, 5, 6], [5, 2, 5, 5, 7, 7, 5, 7, 7, 6], [5, 2, 5, 5, 7, 7, 5, 7, 7, 7, 6], [5, 2, 5, 5, 7, 7, 6], [5, 2, 5, 5, 7, 7, 7, 2, 5, 5, 6], [5, 2, 5, 5, 7, 7, 7, 2, 5, 6], [5, 2, 5, 5, 7, 7, 7, 2, 5, 7, 6], [5, 2, 5, 5, 7, 7, 7, 2, 7, 5, 6], [5, 2, 5, 5, 7, 7, 7, 2, 7, 6], [5, 2, 5, 5, 7, 7, 7, 2, 7, 7, 6], [5, 2, 5, 5, 7, 7, 7, 5, 2, 5, 6], [5, 2, 5, 5, 7, 7, 7, 5, 2, 7, 6], [5, 2, 5, 5, 7, 7, 7, 5, 5, 5, 6], [5, 2, 5, 5, 7, 7, 7, 5, 5, 6], [5, 2, 5, 5, 7, 7, 7, 5, 5, 7, 6], [5, 2, 5, 5, 7, 7, 7, 5, 6], [5, 2, 5, 5, 7, 7, 7, 5, 7, 5, 6], [5, 2, 5, 5, 7, 7, 7, 5, 7, 6], [5, 2, 5, 5, 7, 7, 7, 5, 7, 7, 6], [5, 2, 5, 5, 7, 7, 7, 6], [5, 2, 5, 5, 7, 7, 7, 7, 2, 5, 6], [5, 2, 5, 5, 7, 7, 7, 7, 2, 7, 6], [5, 2, 5, 5, 7, 7, 7, 7, 5, 5, 6], [5, 2, 5, 5, 7, 7, 7, 7, 5, 6], [5, 2, 5, 5, 7, 7, 7, 7, 5, 7, 6], [5, 2, 5, 5, 7, 7, 7, 7, 6], [5, 2, 5, 5, 7, 7, 7, 7, 7, 5, 6], [5, 2, 5, 5, 7, 7, 7, 7, 7, 6], [5, 2, 5, 5, 7, 7, 7, 7, 7, 7, 6], [5, 2, 5, 6], [5, 2, 5, 7, 2, 5, 2, 5, 2, 5, 6], [5, 2, 5, 7, 2, 5, 2, 5, 2, 7, 6], [5, 2, 5, 7, 2, 5, 2, 5, 5, 5, 6], [5, 2, 5, 7, 2, 5, 2, 5, 5, 6], [5, 2, 5, 7, 2, 5, 2, 5, 5, 7, 6], [5, 2, 5, 7, 2, 5, 2, 5, 6], [5, 2, 5, 7, 2, 5, 2, 5, 7, 5, 6], [5, 2, 5, 7, 2, 5, 2, 5, 7, 6], [5, 2, 5, 7, 2, 5, 2, 5, 7, 7, 6], [5, 2, 5, 7, 2, 5, 2, 7, 2, 5, 6], [5, 2, 5, 7, 2, 5, 2, 7, 2, 7, 6], [5, 2, 5, 7, 2, 5, 2, 7, 5, 5, 6], [5, 2, 5, 7, 2, 5, 2, 7, 5, 6], [5, 2, 5, 7, 2, 5, 2, 7, 5, 7, 6], [5, 2, 5, 7, 2, 5, 2, 7, 6], [5, 2, 5, 7, 2, 5, 2, 7, 7, 5, 6], [5, 2, 5, 7, 2, 5, 2, 7, 7, 6], [5, 2, 5, 7, 2, 5, 2, 7, 7, 7, 6], [5, 2, 5, 7, 2, 5, 5, 2, 5, 5, 6], [5, 2, 5, 7, 2, 5, 5, 2, 5, 6], [5, 2, 5, 7, 2, 5, 5, 2, 5, 7, 6], [5, 2, 5, 7, 2, 5, 5, 2, 7, 5, 6], [5, 2, 5, 7, 2, 5, 5, 2, 7, 6], [5, 2, 5, 7, 2, 5, 5, 2, 7, 7, 6], [5, 2, 5, 7, 2, 5, 5, 5, 2, 5, 6], [5, 2, 5, 7, 2, 5, 5, 5, 2, 7, 6], [5, 2, 5, 7, 2, 5, 5, 5, 5, 5, 6], [5, 2, 5, 7, 2, 5, 5, 5, 5, 6], [5, 2, 5, 7, 2, 5, 5, 5, 5, 7, 6], [5, 2, 5, 7, 2, 5, 5, 5, 6], [5, 2, 5, 7, 2, 5, 5, 5, 7, 5, 6], [5, 2, 5, 7, 2, 5, 5, 5, 7, 6], [5, 2, 5, 7, 2, 5, 5, 5, 7, 7, 6], [5, 2, 5, 7, 2, 5, 5, 6], [5, 2, 5, 7, 2, 5, 5, 7, 2, 5, 6], [5, 2, 5, 7, 2, 5, 5, 7, 2, 7, 6], [5, 2, 5, 7, 2, 5, 5, 7, 5, 5, 6], [5, 2, 5, 7, 2, 5, 5, 7, 5, 6], [5, 2, 5, 7, 2, 5, 5, 7, 5, 7, 6], [5, 2, 5, 7, 2, 5, 5, 7, 6], [5, 2, 5, 7, 2, 5, 5, 7, 7, 5, 6], [5, 2, 5, 7, 2, 5, 5, 7, 7, 6], [5, 2, 5, 7, 2, 5, 5, 7, 7, 7, 6], [5, 2, 5, 7, 2, 5, 6], [5, 2, 5, 7, 2, 5, 7, 2, 5, 5, 6], [5, 2, 5, 7, 2, 5, 7, 2, 5, 6], [5, 2, 5, 7, 2, 5, 7, 2, 5, 7, 6], [5, 2, 5, 7, 2, 5, 7, 2, 7, 5, 6], [5, 2, 5, 7, 2, 5, 7, 2, 7, 6], [5, 2, 5, 7, 2, 5, 7, 2, 7, 7, 6], [5, 2, 5, 7, 2, 5, 7, 5, 2, 5, 6], [5, 2, 5, 7, 2, 5, 7, 5, 2, 7, 6], [5, 2, 5, 7, 2, 5, 7, 5, 5, 5, 6], [5, 2, 5, 7, 2, 5, 7, 5, 5, 6], [5, 2, 5, 7, 2, 5, 7, 5, 5, 7, 6], [5, 2, 5, 7, 2, 5, 7, 5, 6], [5, 2, 5, 7, 2, 5, 7, 5, 7, 5, 6], [5, 2, 5, 7, 2, 5, 7, 5, 7, 6], [5, 2, 5, 7, 2, 5, 7, 5, 7, 7, 6], [5, 2, 5, 7, 2, 5, 7, 6], [5, 2, 5, 7, 2, 5, 7, 7, 2, 5, 6], [5, 2, 5, 7, 2, 5, 7, 7, 2, 7, 6], [5, 2, 5, 7, 2, 5, 7, 7, 5, 5, 6], [5, 2, 5, 7, 2, 5, 7, 7, 5, 6], [5, 2, 5, 7, 2, 5, 7, 7, 5, 7, 6], [5, 2, 5, 7, 2, 5, 7, 7, 6], [5, 2, 5, 7, 2, 5, 7, 7, 7, 5, 6], [5, 2, 5, 7, 2, 5, 7, 7, 7, 6], [5, 2, 5, 7, 2, 5, 7, 7, 7, 7, 6], [5, 2, 5, 7, 2, 7, 2, 5, 2, 5, 6], [5, 2, 5, 7, 2, 7, 2, 5, 2, 7, 6], [5, 2, 5, 7, 2, 7, 2, 5, 5, 5, 6], [5, 2, 5, 7, 2, 7, 2, 5, 5, 6], [5, 2, 5, 7, 2, 7, 2, 5, 5, 7, 6], [5, 2, 5, 7, 2, 7, 2, 5, 6], [5, 2, 5, 7, 2, 7, 2, 5, 7, 5, 6], [5, 2, 5, 7, 2, 7, 2, 5, 7, 6], [5, 2, 5, 7, 2, 7, 2, 5, 7, 7, 6], [5, 2, 5, 7, 2, 7, 2, 7, 2, 5, 6], [5, 2, 5, 7, 2, 7, 2, 7, 2, 7, 6], [5, 2, 5, 7, 2, 7, 2, 7, 5, 5, 6], [5, 2, 5, 7, 2, 7, 2, 7, 5, 6], [5, 2, 5, 7, 2, 7, 2, 7, 5, 7, 6], [5, 2, 5, 7, 2, 7, 2, 7, 6], [5, 2, 5, 7, 2, 7, 2, 7, 7, 5, 6], [5, 2, 5, 7, 2, 7, 2, 7, 7, 6], [5, 2, 5, 7, 2, 7, 2, 7, 7, 7, 6], [5, 2, 5, 7, 2, 7, 5, 2, 5, 5, 6], [5, 2, 5, 7, 2, 7, 5, 2, 5, 6], [5, 2, 5, 7, 2, 7, 5, 2, 5, 7, 6], [5, 2, 5, 7, 2, 7, 5, 2, 7, 5, 6], [5, 2, 5, 7, 2, 7, 5, 2, 7, 6], [5, 2, 5, 7, 2, 7, 5, 2, 7, 7, 6], [5, 2, 5, 7, 2, 7, 5, 5, 2, 5, 6], [5, 2, 5, 7, 2, 7, 5, 5, 2, 7, 6], [5, 2, 5, 7, 2, 7, 5, 5, 5, 5, 6], [5, 2, 5, 7, 2, 7, 5, 5, 5, 6], [5, 2, 5, 7, 2, 7, 5, 5, 5, 7, 6], [5, 2, 5, 7, 2, 7, 5, 5, 6], [5, 2, 5, 7, 2, 7, 5, 5, 7, 5, 6], [5, 2, 5, 7, 2, 7, 5, 5, 7, 6], [5, 2, 5, 7, 2, 7, 5, 5, 7, 7, 6], [5, 2, 5, 7, 2, 7, 5, 6], [5, 2, 5, 7, 2, 7, 5, 7, 2, 5, 6], ...]
python# list is huge len(all_cycles) 60489
python# compute average latency for each cycle min_avg=INF best_cycle=None for latencies in all_cycles: avg=sum(latencies)/len(latencies) if avg<min_avg: min_avg=avg best_cycle=latencies min_avg 3.5
pythonbest_cycle[:20] [2, 5]
pythonstarts=[0] lat_seq=[2,5]*5 # will produce more for l in lat_seq[:5]: # need 5 latencies to produce 6 tasks starts.append(starts[-1]+l) starts [0, 2, 7, 9, 14, 16]
pythonlast_completion=starts[-1]+9 total_time=last_completion-starts[0] tp=6/total_time tp 0.24
pythontotal_time 25
python[bin(s)[2:].zfill(8) for s in visited] ['00000000', '10001111', '10001101', '10101111']
pythonstate_labels={s:bin(s)[2:].zfill(8) for s in visited} graph_labels={state_labels[s]:[(state_labels[ns],l) for ns,l in graph[s]] for s in graph} graph_labels {'00000000': [('10001101', 2), ('10001101', 5), ('10001101', 6), ('10001101', 7)], '10001101': [('10101111', 2), ('10001101', 5), ('10001111', 6), ('10001101', 7)], '10101111': [('10001101', 5), ('10001101', 7)], '10001111': [('10001101', 5), ('10001111', 6), ('10001101', 7)]}
(5 条流水线段 S1–S5,9 个拍 t0–t8;“●”表示本拍该段被占用)
段\拍 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
S1 | ● | ● | |||||||
S2 | ● | ● | |||||||
S3 | ● | ● | ● | ||||||
S4 | ● | ● | |||||||
S5 | ● | ● |
把原表再向右平移 l 拍并与原表相“与”,若出现“●”重叠,则 l 为禁止延迟。9 拍流水线只需检查 1 ~ 8:
延迟 l | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
冲突? | ✓ | ✓ | ✓ | ✓ |
F = { 1, 3, 4, 8 }
用 1 表示禁止延迟,按 l = 1 … 8 排列:
C = 1 0 1 1 0 0 0 1 → 10110001_2
1 状态(4 个):8 位移位寄存器的内容
textS0 = 00000000 (初态) S1 = 10001101 S2 = 10001111 S3 = 10101111
位 i=1…8 为 “1” 代表接下来 i 拍因以往启动而不允许再启动。
2 可选延迟:在某状态下可启动的最小 l,是
• l 不在 F 且
• 当前状态寄存器第 (l-1) 位为 0。
3 转移:启动后把寄存器右移 l 位,再把 C “或” 入寄存器。
下表即转移图(边上标的是选择的延迟 l):
由\到 | S0 | S1 | S2 | S3 |
---|---|---|---|---|
S0 | 2,5,6,7 | |||
S1 | 5,7 | 6 | 2 | |
S2 | 5,7 | 6 | ||
S3 | 5,7 | 6 |
在状态图中找 平均延迟最小的有向环。
最大吞吐率
按周期序列 〈2, 5〉 重复启动:
text任务 1: t = 0 任务 2: t = 2 任务 3: t = 7 任务 4: t = 9 任务 5: t = 14 任务 6: t = 16 ... 之后每 2,5,2,5 周期交替
实际值低于理论上限 的原因是 起步阶段的流水线充填时间 无法避免;任务数越多,实际吞吐率越趋近 。
照此步骤,你可以处理任何类似的流水线调度题目。祝学习顺利!