Page MenuHomePhabricator

[OPENMP]Fix PR49649: The introduction of $ref globals is not always valid.
Needs ReviewPublic

Authored by ABataev on Mar 25 2021, 8:52 AM.

Details

Summary

Need to emit the reference in the global address space and the
referenced to static variable should be bitcasted to the generic address
space to be compatible with NVPTX.
Required to avoid early optimization of the static variables

Diff Detail

Event Timeline

ABataev created this revision.Mar 25 2021, 8:52 AM
ABataev requested review of this revision.Mar 25 2021, 8:52 AM
Herald added a project: Restricted Project. · View Herald TranscriptMar 25 2021, 8:52 AM

The cast was never the problem but the fact that the $ref lives in the global address space while the global value might be in the shared one.
D101030 gives a way out here by not creating $ref variables if there is no host version of a global. This makes sense because we don't need to copy to the global ever.
So, users can have static globals in shared memory by ensuring they are not host accessible. We probably should emit an error if they try to do global in shared memory
that has a host version.

Long story short, this cast won't help.

The cast was never the problem but the fact that the $ref lives in the global address space while the global value might be in the shared one.
D101030 gives a way out here by not creating $ref variables if there is no host version of a global. This makes sense because we don't need to copy to the global ever.
So, users can have static globals in shared memory by ensuring they are not host accessible. We probably should emit an error if they try to do global in shared memory
that has a host version.

Long story short, this cast won't help.

I checked that this cast helps to fix a problem with ptxas with shared/global memory refs. I'm not saying that this is the best solution, but better to have a fix while the final solution is not landed. Plus. maybe, it will fix some other potential issues until the $refs will go away. Maybe need a new attribute to avoid early optimization of the internal vars.