From: Tobias Burnus <tobias@codesourcery.com>
To: Thomas Schwinge <thomas@codesourcery.com>, <gcc-patches@gcc.gnu.org>
Cc: Jakub Jelinek <jakub@redhat.com>
Subject: Re: Fix Intel MIC 'mkoffload' for OpenMP 'requires' (was: [Patch] OpenMP: Move omp requires checks to libgomp)
Date: Wed, 6 Jul 2022 16:19:37 +0200 [thread overview]
Message-ID: <96669115-20a2-4962-01e3-e37f672f3b7b@codesourcery.com> (raw)
In-Reply-To: <87r12y4i3u.fsf@euler.schwinge.homeip.net>
Hi Thomas, hello all,
On 06.07.22 13:04, Thomas Schwinge wrote:
> On 2022-06-08T05:56:02+0200, Tobias Burnus <Tobias_Burnus@mentor.com>
> wrote:
>> PS: I have not fully tested the intelmic version.
...
> Subject: [PATCH] Fix Intel MIC 'mkoffload' for OpenMP 'requires'
...
> This also means finally switching Intel MIC 'mkoffload' to
> 'GOMP_offload_register_ver', 'GOMP_offload_unregister_ver',
> making 'GOMP_offload_register', 'GOMP_offload_unregister'
> legacy entry points.
...
> gcc/
> * config/i386/intelmic-mkoffload.cc (generate_host_descr_file)
> (prepare_target_image, main): Handle OpenMP 'requires'.
> (generate_host_descr_file): Switch to 'GOMP_offload_register_ver',
> 'GOMP_offload_unregister_ver'.
> libgomp/
> * target.c (GOMP_offload_register, GOMP_offload_unregister):
> Denote as legacy entry points.
> * testsuite/libgomp.c-c++-common/requires-1.c: Enable for all
> 'target offloading_enabled'.
> * testsuite/libgomp.c-c++-common/requires-5.c: Likewise.
> * testsuite/libgomp.c-c++-common/requires-7.c: Likewise.
> * testsuite/libgomp.fortran/requires-1.f90: Likewise.
...
> diff --git a/gcc/config/i386/intelmic-mkoffload.cc b/gcc/config/i386/intelmic-mkoffload.cc
> index c683d6f473e..596f6f107b8 100644
> --- a/gcc/config/i386/intelmic-mkoffload.cc
> +++ b/gcc/config/i386/intelmic-mkoffload.cc
> @@ -370,7 +370,7 @@ generate_target_offloadend_file (const char *target_compiler)
>
> /* Generates object file with the host side descriptor. */
> static const char *
> -generate_host_descr_file (const char *host_compiler)
> +generate_host_descr_file (const char *host_compiler, uint32_t omp_requires)
> {
> char *dump_filename = concat (dumppfx, "_host_descr.c", NULL);
> const char *src_filename = save_temps
> @@ -386,39 +386,50 @@ generate_host_descr_file (const char *host_compiler)
> if (!src_file)
> fatal_error (input_location, "cannot open '%s'", src_filename);
>
> + fprintf (src_file, "#include <stdint.h>\n\n");
> +
> fprintf (src_file,
> "extern const void *const __OFFLOAD_TABLE__;\n"
> "extern const void *const __offload_image_intelmic_start;\n"
> "extern const void *const __offload_image_intelmic_end;\n\n"
>
> - "static const void *const __offload_target_data[] = {\n"
> + "static const struct intelmic_data {\n"
> + " uintptr_t omp_requires_mask;\n"
> + " const void *const image_start;\n"
> + " const void *const image_end;\n"
> + "} intelmic_data = {\n"
> + " %d,\n"
> " &__offload_image_intelmic_start, &__offload_image_intelmic_end\n"
> - "};\n\n");
> + "};\n\n", omp_requires);
>
> fprintf (src_file,
> "#ifdef __cplusplus\n"
> "extern \"C\"\n"
> "#endif\n"
> - "void GOMP_offload_register (const void *, int, const void *);\n"
> + "void GOMP_offload_register_ver (unsigned, const void *, int, const void *);\n"
This line now ends in column 90, I think you want to wrap it.
> "#ifdef __cplusplus\n"
> "extern \"C\"\n"
> "#endif\n"
> - "void GOMP_offload_unregister (const void *, int, const void *);\n\n"
> + "void GOMP_offload_unregister_ver (unsigned, const void *, int, const void *);\n\n"
Likewise - before col 80, now col 94.
>
> "__attribute__((constructor))\n"
> "static void\n"
> "init (void)\n"
> "{\n"
> - " GOMP_offload_register (&__OFFLOAD_TABLE__, %d, __offload_target_data);\n"
> - "}\n\n", GOMP_DEVICE_INTEL_MIC);
> + " GOMP_offload_register_ver (%#x, &__OFFLOAD_TABLE__, %d, &intelmic_data);\n"
Likewise - albeit before already col 87, now col 89.
> + "}\n\n",
> + GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_INTEL_MIC),
> + GOMP_DEVICE_INTEL_MIC);
>
> fprintf (src_file,
> "__attribute__((destructor))\n"
> "static void\n"
> "fini (void)\n"
> "{\n"
> - " GOMP_offload_unregister (&__OFFLOAD_TABLE__, %d, __offload_target_data);\n"
> - "}\n", GOMP_DEVICE_INTEL_MIC);
>
> + "}\n",
> + GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_INTEL_MIC),
> + GOMP_DEVICE_INTEL_MIC);
>
> fclose (src_file);
>
> @@ -462,7 +473,7 @@ generate_host_descr_file (const char *host_compiler)
> }
>
> static const char *
> -prepare_target_image (const char *target_compiler, int argc, char **argv)
> +prepare_target_image (const char *target_compiler, int argc, char **argv, uint32_t *omp_requires)
Likewise now too long.
> {
> const char *target_descr_filename
> = generate_target_descr_file (target_compiler);
> @@ -509,8 +520,26 @@ prepare_target_image (const char *target_compiler, int argc, char **argv)
> obstack_ptr_grow (&argv_obstack, "");
> obstack_ptr_grow (&argv_obstack, "-o");
> obstack_ptr_grow (&argv_obstack, target_so_filename);
> +
> + char *omp_requires_file;
> + if (save_temps)
> + omp_requires_file = concat (dumppfx, ".mkoffload.omp_requires", NULL);
> + else
> + omp_requires_file = make_temp_file (".mkoffload.omp_requires");
> + xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
> +
> compile_for_target (&argv_obstack);
>
> + unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
> + FILE *in = fopen (omp_requires_file, "rb");
> + if (!in)
> + fatal_error (input_location, "cannot open omp_requires file %qs",
> + omp_requires_file);
> + if (fread (omp_requires, sizeof (*omp_requires), 1, in) != 1)
> + fatal_error (input_location, "cannot read omp_requires file %qs",
> + omp_requires_file);
> + fclose (in);
> +
> /* Run objcopy. */
> char *rename_section_opt
> = XALLOCAVEC (char, sizeof (".data=") + strlen (image_section_name));
> @@ -643,10 +672,13 @@ main (int argc, char **argv)
> if (!dumppfx)
> dumppfx = out_obj_filename;
>
> + uint32_t omp_requires;
> +
> const char *target_so_filename
> - = prepare_target_image (target_compiler, argc, argv);
> + = prepare_target_image (target_compiler, argc, argv, &omp_requires);
>
> - const char *host_descr_filename = generate_host_descr_file (host_compiler);
> + const char *host_descr_filename
> + = generate_host_descr_file (host_compiler, omp_requires);
>
> /* Perform partial linking for the target image and host side descriptor.
> As a result we'll get a finalized object file with all offload data. */
> diff --git a/libgomp/target.c b/libgomp/target.c
> index 288b748b9e8..18c5f6e27db 100644
> --- a/libgomp/target.c
> +++ b/libgomp/target.c
> @@ -2410,6 +2410,8 @@ GOMP_offload_register_ver (unsigned version, const void *host_table,
> gomp_mutex_unlock (®ister_lock);
> }
>
> +/* Legacy entry point. */
> +
> void
> GOMP_offload_register (const void *host_table, int target_type,
> const void *target_data)
> @@ -2465,6 +2467,8 @@ GOMP_offload_unregister_ver (unsigned version, const void *host_table,
> gomp_mutex_unlock (®ister_lock);
> }
>
> +/* Legacy entry point. */
> +
> void
> GOMP_offload_unregister (const void *host_table, int target_type,
> const void *target_data)
Except for the too-long lines, it LGTM up to here.
However, regarding the following, I prefer to have something like 'offload_target_any'
(or similar), instead of (ab)using 'offloading_enabled', as discussed elsewhere in this thread.
While it does not make currently any difference, I could imagine to do the same
for OpenMP as done in libgomp.oacc-*/*exp. Namely: Compile/run all 'omp target'
testcases in addition with -foffload=disable.
As we don't do this, yet, I think it is fine to apply the patch for now. However, if
you don't want to fix it as follow up (please do), can you at least open a PR about it?
> diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-1.c b/libgomp/testsuite/libgomp.c-c++-common/requires-1.c
> index fedf9779769..8eaac54e187 100644
> --- a/libgomp/testsuite/libgomp.c-c++-common/requires-1.c
> +++ b/libgomp/testsuite/libgomp.c-c++-common/requires-1.c
> @@ -1,4 +1,4 @@
> -/* { dg-do link { target { offload_target_nvptx || offload_target_amdgcn } } } */
> +/* { dg-do link { target offloading_enabled } } */
> /* { dg-additional-sources requires-1-aux.c } */
>
> /* Check diagnostic by device-compiler's lto1.
> diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-5.c b/libgomp/testsuite/libgomp.c-c++-common/requires-5.c
> index c1e5540cfc5..5aa04a5a604 100644
> --- a/libgomp/testsuite/libgomp.c-c++-common/requires-5.c
> +++ b/libgomp/testsuite/libgomp.c-c++-common/requires-5.c
> @@ -1,4 +1,4 @@
> -/* { dg-do run { target { offload_target_nvptx || offload_target_amdgcn } } } */
> +/* { dg-do run { target offloading_enabled } } */
> /* { dg-additional-sources requires-5-aux.c } */
>
> #pragma omp requires unified_shared_memory, unified_address, reverse_offload
> diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-7.c b/libgomp/testsuite/libgomp.c-c++-common/requires-7.c
> index c94a4c10846..31c6f73c6da 100644
> --- a/libgomp/testsuite/libgomp.c-c++-common/requires-7.c
> +++ b/libgomp/testsuite/libgomp.c-c++-common/requires-7.c
> @@ -1,4 +1,4 @@
> -/* { dg-do link { target { offload_target_nvptx || offload_target_amdgcn } } } */
> +/* { dg-do link { target offloading_enabled } } */
> /* { dg-additional-sources requires-7-aux.c } */
>
> /* Check diagnostic by device-compiler's lto1.
> diff --git a/libgomp/testsuite/libgomp.fortran/requires-1.f90 b/libgomp/testsuite/libgomp.fortran/requires-1.f90
> index 33741af15f1..1020ebb4277 100644
> --- a/libgomp/testsuite/libgomp.fortran/requires-1.f90
> +++ b/libgomp/testsuite/libgomp.fortran/requires-1.f90
> @@ -1,4 +1,4 @@
> -! { dg-do link { target { offload_target_nvptx || offload_target_amdgcn } } }
> +! { dg-do link { target offloading_enabled } }
> ! { dg-additional-sources requires-1-aux.f90 }
>
> ! Check diagnostic by device-compiler's lto1.
Thanks,
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
next prev parent reply other threads:[~2022-07-06 14:19 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-13 15:07 [PATCH, OpenMP 5.0] More implementation of the requires directive Chung-Lin Tang
2021-01-13 15:27 ` Jakub Jelinek
2021-03-25 11:18 ` Thomas Schwinge
2022-03-29 13:42 ` Andrew Stubbs
2022-06-08 3:56 ` [Patch] OpenMP: Move omp requires checks to libgomp Tobias Burnus
2022-06-09 11:40 ` Jakub Jelinek
2022-06-09 12:46 ` Tobias Burnus
2022-06-09 14:19 ` Jakub Jelinek
2022-06-29 14:33 ` [Patch][v4] " Tobias Burnus
2022-06-29 17:02 ` Jakub Jelinek
2022-06-29 18:10 ` Tobias Burnus
2022-06-29 20:18 ` Jakub Jelinek
2022-07-01 13:06 ` [Patch][v5] " Tobias Burnus
2022-07-01 14:34 ` Jakub Jelinek
2022-07-01 16:31 ` Tobias Burnus
2022-07-01 16:55 ` Jakub Jelinek
2022-07-01 21:08 ` Tobias Burnus
2022-07-04 8:31 ` Jakub Jelinek
2022-07-07 13:26 ` Fix one issue in OpenMP 'requires' directive diagnostics (was: [Patch][v5] OpenMP: Move omp requires checks to libgomp) Thomas Schwinge
2022-07-07 13:56 ` Tobias Burnus
2022-07-08 6:59 ` Thomas Schwinge
2022-07-06 10:42 ` Restore 'GOMP_offload_unregister_ver' functionality " Thomas Schwinge
2022-07-06 13:59 ` Tobias Burnus
2022-07-06 21:08 ` Thomas Schwinge
2022-08-17 11:45 ` Jakub Jelinek
2023-09-15 9:41 ` [Patch][v5] OpenMP: Move omp requires checks to libgomp Thomas Schwinge
2022-07-07 8:37 ` Adjust 'libgomp.c-c++-common/requires-3.c' (was: [Patch][v4] OpenMP: Move omp requires checks to libgomp) Thomas Schwinge
2022-07-07 9:02 ` Tobias Burnus
2022-07-07 8:42 ` Enhance 'libgomp.c-c++-common/requires-4.c', 'libgomp.c-c++-common/requires-5.c' testing " Thomas Schwinge
2022-07-07 9:36 ` Tobias Burnus
2022-07-07 10:42 ` Thomas Schwinge
2022-07-06 10:30 ` Define 'OMP_REQUIRES_[...]', 'GOMP_REQUIRES_[...]' in a single place (was: [Patch] " Thomas Schwinge
2022-07-06 13:40 ` Tobias Burnus
2022-07-06 11:04 ` Fix Intel MIC 'mkoffload' for OpenMP 'requires' " Thomas Schwinge
2022-07-06 11:29 ` Tobias Burnus
2022-07-06 12:38 ` Thomas Schwinge
2022-07-06 13:30 ` Tobias Burnus
2022-07-07 10:46 ` Thomas Schwinge
2022-07-06 14:19 ` Tobias Burnus [this message]
2024-03-07 12:38 ` nvptx: 'cuDeviceGetCount' failure is fatal " Thomas Schwinge
2024-03-07 14:28 ` nvptx: 'cuDeviceGetCount' failure is fatal Tobias Burnus
2024-03-08 15:58 ` Thomas Schwinge
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=96669115-20a2-4962-01e3-e37f672f3b7b@codesourcery.com \
--to=tobias@codesourcery.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jakub@redhat.com \
--cc=thomas@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).