Prozessor-Bugs und Compiler-Workarounds



  • Dies ist wohl eher eine theoretische Frage, aber ich habe lange nach einer Antwort gesucht und keine gefunden.
    Ist es immer noch so (wie es früher z.B. beiom P3 war) dass einige Befehle des Prozessors fehlerhaft sind und deswegen nicht benutzt werden können? Oder können diese mittlerweile durch Mikrocode-Patches (durch das BIOS) behoben werden?
    Wenn nicht, müssen Compiler dann spezielle Workarounds benutzen, die die entsprechenden Befehle umgehen?

    Es wäre sehr nett wenn jemand eine Antwort darauf hätte.



  • I.d.R. beachten die Compiler-Hersteller die Prozessor bugs (soweit bekannt).
    Die vielen Bugs sind aber gut dokumentiert...

    z.B. für PIII sind es z.Z: ca. 100 Bugs:
    http://www.intel.com/design/pentiumiii/specupdt/244453.htm



  • Ja wie sieht das aus, zum Teil werden ja optimierte Befehle (die defekt sind) "umgangen", d.h. die Performance verschlechtert sich auf Prozessoren die diese Bugs nicht haben. Werden die Workarounds in der kompilierten Datei nur ausgeführt wenn es sich um einen betroffenen Prozessor handelt?
    Sonst müssten aktuelle kompilierte Programme ja Workarounds für alle(!) unterstützten Prozessoren enthalten, das wäre doch ein bisschen viel oder? Und wie oben gesagt wären optimierte Befehle ja zum Teil nicht nutzbar.



  • KyroMaster schrieb:

    Ja wie sieht das aus, zum Teil werden ja optimierte Befehle (die defekt sind) "umgangen", d.h. die Performance verschlechtert sich auf Prozessoren die diese Bugs nicht haben. Werden die Workarounds in der kompilierten Datei nur ausgeführt wenn es sich um einen betroffenen Prozessor handelt?

    Das hängt vom Compiler ab. MS-VC macht aber keinen "dynamischen" Code.

    KyroMaster schrieb:

    Sonst müssten aktuelle kompilierte Programme ja Workarounds für alle(!) unterstützten Prozessoren enthalten, das wäre doch ein bisschen viel oder? Und wie oben gesagt wären optimierte Befehle ja zum Teil nicht nutzbar.

    Die meisten Bugs treten sowieso nie auf, da diese spezielle Konstelation von einem normalen Programm nie verwendet wird. (ausser ganz kritische Fehler, welche aber dann auch in den Medien hochgepuscht werden! oder hast Du vom PIII die 100 (unwichtigen) Bugs in den Medien gesehen!?)



  • Danke für die Infos, ich habe lange im Netz gesucht aber nichts wirklich hilfreiches gefunden.

    Nach dem was du schreibst treten also die meisten Bugs nicht auf, da sie nicht in Compilerkonstrukten eingesetzt werden, und die die auftreten müssen vom Compiler umgangen werden (der Compiler muss Workarounds einbauen).
    Wie läuft das in der Praxis, ich meine die x86-Architektur ist ja abwärtskompatibel, d.h. wenn ein Hersteller eines professionellen Programmes ein Programm herausbringt, das auf allen Prozessoren der letzten (sagen wir) 10 Jahre läuft, müssen alle Bugs umgangen werden.
    Da würde doch mit zunehmender Entwicklung eine immer längere Liste von Bugs entstehen, und der Compiler müsste immer mehr Workarounds implementieren und kann einige Befehle nicht nutzen.
    Das hier würde mich wirklich interessieren, ist das tatsächlich so, oder werden die "kritischen" Bugs durch Mikrocode-Patches behoben bzw die Fehler fallen unter den Tisch weil Compiler den dazugehörigen Code nicht ausgeben?
    Wenn man die Bugs einfach unbeachtet lässt lassen sich ja keine besonders zuverlässigen Systeme mit der Architektur erstellen.



  • Nur als Anmerkung: Es lassen sich mit keinen elektronischen Systemen 100%ig zuverlässige Systeme entwicklen. Rate mal warum in der Raumfahrt / Luftfahrt immer min. 2-5 Rechner für die gleichen Rechenaufgaben eingesetzt werden? Das Ergebnis ist dann ein Mehrheitsentscheid! Damit kann man dir Probleme zwar mindern, aber auch nicht 100%ig lösen.
    Auch setzen die heutigen Compiler bestimmte CPUs voraus und können deswegen alte Zöpfe abschneiden.


Anmelden zum Antworten