Voy a paralelizar en CUDA un algoritmo de búsqueda local para algún problema de optimización. El problema es muy difícil, por lo que el tamaño de los problemas prácticamente solucionables es bastante pequeño. Mi preocupación es que el número de hilos previsto para funcionar en un solo núcleo es insuficiente para obtener cualquier aceleración en la GPU (incluso suponiendo que todos los hilos se fundieron, libre de conflictos de banco, sin ramificación, etc.). Digamos que un kernel se lanza para 100 hilos. ¿Es razonable esperar ganancias con el uso de GPU? ¿Qué pasa si la cantidad de hilos es 1000? ¿Qué información adicional se necesita para analizar el caso?número mínimo de hilos de GPU para ser eficaz
Respuesta
100 hilos no es realmente suficiente. Lo ideal es que desee un tamaño que se pueda dividir en al menos tantos bloques de subprocesos como multiprocesadores (SM) en la GPU, de lo contrario dejará los procesadores inactivos. Cada bloque de hilos debe tener no menos de 32 hilos, por el mismo motivo. Idealmente, debe tener un pequeño múltiplo de 32 hilos por bloque (digamos 96-512 hilos), y si es posible, múltiples de estos bloques por SM.
Como mínimo, debe tratar de tener suficientes hilos para cubrir la latencia aritmética de los SM, lo que significa que en una GPU Compute Capability 2.0, necesita alrededor de 10-16 warps (grupos de 32 hilos) por SM. Sin embargo, no todos necesitan venir del mismo bloque de hilos. Así que eso significa, por ejemplo, en una GPU Tesla M2050 con 14 SM, necesitaría al menos 4480 hilos, divididos en al menos 14 bloques.
Dicho esto, un menor número de hilos que esto también podría proporcionar un aumento de velocidad - que depende de muchos factores. Si el cálculo está vinculado al ancho de banda, por ejemplo, y puede mantener los datos en la memoria del dispositivo, entonces podría obtener una aceleración porque el ancho de banda de la memoria del dispositivo GPU es más alto que el ancho de banda de la memoria de la CPU. O bien, si se trata de un límite de cálculo, y hay un gran paralelismo de nivel de instrucción (instrucciones independientes del mismo hilo), entonces no necesitará tantos hilos para ocultar la latencia. Este último punto se describe muy bien en "Better performance at lower occupancy" talk de Vladimir Volkov de GTC 2010.
Lo principal es asegurarse de usar todos los SM: sin hacerlo, no está utilizando todo el rendimiento de cómputo o ancho de banda de la GPU puede proporcionar.
gracias por una respuesta detallada y un enlace útil. – AdelNick
@harrism: ¿Hay algún lugar en la guía de programación en el que hablen sobre el número de subprocesos que se usarán para que la tarea sea efectiva? – Programmer
- 1. C# número de hilos
- 2. mínimo de la SED número
- 3. ¿Los destructores deben ser seguros para la fabricación de hilos?
- 4. Configuración del número mínimo de decimales para std :: ostream precision
- 5. Número mínimo de operaciones para hacer una matriz ordenada
- 6. Conflicto de banco de memoria compartida GPU
- 7. SLI para múltiples GPU
- 8. Precisión de GPU para computación científica
- 9. ¿Puede un entero ser compartido entre hilos de forma segura?
- 10. Formato tipo doble con el número mínimo de dígitos decimales
- 11. Ordenar una matriz con un número mínimo de comparaciones
- 12. ¿Cómo ordenar una matriz con el mínimo número de escrituras?
- 13. Cómo crear DSL en Scala para líneas de comando con un número mínimo de texto adicional
- 14. La forma más eficaz de modificar los contenidos de CMSampleBuffer
- 15. Número mínimo de intercambios necesarios para cambiar el Array 1 al Array 2?
- 16. convenciones de nomenclatura para hilos?
- 17. Limite el número de hilos paralelos en C#
- 18. Número de hilo activo en el grupo de hilos
- 19. ¿Cuál es el número mínimo de bits necesarios para corregir todos los errores de 2 bits?
- 20. ¿Cómo encontrar el número mínimo de transferencias para una red de metro o ferrocarril?
- 21. Encontrar el número mínimo de operaciones requeridas para calcular un número usando un rango de números especificado
- 22. Magento: método más eficaz para obtener un recuento de colecciones
- 23. Tema mínimo para Eclipse
- 24. Algoritmo de factorización de Cholesky disperso para GPU
- 25. Hacer que los hilos tengan el mismo número de timeslices
- 26. ¿Puedes detectar cuántos hilos creará un número determinado de gorutines?
- 27. algoritmos de gráfico en la GPU
- 28. Eficaz FFT 2D en datos de entrada real?
- 29. GPU- Función hash de "prueba"
- 30. Computación en paralelo de GPU con OpenCV
Probablemente no habrá mucha ventaja en tener 100 hilos - la programación CUDA por lo general se convierte en práctica si tiene miles de hilos, y sobre todo si todos hacen lo mismo. –
Para ser preciso, quiere decir que los hilos de la misma urdimbre deben hacer lo mismo, ¿no? – AdelNick
escribe un prototipo que haga lo que necesitas y luego preocúpate por acelerarlo. Mire en empuje si hay algo similar a lo que necesita. – fabrizioM