Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter...

49
fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/1 3 Graphics: © Alexandra Nolte, Gesine Marwedel, 2003

Transcript of Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter...

Page 1: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

fakultät für informatikinformatik 12

technische universität dortmund

Optimizations

Peter MarwedelTU DortmundInformatik 12

Germany

2010/01/13

Gra

phic

s: ©

Ale

xand

ra N

olte

, Ges

ine

Mar

wed

el, 2

003

Page 2: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 2 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Structure of this course

2:Specification

3: ES-hardware

4: system software (RTOS, middleware, …)

8:Test

5: Validation & Evaluation (energy, cost, performance, …)

7: Optimization

6: Application mapping

App

licat

ion

Kno

wle

dge Design

repositoryDesign

Numbers denote sequence of chapters

Page 3: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 3 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Task-level concurrency management

Granularity: size of tasks (e.g. in instructions)

Readable specifications and efficient implementations can possibly require different task structures.

Granularity changes

Page 4: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 4 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Merging of tasks

Reduced overhead of context switches,More global optimization of machine code,Reduced overhead for inter-process/task communication.

Page 5: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 5 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Splitting of tasks

No blocking of resources while waiting for input,more flexibility for scheduling, possibly improved result.

Page 6: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 6 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Merging and splitting of tasks

The most appropriate task graph granularity depends upon the context merging and splitting may be required.

Merging and splitting of tasks should be done automatically, depending upon the context.

Page 7: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 7 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Automated rewriting of the task system- Example -

Page 8: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 8 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Attributes of a system that needs rewriting

Tasks blocking after they have already started running

Page 9: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 9 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Work by Cortadella et al.

1. Transform each of the tasks into a Petri net,2. Generate one global Petri net from the nets of the tasks,3. Partition global net into “sequences of transition”4. Generate one task from each such sequence

Mature, commercial approach not yet available

Page 10: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 10 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Result, as published by Cortadella

Reads only at the beginning

Initialization task

Always true

Nevertrue

Page 11: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 11 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Optimized version of Tin

Tin () {READ (IN, sample, 1);sum += sample; i++;DATA = sample; d = DATA;L0: if (i < N) return;DATA = sum/N; d = DATA;d = d*c; WRITE(OUT,d,1);sum = 0; i = 0;return;}

Always true

j==i-1j i

Never true

Page 12: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 12 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Task-level concurrency management (2)

The dynamic behavior of applications getting more attention.

Energy consumption reduction is the main target. Some classes of applications (i.e. video processing) have

a considerable variation in processing power requirements depending on input data.

Static design-time methods becoming insufficient. Runtime-only methods not feasible for embedded

systems.

How about mixed approaches?

Page 13: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 13 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Example of a mixed TCM

[IMEC, Belgium, http://www.imec.be/]

…or they can define a probability for violating the deadline.

t

Deadline

Task1

Task2

Task3

Static (compile-time) methods can ensure WCET feasible schedules, but waste energy in the average case.

t

E

Deadline

Runtime scheduler selects the most energy saving, deadline preserving combination.

t

Deadline

Mixed methods use compile-time analysis to define a set of possible execution parameters for each task.

Page 14: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 14 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Floating-point to fixed point conversion

Pros: Lower cost Faster Lower power consumption Sufficient SQNR, if properly scaled Suitable for portable applications

Cons: Decreased dynamic range Finite word-length effect, unless properly scaled

• Overflow and excessive quantization noise Extra programming effort

© Ki-Il Kum, et al. (Seoul National University): A Floating-point To Fixed-point C Converter For Fixed-point Digital Signal Processors, 2nd SUIF Workshop, 1996

Page 15: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 15 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Fixed-Point Data Format

S 1 0 0 . . . 0 0 0 0 1 0

hypothetical binary point

IWL=3

S 1 0 0 . . . 0 0 0 0 1 0

(a) Integer

(b) Fixed-Point

FWL

© Ki-Il Kum, et al

• Floating-Point vs. Fixed-Point• Floating-Point vs. Fixed-Point • Integer vs. Fixed-Point• Integer vs. Fixed-Point

exponent, mantissa Floating-Point

• automatic computation and update of each exponent at run-time

Fixed-Point• implicit exponent• determined off-line

exponent, mantissa Floating-Point

• automatic computation and update of each exponent at run-time

Fixed-Point• implicit exponent• determined off-line

Page 16: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 16 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Assignment and Addition/Subtraction

Assume y = x, with-x (IWL=2) and-y (IWL=3):

s

s

x

x>>1

y

s

Let result = x + y:

equalizing each IWL

sy

sresult

+

© Ki-Il Kum, et al

s

x

x>>1

s

Page 17: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 17 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Multiplication

Assume result = x * y, with-x (IWL=2) and-y (IWL=3)-> result (IWL=2+3)

s

x

* y

s

s

result

© Ki-Il Kum, et al

s

s

Page 18: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 18 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Development Procedure

Range EstimationC Program

Execution

Floating-PointC Program

Fixed-PointC Program

Floating-Point to

Fixed-PointC Program Converter

RangeEstimator

Manualspecification

IWL information

© Ki-Il Kum, et al

Page 19: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 19 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Range Estimator

C pre-processor

C front-end

ID assignment

Subroutine call insertion

SUIF-to-C converter

Floating-PointC Program

Range EstimationC Program

IWLInformation

Execution

float iir1(float x){ static float s = 0; float y;

y = 0.9 * s + x; range(y, 0); s = y; range(s, 1);

return y;}

float iir1(float x){ static float s = 0; float y;

y = 0.9 * s + x; range(y, 0); s = y; range(s, 1);

return y;}

Range Estimation C Program

© Ki-Il Kum, et al

Page 20: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 20 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Operations in fixed point program

0.9 x 215siwl=4.xxxxxxxxxxxx

*

+

xiwl=0.xxxxxxxxxxxx

>>5overflow if

result

Page 21: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 21 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Floating-Point to Fixed-Point Program Converter

int iir1(int x){ static int s = 0; int y; y=sll(mulh(29491,s)+ (x>> 5),1); s = y; return y;}

Fixed-Point C Program

mulh to access the upper

half of the multiplied result

target dependent implementation

sll to remove 2nd sign bit opt. overflow check

© Ki-Il Kum, et al

Page 22: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 22 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Performance Comparison- Machine Cycles -

Fourth Order IIR Filter

215

2980

0

1000

2000

3000

4000

Fixed-Point (16b) Floating-Point

Cycles

© Ki-Il Kum, et al

Page 23: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 23 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Performance Comparison- Machine Cycles -

ADPCM

26718

61401

125249

020000400006000080000

100000120000140000

Fixed-Point(16b)

Fixed-Point(32b)

Floating-Point

Cycles

© Ki-Il Kum, et al

Page 24: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 24 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Performance Comparison- SNR -

ADPCM

0

5

10

15

20

25

A B C D

SNR (dB)

Fixed-Point (16b)Fixed-Point (32b)Floating-Point

© Ki-Il Kum, et al

Page 25: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

fakultät für informatikinformatik 12

technische universität dortmund

High-level software transformations

Peter MarwedelTU DortmundInformatik 12

Germany

Gra

phic

s: ©

Ale

xand

ra N

olte

, Ges

ine

Mar

wed

el, 2

003

Page 26: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 26 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Impact of memory allocation on efficiency

Array p[j][k]Row major order (C)

Column major order (FORTRAN)

j=0

j=1

j=2

k=0

k=1

k=2

j=0

j=1

j=0

j=1

j=0

j=1

Page 27: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 27 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Best performance if innermost loop corresponds to rightmost array index

Two loops, assuming row major order (C):for (k=0; k<=m; k++) for (j=0; j<=n; j++) for (j=0; j<=n; j++) ) for (k=0; k<=m; k++) p[j][k] = ... p[j][k] = ...

For row major order

j=0

j=1

j=2

Good cache behavior Poor cache behavior

Same behavior for homogeneous memory access, but:

memory architecture dependent optimization

Page 28: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 28 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Program transformation “Loop interchange”

(SUIF interchanges array indexes instead of loops)

Improved localityExample:…#define iter 400000int a[20][20][20];void computeijk() {int i,j,k;

for (i = 0; i < 20; i++) {for (j = 0; j < 20; j++) {

for (k = 0; k < 20; k++) {a[i][j][k] += a[i][j][k];}}}}

void computeikj() {int i,j,k;for (i = 0; i < 20; i++) {

for (j = 0; j < 20; j++) {for (k = 0; k < 20; k++) {

a[i][k][j] += a[i][k][j] ;}}}}…start=time(&start);for(z=0;z<iter;z++)computeijk();

end=time(&end); printf("ijk=%16.9f\n",1.0*difftime(end,start));

Page 29: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 29 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results:strong influence of the memory architecture

Loop structure: i j k

Tim

e [s

]

[Till Buchwald, Diploma thesis, Univ. Dortmund, Informatik 12, 12/2004]

Ti C6xx~ 57%

Intel Pentium3.2 %

Sun SPARC35%

Processorreduction to [%]

Dramatic impact of locality

Not always the same impact ..

Page 30: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 30 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Transformations“Loop fusion” (merging), “loop fission”

for(j=0; j<=n; j++) for (j=0; j<=n; j++) p[j]= ... ; {p[j]= ... ;for (j=0; j<=n; j++) , p[j]= p[j] + ...} p[j]= p[j] + ...

Loops small enough to Better locality for allow zero overhead access to p.Loops Better chances for

parallel execution.

Which of the two versions is best?Architecture-aware compiler should select best version.

Page 31: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 31 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Example: simple loops

void ss1() {int i,j; for (i=0;i<size;i++){ for (j=0;j<size;j++){ a[i][j]+= 17;}} for(i=0;i<size;i++){ for (j=0;j<size;j++){ b[i][j]-=13;}}}

void ms1() {int i,j; for (i=0;i< size;i++){ for (j=0;j<size;j++){ a[i][j]+=17; } for (j=0;j<size;j++){ b[i][j]-=13; }}}

void mm1() {int i,j; for(i=0;i<size;i++){ for(j=0;j<size;j++){ a[i][j] += 17; b[i][j] -= 13;}}}

#define size 30#define iter 40000int a[size][size];float b[size][size];

#define size 30#define iter 40000int a[size][size];float b[size][size];

Page 32: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 32 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results: simple loops

Runtime

0

20

40

60

80

100

120

X86 gcc 3.2 -03 x86 gcc 2.95 -o3 Sparc gcc 3xo1 Sparc gcc 3x o3

Plattform

%

Merged loops superior; except Sparc with –o3

Merged loops superior; except Sparc with –o3

ss1

ms1

mm1

(100% ≙ max)

Page 33: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 33 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Loop unrolling

for (j=0; j<=n; j++) p[j]= ... ;

for (j=0; j<=n; j+=2) {p[j]= ... ; p[j+1]= ...}

factor = 2Better locality for access to p.Less branches per execution of the loop. More opportunities for optimizations.Tradeoff between code size and improvement. Extreme case: completely unrolled loop (no branch).

Page 34: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 34 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Example: matrixmult

#define s 30#define iter 4000int a[s][s],b[s][s],c[s][s];void compute(){int i,j,k; for(i=0;i<s;i++){ for(j=0;j<s;j++){ for(k=0;k<s;k++){ c[i][k]+= a[i][j]*b[j][k];}}}}

extern void compute2() {int i, j, k; for (i = 0; i < 30; i++) { for (j = 0; j < 30; j++) { for (k = 0; k <= 28; k += 2) {{int *suif_tmp; suif_tmp = &c[i][k]; *suif_tmp= *suif_tmp+a[i][j]*b[j][k];} {int *suif_tmp; suif_tmp=&c[i][k+1]; *suif_tmp=*suif_tmp +a[i][j]*b[j][k+1]; }}}} return;}

Page 35: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 35 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results

Ti C6xx

Intel PentiumSun SPARCProcessor

Benefits quite small; penalties may be large [Till Buchwald, Diploma thesis, Univ. Dortmund, Informatik 12, 12/2004]

factorfactor

Page 36: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 36 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results: benefits for loop dependences

Small benefits;

Ti C6xx

Processorreduction to [%]

#define s 50#define iter 150000int a[s][s], b[s][s];void compute() { int i,k; for (i = 0; i < s; i++) { for (k = 1; k < s; k++) { a[i][k] = b[i][k]; b[i][k] = a[i][k-1];}}}

[Till Buchwald, Diploma thesis, Univ. Dortmund, Informatik 12, 12/2004]

factor

Page 37: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 37 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Program transformationLoop tiling/loop blocking: - Original version -

for (i=1; i<=N; i++)for(k=1; k<=N; k++){

r=X[i,k]; /* to be allocated to a register*/for (j=1; j<=N; j++)

Z[i,j] += r* Y[k,j]} % Never reusing information in the cache for Y and Z if N

is large or cache is small (2 N³ references for Z).

j++

k++

i++ j++

k++

i++

j++

k++

i++

Page 38: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 38 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Loop tiling/loop blocking- tiled version -

for (kk=1; kk<= N; kk+=B) for (jj=1; jj<= N; jj+=B) for (i=1; i<= N; i++) for (k=kk; k<= min(kk+B-1,N); k++){ r=X[i][k]; /* to be allocated to a register*/ for (j=jj; j<= min(jj+B-1, N); j++) Z[i][j] += r* Y[k][j] }

Reuse factor of B for Z, N for Y

O(N³/B) accesses to main memory

k++, j++

jj

kk

j++

k++

i++

jj

k++

i++

Same elements for next iteration of i

Compiler should select best option

Monica Lam: The Cache Performance and Optimization of Blocked Algorithms, ASPLOS, 1991

Page 39: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 39 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Example

In practice, results by Buchwald are disappointing.One of the few cases where an improvement was achieved:Source: similar to matrix mult.

[Till Buchwald, Diploma thesis, Univ. Dortmund, Informatik 12, 12/2004]

Tiling-factor

SPARC

Pentium

Page 40: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 40 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Transformation “Loop nest splitting”

Example: Separation of margin handling

+

many if-statements for margin-checking

no checking,efficient

only few margin elements to be processed

Page 41: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 41 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

if (x>=10||y>=14) for (; y<49; y++) for (k=0; k<9; k++) for (l=0; l<9;l++ ) for (i=0; i<4; i++) for (j=0; j<4;j++) { then_block_1; then_block_2}else {y1=4*y; for (k=0; k<9; k++) {x2=x1+k-4; for (l=0; l<9; ) {y2=y1+l-4; for (i=0; i<4; i++) {x3=x1+i; x4=x2+i; for (j=0; j<4;j++) {y3=y1+j; y4=y2+j; if (0 || 35<x3 ||0 || 48<y3) then-block-1; else else-block-1; if (x4<0|| 35<x4||y4<0||48<y4) then_block_2; else else_block_2;}}}}}}

Loop nest splitting at University of DortmundLoop nest from MPEG-4 full search motion estimation

for (z=0; z<20; z++) for (x=0; x<36; x++) {x1=4*x; for (y=0; y<49; y++) {y1=4*y; for (k=0; k<9; k++) {x2=x1+k-4; for (l=0; l<9; ) {y2=y1+l-4; for (i=0; i<4; i++) {x3=x1+i; x4=x2+i; for (j=0; j<4;j++) {y3=y1+j; y4=y2+j; if (x3<0 || 35<x3||y3<0||48<y3) then_block_1; else else_block_1; if (x4<0|| 35<x4||y4<0||48<y4) then_block_2; else else_block_2;}}}}}}

for (z=0; z<20; z++) for (x=0; x<36; x++) {x1=4*x; for (y=0; y<49; y++)

analysis of polyhedral domains, selection with genetic algorithm

[H. Falk et al., Inf 12, UniDo, 2002]

Page 42: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 42 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results for loop nest splitting- Execution times -

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%Cavity Motion Estimation QSDPCM

[H. Falk et al., Inf 12, UniDo, 2002]

Page 43: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 43 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results for loop nest splitting- Code sizes -

[Falk, 2002]

0%

20%

40%

60%

80%

100%

120%

140%

160%

180%

200%Cavity Motion Estimation QSDPCM

Page 44: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 44 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Array folding

Initial arrays

Page 45: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 45 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Array folding

Unfolded arrays

Unfolded arrays

Page 46: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 46 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Inter-array folding

Intra-array folding

Page 47: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 47 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Application

Array folding is implemented in the DTSE optimization proposed by IMEC. Array folding adds div and mod ops. Optimizations required to remove these costly operations.

At IMEC, ADOPT address optimizations perform this task.For example, modulo operations are replaced by pointers (indexes) which are incremented and reset.

Page 48: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 48 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Results (Mcycles for cavity benchmark)

ADOPT&DTSE required to achieve real benefit

[C.Ghez et al.: Systematic high-level Address Code Transformations for Piece-wise Linear Indexing: Illustration on a Medical Imaging Algorithm, IEEE WS on Signal Processing System: design & implementation, 2000, pp. 623-632]

Page 49: Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2010/01/13 Graphics:

- 49 -technische universitätdortmund

fakultät für informatik

p. marwedel, informatik 12, 2010

Summary

Task concurrency management• Re-partitioning of computations into tasks• Dynamic exploitation of slack

Floating-point to fixed point conversion• Range estimation• Conversion• Analysis of the results

High-level loop transformations• Fusion• Unrolling• Tiling• Loop nest splitting• Array folding