Check out my first novel, midnight's simulacra!

Compiler Design: Difference between revisions

From dankwiki
Line 39: Line 39:
* Loop blocking/tiling/strip-mining -- breaking out subloops to work on a cache-friendly block at once
* Loop blocking/tiling/strip-mining -- breaking out subloops to work on a cache-friendly block at once
** Especially good for parallelizing across coherent processing elements with local, coherent caches -- coherency traffic is minimized
** Especially good for parallelizing across coherent processing elements with local, coherent caches -- coherency traffic is minimized
** Also well-suited for cases of reuse between iterations of a non-innermost loop
* Loop safety is closed under blocking operations, but not necessarily under interchange.
* Loop safety is closed under blocking operations, but not necessarily under interchange.
** Blocking can, in some cases, make subsequent interchange safe! "If the strip size is less than or equal to the threshold of the dependence that might prevent interchange, then the strip-mine-and-interchange is legal, even though the interchange would not be." (Allen/Kennedy p. 480)
** Blocking can, in some cases, make subsequent interchange safe! "If the strip size is less than or equal to the threshold of the dependence that might prevent interchange, then the strip-mine-and-interchange is legal, even though the interchange would not be." (Allen/Kennedy p. 480)