Andy Ross wrote:
> 
> How about compile time?

I experimented with the effect of inlining on code size and compile times (but not 
run-time performance) on the src/FDM/JSBSim tree within FlightGear CVS as of about a 
week ago.  I did this by supplying different compiler options with "make CFLAGS=... 
CXXFLAGS=...".

GCC's default is to "inline" functions containing up to 10000 pseudo-instructions.  
The smallest code is produced with a limit of about 6 (-g -O2 -finline-limit-6 
-finline-functions), and it is only 58% of the size of the default build (-g -O2).

Summary of results:

"-finline-functions" makes a marginal improvement.

"-Os" produced about the same code size as "-O3", and significantly larger than "-O2"!

Code size and compile time are strongly correlated.

The default options give the longest build time AND the biggest code.  Isn't it 
ironic?  It's like raiaiain on your wedding day ... a free ride when you've already 
paid ... [Alanis Morrissette]

Code size:
           seconds    bytes  options
Smallest:    203     761360  -g -O1 -finline-limit-6 -finline-functions
Smallest O2: 233     767064  -g -O2 -finline-limit-6 -finline-functions
Default:     388    1328284  -g -O2
Largest:     388    1328284  -g -O2

Build time:
           seconds    bytes  options
Quickest:    185    1270108  -g -O0
Quickest O2: 233     767064  -g -O2 -finline-limit-6 -finline-functions
Default:     388    1328284  -g -O2
Slowest:     388    1328284  -g -O2

The option combinations I tried were (always with "-g") "-O0" and all combinations of:
("-O1" "-O2" "-O3" "-Os")
("-fno-inline" "-finline-limit-{1,2,3,4,6,8,12,16,24,32}" "")
("" "-finline-functions")

My system is P3/666 with 128MB, fast HDD, WinME/CygWin, no other programs running.  
Each run was with this script:

$ cat ~/bin/makeopts
#!/bin/bash
# Re-make in the current directory, with the given compiler flags.
# Print the directory, flags, time taken and object size.
make clean > /dev/null
T_START=`date "+%s"`
make CFLAGS="$*" CXXFLAGS="$*" > /dev/null
let T=`date "+%s"`-T_START
echo -ne "$T\t"
objsize lib*.a
echo $*

where "objsize" prints the sum of the sizes of the ".text" segments in the library:

$ cat ~/bin/objsize
#!/bin/bash
let A=0
for SZ in `size $1 | tail +2 | cut -f 1` ; do let A=A+SZ ; done
echo $1: $A


Full results - try sorting by time ("sort") or by size ("sort +1 -n"):

/d/JAF/fgfs/FlightGear/src/FDM/JSBSim/libJSBSim.a
Build time (s), object code bytes, options
185     1270108 -g -O0  # Two runs the same, to check that caching is steady.
187     1270108 -g -O0
212     979268  -g -O1 -fno-inline
212     979268  -g -O1 -fno-inline -finline-functions
206     824552  -g -O1 -finline-limit-1
202     789188  -g -O1 -finline-limit-1 -finline-functions
208     823224  -g -O1 -finline-limit-2
204     787832  -g -O1 -finline-limit-2 -finline-functions
207     819732  -g -O1 -finline-limit-3
204     784436  -g -O1 -finline-limit-3 -finline-functions
208     811960  -g -O1 -finline-limit-4
204     776608  -g -O1 -finline-limit-4 -finline-functions
207     796704  -g -O1 -finline-limit-6
203     761360  -g -O1 -finline-limit-6 -finline-functions
207     799760  -g -O1 -finline-limit-8
203     764520  -g -O1 -finline-limit-8 -finline-functions
215     825196  -g -O1 -finline-limit-12
210     791100  -g -O1 -finline-limit-12 -finline-functions
215     834908  -g -O1 -finline-limit-16
212     800884  -g -O1 -finline-limit-16 -finline-functions
217     874568  -g -O1 -finline-limit-24
214     840296  -g -O1 -finline-limit-24 -finline-functions
231     940324  -g -O1 -finline-limit-32
225     906028  -g -O1 -finline-limit-32 -finline-functions
318     1293052 -g -O1
317     1261824 -g -O1 -finline-functions
249     975116  -g -O2 -fno-inline
249     975116  -g -O2 -fno-inline -finline-functions
240     820672  -g -O2 -finline-limit-1
234     784816  -g -O2 -finline-limit-1 -finline-functions
241     819200  -g -O2 -finline-limit-2
236     783384  -g -O2 -finline-limit-2 -finline-functions
241     817264  -g -O2 -finline-limit-3
236     781320  -g -O2 -finline-limit-3 -finline-functions
241     809636  -g -O2 -finline-limit-4
236     773796  -g -O2 -finline-limit-4 -finline-functions
239     802900  -g -O2 -finline-limit-6
233     767064  -g -O2 -finline-limit-6 -finline-functions
248     814296  -g -O2 -finline-limit-8
243     778728  -g -O2 -finline-limit-8 -finline-functions
297     840512  -g -O2 -finline-limit-12
290     805680  -g -O2 -finline-limit-12 -finline-functions
304     850036  -g -O2 -finline-limit-16
299     815568  -g -O2 -finline-limit-16 -finline-functions
272     838100  -g -O2 -finline-limit-24
266     803512  -g -O2 -finline-limit-24 -finline-functions
265     988788  -g -O2 -finline-limit-32
259     954148  -g -O2 -finline-limit-32 -finline-functions
388     1328284 -g -O2
380     1297156 -g -O2 -finline-functions
247     975116  -g -O3 -fno-inline
247     975116  -g -O3 -fno-inline -finline-functions
232     784816  -g -O3 -finline-limit-1
233     784816  -g -O3 -finline-limit-1 -finline-functions
234     783384  -g -O3 -finline-limit-2
234     783384  -g -O3 -finline-limit-2 -finline-functions
234     781320  -g -O3 -finline-limit-3
233     781320  -g -O3 -finline-limit-3 -finline-functions
234     773796  -g -O3 -finline-limit-4
233     773796  -g -O3 -finline-limit-4 -finline-functions
232     767064  -g -O3 -finline-limit-6
232     767064  -g -O3 -finline-limit-6 -finline-functions
241     778728  -g -O3 -finline-limit-8
241     778728  -g -O3 -finline-limit-8 -finline-functions
288     805680  -g -O3 -finline-limit-12
288     805680  -g -O3 -finline-limit-12 -finline-functions
296     815568  -g -O3 -finline-limit-16
297     815568  -g -O3 -finline-limit-16 -finline-functions
265     803512  -g -O3 -finline-limit-24
266     803512  -g -O3 -finline-limit-24 -finline-functions
257     954148  -g -O3 -finline-limit-32
257     954148  -g -O3 -finline-limit-32 -finline-functions
381     1297156 -g -O3
383     1297156 -g -O3 -finline-functions
247     977940  -g -Os -fno-inline
246     977940  -g -Os -fno-inline -finline-functions
237     819236  -g -Os -finline-limit-1
237     819300  -g -Os -finline-limit-1 -finline-functions
239     817464  -g -Os -finline-limit-2
238     817560  -g -Os -finline-limit-2 -finline-functions
238     815516  -g -Os -finline-limit-3
239     815612  -g -Os -finline-limit-3 -finline-functions
238     807704  -g -Os -finline-limit-4
238     807800  -g -Os -finline-limit-4 -finline-functions
236     801112  -g -Os -finline-limit-6
237     801176  -g -Os -finline-limit-6 -finline-functions
245     812028  -g -Os -finline-limit-8
246     812124  -g -Os -finline-limit-8 -finline-functions
294     836748  -g -Os -finline-limit-12
293     836780  -g -Os -finline-limit-12 -finline-functions
302     846784  -g -Os -finline-limit-16
302     846816  -g -Os -finline-limit-16 -finline-functions
270     835016  -g -Os -finline-limit-24
269     835016  -g -Os -finline-limit-24 -finline-functions
264     983372  -g -Os -finline-limit-32
264     983404  -g -Os -finline-limit-32 -finline-functions
375     1304548 -g -Os
373     1304580 -g -Os -finline-functions

- Julian

_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel

Reply via email to