tianshilei1992 added a comment.

In D141627#4052323 <https://reviews.llvm.org/D141627#4052323>, @abhinavgaba 
wrote:

>> In target data we already put a and b in use_device_addr. That indicates all 
>> use of a and b will be the corresponding device addresses. Therefore, in 
>> target directive, we should use is_device_address instead of 
>> has_device_addr. The correct way to use has_device_addr is, we already map 
>> the list items by using target data w/o use_device_addr. Then when we launch 
>> a kernel using target directive with has_device_addr, we tell the target 
>> region, the list items *should* be there, and use them, otherwise it is an 
>> error (we choose to error out for the undefined behavior).
>
> I think you are talking about `is_device_ptr` clause. There is no 
> `is_device_address` clause in OpenMP.

Oh that's correct. I directly copied from Jennifer's comment. ;-)

> The is_device_ptr clause is meant only for "ptrs" (pointers). For example:
>
>   int *p = omp_target_alloc(...);
>   #pragma omp target is_device_ptr(p)

That's true, but what about the case I mentioned? It is also supposed to use 
`is_device_ptr`.

>> On the other hand, has_device_addr indicates that the list items *should* 
>> have device address, which means there has to be an entry for that.
>
> Based on a brief discussion with some members of the OpenMP spec committee, 
> the idea for "has_device_addr" is to have the address passed-in directly (as 
> a literal, similar to `is_device_ptr`) into the target region, without any 
> map lookup. So, there is no requirement that the variable has to be mapped, 
> or tracked by libomptarget. That requirement is for `map(present:x)`.
> In terms of the code emitted, the original idea of passing the address in as 
> a LITERAL, similar to `is_device_ptr` is the right way to think about it.

No. I think you are mixing things up. The spec says:

> The has_device_addr clause indicates that its list items already have device 
> addresses and therefore they may be directly accessed from a target device.

It only indicates the list items already have device addresses. I don't think 
it has another level of meaning that, the list of variables listed are device 
addresses. The second part above is, "they may be directly accessed from a 
target device". My reading is, they may be directly accessed from a target 
device "without a mapping", which exactly the `map(present:x)` you suggested 
indicates. And yes, we don't need extra flag for that. `present` is exactly we 
need here.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141627

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

Reply via email to