Message ID | 20170401122418.GU17461@tucnak |
---|---|
State | New |
Headers | show |
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
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
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
> 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
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.
--- 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;