ABataev added inline comments.

================
Comment at: openmp/libomptarget/src/omptarget.cpp:233
         MapperComponents
-            .Components[target_data_function == targetDataEnd ? I : E - I - 1];
+            .Components[target_data_function == targetDataEnd ? E - I - 1 : I];
     MapperArgsBase[I] = C.Base;
----------------
ABataev wrote:
> ye-luo wrote:
> > ye-luo wrote:
> > > ye-luo wrote:
> > > > ABataev wrote:
> > > > > ye-luo wrote:
> > > > > > ABataev wrote:
> > > > > > > ABataev wrote:
> > > > > > > > ye-luo wrote:
> > > > > > > > > ye-luo wrote:
> > > > > > > > > > ABataev wrote:
> > > > > > > > > > > ye-luo wrote:
> > > > > > > > > > > > ABataev wrote:
> > > > > > > > > > > > > grokos wrote:
> > > > > > > > > > > > > > What is the current status of the order of the 
> > > > > > > > > > > > > > arguments clang emits? Is it still necessary to 
> > > > > > > > > > > > > > traverse arguments in reverse order here?
> > > > > > > > > > > > > Yes, still required
> > > > > > > > > > > > Based on the conversation in
> > > > > > > > > > > > https://reviews.llvm.org/D85216
> > > > > > > > > > > > This line of code neither before nor after the change 
> > > > > > > > > > > > plays well.
> > > > > > > > > > > > Shall we fix the order in targetDataEnd first?
> > > > > > > > > > > This change is part of this patch and cannot be committed 
> > > > > > > > > > > separately. 
> > > > > > > > > > I mean could you fix that issue as a parent of this patch?
> > > > > > > > > > This change is part of this patch and cannot be committed 
> > > > > > > > > > separately. 
> > > > > > > > > 
> > > > > > > > > If fixing the reordering is part of this patch, I should have 
> > > > > > > > > seen "target_data_function == targetDataEnd ?" branches 
> > > > > > > > > disappear.
> > > > > > > > Nope, just with this patch. It reorders the maps and need to 
> > > > > > > > change the cleanup order too. 
> > > > > > > It works just like constructors/destructors: allocate in direct 
> > > > > > > order, deallocate in reversed to correctly handle map order. 
> > > > > > The description says that "present and alloc mappings are processed 
> > > > > > first and then all others."
> > > > > > Why the order of arguments in targetDataBegin, targetDataEnd and 
> > > > > > targetDataUpdate all get reversed.
> > > > > Because this is for mappers. Mapper maps are ordered by the compiler 
> > > > > in the direct order (alloc, maps, delete) but when we need to do 
> > > > > exit, we need to release the data in reversed order (deletes, maps, 
> > > > > allocs). 
> > > > I was not making the question clear. My question about "reverse" is not 
> > > > about having a reverse order for targetDataBegin. My question was about 
> > > > "reversing" from the the old code. Your change put the opposite order 
> > > > for targetDataBegin, targetDataEnd and targetDataUpdate cases. 
> > > > I was not making the question clear. My question about "reverse" is not 
> > > > about having a reverse order for targetDataBegin. My question was about 
> > > > "reversing" from the the old code. Your change put the opposite order 
> > > > for targetDataBegin, targetDataEnd and targetDataUpdate cases. 
> > > 
> > > typo correction
> > > I was not making the question clear. My question about "reverse" is not 
> > > about having a reverse order for **targetDataEnd**. My question was about 
> > > "reversing" from the the old code. Your change put the opposite order for 
> > > targetDataBegin, targetDataEnd and targetDataUpdate cases.
> > My separate question specifically for targetDataEnd is the following.
> > 
> > In target(), we call
> > ```
> > targetDataBegin(args)
> > {  // forward order
> >   for (int32_t i = 0; i < arg_num; ++i) { ... }
> > }
> > launch_kernels
> > targetDataEnd(args)
> > {  // reverse order
> >   for (int32_t I = ArgNum - 1; I >= 0; --I) { }
> > }
> > ```
> > 
> > At a mapper,
> > ```
> > targetDataMapper
> > {
> >   // generate args_reverse in reverse order for targetDataEnd
> >   targetDataEnd(args_reverse)
> > }
> > ```
> > Are we actually getting the original forward order due to one reverse in 
> > targetDataMapper and second reverse in targetDataEnd? Is this the desired 
> > behavior? This part confused me. Do I miss something? Could you explain a 
> > bit?
> Yes, something like this. targetDataEnd reverses the order of mapping arrays. 
> But mapper generator always generates mapping arrays in the direct order (it 
> fills mapping arrays that later processed by the targetDataEnd function). We 
> could fix this by passing extra Boolean flag to the generator function but it 
> means the redesign of the mappers. That's why we have to reverse it in the 
> libomptarget.
You can check it yourself. Apply the  patch, restore the original behavior in 
libomptarget and run libomptarget tests. Mapper related tests will crash.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D86119

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

Reply via email to