activar - cuda ultima version
Concurrencia, 4 aplicaciones CUDA que compiten para obtener recursos de la GPU (1)
¿Qué pasaría si hay cuatro aplicaciones concurrentes de CUDA que compiten por recursos en una sola GPU para que puedan descargar el trabajo a la tarjeta gráfica? La Guía de programación de Cuda 3.1 menciona que hay ciertos métodos que son asíncronos:
- El kernel se lanza
- Dispositivo de memoria de las copias del dispositivo
- Copias de memoria del dispositivo host de un bloque de memoria de 64 KB o menos
- Copias de memoria realizadas por funciones que tienen el sufijo Async
- Llamadas de función de conjunto de memoria
Además, menciona que los dispositivos con capacidad de cómputo 2.0 son capaces de ejecutar múltiples kernels simultáneamente mientras los kernels pertenezcan al mismo contexto.
¿Este tipo de simultaneidad solo se aplica a las transmisiones dentro de una sola aplicación cuda pero no es posible cuando hay aplicaciones diferentes completas que solicitan recursos de la GPU?
¿Eso significa que el soporte simultáneo solo está disponible dentro de 1 aplicación (contexto ???) y que las 4 aplicaciones se ejecutarán simultáneamente en la forma en que los métodos podrían superponerse mediante el cambio de contexto en la CPU, pero las 4 aplicaciones deben esperar hasta que la GPU sea liberada por las otras aplicaciones? (es decir, el lanzamiento de Kernel desde la aplicación4 espera hasta que finalice el lanzamiento del núcleo desde la aplicación1).
Si ese es el caso, ¿cómo estas 4 aplicaciones podrían acceder a los recursos de la GPU sin sufrir largos tiempos de espera?
Como dijiste, solo un "contexto" puede ocupar cada uno de los motores en un momento dado. Esto significa que uno de los motores de copia puede estar sirviendo una memcpy para la aplicación A, el otro una memcpy para la aplicación B, y el motor de cómputo puede estar ejecutando un kernel para la aplicación C (por ejemplo).
Una aplicación puede tener múltiples contextos, pero no hay dos aplicaciones que puedan compartir el mismo contexto (aunque los hilos dentro de una aplicación pueden compartir un contexto).
Cualquier aplicación que programe el trabajo para ejecutarse en la GPU (es decir, una memcpy o un lanzamiento del kernel) puede programar el trabajo de forma asíncrona para que la aplicación pueda continuar y realizar otro trabajo en la CPU y pueda programar cualquier cantidad de tareas para ejecutar en la GPU.
Tenga en cuenta que también es posible colocar las GPU en modo exclusivo por lo que solo un contexto puede operar en la GPU en cualquier momento (es decir, todos los recursos están reservados para el contexto hasta que se destruya el contexto). El valor predeterminado es modo compartido .