Im bmark Programm wird die Ausführungszeit wie folgt berechnet:Ausführungszeit in Miracl Bibliothek
Zum Beispiel für EC Punktmultiplikation:
#define MIN_TIME 10.0
#define MIN_ITERS 20
start=clock();
do {
ecurve_mult();
iterations++;
elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
} while (elapsed<MIN_TIME || iterations<MIN_ITERS);
elapsed=1000.0*elapsed/iterations;
printf("ER - %8d iterations",iterations);
printf(" %8.2lf ms per iteration\n",elapsed);
Die Frage ist: Warum nicht einfach verwenden:
start=clock();
ecurve_mult();
elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
printf("%f\n",elapsed*1000.0);
mit anderen Worten, was ist der Zweck der Verwendung MIN_TIME und MIN_ITERS
NB: Die zwei Codes geben unterschiedliche Ausgänge.
Danke Sasha, aber was ist mit der Anweisung: verstrichen = 1000,0 * abgelaufen/Iterationen; – zof
@zof Also hast du eine hoffnungslos ungenaue Stichprobe von 1 mal 1000 multipliziert. Jetzt hast du einen Wert, dessen Zuverlässigkeit gleich klein ist, aber 1000x größer. Immer noch nicht nützlich! Ist Ihnen klar, dass mehrere Samples und Mittelungen erforderlich sind, um nützliche Schätzungen zu erhalten, denn wenn Sie nur einmal oder nur eine kleine Anzahl von Malen ausführen, ist es anfälliger für Zufallsfehler oder unvorhersehbare Dinge wie, ich weiß nicht, Ihre Computer, der sich dafür entscheidet, eine Hintergrundaufgabe gleichzeitig auszuführen? Ich empfehle Ihnen dringend, einige rudimentäre statistische Begriffe zu lesen, vor allem _sample size_. –
... Ich meine, das ist eine Art Parallele zu der Uhrauflösung, auf die Sasha zu Recht hingewiesen hat, aber beide zu berücksichtigen, ist gleichermaßen wichtig, um jedem Benchmark einen Nutzen zu verleihen. –