Question

Je parlais de réseaux de neurones (NN) avec un ami au cours du déjeuner l'autre jour et il a affirmé que la performance d'un NN écrit en Java serait similaire à celle écrite en C ++. Je sais qu'avec les techniques de compilation «juste à temps», Java peut très bien fonctionner, mais je ne l'achète tout simplement pas. Quelqu'un at-il une expérience susceptible de faire la lumière sur ce problème? Cette page constitue l'étendue de mes lectures sur le sujet.

Était-ce utile?

La solution

Le JIT de Hotspot peut maintenant produire du code plus rapide que le C ++. La raison en est l'optimisation empirique de l'exécution.

Par exemple, il est possible de voir qu'une certaine boucle prend la valeur "false". branchez 99% du temps et réorganisez les instructions du code de la machine en conséquence.

Il y a beaucoup d'articles à ce sujet. Si vous souhaitez connaître tous les détails, consultez l'excellent livre blanc de Sun . Pour plus d'informations informelles, essayez celui-ci .

Autres conseils

Je serais intéressé par une comparaison entre Hotspot JIT et l'optimisation C ++ optimisée selon les profils.

Le problème que je vois avec le JIT Hotspot (et tout compilateur JIT optimisé pour les profils d’exécution) est que les statistiques doivent être conservées et le code modifié. Bien qu'il existe des cas isolés, le code s'exécutera plus rapidement, mais je doute que les compilateurs JIT optimisés pour les profils s'exécutent plus rapidement que le code C ou C ++ bien optimisé dans la plupart des cas. (Bien sûr, je peux me tromper.)

Quoi qu'il en soit, vous serez généralement à la merci d'un projet plus vaste, en utilisant le même langage que celui dans lequel il est écrit. Ou vous serez à la merci de la base de connaissances de vos collègues. Ou vous serez à la merci de la plate-forme que vous ciblez (une machine virtuelle Java est-elle disponible sur l'architecture que vous ciblez?). Dans les rares cas où vous avez une totale liberté et que vous maîtrisez les deux langues, faites des comparaisons avec les outils à votre disposition. C’est vraiment le seul moyen de déterminer le meilleur.

La seule réponse possible est: fabriquez un prototype et mesurez vous-même. Si mon expérience est intéressante, Java et C # étaient toujours beaucoup plus lents que le C ++ pour le type de travail que je faisais - je pense surtout à cause de la consommation de mémoire élevée. Bien sûr, vous pouvez arriver à une conclusion complètement différente.

Il ne s'agit pas strictement de performances C ++ vs Java, mais néanmoins intéressant à cet égard: Un paper sur les performances des programmes s'exécutant dans un environnement dépouillé.

Si un problème de récupération de place excessive vous préoccupe, vous pouvez toujours réutiliser des objets à fort taux de désabonnement inutilisés.

Créez une fabrique qui conserve une file d’attentes de SoftReferences vers des objets recyclés, en utilisant ceux-ci avant de créer de nouveaux objets. Ensuite, dans le code qui utilise ces objets, renvoyez explicitement ces objets à l’usine pour recyclage.

Probablement C ++, bien que je pense que vous remarquerez à peine la différence, mis à part le temps de démarrage lent. Java accélère toutefois le développement et facilite la maintenance.

Dans l’ensemble, vous discutez peut-être d’une différence de performances de 5% qui vous permettrait d’obtenir une augmentation de plusieurs ordres de grandeur en passant à CUDA ou à du matériel dédié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top