Primary:
[Skip To Body]
[Front Door]
[Current]
[Glance]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Sets:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Outlines]
[Project]
[Readings]
[Reference]
ECA:
[About]
[Grades]
[Quizzes]
[Submit Work]
[Change Password]
[Reset Password]
Miscellaneous:
[2001S]
[98F]
[SamR]
[Glimmer Labs]
Summary: In recent classes, we've examined some possible ways in which a compiler can optimize intermediate code. In today's lab, you will explore the ways in which our Pascal compiler optimizes or fails to optimize code.
Collaboration: Feel free to work on this lab in pairs or trios.
Turning It In: This lab is primarily intended to help you reflect on optimization. You need not turn in anything.
Grading: Since you're not going to turn this in, I"m not going to grade it.
Compiling Pascal Programs:
In order to compile Pascal programs, you will need to use the
pc or gpc compiler on erdos. You should
use the -S flag to generate assembly code.
1. You should refer to lab 10 for guidance in reading GNU x86 assembly.
2. You should read the info pages for gpc to determine how
to tell gpc to optimize. You may also want to read the
man page for gcc.
Here's a simple Pascal program that reads a value, applies a function to that value, and prints out the result.
program example(input,output);
var
inval: integer;
result1,result2: integer;
function increment(val: integer): integer;
begin
val := val + 5;
val := val * 2;
increment := val;
end;
function decrement(val: integer; delta: integer): integer;
begin
decrement := val - delta;
end;
begin
readln(inval);
result1 := increment(inval);
result2 := decrement(inval,10);
writeln(inval);
writeln(result1);
writeln(result2);
end.
a. Compile this program with no optimization, with basic optimization
(-O1), with intermediate optimization (-O2),
and with more advanced optimization (-O3).
b. What differences, if any, do you notice in the resulting code?
c. Do you have any hypotheses as to which optizzations are performed at which optimization level?
Here is a variant of the loop code we explored in class.
program loop(input,output);
const
DIM = 10;
type
matrix = array[1..DIM,1..DIM] of integer;
var
a: matrix;
b: matrix;
i: integer;
j: integer;
begin
for i := 1 to DIM do
for j := 1 to DIM do
a[i,j] := b[j,i];
end.
a. Generate assembly code with no optimization. Read through the code to make sure that you understand what it does.
b. Note any potential optimizations you see in that code.
a. What changes do the various levels of optimization make to the assembly code in the previous problem?
b. Make a table of the compile and run times for the program under the four levels of optimization (none, O1, O2, O3).
Try different dimension sizes in the code from the previous exercises
(e.g., 1, 2, 1000) to see whether the optimization differs. You may
also want to tell the compiler to try to unroll loops using
-funroll-loops.
Primary:
[Skip To Body]
[Front Door]
[Current]
[Glance]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Sets:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Outlines]
[Project]
[Readings]
[Reference]
ECA:
[About]
[Grades]
[Quizzes]
[Submit Work]
[Change Password]
[Reset Password]
Miscellaneous:
[2001S]
[98F]
[SamR]
[Glimmer Labs]
Disclaimer:
I usually create these pages on the fly
, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Tue Dec 10 08:53:58 2002.
The source to the document was last modified on Tue Dec 10 08:53:54 2002.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS362/2002F/Labs/lab.14.html.
You may wish to
validate this document's HTML
;
;
Check with Bobby