J'essaie de comparer la puissance de calcul du CPU avec une fonction simple, sans ajouter d'énormes frameworks avec des milliers de lignes et quelques MB à mon projet.Analyse comparative de la puissance de calcul du processeur
J'ai développé cet exemple de code. C'est un qui fait 100 fois une énorme tâche. Cette énorme tâche (fonction benchmark()) consiste en un temps qui fera un calcul mathématique et augmentera un compteur sur une période de 100ms. Chaque 100ms il est imprimé dans le journal le nombre de fois que la fonction benchmark() a terminé le calcul mathématique complexe. OK, donc, j'ai imprimé 100 fois sur l'écran ce calcul.
Les premières fois que j'exécutent la référence que j'obtenir des résultats corrects, plus ou moins les mêmes résultats du journal pour chacune des 100 itérations de l'indice de référence:
08-18 13:09:52.806 26543-27748/com.mytestapp D/XXXX: Iteration: 0 Result: 118200
08-18 13:09:52.906 26543-27748/com.mytestapp D/XXXX: Iteration: 1 Result: 171580
08-18 13:09:53.006 26543-27748/com.mytestapp D/XXXX: Iteration: 2 Result: 170654
08-18 13:09:53.106 26543-27748/com.mytestapp D/XXXX: Iteration: 3 Result: 168676
08-18 13:09:53.206 26543-27748/com.mytestapp D/XXXX: Iteration: 4 Result: 168372
08-18 13:09:53.306 26543-27748/com.mytestapp D/XXXX: Iteration: 5 Result: 165558
08-18 13:09:53.406 26543-27748/com.mytestapp D/XXXX: Iteration: 6 Result: 171368
08-18 13:09:53.506 26543-27748/com.mytestapp D/XXXX: Iteration: 7 Result: 171680
08-18 13:09:53.606 26543-27748/com.mytestapp D/XXXX: Iteration: 8 Result: 171516
08-18 13:09:53.706 26543-27748/com.mytestapp D/XXXX: Iteration: 9 Result: 171598
Mais après quelques exécutions le nombre commence à diminuer, et je ne comprends pas pourquoi:
08-18 13:10:20.850 26543-28161/com.mytestapp D/XXXX: Iteration: 1 Result: 94320
08-18 13:10:20.951 26543-28161/com.mytestapp D/XXXX: Iteration: 2 Result: 90364
08-18 13:10:21.051 26543-28161/com.mytestapp D/XXXX: Iteration: 3 Result: 94240
08-18 13:10:21.152 26543-28161/com.mytestapp D/XXXX: Iteration: 4 Result: 93676
08-18 13:10:21.252 26543-28161/com.mytestapp D/XXXX: Iteration: 5 Result: 91554
08-18 13:10:21.352 26543-28161/com.mytestapp D/XXXX: Iteration: 6 Result: 94358
08-18 13:10:21.452 26543-28161/com.mytestapp D/XXXX: Iteration: 7 Result: 90954
08-18 13:10:21.552 26543-28161/com.mytestapp D/XXXX: Iteration: 8 Result: 94874
08-18 13:10:21.652 26543-28161/com.mytestapp D/XXXX: Iteration: 9 Result: 94464
Si j'attends quelques minutes et réessaye, les résultats augmentent à nouveau à ses valeurs normales.
Pourquoi ce comportement? Comment l'éviter et obtenir des résultats de benchmark toujours corrects?
Ceci est mon exemple de code:
public void benchmarkIterator(){
int result = 0;
int iterations = 100;
for (int i=0; i<iterations; i++){
result = benchmark();
Log.d("XXXX", "Iteration: "+i+" Result: "+result);
}
}
....
public int benchmark(){
long startTime = System.currentTimeMillis();
int count=0;
double aux=0;
while((System.currentTimeMillis()-startTime)<100){
count++;
double d = 7777777777d;
aux = 0;
aux=aux+(int)(aux+Math.sin(d)*Math.cos(d));
}
return count;
}
Juste pour confirmer ma conclusion, un résultat plus grand signifie un processeur plus rapide à droite? Je veux dire plus d'opérations mathématiques ont été faites dans ce 100 MS? pourrait-il être une optimisation ou des trucs JIT? – Yazan
le résultat le plus élevé, le calcul mathématique le plus rapide a ce cpu – NullPointerException
Coult il surchauffe et une sorte de throtling thermique? – X3Btel