On Tue, Sep 09, 2014 at 03:14:08PM +0000, VandeVondele Joost wrote: > Attached is a further revision of the patch, now dealing with check-c++. > Roughly 50% speedup here at '-j32' (18m vs 12m). For my setup > (--enable-languages=c,c++,fortran) I have now improved all targets called in > 'make -j32 -k check'. The latter is now 30% faster (15m vs 20m). Note that > there are +- 1m fluctuations in these numbers, easily. > > I currently have no plans to work on other check targets before this patch is > committed. > > OK for trunk ?
So, I've tested your patch on a few years old 16way AMD, --enable-checking=yes and with make check -j1 and make check -j2 (the former doesn't parallelize, the latter does). First of all, the -j2 testing shows more tests tested in gcc and libstdc++: === gcc Summary === -# of expected passes 108100 +# of expected passes 108130 # of unexpected failures 175 # of unexpected successes 33 # of expected failures 262 ... === libstdc++ Summary === -# of expected passes 10133 +# of expected passes 10152 In gcc testsuite the difference seems to be (according to sorted PASS lines from *.sum files): +PASS: gcc.target/i386/vect-args.c -m3dnow -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -m3dnow -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -m3dnow -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -m3dnow (test for excess errors) +PASS: gcc.target/i386/vect-args.c -m3dnow (test for excess errors) +PASS: gcc.target/i386/vect-args.c -m3dnow (test for excess errors) +PASS: gcc.target/i386/vect-args.c -mmmx -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -mmmx -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -mmmx -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -mmmx (test for excess errors) +PASS: gcc.target/i386/vect-args.c -mmmx (test for excess errors) +PASS: gcc.target/i386/vect-args.c -mmmx (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse2 -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse2 -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse2 -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse2 (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse2 (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse2 (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse (test for excess errors) +PASS: gcc.target/i386/vect-args.c -msse (test for excess errors) +PASS: gcc.target/i386/vect-args.c -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c -O (test for excess errors) +PASS: gcc.target/i386/vect-args.c (test for excess errors) +PASS: gcc.target/i386/vect-args.c (test for excess errors) +PASS: gcc.target/i386/vect-args.c (test for excess errors) and in libstdc++: +PASS: 23_containers/map/modifiers/erase/abi_tag.cc scan-assembler _ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE5eraseB5cxx11ESt17_Rb_tree_iteratorIS4_E +PASS: 23_containers/map/modifiers/erase/abi_tag.cc (test for excess errors) +PASS: 23_containers/multimap/modifiers/erase/abi_tag.cc scan-assembler _ZNSt8multimapIiiSt4lessIiESaISt4pairIKiiEEE5eraseB5cxx11ESt17_Rb_tree_iteratorIS4_E +PASS: 23_containers/multimap/modifiers/erase/abi_tag.cc (test for excess errors) +PASS: 23_containers/multiset/modifiers/erase/abi_tag.cc scan-assembler _ZNSt8multisetIiSt4lessIiESaIiEE5eraseB5cxx11ESt23_Rb_tree_const_iteratorIiE +PASS: 23_containers/multiset/modifiers/erase/abi_tag.cc scan-assembler _ZNSt8multisetIiSt4lessIiESaIiEE5eraseB5cxx11ESt23_Rb_tree_const_iteratorIiES5_ +PASS: 23_containers/multiset/modifiers/erase/abi_tag.cc (test for excess errors) +PASS: 23_containers/set/modifiers/erase/abi_tag.cc scan-assembler _ZNSt3setIiSt4lessIiESaIiEE5eraseB5cxx11ESt23_Rb_tree_const_iteratorIiE +PASS: 23_containers/set/modifiers/erase/abi_tag.cc scan-assembler _ZNSt3setIiSt4lessIiESaIiEE5eraseB5cxx11ESt23_Rb_tree_const_iteratorIiES5_ +PASS: 23_containers/set/modifiers/erase/abi_tag.cc (test for excess errors) +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexIdE4imagB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexIdE4realB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexI[eg]E4imagB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexI[eg]E4realB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexIfE4imagB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexIfE4realB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexIiE4imagB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc scan-assembler _ZNKSt7complexIiE4realB5cxx11Ev +PASS: 26_numerics/complex/abi_tag.cc (test for excess errors) Not sure where the bug is, could be e.g. in i386.exp for gcc, but for libstdc++ less likely to be there rather than in the split. Attached are seconds result of the various *.log.sep times, in the first attachment from my last night's stock make -j48 -k check regtest (so, note the times might be higher because most of the CPUs are kept much more busy) and for make -j2 -k check regtest with your patch in the second attachment. The normal{1,2,3} libstdc++ times are still way too high (bet one of those 3 is regex, which really has to be split), while e.g. the various 0/3 or even < 30 seconds jobs are IMHO undesirable. Jakub
gcc/testsuite/g++/g++.log.sep 3228 gcc/testsuite/g++1/g++.log.sep 2446 gcc/testsuite/g++2/g++.log.sep 2065 gcc/testsuite/g++3/g++.log.sep 1843 gcc/testsuite/g++4/g++.log.sep 1579 gcc/testsuite/gcc/gcc.log.sep 2956 gcc/testsuite/gcc1/gcc.log.sep 2040 gcc/testsuite/gcc10/gcc.log.sep 675 gcc/testsuite/gcc11/gcc.log.sep 1209 gcc/testsuite/gcc2/gcc.log.sep 1787 gcc/testsuite/gcc3/gcc.log.sep 2219 gcc/testsuite/gcc4/gcc.log.sep 1757 gcc/testsuite/gcc5/gcc.log.sep 2042 gcc/testsuite/gcc6/gcc.log.sep 1182 gcc/testsuite/gcc7/gcc.log.sep 1866 gcc/testsuite/gcc8/gcc.log.sep 789 gcc/testsuite/gcc9/gcc.log.sep 875 gcc/testsuite/gfortran/gfortran.log.sep 1836 gcc/testsuite/gfortran1/gfortran.log.sep 1875 gcc/testsuite/gfortran2/gfortran.log.sep 1744 gcc/testsuite/gfortran3/gfortran.log.sep 1762 gcc/testsuite/gfortran4/gfortran.log.sep 1738 gcc/testsuite/gfortran5/gfortran.log.sep 1743 gcc/testsuite/gfortran6/gfortran.log.sep 1928 gcc/testsuite/go/go.log.sep 606 gcc/testsuite/go1/go.log.sep 1304 gcc/testsuite/go2/go.log.sep 244 gcc/testsuite/go3/go.log.sep 255 gcc/testsuite/go4/go.log.sep 37 gcc/testsuite/go5/go.log.sep 42 gcc/testsuite/objc/objc.log.sep 237 gcc/testsuite/objc1/objc.log.sep 60 gcc/testsuite/objc2/objc.log.sep 391 gcc/testsuite/objc3/objc.log.sep 57 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal0/libstdc++.log.sep 1177 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal1/libstdc++.log.sep 2043 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal10/libstdc++.log.sep 820 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal2/libstdc++.log.sep 1316 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal3/libstdc++.log.sep 1347 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal4/libstdc++.log.sep 1437 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal5/libstdc++.log.sep 1754 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal6/libstdc++.log.sep 1278 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal7/libstdc++.log.sep 1471 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal8/libstdc++.log.sep 1429 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal9/libstdc++.log.sep 1951
gcc/testsuite/g++/g++.log.sep 218 gcc/testsuite/g++1/g++.log.sep 303 gcc/testsuite/g++10/g++.log.sep 170 gcc/testsuite/g++11/g++.log.sep 117 gcc/testsuite/g++12/g++.log.sep 204 gcc/testsuite/g++13/g++.log.sep 110 gcc/testsuite/g++14/g++.log.sep 332 gcc/testsuite/g++15/g++.log.sep 167 gcc/testsuite/g++16/g++.log.sep 229 gcc/testsuite/g++17/g++.log.sep 346 gcc/testsuite/g++18/g++.log.sep 226 gcc/testsuite/g++19/g++.log.sep 212 gcc/testsuite/g++2/g++.log.sep 571 gcc/testsuite/g++20/g++.log.sep 105 gcc/testsuite/g++21/g++.log.sep 17 gcc/testsuite/g++22/g++.log.sep 100 gcc/testsuite/g++23/g++.log.sep 43 gcc/testsuite/g++24/g++.log.sep 52 gcc/testsuite/g++3/g++.log.sep 46 gcc/testsuite/g++4/g++.log.sep 3 gcc/testsuite/g++5/g++.log.sep 84 gcc/testsuite/g++6/g++.log.sep 257 gcc/testsuite/g++7/g++.log.sep 59 gcc/testsuite/g++8/g++.log.sep 200 gcc/testsuite/g++9/g++.log.sep 247 gcc/testsuite/gcc/gcc.log.sep 591 gcc/testsuite/gcc1/gcc.log.sep 486 gcc/testsuite/gcc10/gcc.log.sep 399 gcc/testsuite/gcc11/gcc.log.sep 439 gcc/testsuite/gcc12/gcc.log.sep 145 gcc/testsuite/gcc13/gcc.log.sep 49 gcc/testsuite/gcc14/gcc.log.sep 415 gcc/testsuite/gcc15/gcc.log.sep 401 gcc/testsuite/gcc16/gcc.log.sep 324 gcc/testsuite/gcc17/gcc.log.sep 409 gcc/testsuite/gcc18/gcc.log.sep 301 gcc/testsuite/gcc19/gcc.log.sep 306 gcc/testsuite/gcc2/gcc.log.sep 139 gcc/testsuite/gcc20/gcc.log.sep 196 gcc/testsuite/gcc21/gcc.log.sep 166 gcc/testsuite/gcc22/gcc.log.sep 0 gcc/testsuite/gcc23/gcc.log.sep 80 gcc/testsuite/gcc24/gcc.log.sep 119 gcc/testsuite/gcc25/gcc.log.sep 101 gcc/testsuite/gcc26/gcc.log.sep 114 gcc/testsuite/gcc27/gcc.log.sep 36 gcc/testsuite/gcc28/gcc.log.sep 484 gcc/testsuite/gcc29/gcc.log.sep 168 gcc/testsuite/gcc3/gcc.log.sep 218 gcc/testsuite/gcc30/gcc.log.sep 110 gcc/testsuite/gcc31/gcc.log.sep 86 gcc/testsuite/gcc4/gcc.log.sep 46 gcc/testsuite/gcc5/gcc.log.sep 605 gcc/testsuite/gcc6/gcc.log.sep 444 gcc/testsuite/gcc7/gcc.log.sep 343 gcc/testsuite/gcc8/gcc.log.sep 345 gcc/testsuite/gcc9/gcc.log.sep 547 gcc/testsuite/gfortran/gfortran.log.sep 174 gcc/testsuite/gfortran1/gfortran.log.sep 350 gcc/testsuite/gfortran10/gfortran.log.sep 132 gcc/testsuite/gfortran11/gfortran.log.sep 126 gcc/testsuite/gfortran12/gfortran.log.sep 166 gcc/testsuite/gfortran13/gfortran.log.sep 108 gcc/testsuite/gfortran14/gfortran.log.sep 170 gcc/testsuite/gfortran15/gfortran.log.sep 182 gcc/testsuite/gfortran16/gfortran.log.sep 88 gcc/testsuite/gfortran2/gfortran.log.sep 272 gcc/testsuite/gfortran3/gfortran.log.sep 357 gcc/testsuite/gfortran4/gfortran.log.sep 398 gcc/testsuite/gfortran5/gfortran.log.sep 242 gcc/testsuite/gfortran6/gfortran.log.sep 272 gcc/testsuite/gfortran7/gfortran.log.sep 383 gcc/testsuite/gfortran8/gfortran.log.sep 170 gcc/testsuite/gfortran9/gfortran.log.sep 157 gcc/testsuite/go/go.log.sep 95 gcc/testsuite/go1/go.log.sep 255 gcc/testsuite/go2/go.log.sep 121 gcc/testsuite/go3/go.log.sep 66 gcc/testsuite/go4/go.log.sep 8 gcc/testsuite/go5/go.log.sep 19 gcc/testsuite/objc/objc.log.sep 53 gcc/testsuite/objc1/objc.log.sep 16 gcc/testsuite/objc2/objc.log.sep 80 gcc/testsuite/objc3/objc.log.sep 10 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal0/libstdc++.log.sep 597 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal1/libstdc++.log.sep 1057 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal10/libstdc++.log.sep 377 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal11/libstdc++.log.sep 604 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal12/libstdc++.log.sep 357 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal13/libstdc++.log.sep 36 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal14/libstdc++.log.sep 334 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal15/libstdc++.log.sep 403 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal2/libstdc++.log.sep 896 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal3/libstdc++.log.sep 804 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal4/libstdc++.log.sep 580 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal5/libstdc++.log.sep 617 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal6/libstdc++.log.sep 487 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal7/libstdc++.log.sep 536 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal8/libstdc++.log.sep 593 x86_64-unknown-linux-gnu/libstdc++-v3/testsuite/normal9/libstdc++.log.sep 633