2010-08-25 12 views
17

¿Hay un número máximo de secuencias que se pueden crear en CUDA?¿Hay un número máximo de streams en CUDA?

Para aclarar me refiero a las transmisiones CUDA como en la secuencia que le permite ejecutar kernels y operaciones de memoria.

+0

¿Quiere decir flujos CUDA (que proporcionan operaciones de memoria paralela y ejecuciones de kernel) o hilos CUDA (para ejecutar kernel único). – KoppeKTop

Respuesta

11

No he visto ningún límite en ninguna documentación, pero eso no significa que todas las secuencias se ejecutarán al mismo tiempo, ya que es un límite de hardware duro (multiprocesadores, registros, etc.).

16

No existe un límite realista para la cantidad de secuencias que puede crear (al menos 1000). Sin embargo, existe un límite en la cantidad de transmisiones que puede usar de manera efectiva para lograr la concurrencia.

En Fermi, la arquitectura admite 16 inicios de kernel concurrentes, pero solo hay una conexión desde el host a la GPU. Entonces, incluso si tiene 16 transmisiones CUDA, eventualmente serán canalizadas a una cola HW. Esto puede crear dependencias de datos falsas y limitar la cantidad de concurrencia que uno puede obtener fácilmente.

Con Kepler, el número de conexiones entre el Host y la GPU es ahora 32 (en lugar de uno con Fermi). Con la nueva tecnología Hyper-Q, ahora es mucho más fácil mantener la GPU ocupada con el trabajo simultáneo.

+2

Es posible que desee mencionar la sobrecarga de crear y destruir secuencias, lo que tendrá un efecto si se crean y destruyen muchas secuencias. – harrism

+1

@Mark Ebersole ¿Pero por qué necesitábamos 32 conexiones entre el host y la GPU para los únicos 16 inicios de kernel concurrentes de Streams en Kepler? – Alex

Cuestiones relacionadas