Eine Codebasis für zwei Architekturen: x86- und ARM-Softwareentwicklung mit Qt
Die praktischen Aspekte der Migration von x86 zu ARM und der plattformübergreifenden Softwareentwicklung basierend auf dem Qt-Framework sind ein aktuelles Thema für unsere Kunden – Softwarehersteller und ARM-basierte Gerätehersteller, die die effizientesten Entwicklungsmethoden verfolgen und mit minimalem Aufwand so viele Geräte und Plattformen wie möglich abdecken möchten. Lassen Sie uns dieses Thema anhand unserer Fallstudien behandeln.
Viele batteriebetriebene Geräte, insbesondere KI-gestützte Smartphones und Notebooks globaler Anbieter, wechseln von der traditionellen x86-Architektur zu dem energieeffizienteren ARM, das eine höhere Leistung und längere Laufzeiten ohne Netzanschluss bietet.
Die neuen ARM-basierten Copilot+ PCs, die von Windows in diesem Jahr angekündigt wurden, sind eine weitere Veränderung auf dem globalen Markt für persönliche Gadgets. Dieser Trend erfordert die Anpassung bestehender und neuer Software für beide Architekturen — x86 und ARM.
Die Migration von Software von x86 zu ARM ist ein komplexer Prozess, der die Anpassung des Codes, die Lösung von Kompatibilitätsproblemen und die Leistungsoptimierung umfasst. Dies unterscheidet sich von der plattformübergreifenden Softwareentwicklung, bei der die Software auf x86 und ARM von einer einzigen Codebasis aus betrieben werden kann. Eine Lösung, mit der Sie nicht mehr zwei separate Codebases erstellen müssen - das Qt-Framework für die Entwicklung plattformübergreifender Anwendungen.
Die Software-Ingenieure bei Promwad haben umfangreiche Erfahrungen in der Migration von Software und der Erstellung von Qt-basierten Lösungen gesammelt, um die gängigen Architekturen, Betriebssysteme und Geräte unserer Kunden zu bedienen.
Dank unserer offiziellen Partnerschaft mit der Qt Group, verwenden wir das Qt-Framework für die Implementierung der GUI und die gesamte Geschäftslogik der App mit Nicht-GUI-Modulen. Unser Toolkit umfasst Bibliotheken aus dem Qt-Framework (Boost und andere Bibliotheken, abhängig vom Projektbereich) für die Implementierung der Geschäftslogik, Figma und Qt Design Studio für UX/UI-Design, Bibliotheken und Tools für die Testautomatisierung, einschließlich Squish, sowie Azure/AWS-Cloud-Infrastruktur für automatisierte Pipelines.
Qt unterstützt ARM als Zielarchitektur seit über 10 Jahren und ermöglicht es uns, einmal geschriebenen Code auf mehreren Architekturen und Plattformen mit minimalem oder sogar keinem plattformspezifischen Code einzusetzen. Zum Beispiel wurden einige unserer jüngsten Projekte von x86 mit C++/WinAPI, .NET und Objective-C/Cocoa auf plattformübergreifendes und modernes C++ mit dem Qt-Framework migriert.
Dieser Artikel befasst sich mit den Vorteilen von ARM für batteriebetriebene Geräte, Qt für die plattformübergreifende Entwicklung und die Besonderheiten der Konvertierung von x86 zu ARM — ein Überblick über die wichtigsten Punkte für Softwareanbieter und Gerätehersteller, die durch plattformübergreifende Entwicklung die Fristen und Budgets reduzieren möchten.
Inhaltsverzeichnis
1. Warum ARM für batteriebetriebene Geräte?
2. Warum haben wir uns für Qt für die plattformübergreifende Entwicklung entschieden?
3. Schritt-für-Schritt x86-zu-ARM-Portierung
4. Komplexitäten der x86-zu-ARM-Migration und wie wir sie lösen
Der ARM-basierte M3-Prozessor, entwickelt von Apple Inc., treibt das MacBook Air, MacBook Pro, Mac Mini, iMac und iPad Pro an. Quelle: apple.com
1. Warum ARM für batteriebetriebene Geräte?
- Effizienz. ARM-Prozessoren bieten bemerkenswerte Leistung pro Watt. Diese Effizienz ermöglicht es den Geräten, hohe Rechenleistung zu erreichen und gleichzeitig den Energieverbrauch zu optimieren.
- Leistung. Die neuesten ARM-Prozessoren, wie Apples M3 und Qualcomms Snapdragon, haben gezeigt, dass ARM in verschiedenen Benchmarks x86 übertreffen kann. Anwendungen, die für ARM kompiliert und optimiert sind, laufen oft schneller und effizienter, was die höhere Leistung der Architektur verdeutlicht.
- Akkulaufzeit. Einer der bedeutendsten Vorteile der ARM-Architektur- Prozessoren ist ihre Fähigkeit, die Akkulaufzeit zu verlängern und die Wärmeentwicklung zu reduzieren, was die Herstellung leichterer und dünnerer Geräte ermöglicht.
2. Warum haben wir uns für Qt für die plattformübergreifende Entwicklung entschieden?
Qt ist ein plattformübergreifendes Entwicklungs-Toolkit, das Windows, macOS, Linux, Android und iOS unterstützt. Es ist besonders relevant für die Umstellung von x86 auf ARM, da es Entwicklern ermöglicht, einmal geschriebenen Code auf verschiedenen Architekturen und Plattformen mit minimalem oder gar keinem plattform- und architekturspezifischen Code einzusetzen.
Der x86-zu-ARM-Portierungsprozess mit Qt umfasst Codeüberprüfung, Anforderungsanalyse, Code-Anpassung und -Optimierung, Erstellung oder Anpassung eines Testpakets sowie Bereitstellung und Wartung. Bei Promwad bewältigen wir alle diese Schritte erfolgreich für unsere Kunden, dank unserer umfangreichen Erfahrung mit erstklassigen Tools und Frameworks, die uns eine effiziente Durchführung von Design, Entwicklung und Qualitätssicherung ermöglichen.
Das Qt-Framework erleichtert die Entwicklung von Anwendungen für viele Architekturen und Plattformen, wie ARM auf Windows, Mac, Linux, mobilen und eingebetteten Betriebssystemen. Zusammen mit einer Vielzahl von Bibliotheken bietet es eine umfangreiche Werkzeugsammlung, wie eine IDE (Qt Creator), einen effektiven Benutzeroberflächen-Designer (Qt Design Studio mit Figma-Brücke) und ein fortschrittliches Testwerkzeug (Squish).
Das plattformübergreifende Softwareentwicklung-Toolset von Qt Group. Quelle: qt.com
3. Schritt-für-Schritt x86-zu-ARM-Portierung
Wir haben Erfahrung in der Migration von x86-Architektur zu ARM gesammelt, die zu einem transparenten Fünf-Schritte-Prozess geführt hat. Dieser Prozess unterstützt Anwendungen, die in einer beliebigen Programmiersprache geschrieben wurden.
Hier sind die Schritte, die die Software-Ingenieure bei Promwad für unsere Kunden umsetzen:
Schritt 1. Erste Bewertung und Planung
Anforderungsanalyse. Die Anforderungen an die ARM-Version der Anwendung, einschließlich Leistungsziele und Hardwareüberlegungen.
Codeüberprüfung. Die Codebasis wird überprüft, um plattformspezifische Abhängigkeiten und potenzielle Kompatibilitätsprobleme zu identifizieren.
Schritt 2. Codeanpassung und -optimierung
Refactoring. Der Code wird angepasst, dass plattform- und architekturspezifische Funktionen unter Verwendung der plattformübergreifenden APIs von Qt isoliert und abstrahiert werden. Dies kann das Umschreiben einiger Teile des Codes und die Neugestaltung der gesamten Architektur erfordern, um eine nahtlose plattformübergreifende Kompatibilität sicherzustellen.
Optimierung für ARM. Wir implementieren ARM-spezifische Optimierungen für benutzerdefinierte Algorithmen, die von x86-spezifischen Anweisungen abhängen, um die Stärken von ARM zu nutzen. Dies umfasst die Verwendung von NEON-SIMD-Anweisungen und die Feinabstimmung von Multithreading zur Leistungs- und Effizienzsteigerung auf ARM-basierten Systemen.
Das Qt-Framework deckt den gesamten Softwareentwicklungsprozess von Design bis Testing ab. Quelle: qt.com
Schritt 3. Erstellen, Testen, Abstimmen
Cross-Kompilierung der Anwendung. Wir verwenden plattform- und architekturspezifische Toolchains, um die Anwendung für die ARM-Architektur auf jeder Zielplattform zu kompilieren. Die Nutzung eines plattformübergreifenden Build-Systems wie CMake kann diesen Prozess rationalisieren und konsistente Builds in verschiedenen Umgebungen gewährleisten.
Testen auf ARM-Hardware. Die Anwendung wird auf Ziel-ARM-Geräten bereitgestellt und gründlich getestet, um Funktionalität und Leistung sicherzustellen. Dieser Schritt kann auch die Nutzung von Emulatoren umfassen.
Profiling und Leistungsoptimierung. Wir führen Performance-Profile durch, um Ineffizienzen und Engpässe zu identifizieren. Unsere Software-Ingenieure optimieren den Anwendungscode, um die architekturspezifischen Funktionen von ARM vollständig auszuschöpfen und so die Leistung und Effizienz auf ARM-Geräten zu verbessern.
Schritt 4. Qualitätssicherung und Bereitstellung
Umfassende Tests. Wir implementieren eine umfassende Testreihe, einschließlich Unit- und Integrationstests, um sicherzustellen, dass die Anwendung den Qualitätsstandards entspricht. Manuelle Tests werden ebenfalls durchgeführt, da sie oft Probleme aufdecken, die automatisierte Tests übersehen oder nicht abdecken können. Für Qt-Anwendungen ist das Squish-Testtool besonders wertvoll, da es robuste funktionale und UI-Tests auf allen Zielplattformen bietet.
Bereitstellung. Promwad stellt sicher, dass die Anwendung korrekt auf allen vorgesehenen ARM-Plattformen bereitgestellt wird und nahtlos in die bestehenden Build- und Release-Pipelines integriert wird. Wir achten dabei besonders auf plattformspezifische Anforderungen und Konfigurationen, um eine reibungslose Einführung und optimale Leistung sicherzustellen.
Weltweit führende Marken nutzen Qt für ihre plattformübergreifende Software. Quelle: qt.com
Schritt 5. Laufende Wartung und Support
Leistungsüberwachung und Implementierung von Updates. Wenn mit dem Kunden vereinbart, können wir auch diese Phase übernehmen: Überwachung der Leistung der ARM/x86-Versionen und Implementierung von Updates für mehrere Plattformen auf der Grundlage von Kundenanforderungen, Benutzerfeedback und Leistungsdaten.
Als Ergebnis erhalten unsere Kunden plattformübergreifende Lösungen, die auf allen Zielarchitekturen und -geräten laufen.
Die Portierung von Anwendungen von x86-Architektur zu ARM war und ist für unser Team bei Promwad eine lohnende Aufgabe. Diese Projekte haben unser technisches Fachwissen konsequent erweitert und die Zuverlässigkeit und Vielseitigkeit von Qt bei der plattformübergreifenden Entwicklung unter Beweis gestellt. Das Ergebnis sind effiziente Anwendungen, die modern aussehen und eine großartige Benutzerfreundlichkeit bieten und in einer mehr als angemessenen Zeit fertiggestellt wurden.
4. Komplexitäten der x86-zu-ARM-Migration und wie wir sie lösen
Die Entwicklung mit einer einzigen Codebasis in Qt zu beginnen, ist die optimale Lösung, um Anwendungen effizient und kostengünstig zu halten.
Wenn eine Anwendung ursprünglich separat für x86 entwickelt wurde, kann die Portierung auf eine andere Architektur, wie ARM, durch den Befehlssatz, die Middleware-Kompatibilität und fehlende Drittanbieter-Bibliotheken erschwert werden. Diese Probleme machen es oft einfacher, die ursprüngliche Anwendung in Qt neu zu schreiben, um sicherzustellen, dass die x86- und ARM-Plattformen von Anfang an unterstützt werden.
Ein einheitlicher Ansatz vereinfacht den Entwicklungsprozess, indem die Notwendigkeit separater Codebasen eliminiert wird, wodurch Aktualisierungen und die Implementierung neuer Funktionen erleichtert werden. Die Verwendung einer einzigen Qt-Codebasis gewährleistet ein konsistentes Anwendungsverhalten über alle Plattformen hinweg und reduziert die langfristigen Wartungskosten, was zu einem effizienteren Entwicklungszyklus führt.
Im Folgenden betrachten wir die architekturabhängigen Komplexitäten, die bei der x86-zu-ARM-Portierung auftreten können, und wie wir sie für unsere Kunden lösen:
Architekturunterschiede. x86 verwendet einen CISC-Ansatz (Complex Instruction Set Computing), der eine Vielzahl von Anweisungen ermöglicht, um komplexe Aufgaben in einem einzigen Schritt auszuführen. ARM verwendet einen RISC-Ansatz (Reduced Instruction Set Computing), der Anweisungen vereinfacht und oft mehrere Schritte erfordert, um das zu tun, was x86 in einem Schritt erledigen kann.
Darüber hinaus verfügen x86-Prozessoren in der Regel über ausgefeiltere Cache-Mechanismen und Multithreading-Funktionen, die sich auf die Datenverwaltung und den Umgang mit konkurrierenden Prozessen auswirken. ARM-Prozessoren haben in der Regel eine einfachere Cache-Hierarchie und können Multi-Threading anders handhaben, was sich auf die Strategien zur Leistungsoptimierung auswirkt.
Um diese Unterschiede zwischen x86 und ARM zu adressieren, refaktoriert und optimiert unser Team den Code, verwendet plattformübergreifende Bibliotheken und Frameworks wie Qt, passt die Build-Prozesse an und testet und debuggt die Anwendung gründlich, um eine nahtlose Leistung auf ARM zu gewährleisten. Wir nutzen auch ARM-kompatible Bibliotheken und eine umfangreiche Dokumentation.
Endianness. ARM- und x86-Prozessoren können unterschiedliche Datenformate verwenden, die als Endianness (Big-Endian vs. Little-Endian) bekannt sind. Wenn Endianness nicht von Anfang an berücksichtigt wurde, wird der Code refaktorisiert, um das zu beheben. Qt ist hier ebenfalls hilfreich, da es Unterschiede zwischen den Architekturen abstrahieren kann.
Als Ergebnis wird durch den Qt-basierten Entwicklungsprozess die x86- und ARM-Portierung sowie die parallele Implementierung von Software für beide Architekturen transparent, vorhersehbar und effizient.
Entwicklung und Bereitstellung plattformübergreifender Software auf allen Zielgeräten mit einer einheitlichen Codebasis. Quelle: qt.com
* * *
Die Nutzung der Leistung von Qt hat es unseren Kunden ermöglicht, den Übergangsprozess von x86 zu ARM zu vereinfachen, die Leistung zu optimieren und Anwendungen auf neue leistungsstarke und energieeffiziente Plattformen zu erweitern. Dieser Schritt bereitet Unternehmen auf aktuelle und zukünftige Anforderungen vor und verbessert die Benutzerfreundlichkeit durch effizientere und benutzerfreundlicheren Softwarelösungen.
Kontaktieren Sie uns noch heute, um die beste Strategie für die Entwicklung plattform- und architekturübergreifender Lösungen oder für die Migration von x86 zu ARM – Desktop-, Mobile-, Server- und Embedded-Anwendungen – zu besprechen!