Pregunta

Hola Sólo quería saber si es posible hacer lo siguiente en el interior del núcleo NVIDIA CUDA

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

o el siguiente

__global__ void compute(long *c1, long size, ...)
{
  ...
  long d[size];
  ...
}
¿Fue útil?

Solución

Puede hacer el primer ejemplo, no he probado el segundo.

Sin embargo, si puede evitarlo, es posible que desee volver a diseñar su programa no hacerlo. Usted no quiere asignar 4000 bytes de memoria en su núcleo. Que dará lugar a una gran cantidad de uso de CUDA memoria local, ya que no será capaz de poner todo en registros. CUDA memoria local es lenta (400 ciclos de latencia de la memoria).

Otros consejos

Se puede hacer # 1, pero cuidado con esto se hará en hilo de TODOS!

Su segundo fragmento no va a funcionar, porque la asignación de memoria dinámica en tiempo de ejecución del kernel no es compatible.

Puede asignar memoria compartida dinámicamente cuando se inicia el kernel.

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

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

guía de programación CUDA:

  

el tamaño de la matriz se determina en tiempo de lanzamiento (véase la Sección 4.2.3).

asignación de memoria dinámica en tiempo de ejecución del kernel es compatible, por ejemplo comprobar el SDK, nueva eliminación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top