¿CUDA es compatible con la recursividad?¿CUDA es compatible con la recursión?
Respuesta
Lo hace en hardware NVIDIA apoyar la capacidad de cómputo 2.0 y CUDA 3.1:
nuevas características del lenguaje añadido a CUDA C /C++ incluye:
Ayuda para la función punteros y recursión facilite para portar muchos algoritmos existentes a GPU de Fermi
http://developer.nvidia.com/object/cuda_3_1_downloads.html
punteros de función: http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers
Recursión: no puedo encontrar un ejemplo de código en el sitio web de NVIDIA, pero en el forum alguien publicar esto:
__device__ int fact(int f)
{
if (f == 0)
return 1;
else
return f * fact(f - 1);
}
Tener hardware "reciente" no es suficiente. No todas las tarjetas recientes son Fermi (también conocida como capacidad de cálculo 2.0). En la actualidad, no hay GPU móviles Fermi. –
Tienes razón, actualicé mi impresora. Pero, ¿qué hay de Geforce GTX 480M? Hay un chip de Fermi adentro. – Stringer
Hay computadoras portátiles con Fermi; Geforce 480M y Quadro FX5000M han estado fuera por un tiempo. – Tom
Cualquier algoritmo recursivo se puede implementar con una pila y un bucle. Es mucho más doloroso, pero si realmente necesitas recursividad, esto puede funcionar.
Sí, ver la NVIDIA CUDA Programming Guide: solamente
dispositivo funciones recursión apoyo en código de dispositivo compilado para dispositivos de la capacidad de cálculo 2.0.
Necesita una tarjeta Fermi para usarlos.
Aunque solo admite recursividad para chips específicos, a veces puede salirse con la recursión "emulada": see how I used compile-time recursion for my CUDA raytracer.
¡Muy útil! Kudos –
Creo que esto genera códigos más rápidos que la recursión real. –
@Min Lin: Ahh, pero ¿cómo es que mi comentario todavía está en 1, entonces? ¡Me debes un favor! :-) – ttsiodras
Intenté recién ahora en mi pc con una GPU NVIDIA con capacidad de cálculo de 1.1. Dice que la recurrencia aún no es compatible. Así que no tiene nada que ver con el tiempo de ejecución sino con el hardware
En la versión CUDA 4.1, CUDA admite la recursión solo para la función __device__ pero no para la función __global__.
Claro que sí, pero requiere la arquitectura de Kepler para hacerlo. Echa un vistazo a su último ejemplo en la clasificación rápida clásica.
http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/
Por lo que yo sé, sólo el último Kepler GK110 soporta paralelismo dinámico, que permite este tipo de llamada recursiva y desove de nuevos temas dentro del kernel. Antes de Kepler GK110, no fue posible. Y tenga en cuenta que no toda la arquitectura Kepler es compatible con esto, solo GK110 lo hace.
Si necesita recursión, probablemente necesite el Tesla K20. No estoy seguro de si Fermi lo admite, nunca lo lea.: \ Pero Kepler seguro sí. =)
Si su algoritmo incluye muchas recurrencias, soporte o no, no está diseñado para GPU, rediseñe sus algorthims o consiga una mejor CPU, de cualquier forma será mejor (apuesto en muchos casos, maginitudes mejor) luego hacer repeticiones en GPU.
Sólo después de 2.0 capacidad de cómputo en dispositivos compatibles
Sí, se apoya en la versión actual. Pero a pesar de que es posible ejecutar funciones recursivas, debe tener en cuenta que la asignación de memoria de la pila de ejecución no se puede predecir (la función recursiva se debe ejecutar para conocer la profundidad real de la recursión), por lo que su pila podría resultar insuficiente para sus propósitos y podría necesitar un incremento manual del tamaño de pila predeterminado
- 1. ¿Es compatible con declarative_authorization?
- 2. ¿La manera más fácil de probar la existencia de una GPU compatible con cuda de cmake?
- 3. ¿La codificación gzip es compatible con JSON?
- 4. ¿CouchDB es compatible con la integridad referencial?
- 5. ¿La plataforma Android es compatible con SpatiaLite?
- 6. ¿Es ChoiceMode compatible con ExpandableListView?
- 7. ¿lwIP es compatible con Zeroconf?
- 8. ¿AutoMapper es compatible con Linq?
- 9. ¿Lua es compatible con Unicode?
- 10. ¿C99 es compatible con C89?
- 11. ¿OpenRasta es compatible con Mono?
- 12. ¿Es posible la recursión con XML Literals en VB.NET?
- 13. ¿Cocos2d es compatible con ARC?
- 14. ¿GWT es compatible con php?
- 15. ¿Mono es compatible con XAML?
- 16. ¿MinGW es compatible con MFC?
- 17. ¿LevelDB es compatible con Java?
- 18. ¿ASP.NET es compatible con C++?
- 19. ¿Cómo se calcula la carga en una tarjeta nvidia (compatible con cuda), gpu?
- 20. con recursión mutua
- 21. ¿La recursión es buena en SQL Server?
- 22. Recursión con Func
- 23. CORS con Internet Explorer: ¿es compatible con la autenticación básica?
- 24. raytracing con CUDA
- 25. Dibujando triángulos con CUDA
- 26. CUDA: ¿Qué es escritura dispersa?
- 27. Codificando CUDA con C#?
- 28. ¿DirectX 11 es compatible con .NET?
- 29. ¿Es Bootstrap 2.1 compatible con jQuery UI?
- 30. ¿El navegador Wii es compatible con WebSockets?
Tenga en cuenta que todos los bucles implican recursividad, y la recursividad final no implica/no debería implicar una llamada de función recursiva. – Potatoswatter
Consulte [aquí] (http://stackoverflow.com/q/3644809/1129194) para obtener más información –