Estaba hablando de redes neuronales (NN) con un amigo durante el almuerzo el otro día y afirmó que el rendimiento de una NN escrita en Java sería similar a la escrita en C++. Sé que con las técnicas de compilación "justo a tiempo" Java puede funcionar muy bien, pero de alguna manera simplemente no lo compro. ¿Alguien tiene alguna experiencia que arroje luz sobre este tema? This page es el alcance de mi lectura sobre el tema.Rendimiento en C++/Java para redes neuronales?
Respuesta
El Hotspot JIT ahora puede producir el código más rápido que C++. El motivo es la optimización empírica en tiempo de ejecución.
Por ejemplo, puede ver que un cierto bucle toma la bifurcación "falsa" el 99% del tiempo y vuelve a ordenar las instrucciones del código de máquina en consecuencia.
Hay muchos artículos sobre esto. Si desea todos los detalles, lea Sun's excellent whitepaper. Para obtener información más informal, try this one.
C++ puede hacer lo mismo con Optmiizations guiadas por perfil. –
Aquí hay una fuente imparcial que muestra que Java es un 19% más lento que C/C++ en un trabajo matemático de precisión doble (vagamente similar a una red neuronal). http://shootout.alioth.debian.org/u32q/benchmark.php?test=nbody&lang=all –
Me interesaría una comparación entre Hotspot JIT y optimización guiada por perfil optimizada en C++.
El problema que veo con el Hotspot JIT (y cualquier compilador JIT optimizado para el perfil de tiempo de ejecución) es que las estadísticas deben mantenerse y modificarse el código. Si bien hay casos aislados, esto dará como resultado un código de ejecución más rápida, dudo que los compiladores JIT optimizados para el perfil se ejecuten más rápido que el código C o C++ optimizado en la mayoría de los casos. (Por supuesto que podría estar equivocado.)
De todos modos, generalmente estarás a merced del proyecto más grande, usando el mismo lenguaje en el que está escrito. O estarás a merced del conocimiento base de tus compañeros de trabajo. O estará a merced de la plataforma a la que se dirige (¿hay una JVM disponible en la arquitectura a la que se dirige?). En el raro caso de que tenga total libertad y esté familiarizado con ambos idiomas, haga algunas comparaciones con las herramientas que tiene a su disposición. Esa es realmente la única forma de determinar qué es lo mejor.
Tenga en cuenta que también puede realizar una optimización guiada por perfil del código de Java, por lo que para ser justos debe realizar un guiado de perfil en ambos o ninguno. –
Oh, claro, pero Hotsopt JIT está guiado por perfiles (solo guiado en tiempo de ejecución). Todo lo que estaba diciendo es que el HIT de Hotspot realmente debería compararse con la compilación de C o C++ guiada por perfil (que es exactamente lo que usted argumenta en su comentario). – Kevin
Esto no se trata estrictamente del rendimiento de C++ frente a Java, pero no obstante es interesante en ese aspecto: A paper sobre el rendimiento de los programas que se ejecutan en un entorno recolectado de basura.
La única respuesta posible es: haga un prototipo y mida usted mismo. Si mi experiencia es de interés, Java y C# fueron siempre mucho más lentas que C++ para el tipo de trabajo que estaba haciendo, creo principalmente por el alto consumo de memoria. Por supuesto, puedes llegar a una conclusión completamente diferente.
Si la recolección excesiva de basura es una preocupación, siempre puede reutilizar objetos no utilizados de alta rotación.
Crea una fábrica que mantiene una cola de SoftReferences a los objetos reciclados, usándolos antes de crear objetos nuevos. Luego, en el código que utiliza estos objetos, devuelva explícitamente estos objetos a la fábrica para su reciclaje.
En el gran esquema de cosas, estás debatiendo tal vez una diferencia de rendimiento del 5% donde obtendrías varios órdenes de magnitud aumentar al mudarte a CUDA o hardware dedicado.
Probablemente C++, aunque creo que apenas notará la diferencia además de un tiempo de inicio lento. Sin embargo, Java hace que el desarrollo sea más rápido y el mantenimiento más fácil.
- 1. Redes neuronales para ruby
- 2. Redes neuronales
- 3. Entradas secuenciales para redes neuronales
- 4. Proyecto de redes neuronales?
- 5. RBF Redes neuronales C#
- 6. Redes neuronales en Haskell - Consejo
- 7. Redes neuronales en Lisp - Consejo
- 8. Salida continua en redes neuronales
- 9. Uso de algoritmos genéticos para redes neuronales
- 10. Tener problemas para entender las redes neuronales
- 11. Programando redes neuronales con Python?
- 12. Referencia de redes neuronales artificiales
- 13. Redes neuronales en MATLAB, pesos iniciales
- 14. ejemplo de redes neuronales en .NET
- 15. Extracción de funciones de redes neuronales
- 16. cómo comenzar la programación de redes neuronales
- 17. Detección de tono usando redes neuronales
- 18. Redes neuronales o interacción persona-computadora
- 19. Primeros pasos con redes neuronales (ANN)?
- 20. Implementación de una función de activación softmax para redes neuronales
- 21. Uso del mundo real para redes neuronales artificiales
- 22. Módulos Perl fáciles de usar para redes neuronales
- 23. ¿Qué son ideas interesantes para experimentar con redes neuronales artificiales?
- 24. ¿Cómo usar las redes neuronales para resolver soluciones "blandas"?
- 25. ¿Cómo actualizar el sesgo en la propagación de redes neuronales?
- 26. Redes neuronales, ¿cómo se ven en la codificación?
- 27. las redes neuronales no pueden descifrar las transformadas de Fourier?
- 28. Cuándo usar Algoritmos genéticos vs. cuándo usar redes neuronales?
- 29. Buscando un tema interesante del área de redes neuronales
- 30. Predicción de series de tiempo a través de redes neuronales
Antes de responder esta pregunta, recuerde que está preguntando por las redes neuronales. Creo que podemos eludir todo el debate sobre el código nativo frente al intérprete si todavía nos ocupamos del tema en cuestión. –
Buena suerte gastando 10 veces más para resolver el mismo problema en C++. –