Quelqu'un peut-il décrire les différences entre __global__
y __device__
?
Quand dois-je utiliser __device__
et quand l'utiliser __global__
?.
Quelqu'un peut-il décrire les différences entre __global__
y __device__
?
Quand dois-je utiliser __device__
et quand l'utiliser __global__
?.
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.
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.
__global__
- Fonctionne sur le GPU, appelé depuis le CPU ou le GPU*. Exécuté avec <<<dim3>>>
arguments.__device__
- S'exécute sur le GPU, appelé depuis le GPU. Peut aussi être utilisé avec des variabiles.__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.
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.
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.