29.01.2015 Views

Embedded Software for SoC - Grupo de Mecatrônica EESC/USP

Embedded Software for SoC - Grupo de Mecatrônica EESC/USP

Embedded Software for SoC - Grupo de Mecatrônica EESC/USP

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Control Flow Driven Splitting of Loop Nests 217<br />

flow in the hot-spots of an application. Furthermore, accesses to memory are<br />

reduced significantly since a large number of branching, arithmetic and logical<br />

instructions and in<strong>de</strong>x variable accesses is removed.<br />

The techniques presented in this article are fully automated. Since a loop<br />

analysis is crucial <strong>for</strong> our techniques, a high-level intermediate representation<br />

preserving loop in<strong>for</strong>mation is required. Since this is not the case <strong>for</strong><br />

state-of-the-art optimizing compilers (e.g. Sun-IR [18], LANCE [12]), our<br />

techniques are not realized as a compiler optimization but as a processor<br />

in<strong>de</strong>pen<strong>de</strong>nt source co<strong>de</strong> trans<strong>for</strong>mation. This in<strong>de</strong>pen<strong>de</strong>nce enables a very<br />

<strong>de</strong>tailed benchmarking using 10 different programmable processors.<br />

A survey of work related to loop optimizations and source co<strong>de</strong> trans<strong>for</strong>mations<br />

is provi<strong>de</strong>d in section 2. Section 3 presents the analytical mo<strong>de</strong>ls<br />

and algorithms <strong>for</strong> loop nest splitting. Section 4 shows the effects of our optimization<br />

on pipelines and caches, runtimes, energy dissipation and co<strong>de</strong> sizes.<br />

Section 5 summarizes and conclu<strong>de</strong>s this article.<br />

2. RELATED WORK<br />

Loop trans<strong>for</strong>mations have been <strong>de</strong>scribed in literature on compiler <strong>de</strong>sign <strong>for</strong><br />

many years (see e.g. [1, 19]) and are often integrated into today’s optimizing<br />

compilers. Classical loop splitting (or loop distribution/fission) creates several<br />

loops out of an original one and distributes the statements of the original<br />

loop body among all loops. The main goal of this optimization is to enable

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!