Patchwork parallelize gcc, gfortran and libstdc++ testing some more

login
register
mail settings
Submitter Jakub Jelinek
Date June 20, 2011, 9:04 p.m.
Message ID <20110620210441.GG16443@tyan-ft48-01.lab.bos.redhat.com>
Download mbox | patch
Permalink /patch/101209/
State New
Headers show

Comments

Jakub Jelinek - June 20, 2011, 9:04 p.m.
On Mon, Jun 20, 2011 at 03:54:59PM +0200, Jakub Jelinek wrote:
> On Mon, Jun 20, 2011 at 09:28:56AM -0400, Jason Merrill wrote:
> > On 06/17/2011 08:20 PM, Mike Stump wrote:
> > >On Jun 17, 2011, at 10:47 AM, Nathan Froyd wrote:
> > >>I've done a lot of g++-only testsuite runs lately
> > >
> > >I think it is reasonable to have even more of them, say, if you have 16 cores and just test c++...  I wonder what the scaling is like as we approach larger N.  :-)
> > 
> > In my test runs, one of the libstdc++ batches (normal3) takes longer
> > than any of the g++ batches, so breaking that up would be more
> > effective for me.  :)
> 
> Yeah, certainly, libstdc++ needs more parallelization most.
> But, as I wrote already to Rainer in Autumn, the methodology
> for splitting things up should be on a fast box look at
> the time spent in each of the parts as reported by dejagnu
> in the log files, and split it to make the jobs roughly even
> sized with not overcomplicated patterns.

So, here is a patch that parallelizes the longest test chunks
on x86_64-linux some more.

libstdc++ testing is now split into 10 jobs, roughly equally sized
(used to be 4), check-gcc testing is now split into 10 jobs too (used to
be 7, but the new division attempts to be more balanced, fastest
job takes for me 8 minutes and longest job takes 11), and check-gfortran
is now run in 7 jobs instead of 4.  This should make these more comparable
e.g. to check-g++ chunks etc.

Regtested on x86_64-linux, verified the merged *.sum files are identical.
Ok for trunk?

2011-06-20  Jakub Jelinek  <jakub@redhat.com>

	* Makefile.in (dg_target_exps): Set.
	(check_gcc_parallelize): Parallelize gcc testing into 10 jobs
	instead of 7, try to divide it more evenly.

	* Make-lang.in (check_gfortran_parallelize): Parallelize dg.exp
	into 6 jobs instead of 3.

	* testsuite/Makefile.am (check_DEJAGNU_normal_targets): Add
	check-DEJAGNUnormal[4-9].
	(check-DEJAGNU): Split into 10 jobs for parallel testing instead of 4.
	* testsuite/Makefile.in: Regenerated.



	Jakub
Jason Merrill - June 21, 2011, 3:08 a.m.
OK.

Jason
Jeff Law - June 22, 2011, 1:52 p.m.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 06/20/11 15:04, Jakub Jelinek wrote:
> On Mon, Jun 20, 2011 at 03:54:59PM +0200, Jakub Jelinek wrote:
>> On Mon, Jun 20, 2011 at 09:28:56AM -0400, Jason Merrill wrote:
>>> On 06/17/2011 08:20 PM, Mike Stump wrote:
>>>> On Jun 17, 2011, at 10:47 AM, Nathan Froyd wrote:
>>>>> I've done a lot of g++-only testsuite runs lately
>>>>
>>>> I think it is reasonable to have even more of them, say, if you have 16 cores and just test c++...  I wonder what the scaling is like as we approach larger N.  :-)
>>>
>>> In my test runs, one of the libstdc++ batches (normal3) takes longer
>>> than any of the g++ batches, so breaking that up would be more
>>> effective for me.  :)
>>
>> Yeah, certainly, libstdc++ needs more parallelization most.
>> But, as I wrote already to Rainer in Autumn, the methodology
>> for splitting things up should be on a fast box look at
>> the time spent in each of the parts as reported by dejagnu
>> in the log files, and split it to make the jobs roughly even
>> sized with not overcomplicated patterns.
> 
> So, here is a patch that parallelizes the longest test chunks
> on x86_64-linux some more.
> 
> libstdc++ testing is now split into 10 jobs, roughly equally sized
> (used to be 4), check-gcc testing is now split into 10 jobs too (used to
> be 7, but the new division attempts to be more balanced, fastest
> job takes for me 8 minutes and longest job takes 11), and check-gfortran
> is now run in 7 jobs instead of 4.  This should make these more comparable
> e.g. to check-g++ chunks etc.
> 
> Regtested on x86_64-linux, verified the merged *.sum files are identical.
> Ok for trunk?
> 
> 2011-06-20  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* Makefile.in (dg_target_exps): Set.
> 	(check_gcc_parallelize): Parallelize gcc testing into 10 jobs
> 	instead of 7, try to divide it more evenly.
> 
> 	* Make-lang.in (check_gfortran_parallelize): Parallelize dg.exp
> 	into 6 jobs instead of 3.
> 
> 	* testsuite/Makefile.am (check_DEJAGNU_normal_targets): Add
> 	check-DEJAGNUnormal[4-9].
> 	(check-DEJAGNU): Split into 10 jobs for parallel testing instead of 4.
> 	* testsuite/Makefile.in: Regenerated.
OK.
jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJOAfOYAAoJEBRtltQi2kC7fh4H/0ku6F+8rZEb0iy0zyr+KHUd
2qvA4BsXPcNs3xjwdqgrpvg9pM+6qXsEB8oEuaCBu7ndT8kCMPfnjaRP3otnl5ju
Maceyf0rZMDOUVYiYXYEstLMH+gljpraBU/n6UrvrXLLtZzna5yU6ZLwmPs1ngt/
+QQXWe34gRraEsLo4A9y5pcU69WnsVMdmrVKsRn/EnsLqSxClvmyWSaFrX0i5X4C
+NfQC3YQqiG0bjC6acCyfccHGJ+7tlyiafsyR0TDZPfGQLCwnRWNhm+A/GrTjYpY
nHbwhZ7sJef3gz9pLRm4qJ0OyMKqZo6c07Z43KdYIaIMQdjsh0CA3xfnd/vHSYQ=
=wO5+
-----END PGP SIGNATURE-----

Patch

--- gcc/Makefile.in.jj	2011-06-15 11:54:43.000000000 +0200
+++ gcc/Makefile.in	2011-06-20 19:12:06.593450989 +0200
@@ -501,6 +501,10 @@  xm_include_list=@xm_include_list@
 xm_defines=@xm_defines@
 lang_checks=check-gcc
 lang_checks_parallelized=check-gcc
+dg_target_exps:=alpha.exp,arm.exp,avr.exp,bfin.exp,cris.exp,frv.exp
+dg_target_exps:=$(dg_target_exps),i386.exp,ia64.exp,m68k.exp,microblaze.exp
+dg_target_exps:=$(dg_target_exps),mips.exp,powerpc.exp,rx.exp,s390.exp,sh.exp
+dg_target_exps:=$(dg_target_exps),sparc.exp,spu.exp,xstormy16.exp
 # This lists a couple of test files that take most time during check-gcc.
 # When doing parallelized check-gcc, these can run in parallel with the
 # remaining tests.  Each word in this variable stands for work for one
@@ -514,10 +518,14 @@  lang_checks_parallelized=check-gcc
 # */ prefixed to it in runtest_file_p, it is usually desirable to include
 # a subdirectory name.
 check_gcc_parallelize=execute.exp=execute/2* \
-		      execute.exp=execute/\[013-9a-zA-Z\]* \
-		      compile.exp dg.exp \
-		      dg-torture.exp,builtins.exp \
-		      struct-layout-1.exp,unsorted.exp,stackalign.exp,i386.exp
+		      execute.exp=execute/\[013-9a-fA-F\]* \
+		      execute.exp=execute/\[pP\]*,dg.exp \
+		      execute.exp=execute/\[g-oq-zG-OQ-Z\]*,compile.exp=compile/2* \
+		      compile.exp=compile/\[9pP\]*,builtins.exp \
+		      compile.exp=compile/\[013-8a-oq-zA-OQ-Z\]* \
+		      dg-torture.exp,ieee.exp \
+		      vect.exp,guality.exp,unsorted.exp \
+		      struct-layout-1.exp,stackalign.exp,$(dg_target_exps)
 lang_opt_files=@lang_opt_files@ $(srcdir)/c-family/c.opt $(srcdir)/common.opt
 lang_specs_files=@lang_specs_files@
 lang_tree_files=@lang_tree_files@
--- gcc/fortran/Make-lang.in.jj	2011-05-24 23:59:28.000000000 +0200
+++ gcc/fortran/Make-lang.in	2011-06-20 20:29:29.986808197 +0200
@@ -171,9 +171,12 @@  check-fortran-subtargets : check-gfortra
 lang_checks += check-gfortran
 lang_checks_parallelized += check-gfortran
 # For description see comment above check_gcc_parallelize in gcc/Makefile.in.
-check_gfortran_parallelize = dg.exp=gfortran.dg/\[a-cA-C\]* \
-			     dg.exp=gfortran.dg/\[d-mD-M\]* \
-			     dg.exp=gfortran.dg/\[n-zN-Z0-9\]*
+check_gfortran_parallelize = dg.exp=gfortran.dg/\[adAD\]* \
+			     dg.exp=gfortran.dg/\[bcBC\]* \
+			     dg.exp=gfortran.dg/\[nopNOP\]* \
+			     dg.exp=gfortran.dg/\[isuvISUV\]* \
+			     dg.exp=gfortran.dg/\[efhkqrxzEFHKQRXZ\]* \
+			     dg.exp=gfortran.dg/\[0-9gjlmtwyGJLMTWY\]*
 
 # GFORTRAN documentation.
 GFORTRAN_TEXI = \
--- libstdc++-v3/testsuite/Makefile.am.jj	2011-03-03 10:37:23.000000000 +0100
+++ libstdc++-v3/testsuite/Makefile.am	2011-06-20 18:11:22.734808299 +0200
@@ -100,7 +100,7 @@  new-abi-baseline:
 	@test ! -f $*/site.exp || mv $*/site.exp $*/site.bak
 	@mv $*/site.exp.tmp $*/site.exp
 
-check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
+check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3 4 5 6 7 8 9)
 $(check_DEJAGNU_normal_targets): check-DEJAGNUnormal%: normal%/site.exp
 
 # Run the testsuite in normal mode.
@@ -109,22 +109,17 @@  check-DEJAGNU $(check_DEJAGNU_normal_tar
 	RANLIB="$(RANLIB)"; export RANLIB; \
 	if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
 	    && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
-	  $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
-		  check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
-	  for idx in 0 1 2 3; do \
+	  $(MAKE) $(AM_MAKEFLAGS) $(check_DEJAGNU_normal_targets); \
+	  for idx in 0 1 2 3 4 5 6 7 8 9; do \
 	    mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
 	    mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
 	  done; \
 	  mv -f libstdc++.sum libstdc++.sum.sep; \
 	  mv -f libstdc++.log libstdc++.log.sep; \
 	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
-	    libstdc++.sum.sep normal0/libstdc++.sum.sep \
-	    normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
-	    normal3/libstdc++.sum.sep > libstdc++.sum; \
+	    libstdc++.sum.sep normal[0-9]/libstdc++.sum.sep > libstdc++.sum; \
 	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
-	    libstdc++.log.sep normal0/libstdc++.log.sep \
-	    normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
-	    normal3/libstdc++.log.sep > libstdc++.log; \
+	    libstdc++.log.sep normal[0-9]/libstdc++.log.sep > libstdc++.log; \
 	  exit 0; \
 	fi; \
 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
@@ -140,13 +135,25 @@  check-DEJAGNU $(check_DEJAGNU_normal_tar
 			$(RUNTESTFLAGS) abi.exp; \
 	    else echo "WARNING: could not find \`runtest'" 1>&2; :;\
 	    fi; \
-	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [ab]* de* [ep]*/*`";; \
+	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/*`";; \
 	  normal1) \
-	    dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
+	    dirs="`cd $$srcdir; echo [ab]* de* [ep]*/*`";; \
 	  normal2) \
-	    dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
+	    dirs="`cd $$srcdir; echo 2[01]_*/*`";; \
 	  normal3) \
-	    dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
+	    dirs="`cd $$srcdir; echo 22_*/*`";; \
+	  normal4) \
+	    dirs="`cd $$srcdir; echo 23_*/[a-km-tw-z]*`";; \
+	  normal5) \
+	    dirs="`cd $$srcdir; echo 23_*/[luv]*`";; \
+	  normal6) \
+	    dirs="`cd $$srcdir; echo 2[459]_*/*`";; \
+	  normal7) \
+	    dirs="`cd $$srcdir; echo 2[68]_*/*`";; \
+	  normal8) \
+	    dirs="`cd $$srcdir; echo 27_*/*`";; \
+	  normal9) \
+	    dirs="`cd $$srcdir; echo t*/*`";; \
 	esac; \
 	if [ -n "$*" ]; then cd "$*"; fi; \
 	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
--- libstdc++-v3/testsuite/Makefile.in.jj	2011-03-08 11:39:33.199392326 +0100
+++ libstdc++-v3/testsuite/Makefile.in	2011-06-20 18:11:48.176808266 +0200
@@ -287,7 +287,7 @@  lists_of_files = \
 
 extract_symvers = $(glibcxx_builddir)/scripts/extract_symvers
 baseline_subdir := $(shell $(CXX) --print-multi-dir)
-check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
+check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3 4 5 6 7 8 9)
 
 # Runs the testsuite, but in compile only mode.
 # Can be used to test sources with non-GNU FE's at various warning
@@ -545,22 +545,17 @@  check-DEJAGNU $(check_DEJAGNU_normal_tar
 	RANLIB="$(RANLIB)"; export RANLIB; \
 	if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
 	    && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
-	  $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
-		  check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
-	  for idx in 0 1 2 3; do \
+	  $(MAKE) $(AM_MAKEFLAGS) $(check_DEJAGNU_normal_targets); \
+	  for idx in 0 1 2 3 4 5 6 7 8 9; do \
 	    mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
 	    mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
 	  done; \
 	  mv -f libstdc++.sum libstdc++.sum.sep; \
 	  mv -f libstdc++.log libstdc++.log.sep; \
 	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
-	    libstdc++.sum.sep normal0/libstdc++.sum.sep \
-	    normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
-	    normal3/libstdc++.sum.sep > libstdc++.sum; \
+	    libstdc++.sum.sep normal[0-9]/libstdc++.sum.sep > libstdc++.sum; \
 	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
-	    libstdc++.log.sep normal0/libstdc++.log.sep \
-	    normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
-	    normal3/libstdc++.log.sep > libstdc++.log; \
+	    libstdc++.log.sep normal[0-9]/libstdc++.log.sep > libstdc++.log; \
 	  exit 0; \
 	fi; \
 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
@@ -576,13 +571,25 @@  check-DEJAGNU $(check_DEJAGNU_normal_tar
 			$(RUNTESTFLAGS) abi.exp; \
 	    else echo "WARNING: could not find \`runtest'" 1>&2; :;\
 	    fi; \
-	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [ab]* de* [ep]*/*`";; \
+	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/*`";; \
 	  normal1) \
-	    dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
+	    dirs="`cd $$srcdir; echo [ab]* de* [ep]*/*`";; \
 	  normal2) \
-	    dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
+	    dirs="`cd $$srcdir; echo 2[01]_*/*`";; \
 	  normal3) \
-	    dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
+	    dirs="`cd $$srcdir; echo 22_*/*`";; \
+	  normal4) \
+	    dirs="`cd $$srcdir; echo 23_*/[a-km-tw-z]*`";; \
+	  normal5) \
+	    dirs="`cd $$srcdir; echo 23_*/[luv]*`";; \
+	  normal6) \
+	    dirs="`cd $$srcdir; echo 2[459]_*/*`";; \
+	  normal7) \
+	    dirs="`cd $$srcdir; echo 2[68]_*/*`";; \
+	  normal8) \
+	    dirs="`cd $$srcdir; echo 27_*/*`";; \
+	  normal9) \
+	    dirs="`cd $$srcdir; echo t*/*`";; \
 	esac; \
 	if [ -n "$*" ]; then cd "$*"; fi; \
 	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \