Presentation is loading. Please wait.

Presentation is loading. Please wait.

© 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations.

Similar presentations


Presentation on theme: "© 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations."— Presentation transcript:

1 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations. zInterpreters and just-in-time compilers.

2 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Compilation zCompilation strategy (Wirth): ycompilation = translation + optimization zCompiler determines quality of code: yuse of CPU resources; ymemory access scheduling; ycode size.

3 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Basic compilation phases HLL parsing, symbol table machine-independent optimizations machine-dependent optimizations assembly

4 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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.

5 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Arithmetic expressions a*b + 5*(c-d) expression DFG *- * + a b cd 5

6 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed Arithmetic expressions, cont’d. ADR r4,a MOV r1,[r4] ADR r4,b MOV r2,[r4] ADD 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

7 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Control code generation if (a+b > 0) x = 5; else x = 7; a+b>0x=5 x=7

8 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed 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] B stmtent LDR r3,#7 ADR r5,x STR r3,[r5] stmtent...

9 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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.

10 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Procedure stacks proc1 growth proc1(int a) { proc2(5); } proc2 SP stack pointer FP frame pointer 5 accessed relative to SP

11 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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.

12 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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.

13 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. One-dimensional arrays zC array name points to 0th element: a[0] a[1] a[2] a = *(a + 1)

14 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Two-dimensional arrays zColumn-major layout: a[0,0] a[0,1] a[1,0] a[1,1] = a[i*M+j]... M N

15 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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)

16 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Expression simplification zConstant folding: y8+1 = 9 zAlgebraic: ya*b + a*c = a*(b+c) zStrength reduction: ya*2 = a<<1

17 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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

18 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Procedure inlining zEliminates procedure linkage overhead: int foo(a,b,c) { return a + b - c;} z = foo(w,x,y);  z = w + x + y;

19 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Loop transformations zGoals: yreduce loop overhead; yincrease opportunities for pipelining; yimprove memory system performance.

20 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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]; }

21 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Loop fusion and distribution zFusion combines two loops into 1: for (i=0; i

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

23 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Loop tiling example for (i=0; i

24 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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]

25 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Register allocation zGoals: ychoose register to hold each variable; ydetermine lifespan of varible in the register. zBasic case: within basic block.

26 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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

27 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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.

28 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Reservation table zA reservation table relates instructions/time to CPU resources. Time/instrAB instr1X instr2XX instr3X instr4X

29 © 2008 Wayne Wolf 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.

30 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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

31 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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.

32 © 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. 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 "© 2008 Wayne Wolf Overheads for Computers as Components 2 nd ed. Program design and analysis zCompilation flow. zBasic statement translation. zBasic optimizations."

Similar presentations


Ads by Google