Zitat von
TheAn00bis:
Was bedeutet denn Codeoptimierung eigentlich? Natürlich kann ich mir was darunter vorstellen, dass der compilierte Assemblercode so effektiv wie möglich gestalltet ist. Aber macht das so viel aus?
NicoDE hat Recht, daß es wesentlich auf den richtigen Algorithmus ankommt.
Berechnungen mit Multimedia Daten lassen sich typischer Weise aber nicht durch einen klugen Algorithmus beschleunigen.
Häufig muß man den kompletten Datenstrom betrachten: Filtereffekte, Überblenden, Tonverzerrung, OGG-Vorbis-Decodierung und Ähnliches können nicht einfach einen Teil der Daten ignorieren.
Häufig wird ist das bei schnellen Algorithmen der Fall: z.B. Clipping: spart Zeichenoperationen, Stringsuche: die Länge des Such-Strings kann verwendet werden um Bytes zu überspringen.
Trotzdem schafft man mit SSE häufig 2-4 fache Beschleunigung (für Multimedia-Daten), weil dort mehrere Datenpakete der gleichen Größe auf einmal verarbeitet werden können.
Was Gleitkommaoperationen angeht: Delphi streut zuviele fwaits in seinen Kode ein, solche Funktionen wie Sin werden als Funktionsaufruf implementiert obwohl der Prozessor direkt dafür einen Opcode anbietet. Da wäre Compilermagic sinnvoller. Dann werden oft Sachen hin und herkopiert auch wenn es unnötig ist.
Es gibt noch anderes... Vor längerer Zeit habe ich mal einen Funktionsparser geschrieben, der den Term dann in Assemblerkode umgewandelt hat. Das war jetzt nicht wirklich optimiert, aber trotzdem immer ungefähr doppelt so schnell wie der von Delphi kompilierte Kode.
C++ Kompilat war meistens noch schneller.
Allgemein, ist Delphi gegenüber klassischen C++ Compilern nicht so schlecht, ausgenommen Intel's C++ Compiler, aber der optimiert ja auch auf die neusten CPUs.