CUDA global (comme en C) tableaux dynamiques alloué à la mémoire de l'appareil

Donc, j'essaie d'écrire du code qui utilise Nvidia CUDA de l'architecture. J'ai remarqué que la copie vers et depuis l'appareil était vraiment blesser ma performance globale, alors maintenant, je suis en train de déplacer une grande quantité de données sur l'appareil.

Comme ce type de données est utilisé dans de nombreuses fonctions, je voudrais qu'il soit global. Oui, je peux passer des pointeurs, mais je voudrais vraiment savoir comment travailler avec des variables globales dans cette instance.

Donc, j'ai des fonctions de l'appareil qui veulent accéder à un périphérique alloué tableau.

Idéalement, je pourrais faire quelque chose comme:

__device__ float* global_data;

main()
{
  cudaMalloc(global_data);
  kernel1<<<blah>>>(blah); //access global data
  kernel2<<<blah>>>(blah); //access global data again
}

Cependant, je n'ai pas trouvé comment créer un tableau dynamique. J'ai trouvé un travail autour de la déclaration du tableau comme suit:

__device__ float global_data[REALLY_LARGE_NUMBER];

Et tout ce qui ne nécessite pas un cudaMalloc appel, je préfère l'allocation dynamique d'approche.

Jetez un oeil à l'aide de la mémoire partagée ainsi, global est le plus lent de la mémoire de l'appareil couches.
Pourquoi voulez-vous utiliser des variables globales au lieu de passer le dispositif de pointeur en argument au noyau? Ce faisant vous donne tout de même des limites que l'utilisation de la mémoire globale dans le code de CPU, avec peu d'avantage.

OriginalL'auteur Voltaire | 2008-09-17