Rotstich durch Fehler in Intels C++-Compiler

Intels aktueller Compiler erzeugt unter Umständen fehlerhaften Code, der beispielsweise bei Povray zu Falschfarben führt.

In Pocket speichern vorlesen Druckansicht 102 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Yue Shi Lai
  • Herbert Schmid

Übersetzt man Programme mit der Optimierung -ipo, so erzeugt Intels aktueller C++-Compiler mitunter fehlerhafte Kompilate. Der Raytracer Povray färbt dadurch beispielsweise einzelne Bilder falsch ein. Der Fehler tritt sowohl mit der Windows- als auch mit der Linux-Version der Compilers auf.

Um den Ablauf zu beschleunigen, zersägt der Compiler bei der Optimierung -ipo (inter procedural optimization) den vom Programmierer geplanten Programmcode und setzt ihn neu zusammen. Kleinere Unterprogramme werden hierbei direkt, also ohne Call/Return, in die Programme eingesetzt. Normalerweise sollte der so umgebaute Code zu den gleichen Ergebnissen führen – doch das gelingt Intels Compiler offenbar nicht immer.

Solche Auflösung der ursprünglichen Programmstruktur erschwert zudem erheblich die Fehlersuche. Mit -ipo übersetzte Programme lassen sich daher nur äußerst mühsam debuggen. Man sollte auf diese problematische Optimierung also lieber verzichten, denn auch ohne -ipo erzeugt Intels Compiler sehr flotten Code und das nicht nur für Intel-Prozessoren: So erzielte Bram Stolk auf seinem Notebook mit Transmeta-Prozessor 28 Prozent Beschleunigung gegenüber Kompilaten, die er mit der GNU Compiler Collection erstellte. (Yue Shi Lai) / (hes)