-
Frage zur Kompatibilität
Autor: spambox 28.03.11 - 12:14
Ist ein "Bobcat-optimized" Programm mit einer Sandy-Bridge CPU lauffähig?
Oder anders gefragt: Wenn man ein Programm veröffentlichen möchte, muss man es dann für jeden Prozessortyp separat anbieten, auch wenn es sich immer um x86 handelt?
(z.B. "Mein Tool" in der Core i 5 Edition....Phenom Edition....oder gar Core i 5 - Athlon friendly but not older than PentiumD Edition....)
#sb -
Re: Frage zur Kompatibilität
Autor: HansiHinterseher 28.03.11 - 12:58
Meistens werden Mainstream-Programme so kompiliert, das sie auf jeder x86-CPU laufen. Realistisch gesagt, für 586-CPUs, also auf Pentium I.
Das hat natürlich zur Folge, das neuere CPUs nicht ausgenutzt werden können. Aber es ist auch so, das x86er selbst "intelligent" sind, um Code optimierter auszuführen. Z.B. mit Sprungvorhersagen usw. -
Re: Frage zur Kompatibilität
Autor: meyerm 28.03.11 - 13:10
Dies ist nicht zwingend. Zwar lohnt es sich bei Hochleistungsanwendungen, beim "normalen Werkzeug" aber sind solche Optimierungen selten den Aufwand wert (lassen wir vielleicht mal etwas wie Videokodierung etc. beiseite).
Dem Entwickler bieten sich 3 Moeglichkeiten. Zum einen kann er natuerlich Code, welcher wirklich explizit fuer eine Architektur angepasst ist, uebersetzen. Dieser enthaelt dann oft auch Befehle, welche nicht in aelterer ISA enthalten sind.
Eine weitere Moeglichkeit ist das andere Extrem. Das Programm wird in der x86-Welt fuer einen 586 kompiliert (drunter ist heutzutage im nicht-embedded-Bereich meist nicht zielfuehrend) und ist somit fuer selbigen "optimiert". Aktuellere x86 koennen den Code noch ausfuehren, die Besonderheiten werden nicht genutzt.
Die dritte und zumeist sinnvollste Variante (wie gesagt, auszer eben embedded oder HPC) ist den Code zwar prinzipiell 586-kompatibel zu halten, aber zumindest so auszulegen, dass die aktuellen CPUs mit ihren Besonderheiten ihn besser nutzen koennen. Dadurch verschenkt man natuerlich Leistung auf dem "echten" 586, aber naja ;-) -
Re: Frage zur Kompatibilität
Autor: 0xdeadbeef 28.03.11 - 15:07
Der Forist meyerm hat eine ziemlich komplette Antwort dazu aufgeschrieben.
Ich möchte nur noch die Optionen -march= und -mtune= (und deren Unterschied), vorwiegend, aber nicht ausschließlich auf i386/x86_64 bezogen als Hinweis hinzufügen. -
Re: Frage zur Kompatibilität
Autor: TheUltimateStar 28.03.11 - 18:46
Vielleicht noch eine Ergänzung hierzu: bei manchen Programmen bietet es sich auch einfach an für verschiedene Plattformen optimierte Codeteile anzubieten. Das Programm wird dabei auf den kleinsten gemeinsamen Nennen optimiert(also z.B. den 586) und ist auf diesen dann erstmal prinzipiell lauffähig. Während der Ausführung wird aber die CPU bestimmt um ggf. doch einen schnelleren Weg zu nutzen. Damit hat man zwar nicht das ganze Programm in der Optimalversion für jede CPU vorrätig, aber kritische Funktionen oder Programmteile eben doch. Sinnvoll ist dies beispielsweise bei mathematischen Bibliotheken zur Ausführung komplexer Berechnungen(wie sie z.B. auch in Spielen vorkommen). Beim Start wird dann eben entschieden ob man für Matrixmultiplikation die Funktion auf x87-Basis nehmen muss oder ob nicht auch eine SSE-Version ausführbar wäre.



