Loop-level parallelism: Difference between revisions

Content deleted Content added
Ewhorton (talk | contribs)
Ewhorton (talk | contribs)
Line 122:
== Types of Loop-level parallelism ==
 
There are a variety of methodologies for parallelizing loops.
Loops are one of the most common sources of parallelism found within code, and can be parallelized in a variety of ways, including:
 
* DISTRIBUTED Loop
* DOALL Parallelism
* DOACROSS Parallelism
* DOPIPE Parallelism
* DISTRIBUTED Loop
* HELIX <ref name="Parallelism in DOACROSS Loops">{{cite web|last1=Murphy|first1=Niall|title=Discovering and exploiting parallelism in DOACROSS loops|url=https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-882.pdf|website=University of Cambridge|accessdate=10 September 2016}}</ref>
* DOPIPE Parallelism
 
Each implementation varies slightly in how threads worksynchronize, together toif manageat dataall. In addition, parallel tasks must somehow be mapped to a processorprocess. These tasks can either be allocated statically or dynamically. Research has shown that load-balancing can be better achieved through some dynamic allocation algorithms than when done dynamically.<ref>{{cite journal|last1=Kavi|first1=Krishna|title=Parallelization of DOALL and DOACROSS Loops-a Survey|accessdate=13 September 2016|ref=https://www.researchgate.net/publication/220662641_Parallelization_of_DOALL_and_DOACROSS_Loops-a_Survey}}</ref>
 
The process of parallelizing a sequential program can be broken down into the following discrete steps.<ref name="Solihin" /> Each concrete loop-parallelization below implicitly performs them.