diff mbox

Bump the default thread stack size on Darwin in libgomp (PR libgomp/79876)

Message ID 20170401122418.GU17461@tucnak
State New
Headers show

Commit Message

Jakub Jelinek April 1, 2017, 12:24 p.m. UTC
Hi!

Apparently Darwin has insane default stack size for pthread_create
unless overridden through pthread_attr_setstacksize - 512kB, compared e.g.
to Linux usual default of around 8MB.  For typical OpenMP uses that is way
too low, so the following patch is an attempt to bump it to 2MB just on
Darwin, and on other targets keep the default.  Everything can be in any
case overridden through {,G}OMP_STACKSIZE env variables.

Bootstrapped/regtested on x86_64-linux and i686-linux, can anyone please test it
on darwin?

2017-04-01  Jakub Jelinek  <jakub@redhat.com>

	PR libgomp/79876
	* config/posix/thread-stacksize.h: New file.
	* config/darwin/thread-stacksize.h: New file.
	* config/nvptx/thread-stacksize.h: New file.
	* env.c: Include thread-stacksize.h.
	(initialize_env): Initialize stacksize to GOMP_DEFAULT_STACKSIZE
	instead of 0.  Call pthread_attr_setstacksize even if
	GOMP_DEFAULT_STACKSIZE is non-zero.


	Jakub

Comments

Jeff Law April 3, 2017, 4:56 p.m. UTC | #1
On 04/01/2017 06:24 AM, Jakub Jelinek wrote:
> Hi!
>
> Apparently Darwin has insane default stack size for pthread_create
> unless overridden through pthread_attr_setstacksize - 512kB, compared e.g.
> to Linux usual default of around 8MB.  For typical OpenMP uses that is way
> too low, so the following patch is an attempt to bump it to 2MB just on
> Darwin, and on other targets keep the default.  Everything can be in any
> case overridden through {,G}OMP_STACKSIZE env variables.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, can anyone please test it
> on darwin?
>
> 2017-04-01  Jakub Jelinek  <jakub@redhat.com>
>
> 	PR libgomp/79876
> 	* config/posix/thread-stacksize.h: New file.
> 	* config/darwin/thread-stacksize.h: New file.
> 	* config/nvptx/thread-stacksize.h: New file.
> 	* env.c: Include thread-stacksize.h.
> 	(initialize_env): Initialize stacksize to GOMP_DEFAULT_STACKSIZE
> 	instead of 0.  Call pthread_attr_setstacksize even if
> 	GOMP_DEFAULT_STACKSIZE is non-zero.
I've got a build started, but it's on an ancient macbook pro, so it'll 
take a long time.  Someone else with modern hardware could certainly get 
this done faster :-)

jeff
Jakub Jelinek April 3, 2017, 5 p.m. UTC | #2
On Mon, Apr 03, 2017 at 10:56:13AM -0600, Jeff Law wrote:
> On 04/01/2017 06:24 AM, Jakub Jelinek wrote:
> > Apparently Darwin has insane default stack size for pthread_create
> > unless overridden through pthread_attr_setstacksize - 512kB, compared e.g.
> > to Linux usual default of around 8MB.  For typical OpenMP uses that is way
> > too low, so the following patch is an attempt to bump it to 2MB just on
> > Darwin, and on other targets keep the default.  Everything can be in any
> > case overridden through {,G}OMP_STACKSIZE env variables.
> > 
> > Bootstrapped/regtested on x86_64-linux and i686-linux, can anyone please test it
> > on darwin?
> > 
> > 2017-04-01  Jakub Jelinek  <jakub@redhat.com>
> > 
> > 	PR libgomp/79876
> > 	* config/posix/thread-stacksize.h: New file.
> > 	* config/darwin/thread-stacksize.h: New file.
> > 	* config/nvptx/thread-stacksize.h: New file.
> > 	* env.c: Include thread-stacksize.h.
> > 	(initialize_env): Initialize stacksize to GOMP_DEFAULT_STACKSIZE
> > 	instead of 0.  Call pthread_attr_setstacksize even if
> > 	GOMP_DEFAULT_STACKSIZE is non-zero.
> I've got a build started, but it's on an ancient macbook pro, so it'll take
> a long time.  Someone else with modern hardware could certainly get this
> done faster :-)

Dominique has already tested it on Darwin 16 and said he'll test on Darwin
10; I'm waiting for those results.

	Jakub
Jeff Law April 3, 2017, 5:02 p.m. UTC | #3
On 04/03/2017 11:00 AM, Jakub Jelinek wrote:
> On Mon, Apr 03, 2017 at 10:56:13AM -0600, Jeff Law wrote:
>> On 04/01/2017 06:24 AM, Jakub Jelinek wrote:
>>> Apparently Darwin has insane default stack size for pthread_create
>>> unless overridden through pthread_attr_setstacksize - 512kB, compared e.g.
>>> to Linux usual default of around 8MB.  For typical OpenMP uses that is way
>>> too low, so the following patch is an attempt to bump it to 2MB just on
>>> Darwin, and on other targets keep the default.  Everything can be in any
>>> case overridden through {,G}OMP_STACKSIZE env variables.
>>>
>>> Bootstrapped/regtested on x86_64-linux and i686-linux, can anyone please test it
>>> on darwin?
>>>
>>> 2017-04-01  Jakub Jelinek  <jakub@redhat.com>
>>>
>>> 	PR libgomp/79876
>>> 	* config/posix/thread-stacksize.h: New file.
>>> 	* config/darwin/thread-stacksize.h: New file.
>>> 	* config/nvptx/thread-stacksize.h: New file.
>>> 	* env.c: Include thread-stacksize.h.
>>> 	(initialize_env): Initialize stacksize to GOMP_DEFAULT_STACKSIZE
>>> 	instead of 0.  Call pthread_attr_setstacksize even if
>>> 	GOMP_DEFAULT_STACKSIZE is non-zero.
>> I've got a build started, but it's on an ancient macbook pro, so it'll take
>> a long time.  Someone else with modern hardware could certainly get this
>> done faster :-)
>
> Dominique has already tested it on Darwin 16 and said he'll test on Darwin
> 10; I'm waiting for those results.
Good.  The thought of waiting on this old box is painful to contemplate.

jeff
Dominique d'Humières April 4, 2017, 9:20 a.m. UTC | #4
> Le 3 avr. 2017 à 19:00, Jakub Jelinek <jakub@redhat.com> a écrit :
> 
> On Mon, Apr 03, 2017 at 10:56:13AM -0600, Jeff Law wrote:
>> On 04/01/2017 06:24 AM, Jakub Jelinek wrote:
>>> Apparently Darwin has insane default stack size for pthread_create
>>> unless overridden through pthread_attr_setstacksize - 512kB, compared e.g.
>>> to Linux usual default of around 8MB.  For typical OpenMP uses that is way
>>> too low, so the following patch is an attempt to bump it to 2MB just on
>>> Darwin, and on other targets keep the default.  Everything can be in any
>>> case overridden through {,G}OMP_STACKSIZE env variables.
>>> 
>>> Bootstrapped/regtested on x86_64-linux and i686-linux, can anyone please test it
>>> on darwin?
>>> 
>>> 2017-04-01  Jakub Jelinek  <jakub@redhat.com>
>>> 
>>> 	PR libgomp/79876
>>> 	* config/posix/thread-stacksize.h: New file.
>>> 	* config/darwin/thread-stacksize.h: New file.
>>> 	* config/nvptx/thread-stacksize.h: New file.
>>> 	* env.c: Include thread-stacksize.h.
>>> 	(initialize_env): Initialize stacksize to GOMP_DEFAULT_STACKSIZE
>>> 	instead of 0.  Call pthread_attr_setstacksize even if
>>> 	GOMP_DEFAULT_STACKSIZE is non-zero.
>> I've got a build started, but it's on an ancient macbook pro, so it'll take
>> a long time.  Someone else with modern hardware could certainly get this
>> done faster :-)
> 
> Dominique has already tested it on Darwin 16 and said he'll test on Darwin
> 10; I'm waiting for those results.
> 
> 	Jakub

No problem with darwin10.

Dominique
Mike Stump April 4, 2017, 3:24 p.m. UTC | #5
On Apr 4, 2017, at 2:20 AM, Dominique d'Humières <dominiq@lps.ens.fr> wrote:
>> Dominique has already tested it on Darwin 16 and said he'll test on Darwin
>> 10; I'm waiting for those results.
>> 
>> 	Jakub
> 
> No problem with darwin10.

I'm fine with the patch.
diff mbox

Patch

--- libgomp/config/posix/thread-stacksize.h.jj	2017-04-01 11:02:07.873729348 +0200
+++ libgomp/config/posix/thread-stacksize.h	2017-04-01 11:02:29.954447192 +0200
@@ -0,0 +1,27 @@ 
+/* Copyright (C) 2017 Free Software Foundation, Inc.
+   Contributed by Jakub Jelinek <jakub@redhat.com>
+
+   This file is part of the GNU Offloading and Multi Processing Library
+   (libgomp).
+
+   Libgomp is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* 0 means use the system default.  */
+#define GOMP_DEFAULT_STACKSIZE	0
--- libgomp/config/darwin/thread-stacksize.h.jj	2017-04-01 11:01:57.763858536 +0200
+++ libgomp/config/darwin/thread-stacksize.h	2017-04-01 11:01:53.542912473 +0200
@@ -0,0 +1,29 @@ 
+/* Copyright (C) 2017 Free Software Foundation, Inc.
+   Contributed by Jakub Jelinek <jakub@redhat.com>
+
+   This file is part of the GNU Offloading and Multi Processing Library
+   (libgomp).
+
+   Libgomp is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* OSX uses too small default stack size (0.5MB), use a bigger default.
+   Users can still override it through OMP_STACKSIZE or GOMP_STACKSIZE
+   environment variables.  */
+#define GOMP_DEFAULT_STACKSIZE	(2 * 1024 * 1024)
--- libgomp/config/nvptx/thread-stacksize.h.jj	2017-04-01 11:02:07.000000000 +0200
+++ libgomp/config/nvptx/thread-stacksize.h	2017-04-01 11:04:12.007143122 +0200
@@ -0,0 +1,27 @@ 
+/* Copyright (C) 2017 Free Software Foundation, Inc.
+   Contributed by Jakub Jelinek <jakub@redhat.com>
+
+   This file is part of the GNU Offloading and Multi Processing Library
+   (libgomp).
+
+   Libgomp is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Not really applicable to NVPTX.  */
+#define GOMP_DEFAULT_STACKSIZE	0
--- libgomp/env.c.jj	2017-03-30 16:07:29.000000000 +0200
+++ libgomp/env.c	2017-04-01 11:05:35.272079129 +0200
@@ -51,6 +51,7 @@ 
 # endif
 #endif
 #include <errno.h>
+#include "thread-stacksize.h"
 
 #ifndef HAVE_STRTOULL
 # define strtoull(ptr, eptr, base) strtoul (ptr, eptr, base)
@@ -1187,7 +1188,7 @@  handle_omp_display_env (unsigned long st
 static void __attribute__((constructor))
 initialize_env (void)
 {
-  unsigned long thread_limit_var, stacksize = 0;
+  unsigned long thread_limit_var, stacksize = GOMP_DEFAULT_STACKSIZE;
   int wait_policy;
 
   /* Do a compile time check that mkomp_h.pl did good job.  */
@@ -1274,7 +1275,8 @@  initialize_env (void)
   pthread_attr_setdetachstate (&gomp_thread_attr, PTHREAD_CREATE_DETACHED);
 
   if (parse_stacksize ("OMP_STACKSIZE", &stacksize)
-      || parse_stacksize ("GOMP_STACKSIZE", &stacksize))
+      || parse_stacksize ("GOMP_STACKSIZE", &stacksize)
+      || GOMP_DEFAULT_STACKSIZE)
     {
       int err;