Suche einfachen Algorithmus zur Performance Benchmarking

  • Allgemein

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von faxe1008.

    Suche einfachen Algorithmus zur Performance Benchmarking

    Hi,

    Ich habe gerade den Compiler/Interpreter meiner eigenen kleinen Scriptsprache fertiggestellt. Nun möchte ich mich in das Feld der Compileroptimierung einarbeiten.
    Hierzu bräuchte ich einen Algorithmus, der aus möglichst einfachen Komponenten besteht, den man gut für Performancevergleiche verwenden kann.

    Damit ihr ne Ahnung habt, was umsetzbar ist:
    • For-Schleife, While-Schleife
    • If-Abfragen
    • Variablen vom Typ double and string
    • Operatoren: +,-,*,/,%
    • Vergleichsoperatoren: ==, >, <, !=
    Die Sprache hat einen einfachen linearen Verlauf, es gibt keine Funktionen (also keine Rekursion im Algo möglich), Anweisungen werden von oben nach unten durchgearbeitet.
    Wär cool wenn jemand von euch was einfällt.

    8-) faxe1008 8-)
    Ich würde auf jeden Fall eine Sammlung verschiedener Tests nehmen, um nicht überspezifisch zu optimieren.
    Abgesehen davon würde ich jetzt einfach mal Faktorisierung und Primzahltests als Benchmarks vorschlagen.
    Habe den Lucas Primzahltest mal implementiert (Quelle: rosettacode.org/wiki/Category:C_sharp):

    Quellcode

    1. ​for(var double p=1; p<200; p=p+1)
    2. if(p%2==0)
    3. if(p==2)
    4. output("YES: " + p);
    5. else
    6. output("NO: " + p);
    7. end
    8. else
    9. var double root = 4;
    10. for(var double i=0; i<10; i=i+1)
    11. root=(1/2)*(root+(p/root));
    12. end
    13. for(var double i=3; i<root+1; i=i+2)
    14. if(p%i==0)
    15. output("NO: "+p);
    16. end
    17. end
    18. var double mp=1;
    19. for(var double e=0;e<p;e=e+1)
    20. mp=mp*2;
    21. end
    22. mp=mp-1;
    23. var double s=4;
    24. for(var double i=3; i<p+1; i=i+1)
    25. s = (s*s-2)%mp;
    26. end
    27. if(s==0)
    28. output("YES: " + p);
    29. else
    30. output("NO: " + p);
    31. end
    32. end
    33. end

    Der funktioniert allerdings nur für Zahlen kleiner 20 weil double ne zu geringe Genauigkeit für z.B. 2^24.
    Hat jemand ne Alternative, die mit dem double Datentyp auskommt?

    Quellcode


    8-) faxe1008 8-)