redes reconocimiento programacion practicos neuronales neuronal multicapa fuentes fuente ejemplos codigos codigo caracteres java c++ performance neural-network

reconocimiento - redes neuronales java codigo fuente



¿Desempeño C++/Java para redes neuronales? (7)

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? Esta página es el alcance de mi lectura sobre el tema.


El Hotspot JIT ahora puede producir 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 cierto ciclo toma la rama "falsa" el 99% del tiempo y vuelve a ordenar las instrucciones del código de la máquina en consecuencia.

Hay muchos artículos sobre esto. Si desea todos los detalles, lea el excelente documento técnico de Sun. Para obtener información más informal, prueba este .


Esto no se trata estrictamente de C ++ frente al rendimiento de Java, pero no obstante es interesante en ese sentido: un documento sobre el rendimiento de los programas que se ejecutan en un entorno de recolección de basura.


La única respuesta posible es: hacer un prototipo y medir por ti 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.


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 idioma en el que está escrito. O estarás a merced de la base de conocimientos 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.


Si la recolección excesiva de basura es una preocupación, siempre puede reutilizar objetos no utilizados de alta rotación.

Cree una fábrica que mantenga una cola de SoftReferences para los objetos reciclados, utilizá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 quizás una diferencia de rendimiento del 5% en la que obtendrías varios órdenes de aumento de magnitud al cambiar 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 sencillo.