public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* OpenMP 5.1: omp_display_env
@ 2021-07-27 14:26 Ulrich Drepper
  2021-07-27 15:05 ` Jakub Jelinek
  0 siblings, 1 reply; 9+ messages in thread
From: Ulrich Drepper @ 2021-07-27 14:26 UTC (permalink / raw)
  To: gcc-patches

I know OpenMP 5.1 is not really a focus yet but adding this new interface
should not be problematic.  I stumbled across this part of the spec and the
functionality is really already mostly there in the form of
OMP_DISPLAY_ENV=verbose etc.  This is just a function interface to the same
functionality.

Aside from the busywork to add a new interface (headers, map file) the only
real question was how to deal with the two parameters which are passed
to handle_omp_display_env in the current implementation. The
omp_display_env interface is supposed to show the information of the
initial values and therefore I think the right implementation is to store
the values determined in the constructor in two global, static variables
and reuse them.

The rest should be completely boring and therefore not distracting anyone
from OpenMP 5.0 work.

OK to commit?

diff --git a/libgomp/env.c b/libgomp/env.c
index a24deabcd58..84038eb4683 100644
--- a/libgomp/env.c
+++ b/libgomp/env.c
@@ -99,6 +99,9 @@ int goacc_default_dims[GOMP_DIM_MAX];

 #ifndef LIBGOMP_OFFLOADED_ONLY

+static int wait_policy;
+static unsigned long stacksize = GOMP_DEFAULT_STACKSIZE;
+
 /* Parse the OMP_SCHEDULE environment variable.  */

 static void
@@ -1210,46 +1213,11 @@ parse_gomp_openacc_dim (void)
     }
 }

-static void
-handle_omp_display_env (unsigned long stacksize, int wait_policy)
+void
+omp_display_env (int verbose)
 {
-  const char *env;
-  bool display = false;
-  bool verbose = false;
   int i;

-  env = getenv ("OMP_DISPLAY_ENV");
-  if (env == NULL)
-    return;
-
-  while (isspace ((unsigned char) *env))
-    ++env;
-  if (strncasecmp (env, "true", 4) == 0)
-    {
-      display = true;
-      env += 4;
-    }
-  else if (strncasecmp (env, "false", 5) == 0)
-    {
-      display = false;
-      env += 5;
-    }
-  else if (strncasecmp (env, "verbose", 7) == 0)
-    {
-      display = true;
-      verbose = true;
-      env += 7;
-    }
-  else
-    env = "X";
-  while (isspace ((unsigned char) *env))
-    ++env;
-  if (*env != '\0')
-    gomp_error ("Invalid value for environment variable OMP_DISPLAY_ENV");
-
-  if (!display)
-    return;
-
   fputs ("\nOPENMP DISPLAY ENVIRONMENT BEGIN\n", stderr);

   fputs ("  _OPENMP = '201511'\n", stderr);
@@ -1409,13 +1377,52 @@ handle_omp_display_env (unsigned long stacksize,
int wait_policy)
   fputs ("OPENMP DISPLAY ENVIRONMENT END\n", stderr);
 }

+static void
+handle_omp_display_env (void)
+{
+  const char *env;
+  bool display = false;
+  bool verbose = false;
+
+  env = getenv ("OMP_DISPLAY_ENV");
+  if (env == NULL)
+    return;
+
+  while (isspace ((unsigned char) *env))
+    ++env;
+  if (strncasecmp (env, "true", 4) == 0)
+    {
+      display = true;
+      env += 4;
+    }
+  else if (strncasecmp (env, "false", 5) == 0)
+    {
+      display = false;
+      env += 5;
+    }
+  else if (strncasecmp (env, "verbose", 7) == 0)
+    {
+      display = true;
+      verbose = true;
+      env += 7;
+    }
+  else
+    env = "X";
+  while (isspace ((unsigned char) *env))
+    ++env;
+  if (*env != '\0')
+    gomp_error ("Invalid value for environment variable OMP_DISPLAY_ENV");
+
+  if (display)
+    omp_display_env (verbose);
+}
+

 static void __attribute__((constructor))
 initialize_env (void)
 {
-  unsigned long thread_limit_var, stacksize = GOMP_DEFAULT_STACKSIZE;
+  unsigned long thread_limit_var;
   unsigned long max_active_levels_var;
-  int wait_policy;

   /* Do a compile time check that mkomp_h.pl did good job.  */
   omp_check_defines ();
@@ -1546,7 +1553,7 @@ initialize_env (void)
  gomp_error ("Stack size change failed: %s", strerror (err));
     }

-  handle_omp_display_env (stacksize, wait_policy);
+  handle_omp_display_env ();

   /* OpenACC.  */

diff --git a/libgomp/fortran.c b/libgomp/fortran.c
index 4ec39c4e61b..2f36e326624 100644
--- a/libgomp/fortran.c
+++ b/libgomp/fortran.c
@@ -736,3 +736,9 @@ omp_get_default_allocator_ ()
 {
   return (intptr_t) omp_get_default_allocator ();
 }
+
+void
+omp_display_env_ (const int32_t *verbose)
+{
+  omp_display_env (*verbose);
+}
diff --git a/libgomp/libgomp.map b/libgomp/libgomp.map
index 8ea27b5565f..fe51d3dbd46 100644
--- a/libgomp/libgomp.map
+++ b/libgomp/libgomp.map
@@ -199,6 +199,12 @@ OMP_5.0.1 {
  omp_fulfill_event_;
 } OMP_5.0;

+OMP_5.1 {
+  global:
+ omp_display_env;
+ omp_display_env_;
+} OMP_5.0.1;
+
 GOMP_1.0 {
   global:
  GOMP_atomic_end;
diff --git a/libgomp/omp.h.in b/libgomp/omp.h.in
index 69f96f09124..c93db968d2e 100644
--- a/libgomp/omp.h.in
+++ b/libgomp/omp.h.in
@@ -293,6 +293,8 @@ extern void omp_free (void *,
       omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR)
   __GOMP_NOTHROW;

+extern void omp_display_env (int) __GOMP_NOTHROW;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/libgomp/omp_lib.f90.in b/libgomp/omp_lib.f90.in
index 851f85f5316..4939bfd9751 100644
--- a/libgomp/omp_lib.f90.in
+++ b/libgomp/omp_lib.f90.in
@@ -653,6 +653,12 @@
           end function
         end interface

+        interface
+          subroutine omp_display_env (verbose)
+            logical,intent(in) :: verbose
+          end subroutine
+        end interface
+
 #if _OPENMP >= 201811
 !GCC$ ATTRIBUTES DEPRECATED :: omp_get_nested, omp_set_nested
 #endif
diff --git a/libgomp/omp_lib.h.in b/libgomp/omp_lib.h.in
index 06d17b5fcdc..9873cea9ac1 100644
--- a/libgomp/omp_lib.h.in
+++ b/libgomp/omp_lib.h.in
@@ -264,3 +264,5 @@
       external omp_set_default_allocator
       external omp_get_default_allocator
       integer (omp_allocator_handle_kind) omp_get_default_allocator
+
+      external omp_display_env

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-07-30 12:02 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-27 14:26 OpenMP 5.1: omp_display_env Ulrich Drepper
2021-07-27 15:05 ` Jakub Jelinek
2021-07-30  7:49   ` Tobias Burnus
2021-07-30  8:43     ` Ulrich Drepper
2021-07-30  8:50       ` Jakub Jelinek
2021-07-30  9:54         ` Ulrich Drepper
2021-07-30 10:02           ` Jakub Jelinek
2021-07-30 10:05             ` Thomas Schwinge
2021-07-30 12:02               ` Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).