Related articles |
---|
directives for optimised code maatwerk@euronet.nl (1995-06-28) |
Re: directives for optimised code cdg@nullstone.com (1995-07-05) |
Newsgroups: | comp.compilers |
From: | maatwerk@euronet.nl (M.M._van_der_Laan) |
Keywords: | design, question, comment |
Organization: | Compilers Central |
Date: | Wed, 28 Jun 1995 11:23:16 GMT |
Maybe it is a good idea to tell the compiler if a portion of code
is likely to be executed or not. Look at the following code and
it's translation:
--- source --- --- intermediate code ---
if a < b if a < b, jump lab1
error("A is less than B") call error(...)
else jump lab2
normal processing lab1: normal processing
next statement lab2: next statement
This translation will execute a jump in every case. Jumps are
very slow on modern processors.
In the next fragment I added a directive {NO}, which instructs
the compiler to assume that the 'then'-part will be executed
less often than the 'else'-part:
if a < b {no} if a < b, jump lab1
error("A is less than B") normal processing
else lab2: next statement
normal processing ...
next statement lab1: call error(...)
jump lab2
The compiler can now move code that will be executed less often
to the end of the function. There are several improvements here:
- jumps are removed, so code is dramatically faster.
- There is better use of the cache, because unneeded instructions
are not loaded.
Questions to you all:
Is this a good idea? Are there any implementations allready using
this? What is the speed improvement?
Mauk van der Laan
[The original version of Fortran had a FREQUENCY statement that let
you give the relative frequency of the three branches of the IF
statement and how many times a DO loop was likely to run. It turned
out to be useless, they even implemented it backwards for a while and
nobody noticed. These days it's far more common to collect
statistics from executing a program and feed those back to the
compiler, since they're a lot more accurate than the programmer's
expectations. -John]
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.