Presentation is loading. Please wait.

Presentation is loading. Please wait.

© 2000 Morgan Kaufman Overheads for Computers as Components Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations.

Similar presentations


Presentation on theme: "© 2000 Morgan Kaufman Overheads for Computers as Components Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations."— Presentation transcript:

1

2 © 2000 Morgan Kaufman Overheads for Computers as Components Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations. zInterpreters and just-in-time compilers.

3 © 2000 Morgan Kaufman Overheads for Computers as Components Compilation zCompilation strategy (Wirth): ycompilation = translation + optimization zCompiler determines quality of code: yuse of CPU resources; ymemory access scheduling; ycode size.

4 © 2000 Morgan Kaufman Overheads for Computers as Components Basic compilation phases HLL parsing, symbol table machine-independent optimizations machine-dependent optimizations assembly

5 © 2000 Morgan Kaufman Overheads for Computers as Components Statement translation and optimization zSource code is translated into intermediate form such as CDFG. zCDFG is transformed/optimized. zCDFG is translated into instructions with optimization decisions. zInstructions are further optimized.

6 © 2000 Morgan Kaufman Overheads for Computers as Components Arithmetic expressions a*b + 5*(c-d) expression DFG *- * + a b cd 5

7 © 2000 Morgan Kaufman Overheads for Computers as Components 2 3 4 1 Arithmetic expressions, cont’d. ADR r4,a MOV r1,[r4] ADR r4,b MOV r2,[r4] MUL r3,r1,r2 DFG *- * + a b cd 5 ADR r4,c MOV r1,[r4] ADR r4,d MOV r5,[r4] SUB r6,r4,r5 MUL r7,r6,#5 ADD r8,r7,r3 code

8 © 2000 Morgan Kaufman Overheads for Computers as Components Control code generation if (a+b > 0) x = 5; else x = 7; a+b>0x=5 x=7

9 © 2000 Morgan Kaufman Overheads for Computers as Components 3 21 Control code generation, cont’d. ADR r5,a LDR r1,[r5] ADR r5,b LDR r2,b ADD r3,r1,r2 BLE label3 a+b>0x=5 x=7 LDR r3,#5 ADR r5,x STR r3,[r5] label3 B stmtent LDR r3,#7 ADR r5,x STR r3,[r5] stmtent...

10 © 2000 Morgan Kaufman Overheads for Computers as Components Procedure linkage zNeed code to: ycall and return; ypass parameters and results. zParameters and returns are passed on stack. yProcedures with few parameters may use registers.

11 © 2000 Morgan Kaufman Overheads for Computers as Components Procedure stacks proc1 growth proc1(int a) { proc2(5); } proc2 SP stack pointer FP frame pointer 5 accessed relative to SP

12 © 2000 Morgan Kaufman Overheads for Computers as Components ARM procedure linkage zAPCS (ARM Procedure Call Standard): yr0-r3 pass parameters into procedure. Extra parameters are put on stack frame. yr0 holds return value. yr4-r7 hold register values. yr11 is frame pointer, r13 is stack pointer. yr10 holds limiting address on stack size to check for stack overflows.

13 © 2000 Morgan Kaufman Overheads for Computers as Components Data structures zDifferent types of data structures use different data layouts. zSome offsets into data structure can be computed at compile time, others must be computed at run time.

14 © 2000 Morgan Kaufman Overheads for Computers as Components One-dimensional arrays zC array name points to 0th element: a[0] a[1] a[2] a = *(a + 1)

15 © 2000 Morgan Kaufman Overheads for Computers as Components Two-dimensional arrays zColumn-major layout: a[0,0] a[0,1] a[1,0] a[1,1] = a[i*M+j]... M N

16 © 2000 Morgan Kaufman Overheads for Computers as Components Structures zFields within structures are static offsets: field1 field2 aptr struct { int field1; char field2; } mystruct; struct mystruct a, *aptr = &a; 4 bytes *(aptr+4)

17 © 2000 Morgan Kaufman Overheads for Computers as Components Expression simplification zConstant folding: y8+1 = 9 zAlgebraic: ya*b + a*c = a*(b+c) zStrength reduction: ya*2 = a<<1

18 © 2000 Morgan Kaufman Overheads for Computers as Components Dead code elimination zDead code: #define DEBUG 0 if (DEBUG) dbg(p1); zCan be eliminated by analysis of control flow, constant folding. 0 dbg(p1); 1 0

19 © 2000 Morgan Kaufman Overheads for Computers as Components Procedure inlining zEliminates procedure linkage overhead: int foo(a,b,c) { return a + b - c;} z = foo(w,x,y);  z = w + x + y;

20 © 2000 Morgan Kaufman Overheads for Computers as Components Loop transformations zGoals: yreduce loop overhead; yincrease opportunities for pipelining and parallelism; yimprove memory system performance.

21 © 2000 Morgan Kaufman Overheads for Computers as Components Loop unrolling zReduces loop overhead, enables some other optimizations. for (i=0; i<4; i++) a[i] = b[i] * c[i];  for (i=0; i<2; i++) { a[i*2] = b[i*2] * c[i*2]; a[i*2+1] = b[i*2+1] * c[i*2+1]; }

22 © 2000 Morgan Kaufman Overheads for Computers as Components Loop fusion and distribution zFusion combines two loops into 1: for (i=0; i<N; i++) a[i] = b[i] * 5; for (j=0; j<N; j++) w[j] = c[j] * d[j];  for (i=0; i<N; i++) { a[i] = b[i] * 5; w[i] = c[i] * d[i]; } zDistribution breaks one loop into two. zChanges optimizations within loop body.

23 © 2000 Morgan Kaufman Overheads for Computers as Components Array/cache problems zPrefetching. zCache conflicts within a single array. zCache conflicts between arrays.

24 © 2000 Morgan Kaufman Overheads for Computers as Components 1-D array and cache zLayout of 1-D array in cache: A[0]A[1]A[2]A[3] Line 0 A[4]A[5]A[6]A[7] Line 1 A[8] A[10]A[11] Line 2 A[12]A[13]A[14]A[15] Line 3 X += A[I]

25 © 2000 Morgan Kaufman Overheads for Computers as Components Two 1-D arrays and cache zArrays don’t immediately conflict: A[0]A[1]A[2]A[3] Line 0 A[4]A[5]A[6]A[7] Line 1 Line 2 Line 3 B[0]B[1]B[2]B[3] B[4]B[5]B[6]B[7] B[8]B[9]B[10]B[11] B[12]B[13]B[14]B[15] A[8] A[10]A[11] A[12]A[13]A[14]A[15] X += A[I] * B[I]

26 © 2000 Morgan Kaufman Overheads for Computers as Components Conflicting 1-D arrays zArrays immediately conflict in cache: A[0]A[1]A[2]A[3] Line 0 A[4]A[5]A[6]A[7] Line 1 A[8] A[10]A[11] Line 2 A[12]A[13]A[14]A[15] Line 3 B[0]B[1]B[2]B[3] X += A[I] * B[I]

27 © 2000 Morgan Kaufman Overheads for Computers as Components 2-D array and cache zCache behavior depends on row/column access pattern: A[0,0]A[0,1]A[0, 2]A[0, 3] Line 0 A[0, 4]A[0, 5]A[0, 6]A[0, 7] Line 1 A[1,0]A[1,1]A[1,2]A[1,3] Line 2 A[1,4]A[1,5]A[1,6]A[1,7] Line 3

28 © 2000 Morgan Kaufman Overheads for Computers as Components Array/cache solutions zMove origin of the array in memory. zPad the array. zChange the loop to access array elements in a different order.

29 © 2000 Morgan Kaufman Overheads for Computers as Components Loop tiling zBreaks one loop into a nest of loops. zChanges order of accesses within array. yChanges cache behavior.

30 © 2000 Morgan Kaufman Overheads for Computers as Components Loop tiling example for (i=0; i<N; i++) for (j=0; j<N; j++) c[i] = a[i,j]*b[i]; for (i=0; i<N; i+=2) for (j=0; j<N; j+=2) for (ii=0; ii<min(i+2,n); ii++) for (jj=0; jj<min(j+2,N); jj++) c[ii] = a[ii,jj]*b[ii];

31 © 2000 Morgan Kaufman Overheads for Computers as Components Array padding zAdd array elements to change mapping into cache: a[0,0]a[0,1]a[0,2] a[1,0]a[1,1]a[1,2] before a[0,0]a[0,1]a[0,2] a[1,0]a[1,1]a[1,2] after a[0,2] a[1,2]

32 © 2000 Morgan Kaufman Overheads for Computers as Components Register allocation zGoals: ychoose register to hold each variable; ydetermine lifespan of varible in the register. zBasic case: within basic block.

33 © 2000 Morgan Kaufman Overheads for Computers as Components Register lifetime graph w = a + b; x = c + w; y = c + d; time a b c d w x y 123 t=1 t=2 t=3

34 © 2000 Morgan Kaufman Overheads for Computers as Components Instruction scheduling zNon-pipelined machines do not need instruction scheduling: any order of instructions that satisfies data dependencies runs equally fast. zIn pipelined machines, execution time of one instruction depends on the nearby instructions: opcode, operands.

35 © 2000 Morgan Kaufman Overheads for Computers as Components Reservation table zA reservation table relates instructions/time to CPU resources. Time/instrAB instr1X instr2XX instr3X instr4X

36 © 2000 Morgan Kaufman Overheads for Computers as Components Software pipelining zSchedules instructions across loop iterations. zReduces instruction latency in iteration i by inserting instructions from iteration i+1.

37 © 2000 Morgan Kaufman Overheads for Computers as Components Software pipelining in SHARC zExample: for (i=0; i<N; i++) sum += a[i]*b[i]; zCombine three iterations: yFetch array elements a, b for iteration i. yMultiply a,b for iteration i-1. yCompute dot product for iteration i-2.

38 © 2000 Morgan Kaufman Overheads for Computers as Components Software pipelining in SHARC, cont’d /* first iteration performed outside loop */ ai=a[0]; bi=b[0]; p=ai*bi; /* initiate loads used in second iteration; remaining loads will be performed inside the loop */ for (i=2; i<N-2; i++) { ai=a[i]; bi=b[i]; /* fetch for next cycle’s multiply */ p = ai*bi; /* multiply for next iteration’s sum */ sum += p; /* make sum using p from last iteration */ } sum += p; p=ai*bi; sum +=p;

39 © 2000 Morgan Kaufman Overheads for Computers as Components Software pipelining timing ai=a[i]; bi=b[i]; p = ai*bi; sum += p; ai=a[i]; bi=b[i]; p = ai*bi; sum += p; ai=a[i]; bi=b[i]; p = ai*bi; sum += p; time pipe iteration i-2iteration i-1iteration i

40 © 2000 Morgan Kaufman Overheads for Computers as Components Instruction selection zMay be several ways to implement an operation or sequence of operations. zRepresent operations as graphs, match possible instruction sequences onto graph. * + expressiontemplates *+ * + MULADD MADD

41 © 2000 Morgan Kaufman Overheads for Computers as Components Using your compiler zUnderstand various optimization levels (- O1, -O2, etc.) zLook at mixed compiler/assembler output. zModifying compiler output requires care: ycorrectness; yloss of hand-tweaked code.

42 © 2000 Morgan Kaufman Overheads for Computers as Components Interpreters and JIT compilers zInterpreter: translates and executes program statements on-the-fly. zJIT compiler: compiles small sections of code into instructions during program execution. yEliminates some translation overhead. yOften requires more memory.


Download ppt "© 2000 Morgan Kaufman Overheads for Computers as Components Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations."

Similar presentations


Ads by Google