Comment allouer dynamiquement des tableaux à l'intérieur d'un noyau?

J'ai besoin d'allouer dynamiquement de certains tableaux à l'intérieur de la fonction noyau. Comment puis-je faire?

Mon code est quelque chose comme ça:

__global__ func(float *grid_d,int n, int nn){  
    int i,j;  
    float x[n],y[nn];  
    //Do some really cool and heavy computations here that takes hours.  
}

Mais qui ne fonctionnera pas. Si c'était à l'intérieur de l'hôte code que je pouvais utiliser la fonction malloc. cudaMalloc a besoin d'un pointeur sur l'hôte, et d'autres sur l'appareil. À l'intérieur de la fonction du noyau je n'ai pas l'hôte pointeur.

Alors, que dois-je faire?

Si prend trop de temps (quelques secondes) à allouer tous les tableaux (j'ai besoin d'environ 4 de taille n et 5 de taille nn), ce ne sera pas un problème. Depuis le noyau sera probablement courir pendant 20 minutes, au moins.

  • Vous voulez probablement à lire la section sur allocation dynamique de la mémoire dans le code de l'appareil dans la CUDA C guide des programmeurs. Cette fonctionnalité nécessite de calculer la capacité de 2,0 ou plus dans votre GPU.
  • Quelle est la configuration (blocs, les threads), vous serez l'exécution de ce noyau? Quelles sont les gammes de n et nn (pour les petites tailles que vous pourriez presser dans les registres, ou de la mémoire partagée).
InformationsquelleAutor Granada | 2012-11-20