Problems with stepanov and inlining on the main line

Peter Schmid schmid@snake.iap.physik.tu-darmstadt.de
Mon Aug 6 08:51:00 GMT 2001


Function inlining seems to cause a huge pessimisation for the current 3.1
g++ compiler on the i686-pc-linux-gnu target. The abstraction penalty
is 7.4 in contrast to 1.2 when only the -O2 optimisation level is
active and 6.76 without any optimisation. 

By the way, the abstraction penalties for gcc 2.95.2 are 1.06
for the -O2 and 1.01 for the -O3 optimisation level.

I suggest that some application tests are added to the g++ regression
test suite. 

Could someone please fix the inlining problem.

Peter Schmid

g++ -v -W -Wall stepanov_v1p2.C -O3
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: ../gcc/configure --enable-shared --enable-threads=posix --enable-languages=c,c++,f77,objc --disable-nls --enable-clocale=gnu
Thread model: posix
gcc version 3.1 20010804 (experimental)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -W -Wall -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ stepanov_v1p2.C -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase stepanov_v1p2.C -O3 -W -Wall -version -o /tmp/ccxJyLQN.s
GNU CPP version 3.1 20010804 (experimental) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20010804 (experimental) (i686-pc-linux-gnu)
	compiled by GNU C version 3.1 20010804 (experimental).
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include/g++-v3
 /usr/local/include/g++-v3/i686-pc-linux-gnu
 /usr/local/include/g++-v3/backward
 /usr/local/include
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include
 /usr/include
End of search list.
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../../../i686-pc-linux-gnu/bin/as -V -Qy -o /tmp/ccDvxVgR.o /tmp/ccxJyLQN.s
GNU assembler version 2.11.90.0.23 (i686-pc-linux-gnu) using BFD version 2.11.90.0.23
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/crtbegin.o -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1 -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../../../i686-pc-linux-gnu/lib -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../.. /tmp/ccDvxVgR.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/crtend.o /usr/lib/crtn.o

-O3
time ./a.out

test      absolute   additions      ratio with
number    time       per second     test0

 0        0.44sec    113.64M         1.00
 1        0.48sec    104.17M         1.09
 2        0.48sec    104.17M         1.09
 3        4.51sec    11.09M         10.25
 4        5.94sec     8.42M         13.50
 5        2.84sec    17.61M         6.45
 6        6.92sec     7.23M         15.73
 7        3.98sec    12.56M         9.05
 8        9.87sec     5.07M         22.43
 9        5.02sec     9.96M         11.41
10        7.24sec     6.91M         16.45
11        7.12sec     7.02M         16.18
12        8.57sec     5.83M         19.48
mean:     3.26sec    15.35M         7.40

Total absolute time: 63.41 sec

Abstraction Penalty: 7.40


real	1m4.071s
user	1m3.430s
sys	0m0.000s

-O2

time ./a.out

test      absolute   additions      ratio with
number    time       per second     test0

 0        0.44sec    113.64M         1.00
 1        0.45sec    111.11M         1.02
 2        0.46sec    108.70M         1.05
 3        0.57sec    87.72M         1.30
 4        0.52sec    96.15M         1.18
 5        0.57sec    87.72M         1.30
 6        0.51sec    98.04M         1.16
 7        0.58sec    86.21M         1.32
 8        0.49sec    102.04M         1.11
 9        0.56sec    89.29M         1.27
10        0.51sec    98.04M         1.16
11        0.97sec    51.55M         2.20
12        0.96sec    52.08M         2.18
mean:     0.56sec    88.55M         1.28

Total absolute time: 7.59 sec

Abstraction Penalty: 1.28


real	0m7.830s
user	0m7.610s
sys	0m0.010s

no optimisation
./a.out

test      absolute   additions      ratio with
number    time       per second     test0

 0        2.11sec    23.70M         1.00
 1        2.51sec    19.92M         1.19
 2        8.07sec     6.20M         3.82
 3       13.13sec     3.81M         6.22
 4       20.43sec     2.45M         9.68
 5       14.32sec     3.49M         6.79
 6       21.71sec     2.30M         10.29
 7       19.01sec     2.63M         9.01
 8       27.41sec     1.82M         12.99
 9       20.53sec     2.44M         9.73
10       28.80sec     1.74M         13.65
11       26.47sec     1.89M         12.55
12       34.94sec     1.43M         16.56
mean:    14.27sec     3.50M         6.76

Total absolute time: 239.44 sec

Abstraction Penalty: 6.76



More information about the Libstdc++ mailing list