Example P392 void combine (vec ptr v, int *dest) int ii int length vec length (v)i int *data get vec start(v)i ★dest=TDEN; f。r(立=0;主<1 ength;i++) *dest *dest oper datalil;
6 void combine3(vec_ptr v, int *dest) { int i; int length = vec_length(v); int *data = get_vec_start(v); *dest = IDENT; for (i = 0; i < length; i++) { *dest = *dest OPER data[i]; } Example P392
Example P394 void combine(vec ptr v int *dest) int ii int length vec length(v)i int *data get vec start(v)i intx=工DENT; for (i=0;i< length; i++) x OpeR datalili ★dest Xi
7 void combine4(vec_ptr v, int *dest) { int i; int length = vec_length(v); int *data = get_vec_start(v); int x = IDENT; for (i = 0; i < length; i++) x = x OPER data[i]; *dest = x; } Example P394
Machine Independent Opt Results Optimizations Reduce function calls and memory references within loop
8 Machine Independent Opt. Results • Optimizations – Reduce function calls and memory references within loop
Machine Independent Opt Results Method Integer Floating Point Abstract -g Combine 42.06 4186 4144 n6000 143.00 P385 Abstract-02 Combine1 31.25 33.25 3125 Move vec_length combine 22.61 21.25 21.15 135.00 P388 P392 data access Combine 6.00 9.00 8.00 11700 Accum in temp Combine 2.00 4.00 3.00 500/394 Performance Anomaly Compl uting FP product of all elements exceptionally slow Very large speedup when accumulate in temporary Memory uses 64-bit format register use 80 Benchmark data caused overflow of 64 bits but not 80
9 Machine Independent Opt. Results • Performance Anomaly – Computing FP product of all elements exceptionally slow. – Very large speedup when accumulate in temporary – Memory uses 64-bit format, register use 80 – Benchmark data caused overflow of 64 bits, but not 80 Method Integer Floating Point + * + * Abstract -g 42.06 41.86 41.44 160.00 Abstract -O2 31.25 33.25 31.25 143.00 Move vec_length 22.61 21.25 21.15 135.00 data access 6.00 9.00 8.00 117.00 Accum. in temp Combine4 2.00 4.00 3.00 5.00 Combine3 Combine2 Combine1 Combine1 P385 P388 P392 P394
Optimization blockers P394 void combine(vec ptr v, int *dest) int i int length vec length(v) int *data get vec start(v)i int sum =0; f。r(主=0;i<1 ength;i++) sum + data[i]i ★dest=sum;
10 Optimization Blockers P394 void combine4(vec_ptr v, int *dest) { int i; int length = vec_length(v); int *data = get_vec_start(v); int sum = 0; for (i = 0; i < length; i++) sum += data[i]; *dest = sum; }