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.