Analisi delle dipendenze - Dependence analysis

Nella teoria del compilatore , l' analisi delle dipendenze produce vincoli sull'ordine di esecuzione tra istruzioni / istruzioni. In generale, un'istruzione S2 dipende da S1 se S1 deve essere eseguita prima di S2 . In generale, ci sono due classi di dipendenze: dipendenze di controllo e dipendenze dai dati .

L'analisi delle dipendenze determina se è sicuro riordinare o parallelizzare le istruzioni.

Controlla le dipendenze

La dipendenza dal controllo è una situazione in cui viene eseguita un'istruzione di programma se l'istruzione precedente valuta in un modo che ne consente l'esecuzione.

Un'istruzione S2 dipende dal controllo da S1 (scritta ) se e solo se l' esecuzione di S2 è controllata condizionatamente da S1 . Il seguente è un esempio di tale dipendenza dal controllo:

S1       if x > 2 goto L1
S2       y := 3   
S3   L1: z := y + 1

Qui, S2 viene eseguito solo se il predicato in S1 è falso.

Vedi dipendenze dei dati per maggiori dettagli.

Dipendenze dai dati

Una dipendenza dai dati deriva da due istruzioni che accedono o modificano la stessa risorsa.

Flusso (vera) dipendenza

Una dichiarazione S2 è flusso dipende in S1 (scritto ) se e solo se S1 modifica una risorsa che S2 legge e S1 precede S2 in esecuzione. Di seguito è riportato un esempio di dipendenza dal flusso (RAW: lettura dopo scrittura):

S1       x := 10
S2       y := x + c

Antidependence

Una dichiarazione S2 è antidependent su S1 (scritto ) se e solo se S2 modifica una risorsa che S1 legge e S1 precede S2 in esecuzione. Quello che segue è un esempio di antidependence (WAR: Write After Read):

S1       x := y + c
S2       y := 10

Qui, S2 imposta il valore di y ma S1 legge un valore precedente di y .

Dipendenza dall'output

Un'istruzione S2 viene emessa dipendente da S1 (scritta ) se e solo se S1 e S2 modificano la stessa risorsa e S1 precede S2 in esecuzione. Di seguito è riportato un esempio di dipendenza dell'uscita (WAW: Write After Write):

S1       x := 10
S2       x := 20

Qui, S2 e S1 impostano entrambi la variabile x .

Dipendenza dall'input

Un'istruzione S2 è input dipendente da S1 (scritto ) se e solo se S1 e S2 leggono la stessa risorsa e S1 precede S2 in esecuzione. Di seguito è riportato un esempio di dipendenza dall'input (RAR: Read-After-Read):

S1       y := x + 3
S2       z := x + 5

Qui, S2 e S1 accedono entrambi alla variabile x . Questa dipendenza non proibisce il riordino.

Dipendenze del ciclo

Il problema del calcolo delle dipendenze all'interno dei cicli, che è un problema significativo e non banale, viene affrontato dall'analisi della dipendenza dai cicli , che estende la struttura delle dipendenze qui fornita.

Guarda anche

Ulteriore lettura

  • Cooper, Keith D .; Torczon, Linda. (2005). Progettazione di un compilatore . Morgan Kaufmann. ISBN   1-55860-698-X .
  • Kennedy, Ken; Allen, Randy. (2001). Ottimizzazione dei compilatori per le architetture moderne: un approccio basato sulla dipendenza . Morgan Kaufmann. ISBN   1-55860-286-0 .
  • Muchnick, Steven S. (1997). Progettazione e implementazione avanzate del compilatore . Morgan Kaufmann. ISBN   1-55860-320-4 .