Ich habe zwei verschiedene Möglichkeiten geschrieben, das Gleiche zu tun. Ich würde gerne vergleichen, welches schneller ausgeführt wird. Natürlich ist es immer möglich zu benchmarken, aber wie ein Programm-Benchmark von Maschine zu Maschine verschieden sein kann und von vielen äußeren Faktoren beeinflusst werden kann. Wie kann ich berechnen, was schneller ist ohne Bankmarkierung? Mein Gedanke wäre, dass Sie die Zeiten aller im Programm ausgeführten Operationen summieren würden. Ist das eine normale Sache zu tun? Es scheint, als ob Sie beim Benchmark-Benchmark viel Platz für Fehler haben.Berechnen Sie die theoretische Geschwindigkeit eines Programms?
Antwort
Mein Gedanke wäre, dass Sie die Zeiten aller Operationen im Programm summieren würden.
Ja, aber Sie können nicht einfach/zuverlässig diese Zeiten mit einer anderen Methode als Benchmarking herausfinden.
Das Problem besteht darin, dass diese Zeiten vom dynamischen Kontext dessen abhängen, was zuvor in Ihrem Programm (oder sogar im gesamten System) passiert ist. CPUs sind komplexe Biester, und Cache-Effekte (Daten-Cache und Befehls-Cache) sind oft ein wichtiger Faktor. So ist die Verzweigungsvorhersage. Why is it faster to process a sorted array than an unsorted array?
Statische Analyse einer kleinen Schleife in Assemblersprache ist möglich. z.B. Ich kann genau vorhersagen, wie viele Zyklen pro Iteration eine einfache Schleife auf Intel Haswell ausführen kann, unter der Annahme, dass kein Cache verpasst, basierend auf Agner Fog's microarchictecture pdf and instruction tables. Darüber hinaus geht es immer mehr um Vermutungen. Die Leistung in einer hochgradig interpretierten Sprache wie Ruby ist für Experten, die viel Zeit darauf verwenden, Code zu optimieren, etwas vorhersehbar, aber fast sicher nicht "das wird diese Anzahl von Mikrosekunden benötigen", nur "das ist wahrscheinlich ein bisschen oder viel schneller als das ".
Die algorithmische Komplexität gibt Ihnen einen theoretischen Geschwindigkeitsvergleich für einen Algorithmus.
Ihre Frage bezieht sich auf ein beliebiges Programm, aber ein Programm ist mehr als eine Sammlung von Algorithmen.
Die Ausführungsgeschwindigkeit eines Programms hängt von dem Kontext ab, in dem es ausgeführt wird (I/Os, Betriebssystem (Multitasking oder nicht), Hardware).
Also gibt es keine andere Methode als Statistiken über eine Reihe von Messungen, die eine Definition für die Benchmark ist.
- 1. Berechnen Geschwindigkeit mit Javascript
- 2. Download-/Upload-Geschwindigkeit berechnen
- 3. berechnen Avg Geschwindigkeit
- 4. Berechnen AJAX Download-Geschwindigkeit
- 5. So berechnen Sie eine Geschwindigkeit für SlideToggle()
- 6. So rufen Sie die Hauptmethode eines Scala-Programms von der Hauptmethode eines Java-Programms auf?
- 7. Wie testen Sie die Geschwindigkeit für Socket?
- 8. HKHealthKit Watch OS - Geschwindigkeit berechnen oder 'Tempo'
- 9. So berechnen Sie die Größe eines UIFont
- 10. Berechnen Sie die Fläche eines Polygons
- 11. Berechnen Sie die letzte DayOfWeek eines Monats
- 12. Berechnen Sie die Summe eines SUMME
- 13. Berechnen Sie die Fläche eines Vierecks
- 14. Berechnen der Geschwindigkeit von 10GBASE-T
- 15. Gibt es eine Möglichkeit, die Größe des Canvas eines Programms mit C++ zu berechnen?
- 16. Codierung eines EXE-Programms
- 17. Wie man die Wachstumsrate eines Programms von Hand grafisch darstellt?
- 18. verstecken Sie das Konsolenfenster eines C-Programms
- 19. Gibt es eine Möglichkeit, die Geschwindigkeit einer ScrollView zu berechnen?
- 20. Finden Sie Funktionen eines Nicht-Microsoft-Programms
- 21. Halten eines Batch-Programms
- 22. Wie testen Sie die Leistung eines Prolog-Programms?
- 23. Messen Sie die Leistung eines gemeinsamen Lisp-Programms
- 24. So finden Sie die Speicherauslastung eines Programms in Haskell
- 25. So messen Sie die Größe eines C# -Programms
- 26. So steuern Sie die Geschwindigkeit eines automatischen Bildlaufs in uitextview
- 27. Ausführungszeit eines Programms
- 28. Die Funktionen eines anderen Programms aufrufen?
- 29. Schreiben eines modularen Programms
- 30. Ausgabe eines Multithread-Programms
Dies ist die Studie von [algorithmische Komplexität] (https://en.wikipedia.org/wiki/Analysis_of_algorithms). – Phylogenesis
Ich denke, das ist ziemlich schwierig für ein Ruby-Programm, da Sie gründliche Kenntnisse darüber benötigen, wie jede Operation interpretiert wird, welche Objekte erstellt werden und so weiter. Ich denke, Benchmarking mit vielen Iterationen ist der beste Weg zu gehen. – Albin
Auch Benchmarking ist der Standard, oder? – thesecretmaster