PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmperformance unter Vista 64 Bit


transstilben
2007-02-10, 01:26:38
Wenn ich mir die Laufzeit eines meiner 32 Bit Programme unter "Vista 64 Bit" ansehe, stelle ich fest, daß im Vergleich zu "Vista 32 Bit" ein kleiner
Performanceverlust besteht. Es handelt sich dabei um eine einzige ausführbare Datei, die unter 32 bzw. 64 Bit Vista gestartet wird.
Das Programm macht nichts anderes als Rechnen und es liegt komplett im Cache. Auch die Daten (ca. 30 KB) passen in den Cache.
Hat jemand eine nicht triviale Erklärung warum es unter Vista-64 langsamer läuft ?

Wuge
2007-02-10, 11:40:26
Emulation kostet immer Performance.

Ich bin mir jetzt nicht sicher, glaube aber, dass im 64-Bit Modus immer auch 64 Bit-Werte übertragen werden müssen. Der nicht benötigte Registerplatz bei der Ausführung von 32-Bit Programmen wird mit 0 belegt.

Somit ist der Cacheverbrauch und auch die FSB/Memorycontrollerbelastung höher, da die führenden 0en mit übertragen werden müssen.

Die Gurus können Dir vielleicht den genauen Grund nennen. (Das ist jetzt eine Aufforderung ;) Mich interessierts nämlich auch)

Gast
2007-02-10, 11:46:15
Emulation kostet immer Performance.
Eben.
Alle Speicherzugriffe müssen gemappt werden.
Wenns ein eigenes Programm ist, sollte man es eh als 64-Bit Version compilieren. Die zusätzlichen Register bringen schon manchmal was.

HOT
2007-02-10, 12:33:35
Es ist keine Emulation.

transstilben
2007-02-10, 12:34:19
Eben.
Alle Speicherzugriffe müssen gemappt werden.
Wenns ein eigenes Programm ist, sollte man es eh als 64-Bit Version compilieren. Die zusätzlichen Register bringen schon manchmal was.

Hm, ich dachte immer auch unter 32 Bit Windows ist die sog. Paging-Einheit
der CPU aktiv und Speicherseiten werden auch dort schon "gemapped" ?

Zum Thema Emulation: Unter Emulation verstehe ich was anderes:
Wenn z.B. eine Intel Itanium CPU einen X86 nachbildet.
Ein echtes Nachbilden ist aber in diesem Fall nicht erforderlich. Das Programm wird "in Hardware" ausgeführt.

Ich glaube auch, daß es mit den Speicherzugriffen zusammenhängt. Heißt das nun, daß ein Programm was überhaupt keine Speicherzugriffe macht,
den beobachteten Performanceverlust NICHT erleidet ?

Wuge
2007-02-10, 13:02:18
Dann müsste das Programm komplett in den Registern laufen. Selbst ein L1-Zugriff verlangsamt die Ausführung.

Und es ist doch eine Emulation. Ein Programmcode mit 32 Bit Wortlänge muss auf 64 Bit Speicheradressen abgebildet werden. Sicher, es ist eine sehr einfache Emulation...

Native Ausführung geht nur, wenn ein 32-Bit OS auf der X86-64 CPU läuft.

EDIT: Scheint wohl doch so, dass die CPU selbst in den 32 Bit Modus umgeschaltet wird, wenn ein 32 Bit Programm über WOW64 ausgeführt wird. Dann handelt es sich wirklich nicht um eine echte Emulation.

Bisher dachte ich, dass die WOW64 eine reine zusätzliche HAL-Schicht ist, und die CPU permanent nur 64 Bit-Code schluckt.

Muh-sagt-die-Kuh
2007-02-10, 14:31:40
x86-64 CPUs können dynamisch zwischen 64 bit und 32 bit Modus wechseln, daher schluckt WoW64 so gut wie keine Performance.

Im Prinzip ist WoW64 ist ein kompakter Software-Layer, der 32 bit Applikationen eine 32 bit Systemumgebung vorgaukelt. Dazu muss er drei Dinge erledigen:
- 32 bit in 64 bit System-Calls übersetzen
- Den CPU Betriebsmodus umstellen
- Registry- und Verzeichnispfade anpassen

That's it....eine sehr schlanke und performante Lösung. Ich persönlich nutze unter WinXP x64 eine ganze Reihe von 32 bit und 64 bit Applikationen, WoW64 ist mir während der ganzen Zeit nie irgendwie negativ aufgefallen....sprich die Applikationen laufen praktisch in der gleichen Geschwindigkeit wie unter dem 32 bit XP.

Coda
2007-02-10, 17:58:45
Emulation kostet immer Performance.
Es wird aber nichts emuliert.

T4ch0n4d3l
2007-02-10, 19:13:17
Es geht auch umgedreht. Eine 64bit CPU kann auch unter einem 32bit OS ein 64bit OS virtualisieren, sprich, man kann unter XP-32bit in einer VMWare Umgebung Vista 64bit oder SUSE 64bit oder was auch immer ausführen, alles in Hardware (glaube aber hier nur wenn die CPU Virtualisierung in Hardware versteht).

Coda
2007-02-10, 19:50:42
Ist das wirklich so? Bisher habe ich immer mitbekommen, dass das nicht geht.

transstilben
2007-02-10, 20:21:02
Habe nochmal nachgemessen. Jetzt messe ich im Rahmen einer Toleranz < 0.5 % gleiche Laufzeiten für das Programm unter VISTA32 und VISTA64 !
(Genaue Messungen sind wegen der Hintergrundprozesse schwierig).

Man kann also sagen: Ein 32 Bit Binary (das für WIN32 kompiliert wurde) ist unter VISTA32 und VISTA64 grundsätzlich gleich schnell.

Das stellt meiner Meinung nach alle Erklärungsversuche, die hier vorgeschlagen wurden, ein bißchen in Frage ;)

T4ch0n4d3l
2007-02-10, 20:46:36
Ist das wirklich so? Bisher habe ich immer mitbekommen, dass das nicht geht.

Ich hab die Vista Beta 2 64bit in VMWare Server unter Windows XP 32bit laufen gelassen.

Man kann also sagen: Ein 32 Bit Binary (das für WIN32 kompiliert wurde) ist unter VISTA32 und VISTA64 grundsätzlich gleich schnell.

Genau so sollte es sein. Der Performanceeinbruch bei "nicht nur sturr rechnenden" Applikationen ließe sich vielleicht darin begründen, dass wenn die Treiber 64bit Kompilate sind, verlangen diese auch entsprechende Datentypen und genau die müssen zwischen der 32bit Umgebung und der 64bit Umgebung umgerechnet werden (insofern notwendig, gibt ja nich viele weitere Datentypen).