7 / 20 · Concetto
Flag valid, tag e svuotamento
Distingui zero numerico, bolle e token appartenenti a un altro lavoro.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Un token trasporta più di un numero
Il nostro token di riferimento contiene value, valid, job e k. Un token non valido è una bolla. Un token valido con valore zero è un vero operando della matrice. Job identifica la transazione; k identifica il termine di riduzione. Il cablaggio fissa la riga A e la colonna B per ogni PE, mentre il wrapper ricorda le coordinate dei blocchi.
Quando entrambi gli ingressi sono validi, verifica che i tag job e k siano uguali prima di moltiplicare. A(0,1)=2 accoppiato con B(0,0)=5 produce dieci, ma non è un termine legittimo. La coppia corrispondente k=1 è due e sette, che produce quattordici. Tratta una differenza di tag come errore di verifica visibile anziché scartarla silenziosamente come una normale bolla.
Conta i termini, non i clock
Clear avvia acc=0 e count=0. Per ogni coppia corrispondente, richiedi k=count, poi incrementa count. Consumare k=K−1 completa il risultato locale immediatamente dopo quel fronte. Bolle e pause non incrementano count. Questo semplice controllore richiede valori k ordinati. Supportare un ordine arbitrario richiede una bitmap dei termini ricevuti e il rilevamento dei duplicati.
Per K=2, consumare uno e cinque dà acc=5, count=1. Una bolla lascia entrambi invariati. Consumare due e sette con k=1 dà acc=19, count=2 e done. Un k=1 ripetuto è un errore anche se un consumatore a valle ha già accettato il risultato.
Completamento del transito e azzeramento hanno scopi diversi
L'array non è vuoto quando entra l'ultimo ingresso al confine. Rimangono token nei registri interni di inoltro. Continua ad avanzare con ingressi al confine non validi finché l'ultimo PE consuma il proprio termine finale. Durante questo completamento del transito, conserva gli accumulatori completati finché i risultati vengono raccolti. Iniziare un nuovo lavoro richiede invece di azzerare insieme accumulatore, conteggio, valid e stato dei tag.
Il wrapper di questo corso esegue un lavoro alla volta. Completa, raccoglie i risultati, azzera, poi riparte. Sovrapporre lavori richiede stato o accumulatori aggiuntivi e un protocollo di uscita; i soli tag non forniscono questa capacità. Le prove devono includere tag diversi, termini mancanti e ripetuti, stato valid residuo dopo clear e operandi zero validi che incrementano comunque il conteggio dei termini.
Prova tu
Un PE con K=3 consuma la coppia k=0 (2,4), una bolla, la coppia k=1 (0,9) e la coppia k=2 (−1,3). Trova acc e count. Che cosa accade se il tag job finale non corrisponde?
Leggi la spiegazione
Con tag corrispondenti, acc=5 e count=3, quindi il risultato è completo. La bolla non conta; lo zero valido sì. Un job diverso deve causare un errore di verifica e non può essere riportato come completamento riuscito.