hfinkel added a comment.

In D65835#1623903 <https://reviews.llvm.org/D65835#1623903>, @ABataev wrote:

> In D65835#1623883 <https://reviews.llvm.org/D65835#1623883>, @hfinkel wrote:
>
> > In D65835#1623814 <https://reviews.llvm.org/D65835#1623814>, @hfinkel wrote:
> >
> > > In D65835#1623772 <https://reviews.llvm.org/D65835#1623772>, @ABataev 
> > > wrote:
> > >
> > > > In D65835#1623756 <https://reviews.llvm.org/D65835#1623756>, @kkwli0 
> > > > wrote:
> > > >
> > > > > In D65835#1622042 <https://reviews.llvm.org/D65835#1622042>, @ABataev 
> > > > > wrote:
> > > > >
> > > > > > > I want to be sure we're on the same page: For OpenMP 5.0, should 
> > > > > > > we allow is_device_ptr with the private clauses?
> > > > > >
> > > > > > Yes, since it is allowed by the standard.
> > > > >
> > > > >
> > > > > Umm ... I probably missed some earlier discussions!  What would be 
> > > > > the behavior of the following code?
> > > > >
> > > > >   p = omp_target_alloc(...);
> > > > >   #pragma omp target private(p) is_device_ptr(p)
> > > > >     p[...] = ...;   // crash or not?
> > > > >
> > > >
> > > >
> > > > It must crush, I assume. The main problem is that this construct is 
> > > > allowed by the standard.
> > >
> > >
> > > Yep. We should add a warning message for it.
> >
> >
> > Upon further reflection, this is not clearly allowed by the standard. My 
> > experience is that, when reading standards, sometimes things are disallowed 
> > by contradiction (i.e., the standard does not define some behavior, and 
> > what the standard does say that's relevant is self contradictory). In this 
> > case, 2.19.3 says that list items which are privatized (and which are used) 
> > undergo replacement (with new items created as specified) while 2.12.5 says 
> > that "The is_device_ptr clause is used to indicate that a list item is a 
> > device pointer already in the device data environment and that it should be 
> > used directly." A given list item cannot simultaneously be "used directly" 
> > (2.12.5) and also undergo replacement: "Inside the construct, all 
> > references to the original list item are replaced by references to a new 
> > list item received by the task or SIMD lane" (2.19.3). Thus, it may be 
> > disallowed.
>
>
> I think, this combination is still allowed. I assume that
>
>   #Pragma omp target parallel is_device_ptr(a) <dsa_clause>(a)
>
>
> is the same as
>
>   #pragma omp target is_device_ptr(a)
>   #pragma omp parallel <dsa_clause>(a)
>
>
> i.e. datasharing clauses are applied to inner sub-regions, not the target 
> region itself.


With the parallel, that makes sense to me. In that case, however, I'd imagine 
that the privitization works as normal and the code wouldn't crash. Right?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65835/new/

https://reviews.llvm.org/D65835



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to