Re: [PATCH 2/3] [gomp] Thread pool management

2015-09-03 Thread Jakub Jelinek
On Tue, Jul 28, 2015 at 01:04:58PM +0200, Sebastian Huber wrote:
> +#ifndef GOMP_POOL_H
> +#define GOMP_POOL_H 1
> +
> +#include 

Please use #include "libgomp.h" here.

> +#include 

Similarly.

> +
> +#include "libgomp.h"
> +#include 
> +#include 

#include "pool.h" (and perhaps if possible move after libgomp.h).

> --- a/libgomp/team.c
> +++ b/libgomp/team.c
> @@ -27,6 +27,7 @@
> creation and termination.  */
>  
>  #include "libgomp.h"
> +#include 

Likewise.

Ok with those changes.

Jakub


[PATCH 2/3] [gomp] Thread pool management

2015-07-28 Thread Sebastian Huber
In RTEMS we may have multiple scheduler instances with different
scheduling algorithms.  In addition we have a single process environment
so all threads run in one address space.  In order to support work
stealing applications it is important to limit the number of thread
pools used for OpenMP since otherwise we may end up in an explosion of
OpenMP worker threads.

libgomp/ChangeLog
2015-07-28  Sebastian Huber  sebastian.hu...@embedded-brains.de

* config/posix/pool.h: New.
* config/rtems/pool.h: Likewise.
* config/rtems/proc.c: Likewise.
* libgomp.h (gomp_thread_destructor): Declare.
* team.c: Include configuration provided pool.h.
(gomp_get_thread_pool): Define in configuration.
(gomp_team_end): Call configuration defined
gomp_release_thread_pool().
---
 libgomp/config/posix/pool.h |  60 ++
 libgomp/config/rtems/pool.h | 128 ++
 libgomp/config/rtems/proc.c | 145 
 libgomp/libgomp.h   |   2 +
 libgomp/team.c  |  22 +--
 5 files changed, 337 insertions(+), 20 deletions(-)
 create mode 100644 libgomp/config/posix/pool.h
 create mode 100644 libgomp/config/rtems/pool.h
 create mode 100644 libgomp/config/rtems/proc.c

diff --git a/libgomp/config/posix/pool.h b/libgomp/config/posix/pool.h
new file mode 100644
index 000..0d127a0
--- /dev/null
+++ b/libgomp/config/posix/pool.h
@@ -0,0 +1,60 @@
+/* Copyright (C) 2005-2015 Free Software Foundation, Inc.
+   Contributed by Sebastian Huber sebastian.hu...@embedded-brains.de.
+
+   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/.  */
+
+/* This is the default implementation of the thread pool management
+   for libgomp.  This type is private to the library.  */
+
+#ifndef GOMP_POOL_H
+#define GOMP_POOL_H 1
+
+#include libgomp.h
+
+/* Get the thread pool, allocate and initialize it on demand.  */
+
+static inline struct gomp_thread_pool *
+gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads)
+{
+  struct gomp_thread_pool *pool = thr-thread_pool;
+  if (__builtin_expect (pool == NULL, 0))
+{
+  pool = gomp_malloc (sizeof (*pool));
+  pool-threads = NULL;
+  pool-threads_size = 0;
+  pool-threads_used = 0;
+  pool-last_team = NULL;
+  pool-threads_busy = nthreads;
+  thr-thread_pool = pool;
+  pthread_setspecific (gomp_thread_destructor, thr);
+}
+  return pool;
+}
+
+static inline void
+gomp_release_thread_pool (struct gomp_thread_pool *pool)
+{
+  /* Do nothing in the default implementation.  */
+}
+
+#endif /* GOMP_POOL_H */
diff --git a/libgomp/config/rtems/pool.h b/libgomp/config/rtems/pool.h
new file mode 100644
index 000..5c989d0
--- /dev/null
+++ b/libgomp/config/rtems/pool.h
@@ -0,0 +1,128 @@
+/* Copyright (C) 2015 Free Software Foundation, Inc.
+   Contributed by Sebastian Huber sebastian.hu...@embedded-brains.de.
+
+   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/.  */
+
+/* This is the RTEMS implementation of