Dependence analysis

Dependence analysis

Dependence analysis bzw. die Abhängigkeitsanalyse stellt im Compilerbau die Abhängigkeit zwischen Anweisungen fest. Daraus wird ermittelt wann es sicher ist die Ausführungsreihenfolge von Programmen zu verändern bzw. zu parallelisieren. Allgemein hängt eine Anweisung S2 von S1 ab, wenn S1 vor S2 ausgeführt werden muss. Es gibt zwei Klassen von Abhängigkeiten: Kontrollflussabhängigkeit (control dependence) und Datenabhängigkeit (data dependence).

Inhaltsverzeichnis

Kontrollflussabhängigkeit

Kontrollflussabhängigkeit liegt vor im Falle, dass eine Programmanweisung ausgeführt wird, wenn die Auswertung der vorangegangenen Anweisung dies erlaubt. Eine Anweisung S2 ist kontrollflussabhängig von S1 (S1\ \delta^c\ S2), genau dann, wenn die Ausführung von S2 von S1 bedingt geschützt ist. Das folgende Beispiel zeigt eine solche Abhängigkeit:

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

S1 bis S3 sind Zeilenbeschriftungen. L1 ist eine Sprungmarke. Hierbei wird S2 nur ausgeführt, wenn die Auswertung bei S1 'True' ergibt.

Datenabhängigkeit

Datenabhängigkeit entsteht bei zwei Anweisungen, die auf dieselben Ressourcen lesen oder schreiben.

Echte Datenabhängigkeit (flow dependence)

Eine Anweisung S2 ist von S1 flow dependent (S1\ \delta^f\ S2), genau dann wenn S1 eine Ressource verändert, die von S2 gelesen wird und S1 vor S2 ausgeführt wird. Nachfolgend ein Beispiel für Flow dependence (RAW: Read After Write):

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

Gegenabhängigkeit (antidependence)

Eine Anweisung S2 ist von S1 antidependent (S1\ \delta^a\ S2), genau dann wenn S2 eine Ressource verändert, die von S1 gelesen wird und S1 vor S2 ausgeführt wird. Nachfolgend ein Beispiel für Antidependence (WAR: Write After Read):

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

Hierbei schreibt S2 einen Wert in y, aber S1 liest einen vorherigen Wert von y.

Ausgabeabhängigkeit (output dependence)

Eine Anweisung S2 ist von S1 output dependent (S1\ \delta^o\ S2), genau dann wenn S1 und S2 dieselbe Ressource verändern und S1 vor S2 ausgeführt wird. Nachfolgend ein Beispiel für Output dependence (WAW: Write After Write):

S1       x := 10
S2       x := 20

Hierbei schreibt sowohl S1 als auch S2 die Variable x.

Eingabeabhängigkeit (input "dependence")

Eine Anweisung S2 ist von S1 input dependent (S1\ \delta^i\ S2), genau dann wenn S1 und S2 dieselbe Ressource lesen und S1 vor S2 ausgeführt wird. Nachfolgend ein Beispiel für Input dependence:

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

Hier lesen S1 und S2 die Variable x. Dies ist keine Abhängigkeit im Sinne der anderen, dass eine Änderung der Anweisungsreihenfolge verhindert wird. Einige Compiler jedoch können mit Hilfe dieser Definition Optimierungen finden.

Loop dependence

Das Problem, Abhängigkeiten innerhalb von Schleifen zu berechnen, ist bedeutend und nicht trivial. Es wird in der Schleifenparallelisierung (Loop dependence analysis) verfolgt.

Literatur

  • Cooper, Keith D.; & Torczon, Linda.: Engineering a Compiler. Morgan Kaufman Publ Inc, 2005, ISBN 978-1558606982. 
  • Kennedy, Ken; & Allen, Randy.: Optimizing Compilers for Modern Architectures: A Dependence-based Approach. Morgan Kaufman Publ Inc, 2001, ISBN 1-55860-286-0. 
  • Muchnick, Steven S.: Advanced Compiler Design and Implementation. Morgan Kaufmann Publ Inc, 1997, ISBN 1-55860-320-4. 

Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Dependence analysis — In compiler theory, dependence analysis produces execution order constraints between statements/instructions. Broadly speaking, a statement S2 depends on S1 if S1 must be executed before S2. Broadly, there are two classes of dependencies control… …   Wikipedia

  • Loop dependence analysis — In compiler theory, loop dependence analysis is the task of determining whether statements within a loop body form a dependence, almost always with respect to array access and modification. For a normalized loop: for i1 from l1 to u1 do for i2… …   Wikipedia

  • analysis — /euh nal euh sis/, n., pl. analyses / seez /. 1. the separating of any material or abstract entity into its constituent elements (opposed to synthesis). 2. this process as a method of studying the nature of something or of determining its… …   Universalium

  • Analysis of variance — In statistics, analysis of variance (ANOVA) is a collection of statistical models, and their associated procedures, in which the observed variance in a particular variable is partitioned into components attributable to different sources of… …   Wikipedia

  • Correlation and dependence — This article is about correlation and dependence in statistical data. For other uses, see correlation (disambiguation). In statistics, dependence refers to any statistical relationship between two random variables or two sets of data. Correlation …   Wikipedia

  • Substance dependence — Substance dependency Classification and external resources ICD 10 F10.2 F19.2 ICD 9 …   Wikipedia

  • Spatial dependence — In mathematical statistics, spatial dependence is a measure for the degree of associative dependence between independently measured values in a temporally or in situ ordered set, determined in samples selected at positions with different… …   Wikipedia

  • Path dependence — explains how the set of decisions one faces for any given circumstance is limited by the decisions one has made in the past, even though past circumstances may no longer be relevant. [Definition from [http://poopthebook.com/blog/?p=20 Our Love Of …   Wikipedia

  • Cocaine dependence — Classification and external resources ICD 10 F14.2 ICD 9 304.2 …   Wikipedia

  • Statistical coupling analysis — or SCA is a technique used in bioinformatics to measure covariation between pairs of amino acids in a protein multiple sequence alignment (MSA). More specifically, it quantifies how much the amino acid distribution at some position i changes upon …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”