[PATCH] RE: gcc parallel make check

Jakub Jelinek jakub@redhat.com
Wed Sep 10 13:26:00 GMT 2014


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
-------------- next part --------------
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
-------------- next part --------------
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


More information about the Gcc-patches mailing list