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