Benchmarking ist eine Kunstform an und für sich, in der Regel einfach zu manipulieren, um die Ergebnisse zu zeigen, was auch immer Sie wollen. Ich würde nicht erwarten, dass die Compiler dieselben Ergebnisse mit Ausnahme von sehr kleinen Testfällen generieren, und manchmal sind ihre Ergebnisse in diesen kleinen Testfällen identisch oder manchmal sehr unterschiedlich, da Ihr Test eine Optimierung, die ein Compiler kennt/verwendet, und eine andere nicht.
Früher habe ich solche Dinge (Compiler-Performance-Nummern) zum Beispiel mit dhrystone im Auge behalten, aber im Fall von bekannten Benchmarks (nicht dass dhrystone viel mehr bedeutet, sondern andere) können Sie feststellen, dass sich einige Compiler darauf einstellen unter Benchmarks gut aussehen, vielleicht auf Kosten von etwas anderem.
Es gibt keine richtige Antwort, es gibt keine universellen "besten", es ist alles im Auge des Betrachters, Sie. Welches Werkzeug ist einfacher für Sie, was gefällt Ihnen besser, sei es für die GUI oder schöne Farben oder Soundkartensounds oder was auch immer. Und geh von dort. Der Gnu-Compiler im Allgemeinen für Anwendungen, die ich getestet habe, produziert keinen Code als "schnell", was meinen Benchmark im Vergleich zu den anderen darstellt, aber es gibt viel mehr Leute, die die kostenlosen Gnu-Tools verwenden, so dass die Unterstützung dafür wesentlich breiter ist aufgrund der Anzahl der Webseiten und Foren und Beispiele. gnu wird auch keine Größenbeschränkung haben, aber es erfordert vielleicht mehr lernen oder was auch immer zu tun ...
Die Cortex-ms sind in die armv6m und armv7m Familien aufgeteilt, die v6m (cortex-m0) nur haben eine kleine anzahl von thumb2-erweiterungen, die armv7m haben etwa 150 thumbv2-erweiterungen zu thumb, also musst du wissen, was deine tools unterstützen und nicht die falschen sachen auf dem falschen chip verwenden. Dann können und werden die Compiler, wenn sie das alles wissen, unterschiedliche Befehlsmischungen aus demselben Quellcode erzeugen. Innerhalb des gleichen Compilers oder der gleichen Familie mit verschiedenen Befehlszeilenoptionen können/werden Sie erheblich unterschiedlichen Code erhalten. Und darüber hinaus mit einem Cortex-M4 mit Cache auf, wenn Sie einen mit so etwas haben, abhängig davon, wie der Code in den Cache-Zeilen liegt, können Sie sehr unterschiedliche Leistung erhalten, so Benchmarking ist ein Forschungsprojekt für jeden Blob von C-Code, den Sie benchmarken möchten. Der Leistungsbereich innerhalb eines einzelnen Compilers kann einen anderen Compiler überschatten oder die Überlappung kann ausreichen, um keine Rolle zu spielen.
Wenn Sie Zugang zu den Werkzeugen haben, können Sie sich beruflich Mehrwert verschaffen, indem Sie lernen, die konkurrierenden Werkzeuge zu verwenden und in einen Job zu gehen und in Ihrem Job wählen, was Sie als das richtige Werkzeug für den Job oder den Gang ansehen in ein Kieler Haus und in der Lage sein, sofort oder ein Gnu-Haus zu arbeiten und sofort zu arbeiten. Wo Sie einen Job verlieren könnten, wenn Sie nur Gnu sind und der Job für ein Kieler Haus ist.
Geht es Ihnen hauptsächlich ums Lernen? Warum interessiert dich dann die Leistung des Compilers? Linaro und Yagarto sind zwei Versionen von gcc (verschiedene Bibliotheken). Ich würde den letzten [den du verlinkt hast] (https://launchpad.net/gcc-arm-embedded) auswählen. Speed / Size-Nummern basieren immer auf dem synthetischen Benchmark. Machen Sie Ihren Code und kompilieren Sie ihn mit verschiedenen Compilern. Im Allgemeinen spiegeln die Code-Ergebnisse die Ergebnisse mehr wider als der Compiler. Dh der gleiche Algorithmus mit unterschiedlicher 'C'-Implementierung. –
Mein Hauptanliegen ist natürlich zu lernen, aber Leistung ist keine schlechte Sache zu erreichen (und eine Menge Spaß zu arbeiten). Allerdings werde ich Ihrem Vorschlag folgen, den gleichen Code zu verschiedenen Compilern zu nehmen, und ich werde überprüfen, welcher mir vertrauter wird. Danke für den Kommentar –
Die Frage ist auch außerhalb eines Lernkontexts gültig, also bitte nicht mit "es ist egal, welche Sie wählen, wenn Sie lernen". Ich lerne nicht, aber meine Frage ist sehr ähnlich und ich würde zum Beispiel gerne wissen, ob die kommerziellen Optionen signifikante Leistungs - oder Codegrößenunterschiede gegenüber der GNU ARM Toolchain bieten. –