yaxunl added a comment.

In D86376#2552066 <https://reviews.llvm.org/D86376#2552066>, @tra wrote:

> In D86376#2551298 <https://reviews.llvm.org/D86376#2551298>, @yaxunl wrote:
>
>> Actually there is one issue with this approach.
>>
>> HIP have API's to launch kernels, which accept kernel as function pointer 
>> argument. Currently when taking address of kernel, we get the stub function. 
>> These kernel launching API's will not work if we use kernel symbol to 
>> register the kernel. A solution is to return the kernel symbol instead of 
>> stub function when taking address of the kernel in host compilation, i.e. if 
>> a function pointer is assigned to a kernel in host code, it gets the kernel 
>> symbol instead of the stub function. This will make the kernel launching API 
>> work.
>>
>> To keep the triple chevron working, the kernel symbol will be initialized 
>> with the address of the stub function. For triple chevron call, the address 
>> of the stub function is loaded from the kernel symbol and invoked.
>
> This could work.
> Do we really need an indirection? If we know the stub address when we 
> initialize the symbol with it, we should be able to use that address for 
> `<<<>>>`.

For triple chevron with kernel name, it is not needed. We only need indirection 
for a triple chevron with a function pointer, in which case we do not know its 
stub function at compile time. This is allowed by CUDA/HIP.


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

https://reviews.llvm.org/D86376

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

Reply via email to