2014-07-18 4 views
0

J'ai écrit un programme en Java et j'en ai fait un test, qui teste le programme quelques milliards de fois avec différentes données de test. Le programme lui-même fait seulement le calcul et travaille avec des chaînes (je ne peux pas fournir le code source, désolé). Pour accélérer les choses, il utilise un pool de threads avec 15 threads sur un CPU 8 Core avec 16 threads, où il faut jusqu'à 12 heures pour terminer.Java énorme Différence de performance avec le même test

Le problème est que les performances de l'ensemble du test diffèrent du début à la fin. Après un peu de réchauffement, j'obtiens normalement 3 millions de tests par seconde, mais parfois seulement 2 millions de tests par seconde. Cette différence de performance reste pendant tout le temps de test (8-12 heures), donc cela n'a rien à voir avec le JIT. Si j'annule un test lent et que je l'exécute à nouveau avec exactement la même ligne de commande, il y a de bonnes chances que le second essai soit plus rapide. Jusqu'à présent, j'ai remarqué une différence allant jusqu'à 50% du début à la fin. Est-ce que je fais quelque chose de complètement faux ou quelle pourrait être la cause?

+0

peut être à cause de la mise en cache –

+0

@Nachiket mais pourquoi la performance devrait-elle être différente sur 8 heures? –

Répondre

0

Cela dépend beaucoup de la complexité de l'algorithme que vous utilisez. Je comprends que vous ne pouvez pas poster le code, mais pouvez-vous mentionner un algorithme célèbre utilisé?

+0

C'est un encodeur et un décodeur. Je ne peux pas vraiment en dire beaucoup sur l'algorithme, je l'ai seulement traduit de C vers Java et lui ai écrit un test complet (encoder quelque chose, décoder le résultat, vérifier si le décodé est égal à l'entrée). Il travaille avec le calcul polynomial. Mais pourquoi le même algorithme devrait-il être 50% plus lent ou plus rapide au hasard sur l'ensemble du test? L'utilisation du processeur est toujours la même. –

Questions connexes