Home > Blockchain >  Where is a ordinary variable defined inside a __device__ function placed?
Where is a ordinary variable defined inside a __device__ function placed?

Time:03-14

In CUDA, I understand that the variable would be placed in shared memory if it was defined as __ shared __ and one would be placed in constant memory if it was defined as __ constant __.Also, those being allocated memory using cudamalloc() are put in GPU global memory. But where are those variable without prefixs like __ shared __ , __ constant __ and register placed? For example, the variable i as follow:

__device__ void func(){
   int i=0;
   return;
}

CodePudding user response:

Local variables are either placed in hardware registers or local memory (which is effectively global memory).

In your example, however, variable i will be removed by the compiler because it is unused.

CodePudding user response:

Automatic variables, i.e. variables without memory space specification within the scope of functions, are placed in one of the following locations:

  1. When optimized away:

    1.1 Nowhere - if the variable isn't actually necessary. This actually happens a lot, since CUDA functions are often inlined, with some variables becoming copies of a variable in the calling function. enter image description here

    For more information, consider reading: Local Memory and Register Spilling.

  • Related