M
Michael Baeuerle
Guest
Hans-Peter Diettrich wrote:
Da fragt man sich nur, warum gängige auf Performance optimierte Software
(OpenSSL, libjpeg-turbo, Video-Codecs aller Art, etc.) teilweise in
Assembler geschrieben ist. Wenn die Compiler so toll wären, dass sie das
alles viel besser können, dann würde man sich diesen Aufwand ganz sicher
sparen.
Naheliegende Begründung: Sie sind es nicht.
Stefan Reuther schrieb:
Egal ob inline oder nicht, ein handprogrammiertes 'ntoh' holt sich vier
einzelne Bytes mit vier Maschineninstruktionen aus dem Speicher, shiftet
und addiert sie mit drei bis sechs weiteren Instruktionen und verbrät
dazu zwei bis vier Register.
Ich weiß nicht, wieso Du hier ständig mit shift und add argumentierst.
Klar, damit *kann* man die Bytes vertauschen, doch wieviele Befehle und
Register der Compiler dafür verbrät, sieht man dem Code nicht an. Wenn
der Prozessor SWAP als Maschinenbefehl unterstützt, oder sogar die
Umwandlung größerer Dateneinheiten, dann läuft das jedenfalls deutlich
effizienter als alles, was ein Programmierer in C auscodieren kann.
Bleibt man bei 'ntoh', dann kann der Compiler den jeweils besten
Maschinencode erzeugen, auch für Maschinen, die der Programmierer
garnicht kennt.
Erfahrungsgemäß leiden Programme, in denen solche Mikro-Optimierungen
vorgenommen wurden, an ganz anderen Schwächen, die der Programmierer
überhaupt nicht im Griff hatte - und völlig unabhängig von der
benutzten Programmiersprache :-(
Da fragt man sich nur, warum gängige auf Performance optimierte Software
(OpenSSL, libjpeg-turbo, Video-Codecs aller Art, etc.) teilweise in
Assembler geschrieben ist. Wenn die Compiler so toll wären, dass sie das
alles viel besser können, dann würde man sich diesen Aufwand ganz sicher
sparen.
Naheliegende Begründung: Sie sind es nicht.