IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Comparer les performances de deux algorithmes


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut Comparer les performances de deux algorithmes
    Bonjour,

    Je souhaite comparer les performances de deux algorithmes nommés algo1 et algo2.


    Dans un premier cas de figure, j'ai deux classes Main différentes. Je lance deux fois java et j'obtiens que mes deux algos sont équivalent. Ils prennent environ 2 secondes.

    Dans un deuxième de cas de figure, j'ai une classe Main qui lance les deux algos séquentiellement. Mon deuxième algo devient alors 5 fois plus rapide.

    J'imagine qu'il y a un phénomène de cache ou autre qui entre en jeu.

    Est-il possible de l'éviter? Par exemple, est-il possible que mes deux algos soit lancée dans 2 VM différentes (autrement dit que mon programme Java crée une vm puis y exécute un bout de code). Utiliser des threads est-il suffisant?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par LGnord Voir le message
    J'imagine qu'il y a un phénomène de cache ou autre qui entre en jeu.
    Cache et optimisation Just-In-Time des parties communes aux deux algos. C'est donc le premier qui se tape l'optimisation à chaud, et le second qui en profite.

    Citation Envoyé par LGnord Voir le message
    Est-il possible de l'éviter? Par exemple, est-il possible que mes deux algos soit lancée dans 2 VM différentes (autrement dit que mon programme Java crée une vm puis y exécute un bout de code).
    Bien sûr, Java peut lancer des programmes indépendants, comme par exemple un nouveau programme Java.

    À noter que comparer des performances est une science, et que juste le test "temps de l'algo 1" et "temps de l'algo 2" n'est pas forcément pertinent. Par exemple les données du jeu de test, ou leur mode d'accès, peuvent être trop différentes d'un cas réel. Ou alors, en-dessous d'un certain temps, il peut être sans intérêt de choisir l'un plutôt que l'autre, le véritable temps étant dépensé ailleurs que dans ces algos. Ce ne sont que des exemples. C'est une science.

    Citation Envoyé par LGnord Voir le message
    Utiliser des threads est-il suffisant?
    Pas du tout. À la limite ce serait un peu plus "justice" parce que les deux algos, tournant en même temps, auront autant de chances l'un que l'autre de devoir se taper le gros du boulot.
    Mais les résultats seront quand même faussés.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le mieux serait de répéter les traitements plusieurs fois.

    Les premiers sont "faussé" par la compilation JIT, mais on arrive ensuite à des résultat plus stable...

    Et attention aux différences inférieurs à 32 voir 64 millisecondes.
    L'horloge n'ayant pas forcément une bonne granularité ces écarts sont insignifiant...

    a++

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Merci de votre aide.

    Je sais bien que cela est une science. Néanmoins, on me demande de produire un résultat à partir du quel des décisions importantes seront prises.

    Savez-vous ce que vaut le livre
    "Java Performance" de Charlie Hunt et Binu John?

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Par défaut
    Salut à tous,

    Mon premier post

    Dans ton cas, j'aurais essayé de mettre chaque algo dans une thread en MAX_PRIORITY, et les faire tourner une multitude de fois en incluant des sleep pour éviter au maximum d'autre tache de s'exécuter pendant que tes threads s'exécutent.
    Plus tu exécutera tes threads plus tu te rapprochera, statistiquement du résultat sur les performances.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    J'ai trouvé une solution à mon problème:
    Plus d'information:
    How to make sure no jvm and compiler optimization occurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment comparer les performances de 2 langages ?
    Par isoman dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 28/10/2008, 09h10
  2. Comparer les données de deux tables ?
    Par bicz400 dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/02/2008, 11h33
  3. Réponses: 4
    Dernier message: 26/07/2007, 10h49
  4. comparer les tailles de deux fichiers
    Par narmika dans le forum Langage
    Réponses: 13
    Dernier message: 11/04/2007, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo