tra added a comment.

>> NVCC also allows that: https://godbolt.org/z/t78RvM
> 
> BTW, that code posted looks quite weird to me, how the code could make sense 
> by return a pointer of device variable? or a pointer of shadow host variable?

Magic. :-)
More practical example would be something like this:

  __device__ int array[10];
  
  __host__ func() {
    cudaMemset(array, 0, sizeof(array));
  }

cudaMemset is a host function and it needs to use something that exists on the 
host side as the first argument.
In order to deal with this, compiler:

- creates uninitialized `int array[10]` on the host side. This allows ising 
sizeof(array) on the host size.
- registers its address/size with CUDA runtime. This allows passing address of 
host-side shadow array to various CUDA runtime routines. The runtime knows what 
it has on device side and maps shadow's address to the real device address. 
This way CUDA runtime functions can make static device-side data accessible 
without having to explicitly figure out their device-side address.


Repository:
  rC Clang

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

https://reviews.llvm.org/D62603



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

Reply via email to