Hallo Flugies,
ich hab ein Problem mit einer Regression.
Bin auf ein neues SDK (Arm, yocto) umgestiegen und mein Programm (eine
loop die ein großes Byte-Arrays aufsummiert) ist auf einmal deutlich
langsamer. (Makefile, Quelle, Optimierung alles gleich).
Es liegt soweit ich sehen kann nur am binary, dem Testprogramm, bzw wie
es compiliert wurde. Es scheint nicht am Kernel oder am rootfs zu
hängen. Also altes binary auf neuem System ist schnell. Neues binary auf
altem System: langsam...
Für mich sieht das so aus als würde der alte Compiler besser optimieren
(NEON nutzen, z.B.) und der neue nicht.
Jetzt frage ich mich: was vom SDK/Compiler steckt alles im Binary und
kann die Ursache sein. Als erstes fällt einem der GCC selbst ein.
Den habe ich getauscht, aber ohne gewünschtes Ergebnis.
Mit "strings" auf die Binaries angewendet sieht man weitere Unterschiede
in gnu-as (binutils ?) und glibc. Es könnte aber auch weitere
Unterschiede geben, wenn sich im SDK Software nur im Patchlevel
unterscheidet.
glibc selbst ist ja nicht statisch eingelinkt, würde ich ausschließen.
Große Frage: Was könnte es ausser einer Problem im gcc selbst noch sein?
Was ist bspw. für optimierten memory-Zugriff zuständig?
Den Kernel baue ich nicht mit Yocto, aber evtl trifft der Compiler eine
Annahme über irgendein fancy feature dass aber mit meinem nicht
vorhanden ist? Wie komme ich der Sache auf die Schliche? Ideen?
Gruß,
Arno
PS: Ein neues SDK zu dauern dauert bei mir ein paar Stunden. GCC hatte
ich schon probiert, heute Nacht kommen noch die alten binutils dazu.
Falls das nichts hilft weiß ich nicht so recht weiter.