Dobinski's formula: Difference between revisions
en>Austinmohr →A proof: changed reference to a freely available version of the paper |
ń |
||
Line 1: | Line 1: | ||
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 dependencies''' and '''[[Data dependency|data dependencies]]'''. | |||
Dependence analysis determines whether or not it is safe to '''reorder''' or '''parallelize''' statements. | |||
== Control dependencies == | |||
Control dependence is a situation in which a program’s instruction executes if the previous instruction evaluates in a way that allows its execution. | |||
A statement ''S2'' is control dependent on ''S1'' (written <math>S1\ \delta^c\ S2</math>) if and only if ''S2'''s execution is conditionally guarded by ''S1''. The following is an example of such a control dependence: | |||
S1 if x > 2 goto L1 | |||
S2 y := 3 | |||
S3 L1: z := y + 1 | |||
Here, ''S2'' only runs if the predicate in ''S1'' is false. | |||
== Data dependencies == | |||
A data dependence arises from two statements which access or modify the same resource. | |||
=== Flow(True) dependence === | |||
A statement ''S2'' is '''flow dependent''' on ''S1'' (written <math>S1\ \delta^f\ S2</math>) if and only if ''S1'' modifies a resource that ''S2'' reads and ''S1'' precedes ''S2'' in execution. The following is an example of a flow dependence (RAW: Read After Write): | |||
S1 x := 10 | |||
S2 y := x + c | |||
=== Antidependence === | |||
A statement ''S2'' is '''antidependent''' on ''S1'' (written <math>S1\ \delta^a\ S2</math>) if and only if ''S2'' modifies a resource that ''S1'' reads and ''S1'' precedes ''S2'' in execution. The following is an example of an antidependence (WAR: Write After Read): | |||
S1 x := y + c | |||
S2 y := 10 | |||
Here, ''S2'' sets the value of <code>y</code> but ''S1'' reads a prior value of <code>y</code>. | |||
=== Output dependence === | |||
A statement ''S2'' is '''output dependent''' on ''S1'' (written <math>S1\ \delta^o\ S2</math>) if and only if ''S1'' and ''S2'' modify the same resource and ''S1'' precedes ''S2'' in execution. The following is an example of an output dependence (WAW: Write After Write): | |||
S1 x := 10 | |||
S2 x := 20 | |||
Here, ''S2'' and ''S1'' both set the variable <code>x</code>. | |||
=== Input dependence === | |||
A statement ''S2'' is '''input dependent''' on ''S1'' (written <math>S1\ \delta^i\ S2</math>) if and only if ''S1'' and ''S2'' read the same resource and ''S1'' precedes ''S2'' in execution. The following is an example of an input dependence (RAR: Read-After-Read): | |||
S1 y := x + 3 | |||
S2 z := x + 5 | |||
Here, ''S2'' and ''S1'' both access the variable <code>x</code>. This dependence does not prohibit reordering. | |||
== Loop dependencies == | |||
The problem of computing dependencies within loops, which is a significant and nontrivial problem, is tackled by [[loop dependence analysis]], which extends the dependence framework given here. | |||
==See also== | |||
* [[Program analysis (computer science)]] | |||
* [[Automatic parallelization]] | |||
* [[Vectorization (parallel computing)]] | |||
* [[Loop dependence analysis]] | |||
* [[Frameworks supporting the polyhedral model]] | |||
== Further reading == | |||
* {{cite book | author=Cooper, Keith D.; & Torczon, Linda. | title=Engineering a Compiler | publisher=Morgan Kaufmann | year=2005 | isbn=1-55860-698-X}} | |||
* {{cite book | author=Kennedy, Ken; & Allen, Randy. | title=Optimizing Compilers for Modern Architectures: A Dependence-based Approach | publisher=Morgan Kaufmann | year=2001 | isbn=1-55860-286-0}} | |||
* {{cite book | author=Muchnick, Steven S. | title=Advanced Compiler Design and Implementation | publisher=Morgan Kaufmann | year=1997 | isbn=1-55860-320-4}} | |||
[[Category:Static program analysis]] |
Latest revision as of 11:23, 29 November 2013
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 dependencies and data dependencies.
Dependence analysis determines whether or not it is safe to reorder or parallelize statements.
Control dependencies
Control dependence is a situation in which a program’s instruction executes if the previous instruction evaluates in a way that allows its execution.
A statement S2 is control dependent on S1 (written ) if and only if S2's execution is conditionally guarded by S1. The following is an example of such a control dependence:
S1 if x > 2 goto L1 S2 y := 3 S3 L1: z := y + 1
Here, S2 only runs if the predicate in S1 is false.
Data dependencies
A data dependence arises from two statements which access or modify the same resource.
Flow(True) dependence
A statement S2 is flow dependent on S1 (written ) if and only if S1 modifies a resource that S2 reads and S1 precedes S2 in execution. The following is an example of a flow dependence (RAW: Read After Write):
S1 x := 10 S2 y := x + c
Antidependence
A statement S2 is antidependent on S1 (written ) if and only if S2 modifies a resource that S1 reads and S1 precedes S2 in execution. The following is an example of an antidependence (WAR: Write After Read):
S1 x := y + c S2 y := 10
Here, S2 sets the value of y
but S1 reads a prior value of y
.
Output dependence
A statement S2 is output dependent on S1 (written ) if and only if S1 and S2 modify the same resource and S1 precedes S2 in execution. The following is an example of an output dependence (WAW: Write After Write):
S1 x := 10 S2 x := 20
Here, S2 and S1 both set the variable x
.
Input dependence
A statement S2 is input dependent on S1 (written ) if and only if S1 and S2 read the same resource and S1 precedes S2 in execution. The following is an example of an input dependence (RAR: Read-After-Read):
S1 y := x + 3 S2 z := x + 5
Here, S2 and S1 both access the variable x
. This dependence does not prohibit reordering.
Loop dependencies
The problem of computing dependencies within loops, which is a significant and nontrivial problem, is tackled by loop dependence analysis, which extends the dependence framework given here.
See also
- Program analysis (computer science)
- Automatic parallelization
- Vectorization (parallel computing)
- Loop dependence analysis
- Frameworks supporting the polyhedral model
Further reading
- 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534 - 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534 - 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534