2009-06-29 8 views
4

Von Zeit zu Zeit hört man Geschichten, die zeigen sollen, wie gut jemand auf etwas ist, und manchmal hört man von dem Typ, wie es in der Codeoptimierung ist, dass er seine Verzögerungsschleife optimiert.Ist "die optimierte Verzögerung" ein Mythos oder ist es real?

Da dies wirklich klingt, ist es eine seltsame Sache zu tun, da es viel besser ist, einen "Timer-Interrupt" statt einer optimierten buzy warten, und niemand tendiert dazu, Ihnen den Namen des optimierenden Hackers zu sagen.

Das hat mich fragen lassen, ob es ein städtischer Mythos ist oder ist es real?

Was sagst du, Realität oder Fiktion?

Dank Johan


aktualisieren: Es klingt wie ShuggyCoUk auf etwas, Wunder war, wenn wir ein Beispiel finden.

Update: Nur ein wenig Klärung, diese Frage ist über die "Verzögerung" Funktion selbst und wie das implementiert ist, nicht wie und wo Sie es nennen. Und was dieser Zweck war, und wie dieses System besser wurde.

aktualisieren: Es ist kein Mythos ist, scheint die Jungs

Dank ShuggyCoUk

+3

Ich schrieb eine Antwort, aber da es geschlossen ist, hinterlasse ich einen Kommentar: Das hat mehr als einen Kern der Wahrheit ... Spin warten kann * viel * besser sein als ein Signal-basierte Interrupt oder eine Ausbeute . Sie tauschen etwas Durchsatz für stark reduzierte Latenz. Oft ist dies für ein Betriebssystem selbst von entscheidender Bedeutung. Sie erlauben sich die Freiheit, Operationen zu machen, die innerhalb eines Interrupt-Handlers nicht möglich sind, zum Beispiel die Speicherzuweisung. – ShuggyCoUk

+0

Sie können richtige Leerlaufbefehle verwenden, die: Teile des Kerns ausschalten, den Stromverbrauch/die Wärmeableitung verbessern und sogar andere Kerne schneller laufen lassen. In Hyper Thread-basierten CPUs erlauben Sie dem anderen logischen Thread, die gesamte CPU-Pipeline zu verwenden, während Sie drehen. Sie können eine deutlich feinere Kontrolle über das abgefragte Intervall erhalten, da Sie die Anzahl der Zyklen im Wesentlichen messen können. Deshalb lassen Sie in den meisten Fällen jemand anderen die Spin-Warteschleife schreiben ... – ShuggyCoUk

+0

Ich hatte den Verdacht, dass sie ein buzzy warten in etwas, das sich wie ein buzzy warten, aber in der Tat eine Art Schlafmodus verwandelt . – Johan

Antwort

4

Dieses mehr als ein Kern der Wahrheit über sie hat ...

Spin Warte kann als ein Signal basierend Interrupt oder einer Ausbeute viel besser sein.

  • Sie tauschen etwas Durchsatz für stark reduzierte Latenz.
    • Oft ist dies von entscheidender Bedeutung innerhalb eines Betriebssystems.
  • Sie lassen Sie sich die Freiheit Operationen nicht möglich innerhalb eines Interrupt-Handler
    • Speicherzuordnung zum Beispiel zu tun.
  • Sie können eine deutlich feinere Kontrolle über das Intervall erhalten, da Sie die Anzahl der Zyklen im Wesentlichen messen können.

Allerdings sind Spin Wartezeiten schwierig, um richtig zu machen.

  • Wenn Sie können Sie verwenden die richtige Ruhe Anweisungen, die verwendet werden soll:
    • mit Strom versorgen unten Teile des Kerns, die Verbesserung der Energieverbrauch/Wärmeableitung und selbst wenn man andere Kerne schneller gehen.
    • In Hyper Thread-basierten CPUs Sie allow the other logical thread to use the full CPU pipeline while you spin.
    • eine Anweisung, die Sie könnten denken war ein No-Op könnte dazu führen, dass die CPU sie außer Betrieb über die Super-Skalar-Ausführungseinheiten ausführen. Der sich ergebende Code kann unvorhergesehene Out-of-Order-Artefakte erhalten, die die CPU zwingen, eine große Anstrengung in Bezug auf Stops und Speicherbarrieren zu unternehmen, die unerwünscht sind.

diesem Grund sollten Sie jemand anderes schreiben die Spin-Warteschleife für Sie ..

in den meisten Fällen lassen

In Bezug auf einige Zitate mit PAUSE für Spin wartet:

  • PostGresSQL
  • Linux
    • Siehe auch die Anmerkung, dass dies auf nicht P4 besser ist, als auch aufgrund der Reduzierung Leistung
2

Die Version, die ich immer gehört, zu existieren habe eine Gruppe von Hardware-Programmierer ist, die eine spezielle Anweisung entwickelt, die optimierte Leerlauf (nicht beschäftigt) Schleife ihres Betriebssystems. Dies wird in Kernighan & Pike's bookDie Praxis der Programmierung erwähnt, aber auch dort sie zugeben, dass es ein Urban Myth sein kann.

+0

Extra Kudos für die Erwähnung von TPOP - ein ausgezeichnetes Buch. –

0

Ich habe Geschichten von Programmierern gehört, die absichtlich lange Verzögerungsschleifen früh in Projekte einfügten und sie später als "Optimierungen" entfernten, um Management zu beeindrucken. Habe nie herausgefunden, ob die Geschichten apokryph waren oder nicht.

+0

Aber das ist eine andere Art von "Trick", das heißt, die Projektmanager von ihrem Rücken zu halten ... – Johan

+0

Aber das ist lustig du;) – Johan

+0

Ja. Ich habe mich gefragt, ob die Geschichten miteinander verwandt sind. – Nosredna

Verwandte Themen