Hi!

Maybe I'm just totally confused -- as so often ;-) -- but things seem
strange here:

On 2022-01-12T10:43:05+0100, Marcel Vollweiler <mar...@codesourcery.com> wrote:
> Currently omp_get_device_num does not work on gcn targets with more than
> one offload device. The reason is that GOMP_DEVICE_NUM_VAR

I understand the 'GOMP_DEVICE_NUM_VAR' "macro indirection" is so that we
define the actual symbol name ('__gomp_device_num') in one place
('libgomp/libgomp-plugin.h'), and then use it (via macro expansion) in
several places, right?

> is static in
> icv-device.c and thus "__gomp_device_num" is not visible in the offload
> image.

That behavior seems correct -- but undesired indeed?

> This patch removes "static" such that "__gomp_device_num" is now part of
> the offload image and can now be found in GOMP_OFFLOAD_load_image in the
> plugin.

That seems correct?

Or, is there a reason to have it 'static', say, so that several such
local variables can co-exist, instead of just one global one?

> This is not an issue for nvptx. There, "__gomp_device_num" is in the
> offload image even with "static".

That's unexpected then, and should be looked into?

Still, should 'static' be removed here, too?


Grüße
 Thomas


> The patch was tested on x86_64-linux with amdgcn offloading with no
> regressions.


> libgomp, OpenMP: Fix issue for omp_get_device_num on gcn targets.
>
> Currently omp_get_device_num does not work on gcn targets with more than one
> offload device. The reason is that GOMP_DEVICE_NUM_VAR is static in
> icv-device.c and thus "__gomp_device_num" is not visible in the offload image.
>
> This patch removes "static" such that "__gomp_device_num" is now part of the
> offload image and can now be found in GOMP_OFFLOAD_load_image in the plugin.
>
> This is not an issue for nvptx. There, "__gomp_device_num" is in the offload
> image even with "static".
>
> libgomp/ChangeLog:
>
>       * config/gcn/icv-device.c: Make GOMP_DEVICE_NUM_VAR public (remove
>       "static") to make the device num available in the offload image.
>
> diff --git a/libgomp/config/gcn/icv-device.c b/libgomp/config/gcn/icv-device.c
> index fcfa0f3..f70b7e6 100644
> --- a/libgomp/config/gcn/icv-device.c
> +++ b/libgomp/config/gcn/icv-device.c
> @@ -60,7 +60,7 @@ omp_is_initial_device (void)
>
>  /* This is set to the device number of current GPU during device 
> initialization,
>     when the offload image containing this libgomp portion is loaded.  */
> -static volatile int GOMP_DEVICE_NUM_VAR;
> +volatile int GOMP_DEVICE_NUM_VAR;
>
>  int
>  omp_get_device_num (void)
-----------------
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