2010-06-14 24 views
5

¿Es posible lanzar dos kernels que realizan tareas independientes, simultáneamente? Por ejemplo, si tengo este código CudaLanzamiento simultáneo de Núcleos Múltiples usando CUDA para una GPU

// host and device initialization 
....... 
....... 

// launch kernel1 
myMethod1 <<<.... >>> (params); 

// launch kernel2 
myMethod2 <<<.....>>> (params); 

Suponiendo que estos núcleos son independientes, es que hay una instalación para lanzarlos al mismo tiempo la asignación de algunas rejillas/bloques para cada uno. ¿Tiene CUDA/OpenCL esta disposición?

+0

Por simultánea, qué se refiere su ejecución está sincronizando o simplemente la superposición? –

Respuesta

6

Solo los dispositivos con capacidad de cálculo CUDA 2.0 y superior (es decir, Fermi) pueden admitir múltiples ejecuciones de kernel simultáneas. Véase la sección 3.2.6.3 de la guía de programación CUDA 3.0, que establece:

Algunos dispositivos de la capacidad de cómputo 2.0 pueden ejecutar múltiples núcleos al mismo tiempo. Las aplicaciones pueden consultar esta capacidad llamando al cudaGetDeviceProperties() y marcando la propiedad concurrentKernels.

El número máximo de lanzamientos de kernel que un dispositivo puede ejecutar al mismo tiempo es cuatro.

Un kernel desde un contexto CUDA no puede ejecutar simultáneamente con un kernel desde otro contexto CUDA.

núcleos que utilizan muchas texturas o una gran cantidad de memoria local son menos propensos a ejecutarse concurrentemente con otros granos.

6

Necesitará SM 2.0 o superior para los kernels concurrentes.

Para obtener la ejecución simultánea, debe indicar manualmente que no hay dependencia entre los dos núcleos. Esto se debe a que el compilador no puede determinar que un kernel no modificará los datos utilizados en el otro, esto podría ser leyendo y escribiendo en el mismo búfer que parece bastante simple, pero en realidad es mucho más difícil de detectar ya que puede haber punteros dentro estructuras de datos, etc.

Para expresar la independencia, debe iniciar los kernels en diferentes flujos. El cuarto parámetro en la sintaxis de triple chevron especifica la secuencia, consulte la Guía de programación o la muestra de SDK concurrentKernels.

3

compatibilidad con CUDA 2.1 = hasta 16 concurrentes núcleos

Cuestiones relacionadas