Lably
Skip to content

Loop nest optimization

  • 25 min read
  • 4 chapters

Related on Lably

Through Computer science, Compiler and Control flow

The technique used to produce this optimization is called loop tiling, also known as loop blocking or strip mine and interchange.

Overview

Loop tiling partitions a loop's iteration space into smaller chunks or blocks, so as to help ensure data used in a loop stays in the cache until it is reused. The partitioning of loop iteration space leads to partitioning of a large array into smaller blocks, thus fitting accessed array elements into cache size, enhancing cache reuse and eliminating cache size requirements.

An ordinary loop

<span id="mwHg"></span><span class="k" id="mwHw">for</span><span class="w" id="mwIA"> </span><span class="p" id="mwIQ">(</span><span class="n" id="mwIg">i</span><span class="o" id="mwIw">=</span><span class="mi" id="mwJA">0</span><span class="p" id="mwJQ">;</span><span class="w" id="mwJg"> </span><span class="n" id="mwJw">i</span><span class="o" id="mwKA"><</span><span class="n" id="mwKQ">N</span><span class="p" id="mwKg">;</span><span class="w" id="mwKw"> </span><span class="o" id="mwLA">++</span><span class="n" id="mwLQ">i</span><span class="p" id="mwLg">)</span><span class="w" id="mwLw"> </span><span class="p" id="mwMA">{</span> <span class="w" id="mwMQ"> </span><span class="p" id="mwMg">...</span> <span class="p" id="mwMw">}</span>

can be blocked with a block size B by replacing it with

<span id="mwNw"></span><span class="k" id="mwOA">for</span><span class="w" id="mwOQ"> </span><span class="p" id="mwOg">(</span><span class="n" id="mwOw">j</span><span class="o" id="mwPA">=</span><span class="mi" id="mwPQ">0</span><span class="p" id="mwPg">;</span><span class="w" id="mwPw"> </span><span class="n" id="mwQA">j</span><span class="o" id="mwQQ"><</span><span class="n" id="mwQg">N</span><span class="p" id="mwQw">;</span><span class="w" id="mwRA"> </span><span class="n" id="mwRQ">j</span><span class="o" id="mwRg">+=</span><span class="n" id="mwRw">B</span><span class="p" id="mwSA">)</span><span class="w" id="mwSQ"> </span><span class="p" id="mwSg">{</span> <span class="w" id="mwSw"> </span><span class="k" id="mwTA">for</span><span class="w" id="mwTQ"> </span><span class="p" id="mwTg">(</span><span class="n" id="mwTw">i</span><span class="o" id="mwUA">=</span><span class="n" id="mwUQ">j</span><span class="p" id="mwUg">;</span><span class="w" id="mwUw"> </span><span class="n" id="mwVA">i</span><span class="o" id="mwVQ"><</span><span class="n" id="mwVg">min</span><span class="p" id="mwVw">(</span><span class="n" id="mwWA">N</span><span class="p" id="mwWQ">,</span><span class="w" id="mwWg"> </span><span class="n" id="mwWw">j</span><span class="o" id="mwXA">+</span><span class="n" id="mwXQ">B</span><span class="p" id="mwXg">);</span><span class="w" id="mwXw"> </span><span class="o" id="mwYA">++</span><span class="n" id="mwYQ">i</span><span class="p" id="mwYg">)</span><span class="w" id="mwYw"> </span><span class="p" id="mwZA">{</span> <span class="w" id="mwZQ"> </span><span class="p" id="mwZg">....</span> <span class="w" id="mwZw"> </span><span class="p" id="mwaA">}</span> <span class="p" id="mwaQ">}</span>

where min() is a function returning the minimum of its arguments.

Sign in to keep reading

3 more chapters are free with a Lably account.

More in Computing and communication