2012-10-01 26 views
9

Tengo una aplicación en la que me gustaría compartir una sola GPU entre múltiples procesos. Es decir, cada uno de estos procesos crearía su propio contexto CUDA o OpenCL, dirigido a la misma GPU. Según el libro blanco de Fermi [1], el cambio de contexto a nivel de aplicación es menor a 25 microsegundos, pero los lanzamientos se serializan de manera efectiva a medida que se inician en la GPU, por lo que Fermi no funcionaría bien para esto. De acuerdo con el libro blanco de Kepler [2], hay algo llamado Hyper-Q que permite hasta 32 conexiones simultáneas desde múltiples flujos CUDA, procesos MPI o hilos dentro de un proceso.Ejecución concurrente del kernel GPU desde procesos múltiples

Mis preguntas: Alguien ha intentado esto en una GPU Kepler y ha verificado que sus núcleos se ejecutan al mismo tiempo cuando se programan desde distintos procesos? ¿Es solo una característica de CUDA o también se puede usar con OpenCL en las GPU de Nvidia? ¿Las GPU de AMD admiten algo similar?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

+2

En respuesta a la primera pregunta que plantea, nvidia ha publicado algunos resultados de hiper-Q en un blog [aquí] (http://blogs.nvidia.com/2012/08/unleash-legacy-mpi-codes-with -keplers-hyper-q /). –

+0

Interesante, gracias por el enlace. Esa publicación de blog también implica que las GPU K10 no tienen Hyper-Q, mientras que las K20 sí lo harán. –

+0

Eso es correcto. Observará el enlace del libro blanco de Kepler que publicó las referencias "GK110" en el título. La GPU en K20 es GK110. La GPU en K10 es GK104 (dos de ellos). –

Respuesta

7

En respuesta a la primera pregunta, NVIDIA ha publicado unos resultados hiper-Q en un blog here. El blog señala que los desarrolladores que transportaban CP2K pudieron obtener resultados acelerados más rápidamente porque hyper-Q les permitió usar la estructura MPI de la aplicación más o menos como está y ejecutar múltiples rangos en una sola GPU, y obtener una mayor utilización efectiva de la GPU de esa manera. Como se mencionó en los comentarios, esta función (hiper-Q) solo está disponible actualmente en los procesadores K20, ya que depende de la GPU GK110.

+0

Gracias Robert, eso es bueno para la primera pregunta, y creo que tendré que seguir buscando a los demás. –

-2

He procesado kernels simultáneos de la arquitectura de Fermi. Funciona maravillosamente y, de hecho, a menudo es la única manera de obtener una alta ocupación de su hardware. Utilicé OpenCL y necesita ejecutar una cola de comandos separada de un hilo de CPU separado para hacer esto. Hyper-Q es la capacidad de enviar nuevos kernels paralelos de datos desde otro kernel. Esto es solo en Kepler.

Cuestiones relacionadas