2010-09-14 15 views
6

¿Qué pasaría si hay cuatro aplicaciones concurrentes de CUDA compitiendo por recursos en una sola GPU para que puedan descargar el trabajo a la tarjeta gráfica ?. La Guía de programación CUDA 3.1 menciona que hay ciertos métodos que son asíncrono:Concurrencia, 4 aplicaciones CUDA que compiten para obtener recursos de la GPU

  • Kernel lanza
  • de dispositivos de copias de memoria del dispositivo
  • copias de memoria del dispositivo host de un bloque de memoria de 64 KB o menos
  • copias de memoria realizadas por las funciones que están con el sufijo asíncrono
  • memoria función de ajustar las llamadas

También menciona que los dispositivos con capacidad de cómputo 2.0 pueden ejecutar múltiples kernels simultáneamente mientras los kernels pertenezcan al mismo contexto.

¿Este tipo de concurrencia solo se aplica a las corrientes en una sola aplicación cuda pero no es posible cuando hay aplicaciones diferentes completas que solicitan recursos de la GPU?

¿Eso quiere decir 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 al cambiar el contexto en la CPU, pero las aplicaciones necesitan esperar hasta que la GPU sea liberada por las otras aplicaciones? (es decir, el lanzamiento del Kernel desde la aplicación4 espera hasta que finalice el lanzamiento del kernel desde la aplicación1)

Si ese es el caso, ¿cómo pueden acceder estas 4 aplicaciones a los recursos de la GPU sin sufrir largos tiempos de espera?

Respuesta

4

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 ninguna aplicación puede compartir el mismo contexto (aunque los hilos dentro de una aplicación pueden compartir un contexto).

Cualquier aplicación que los horarios de trabajo para ejecutarse en la GPU (es decir, un establecimiento de memoria o el lanzamiento de un núcleo) se puede programar el trabajo asíncrona para que la aplicación es libre de seguir adelante y hacer algún otro trabajo de la CPU y puede programar cualquier cantidad de tareas para ejecutar en la GPU.

Tenga en cuenta que también es posible poner las GPU en modo exclusivo mediante el cual un solo contexto puede operar en la GPU en cualquier momento (es decir, todo los recursos se reservan para el contexto hasta que el contexto es destruido). El valor predeterminado es modo compartido.

+0

hello Tom. Estoy trabajando en algunos proyectos de cuda y buscando socios. ¿Tienes algún deseo de colaborar? ahora mismo estoy trabajando en la integración de ublas y cublas – Anycorn

Cuestiones relacionadas