Hi Andrew,

On 07.07.22 12:34, Andrew Stubbs wrote:
Implement the -foffload-memory=pinned option such that libgomp is
instructed to enable fully-pinned memory at start-up.  The option is
intended to provide a performance boost to certain offload programs without
modifying the code.
...
gcc/ChangeLog:

      * omp-builtins.def (BUILT_IN_GOMP_ENABLE_PINNED_MODE): New.
      * omp-low.cc (omp_enable_pinned_mode): New function.
      (execute_lower_omp): Call omp_enable_pinned_mode.

libgomp/ChangeLog:

      * config/linux/allocator.c (always_pinned_mode): New variable.
      (GOMP_enable_pinned_mode): New function.
      (linux_memspace_alloc): Disable pinning when always_pinned_mode set.
      (linux_memspace_calloc): Likewise.
      (linux_memspace_free): Likewise.
      (linux_memspace_realloc): Likewise.
      * libgomp.map: Add GOMP_enable_pinned_mode.
      * testsuite/libgomp.c/alloc-pinned-7.c: New test.
...
...
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -14620,6 +14620,68 @@ lower_omp (gimple_seq *body, omp_context *ctx)
    input_location = saved_location;
  }

+/* Emit a constructor function to enable -foffload-memory=pinned
+   at runtime.  Libgomp handles the OS mode setting, but we need to trigger
+   it by calling GOMP_enable_pinned mode before the program proper runs.  */
+
+static void
+omp_enable_pinned_mode ()

Is there a reason not to use the mechanism of OpenMP's 'requires'
directive for this?

(Okay, I have to admit that the final patch was only committed on
Monday. But still ...)

It looks very similar in spirit. I don't know whether there are issues
of having -foffload-memory=pinned in some TU and not, but that could be
handled in a similar way to GOMP_REQUIRES_TARGET_USED.

For requires, omp_requires_mask is streamed out if
OMP_REQUIRES_TARGET_USED and g->have_offload. (For completeness, it also
requires ENABLE_OFFLOADING.)

This data is read in by all lto1 (in lto-cgraph.cc) and checked for
consistency. This data is then also passed on to *mkoffload.cc.

And in libgomp, it is processed by GOMP_register_ver.

Likewise, the 'requires' mechanism could then also be used in '[PATCH
16/17] amdgcn, openmp: Auto-detect USM mode and set HSA_XNACK'.

Tobias

-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 
München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas 
Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht 
München, HRB 106955

Reply via email to