Pregunta

Yo estaba hablando de redes neuronales (NN) con un amigo durante el almuerzo el otro día y afirmó que el desempeño de una NN escrito en Java sería similar a uno escrito en C++.Sé que con "justo a tiempo" del compilador de técnicas de Java se puede hacer muy bien, pero de alguna manera yo no lo compre.¿Alguien tiene alguna experiencia que podría arrojar luz sobre este tema? Esta página es la medida de mi lectura sobre el tema.

¿Fue útil?

Solución

El Hotspot JIT puede ahora producir código más rápido de C++.La razón es el tiempo de ejecución de optimización empírica.

Por ejemplo, se puede ver que un determinado bucle lleva a la "falsa" de la sucursal 99% del tiempo y reordenar las instrucciones de código de máquina en consecuencia.

Hay un montón de artículos sobre este.Si quieres todos los detalles, leer Sol del artículo excelente.Para obtener más informal de información, probar este.

Otros consejos

Yo estaría interesado en una comparación entre Hotspot JIT y el perfil guiada optimización optimizado C++.

El problema que yo veo con el Hotspot JIT (y cualquier tiempo de ejecución de perfil optimizado compilador JIT) es que las estadísticas deben ser mantenidos y el código modificado.Aunque existen casos aislados, esto resultará en una más rápida ejecución de código, dudo que perfil optimizado compiladores JIT se ejecutará más rápido que bien optimizado, C o C++ de código en la mayoría de las circunstancias.(Por supuesto, puedo estar equivocado.)

De todos modos, por lo general, usted va a estar a la merced de un proyecto más amplio, el uso de la misma lengua en que está escrito.O vas a estar a la merced de la base de conocimientos de sus compañeros de trabajo.O vas a estar a la merced de la plataforma a la que están dirigidos (es una JVM disponibles en la arquitectura que están dirigidos?).En el raro caso de que usted tiene completa libertad y estás familiarizado con ambos idiomas, hacer algunas comparaciones con las herramientas que tiene a su disposición.Que es realmente la única manera de determinar qué es lo mejor.

La única respuesta posible es:hacer un prototipo y medida para usted.Si mi experiencia es de ningún interés, Java y C# siempre fueron mucho más lento que C++ para el tipo de trabajo que yo estaba haciendo, yo creo que sobre todo por el alto consumo de memoria.Por supuesto, usted puede venir a una conclusión diferente.

Esto no es estrictamente sobre C++ vs Java rendimiento, pero deja de ser interesante en ese sentido:Un papel sobre el rendimiento de los programas en ejecución en el cubo de la basura recolectada medio ambiente.

Si hay un exceso de recolección de basura es un problema, siempre se puede reutilizar sin usar de alta churn objetos.

Crear una fábrica que mantiene una cola de SoftReferences a objetos reciclados, el uso de los de antes de la creación de nuevos objetos.A continuación, en el código que utiliza estos objetos, de forma explícita la devolución de estos objetos a la fábrica para su reciclaje.

Probablemente, C++, aunque creo que apenas notará la diferencia, además de un inicio lento del tiempo.Java sin embargo hace que el desarrollo más rápido y fácil de mantener.

En el gran esquema de las cosas, se está debatiendo tal vez un 5% de diferencia de rendimiento, donde obtendrá varios órdenes de magnitud de incremento por movimiento para CUDA o de un hardware dedicado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top