¿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.
¿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.
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.).
De acuerdo con esta presentación de NVIDIA, max es de 16 transmisiones (en Fermi). http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf
Para aclarar, he creado con éxito más de 16 secuencias, pero creo que el hardware solo admite 16 núcleos simultáneos, por lo que los excesos se desperdician en términos de concurrencia.
Kepler es probablemente diferente.
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.
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
@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
¿Quiere decir flujos CUDA (que proporcionan operaciones de memoria paralela y ejecuciones de kernel) o hilos CUDA (para ejecutar kernel único). – KoppeKTop