Bei einem C-Prozess, der mit der höchsten Priorität ausgeführt wird, die die aktuelle Uhrzeit anfordert, wird die zurückgegebene Zeit für die Zeit angepasst, die der Code benötigt, um zum Benutzerprozessbereich zurückzukehren? Ist es veraltet, wenn du es bekommst? Als eine Messung, die die Ausführungszeit einer bekannten Anzahl von Montageanweisungen in einer Schleife nimmt und nach der Zeit davor und danach fragt, könnte sie eine Annäherung des Fehlers ergeben. Ich weiß, dass dies bei wissenschaftlichen Anwendungen ein Problem sein muss. Ich plane in naher Zukunft keine Software mit irgendwelchen Super-Collidern zu schreiben. Ich habe ein paar Artikel zu diesem Thema gelesen, aber sie geben nicht an, dass irgendeine Korrektur vorgenommen wurde, damit die Zeit, die Ihnen gegeben wird, der Zeit, die das System einliest, etwas voraus ist. Sollte ich den Schlaf über andere Dinge verlieren?Gibt es Aufrufe mit hoher Auflösung, um die Systemzeit bis zur Rückkehr der Funktion zu korrigieren?
Gibt es Aufrufe mit hoher Auflösung, um die Systemzeit bis zur Rückkehr der Funktion zu korrigieren?
Antwort
Ja, sie sind fast definitiv "falsch".
Bei Windows berücksichtigen die Timing-Funktionen nicht die Zeit, die für den Übergang in den Benutzermodus benötigt wird. Selbst wenn dies berücksichtigt wird, kann es nicht korrigieren, wenn die Funktion zurückkehrt und Ihr Code einen Seitenfehler trifft/ausgetauscht wird, bevor der Rückgabewert erfasst wird.
Im Allgemeinen sollten Sie bei der Zeitmessung eine Start- und Endzeit für eine große Anzahl von Iterationen festlegen, um diese Art von Unsicherheiten auszuschließen.
Ja, die Antwort, die Sie erhalten, wird um einen bestimmten (kleinen) Betrag abweichen; Ich habe noch nie von einer Timer-Funktion gehört, die die durchschnittliche Rückkehrzeit kompensiert, weil so etwas fast unmöglich vorherzusagen ist. Solche Dinge werden normalerweise implementiert, indem einfach ein Register in der Hardware gelesen wird und der Wert oder eine Version davon auf die geeignete Zeitskala skaliert wird.
Das sagte, ich würde nicht Schlaf darüber verlieren. Die akzeptierte Methode, um diesen Overhead davon abzuhalten, Ihre Messungen in irgendeiner signifikanten Weise zu beeinflussen, ist , um diese Timer für kurze Ereignisse nicht zu verwenden. In der Regel werden Sie mehrere hundert, tausend oder Millionen Hinrichtungen derselben Sache durchführen und durch die Anzahl der Hinrichtungen dividieren, um die durchschnittliche Zeit zu schätzen. So etwas ist normalerweise nützlicher als das Timing einer einzelnen Instanz, da es das durchschnittliche Cache-Verhalten, Betriebssystemeffekte usw. berücksichtigt.
Nein, Sie sollten den Schlaf nicht verlieren. Keine Menge von Anpassung oder andere Software Tricks werden perfekte Ergebnisse auf einem System mit einem Pipeline-Prozessor mit mehrschichtigem Speicherzugriff führen ein Multi-Tasking-Betriebssystem mit Speicherverwaltung, Geräte, Interrupt-Handler ... nicht einmal, wenn Ihr Prozess hat die höchste Priorität.
Plus, unter der Unterschied von zwei solchen Zeiten wird den konstanten Overhead sowieso aufheben.
Edit: Ich meine ja, sollten Sie über andere Dinge Schlaf verlieren :).
Die Fallstricke zu fragen mehr als eine Frage nein, ja, nein, ja ... – ojblass
Die meisten Probleme in der realen Welt mit hochauflösenden Timern werden für das Profiling verwendet, bei dem die Zeit einmal während START und einmal während FINISH gelesen wird. Also die meisten Male ~ fast ~ die gleiche Menge an Verzögerung in beide START und FINISH beteiligt. Und deshalb funktioniert es gut.
Nun, für Kernreaktoren, WINDOWS oder für so viele andere Betriebssysteme mit generischen Funktionen möglicherweise nicht geeignet. Ich denke, sie verwenden ECHTZEIT Betriebssysteme, die eine bessere genaue Zeitwerte als Desktop-Betriebssysteme geben könnten.
Ich denke, RTOS ist ein großartiger Punkt, aber in Echtzeit muss man immer noch vom Kernel-Space in den User-Space wechseln ? Sind diese Zeiten korrigiert? Deltas in der Zeit sind wahrscheinlich um den gleichen Betrag, so dass Timing Dinge wahrscheinlich in der Kategorie fällt, die Sie erwähnen. – ojblass
- 1. Bild mit hoher Auflösung - OutOfMemoryError
- 2. Anzeigen von Bild mit hoher Auflösung
- 3. Dispatching, um Funktion mit Befehlszeilenargumenten in Haskell zu korrigieren
- 4. Gibt es Algorithmen zur Erhöhung der Auflösung eines Bildes?
- 5. Drucken hoher Auflösung mit temporärer Bitmap
- 6. Bilder mit hoher Auflösung in einer uiwebview
- 7. Aufruf der Funktion nach Systemzeit
- 8. Wie erhält 'printk' die aktuelle Uhrzeit mit hoher Auflösung?
- 9. Welchen Skalierungsfaktor für die Zuordnung der Schriftgröße auf einem Monitor mit hoher Auflösung?
- 10. In jquery jqgrid, Gibt es eine Drop-down-Funktion, die bis zur Auswahl verzögert ist?
- 11. Gibt es eine Möglichkeit, die Anzahl der Aufrufe einer Funktion zu verfolgen?
- 12. Datenassimilation, um Bilder zu korrigieren
- 13. Wie kann ich die Systemzeit ausgleichen, um meine PHP-Funktion zu testen?
- 14. in R, erstellen Sie einen Algorithmus, um Tippfehler zu korrigieren
- 15. Gibt es in IDEs Tools, um die Formatierung von Kommentaren automatisch zu korrigieren?
- 16. Wie nehmen Sie Bilder mit hoher Auflösung mit Camera.takePicture()?
- 17. Gibt es eine C-Funktion, um die Verzeichnisberechtigung zu erhalten?
- 18. Fehler beim Hochladen von Videos mit hoher Auflösung auf Firebase
- 19. Resize UIImage zum Bearbeiten und Speichern in hoher Auflösung?
- 20. Stylesheets/Qt Designer-Unterstützung für Bildschirme mit hoher Auflösung?
- 21. Wie man ein Bild mit hoher Auflösung macht
- 22. Download Bild mit niedriger Auflösung anstelle von hoher Auflösung in PHP
- 23. Gibt es eine Cmake-Funktion, um .pot-Dateien zu aktualisieren?
- 24. Gibt es einen Grund, verschachtelte Aufrufe von $ (jQuery) zu haben?
- 25. Gibt es eine Möglichkeit, die Attributauflösung einer Ressource bis zur "Ausführen" -Phase zu verzögern?
- 26. SQL: Korrigieren z. 1,2,4,5,7 bis 1,2,3,4,5 (Warteschlangenbestellung)
- 27. eine Cordova Geolocation-Funktion zur Rückkehr Position
- 28. IntelliJ: Gibt es eine Intention Action, um alte Log4J-Aufrufe in neue SLF4J-Aufrufe umzuwandeln?
- 29. Rückkehr zur Funktion statt "0" oder "Variable"
- 30. Sql Abfrage, um aktuelle Systemzeit
Werden sie nicht um den gleichen Betrag falsch sein, wenn ich eine Menge von ihnen mache :( – ojblass
Der Overhead wird Lärm sein, wenn Sie genug Iterationen machen. Sie fangen Zeit am Anfang und Ende einer großen Menge (z. B. 10k) und teile die Gesamtzeit durch die Anzahl der Iterationen – Michael