[Openmp-commits] [PATCH] D53141: [OpenMP][libomptarget] Add runtime function for pushing coalesced global records
Alexey Bataev via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Thu Oct 11 12:09:36 PDT 2018
ABataev added a subscriber: Hahnfeld.
ABataev added a comment.
In https://reviews.llvm.org/D53141#1262378, @Hahnfeld wrote:
> In https://reviews.llvm.org/D53141#1262019, @ABataev wrote:
>
> > In https://reviews.llvm.org/D53141#1261996, @Hahnfeld wrote:
> >
> > > I guess this will break the case when the `DataSize` passed to `__kmpc_data_sharing_push_stack()` needs additional alignment: With this change it is handled in `data_sharing_push_stack_common()` but `__kmpc_data_sharing_push_stack()` will determine `PushSize` without the adjustment and do the final pointer arithmetic.
> >
> >
> > Why `DataSize` might require an additional alignment? The `DataSize` must be already aligned.
>
>
> It's required in `__kmpc_data_sharing_push_stack()` for some cases, please see https://reviews.llvm.org/D52655.
It is another problem. The problem is that the `StackP` pointer is unaligned after all the pointer maths. The DataSize itself should not be aligned.
> Another problem with this patch is that `__kmpc_data_sharing_push_stack()` is adding the lane offset to the return value of `omptarget_nvptx_SimpleThreadPrivateContext::Allocate()`. AFAICS this will break `lastprivate` which requires the same buffer for all threads.
>
> Anyway, you must do what you think to be correct.
Yes, there must be an additional check `size_t PushSize = (isRuntimeUninitialized() || IsMasterThread()) ? DataSize : WARPSIZE * DataSize;`
Repository:
rOMP OpenMP
https://reviews.llvm.org/D53141
More information about the Openmp-commits
mailing list