Paramètre du noyau passant dans CUDA?
J'ai un newbie doute sur comment puis-noyaux CUDA travail.
Si vous avez le code suivant (qui utilisent la fonction cuPrintf
prises de ici):
#include "cuPrintf.cu"
__global__ void testKernel(int param){
cuPrintf("Param value: %d\n", param);
}
int main(void){
//initialize cuPrintf
cudaPrintfInit();
int a = 456;
testKernel<<<4,1>>>(a);
//display the device's greeting
cudaPrintfDisplay();
//clean up after cuPrintf
cudaPrintfEnd();
}
La sortie de l'exécution est:
Param value: 456
Param value: 456
Param value: 456
Param value: 456
Je n'arrive pas à la façon dont le noyau peut lire la valeur correcte du paramètre que je passe, n'est-il pas alloué dans la mémoire hôte? Peut le GPU lire à partir de l'hôte de la mémoire?
Merci,
Andrea
source d'informationauteur Andrea | 2011-06-27
Vous devez vous connecter pour publier un commentaire.
La déclaration
void testKernel(int param)
dit queparam
est transmis par valeur et non par référence. En d'autres termes, la pile contient une copie dea
's la valeur, pas un pointeur versa
. CUDA copies de la pile pour le noyau en cours d'exécution sur le processeur graphique.Conformément à la section E. 2.5.2. Les Paramètres de la fonction dans CUDA C Guide de Programmation
__global__ paramètres de la fonction sont transmis à l'appareil:
Selon la Programmation CUDA (Guide d'utilisation Annexe B. 16) les arguments sont transmis via la mémoire partagée à l'appareil.
Les paramètres sont passés à la noisette lorsque vous les invoquez, sinon comment voulez-vous communiquer avec le GPU? C'est le même que l'idée de la création d'un uniforme dans un shader.
Dans l'exécution de l'API, les paramètres pour mondiale fonctions sont implicitement rassemblés et copié à partir de l'hôte de l'appareil.
NVCC compilateur génère du code qui cache la mobilisation de vous. Vous pouvez trouver le Paramètre de tailles et de limitations dans le Guide de Programmation CUDA