Question

Salut je voulais juste savoir s'il est possible de faire ce qui suit à l'intérieur du noyau nvidia cuda

__global__ void compute(long *c1, long size, ...)
{
  ...
  long d[1000];
  ...
}

ou les

__global__ void compute(long *c1, long size, ...)
{
  ...
  long d[size];
  ...
}
Était-ce utile?

La solution

Vous pouvez faire le premier exemple, je ne l'ai pas essayé le second.

Cependant, si vous pouvez l'aider, vous voudrez peut-être revoir votre programme de ne pas le faire. Vous ne voulez pas allouer 4000 octets de mémoire dans votre noyau. Cela conduira à beaucoup d'utilisation de la mémoire locale CUDA, puisque vous ne serez pas en mesure d'adapter tout dans des registres. CUDA mémoire locale est lente (400 cycles de latence de la mémoire).

Autres conseils

Vous pouvez faire # 1, mais méfiez-vous cela sera fait dans chaque thread!

Votre deuxième extrait ne fonctionnera pas, car l'allocation dynamique de la mémoire lors de l'exécution du noyau ne sont pas pris en charge.

Vous pouvez allouer de la mémoire partagée de façon dynamique lorsque vous lancez le noyau.

__global__ void compute(long *c1, long size, ...)
 {
  ...
   extern __shared__ float shared[];
  ...
 }

compute <<< dimGrid, dimBlock, sharedMemSize >>>( blah blah );

Guide de programmation CUDA:

  

est déterminée au moment du lancement de la taille de la matrice (voir la section 4.2.3).

allocation dynamique de mémoire lors de l'exécution du noyau est pris en charge, consultez l'exemple sdk, nouvelle suppression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top