CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Performance java/c++

godrik
godrik
Niveau 30
30 septembre 2009 à 23:00:54

Bonjour a vous,
J'ai des problemes lies a la performance d'un code en java. Et comme il a l'air d'y avoir des gens fort en java dans le coin...
On a des algos qui etaient ecrit en java et comme on en a besoin sur une machine ou il n'y a pas de jvm, le code a ete porte en C++ par une etudiante. Quand je dis que le code a ete porte, je veux dire que le code a ete copier coller et la syntaxe adapte pour que ca marche correctement en C++. Actuellement les deux codes sont fonctionnellement identiques (memes fichiers en output sur une grosse batterie de test).

Parcontre le code C++ va entre 10 et 40 plus vite que le code java. Je m'attendais a voir une difference, mais quand meme pas autant.

Quelques details technique:
J'utilise java 6 sorti tout droit du site de sun. Le code est de l'algorithmique sur les tableaux de double: des prefixsum, des binary search. A priori tres peu d'allocation/desallocation memoire. Un peu d'heritage pour implementer des variantes de certains algos. Le code C++ est compile en -O2 par g++ 4.jesaispasquoi

Qu'en pensez vous ? le facteur vient directement de la jvm ? J'ai oublier des options d'optimisation ? (y a t'il des options d'optimization ?) Mon etudiante est tellement fort que je devrais lui donner son diplome tout de suite ?

Merci

dnob700
dnob700
Niveau 10
30 septembre 2009 à 23:24:58

Je ne connais rien à java, mais le plus logique serait que gcc fasse des optimisations sur les double que ne fait pas java. Typiquement, il pourrait utiliser SSE alors que java utilise seulement le coprocesseur (ou pire, passe par une bibliothèque logiciel pour forcer une sémantique IEEE ce qui s'active/se désactive peut-être avec des options de compilations).

Mais je ne me trompe pas, la jvm jit compile maintenant le java auquel cas il n'y a pas de raison d'avoir une telle différence uniquement à cause de la couche java.

Si tu veux gagner encore un facteur 10, essaye de remplacer gcc par icc, les manipulations de tableaux de flottants sont le domaine où il est le meilleur (mais ce n'est pas ta question).

godrik
godrik
Niveau 30
01 octobre 2009 à 00:10:28

Y a t'il un moyen de verifier ce que le code java fait en detail ?

PS: a la fin, le code sera compile avec pgi donc on devrait regagner un peu de perf en passant. Mais la perf n'est qu'un but secondaire ici.

_skip
_skip
Niveau 10
01 octobre 2009 à 08:46:07

L'allocation est plutôt performante en java normalement, puisque la JVM réserve automatiquement plus d'espace que nécessaire.

par contre, il peut y avoir plusieurs facteurs, dont celui des types de collections utilisés (quoi que s'il s'agit de simples tableaux statiques dans ton cas ça devrait aller). C'est difficile à dire comme ça sans voir le code mais tu devrais passer un coup de profiler dessus, celui intégré dans netbeans est plutôt bien dans ce genre, ça te montrerait les fonctions gourmandes.

Si c'est un algo suffisamment simple et que tu as un test case, tu peux le publier sur le net...

isukthar
isukthar
Niveau 10
01 octobre 2009 à 17:04:56

Comment vous avez regardé la différence de vitesse si sur la plateforme cible il n'y a pas de JVM?
Si vous avez une plateforme (même machine) ou les 2 codes peuvent s'exécuter, tu peux essayer de faire du profiling pour voir les fonctions où l'écart entre Java et C++ est le plus grand.

godrik
godrik
Niveau 30
01 octobre 2009 à 17:42:06

Sur la plateforme u on a beson de l'algo a la fin il n'y a pas de jvm. Mais on fait nos test sur une machine standard. Pour l'instant on prends les temps avec time(1) en mettant des instances suffisament large pour masquer le temps de demarrage de la jvm.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment