[Cuda] Differenza tra funzioni globali e dispositivo


Answers

Le differenze tra le funzioni __device__ e __global__ sono:

__device__ funzioni __device__ possono essere chiamate solo dal dispositivo e vengono eseguite solo nel dispositivo.

__global__ funzioni __global__ possono essere richiamate dall'host e vengono eseguite nel dispositivo.

Pertanto, chiamate __device__ funzioni __device__ dalle funzioni dei kernel e non è necessario impostare le impostazioni del kernel. Puoi anche "sovraccaricare" una funzione, ad esempio: puoi dichiarare void foo(void) e __device__ foo (void) , quindi uno viene eseguito sull'host e può essere chiamato solo da una funzione host. L'altro viene eseguito sul dispositivo e può essere chiamato solo da una funzione del dispositivo o del kernel.

Puoi anche visitare il seguente link: http://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions , è stato utile per me.

Question

Qualcuno può descrivere le differenze tra __global__ e __device__ ?

Quando dovrei usare __device__ e quando usare __global__ ?.




__golbal__ è una parola chiave CUDA C (specificatore di dichiarazione) che dice che la funzione,

  1. Esegui sul dispositivo (GPU)
  2. Chiamate dal codice host (CPU).

funzioni globali (kernel) lanciate dal codice host usando <<< no_of_blocks, no_of threads_per_block >>>. Ogni thread esegue il kernel con il suo ID di thread univoco.

Ma le funzioni __device__ non possono essere chiamate dal codice host. Se è necessario farlo, usa entrambi __host__ __device__




Sto registrando qui alcune speculazioni infondate (cercherò di sostenerle più tardi quando incontrerò una fonte autorevole) ...

  1. __device__ funzioni __device__ possono avere un tipo di ritorno diverso da void ma __global__ funzioni __global__ devono sempre restituire void.

  2. __global__ funzioni __global__ possono essere richiamate da altri kernel in esecuzione sulla GPU per avviare ulteriori thread GPU (come parte del modello di parallelismo dinamico CUDA (noto anche come CNP)) mentre __device__ funzioni __device__ eseguite sullo stesso thread del kernel chiamante.




  1. __global__ - __global__ eseguito sulla GPU, chiamato dalla CPU. Eseguito con argomenti <<<dim3>>> .
  2. __device__ - __device__ eseguito sulla GPU, chiamata dalla GPU. Può essere usato anche con variabiles.
  3. __host__ - Funziona sulla CPU, chiamata dalla CPU.






Tags