136 votes

Différence entre les fonctions globales et les fonctions de dispositif

Quelqu'un peut-il décrire les différences entre __global__ y __device__ ?

Quand dois-je utiliser __device__ et quand l'utiliser __global__ ?.

166voto

Eugene Points 4854

Les fonctions globales sont également appelées "noyaux". Il s'agit des fonctions que vous pouvez appeler du côté hôte en utilisant la sémantique d'appel du noyau CUDA ( <<<...>>> ).

Les fonctions de périphérique ne peuvent être appelées que par d'autres fonctions de périphérique ou globales. __device__ ne peuvent pas être appelées à partir du code hôte.

47voto

FacundoGFlores Points 891

Différences entre __device__ y __global__ sont les fonctions :

__device__ ne peut être appelée qu'à partir de l'appareil, et elle n'est exécutée que dans l'appareil.

__global__ peuvent être appelées depuis l'hôte et sont exécutées dans l'appareil.

Par conséquent, vous appelez __device__ à partir des fonctions du noyau, et vous n'avez pas à définir les paramètres du noyau. Vous pouvez également "surcharger" une fonction, par exemple, vous pouvez déclarer void foo(void) y __device__ foo (void) L'une est exécutée sur l'hôte et ne peut être appelée que par une fonction hôte. L'autre est exécutée sur le périphérique et ne peut être appelée que depuis une fonction du périphérique ou du noyau.

Vous pouvez également consulter le lien suivant : http://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions c'était utile pour moi.

40voto

  1. __global__ - Fonctionne sur le GPU, appelé depuis le CPU ou le GPU*. Exécuté avec <<<dim3>>> arguments.
  2. __device__ - S'exécute sur le GPU, appelé depuis le GPU. Peut aussi être utilisé avec des variabiles.
  3. __host__ - S'exécute sur le CPU, appelé depuis le CPU.

*) __global__ peuvent être appelées à partir d'autres __global__ démarrage des fonctions
la capacité de calcul 3.5.

18voto

sandeep.ganage Points 336

Je vais l'expliquer par un exemple :

main()
{
    // Your main function. Executed by CPU
}

__global__ void calledFromCpuForGPU(...)
{
  //This function is called by CPU and suppose to be executed on GPU
}

__device__ void calledFromGPUforGPU(...)
{
  // This function is called by GPU and suppose to be executed on GPU
}

c'est-à-dire que si nous voulons qu'une fonction hôte (CPU) appelle une fonction périphérique (GPU), alors ' mondial est utilisé. Lisez ceci : " https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialGlobalFunctions "

Et lorsque nous voulons qu'une fonction du périphérique (GPU) (plutôt du noyau) appelle une autre fonction du noyau, nous utilisons ' dispositif '. Lire la suite " https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions "

Cela devrait suffire pour comprendre la différence.

14voto

perreal Points 47912

__global__ est pour les noyaux cuda, des fonctions qui sont appelables depuis l'hôte directement. __device__ peuvent être appelées à partir de __global__ y __device__ mais pas de l'hôte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X