ich hab jetzt Delphi XE2 und wollte mal versuchen eine meiner Progs auf 64Bit zu compilieren.. 1. Problem ist das meine Geometry.pas einige Inline Assembler Routinen hat die sich so nicht compilieren lassen.. Ist es überhaupt möglich so ohne weiteres eine OpenGL Anwendung 64-bit zu compilieren?
Ist es überhaupt möglich so ohne weiteres eine OpenGL Anwendung 64-bit zu compilieren?
Da wäre ich mir ganz sicher! Hast Du Dir mal die neuste Vectorgeometry aus der GLScene besorgt. Am besten die SVN-Version. Wenn die auch nicht gehen sollte, dann mußt Du die Unit so einstellen, dass die Pur-Pascal-Routinen compiliert werden. Guck hier auch mal rein ... http://sourceforge.net/apps/phpbb/glscene/viewtopic.php?f=11&t=423&start=20
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Thmfrnk hat geschrieben:
Problem ist das meine Geometry.pas einige Inline Assembler Routinen hat die sich so nicht compilieren lassen..
Wenn alles nichts hilft: versuch einfach mal, die ganzen eax, ebx, … durch ihre 64-bit äquivalente, rax, rbx, … zu ersetzen. Vielleicht hilft das.
Thmfrnk hat geschrieben:
Ist es überhaupt möglich so ohne weiteres eine OpenGL Anwendung 64-bit zu compilieren?
Klar. Ich mach das Standardmäßig
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Ich weiß ja nicht was alles in der Unit drinnen steht, ich weiß nur dass auf alle Fälle viel Vektorrechnerei dabei ist und das lässt sich sehr leicht auch Assembler-frei hinschreiben - ist halt geschmackssache ob man das lieber als Inline-Assembler hat oder nicht. So hat man jedenfalls keine Probleme mehr und braucht nicht alles doppelt für 32-Bit und 64-Bit zu schreiben mit Compiler-Switch.
wie Nils schon sagte, hab ich die Geometry.pas mal mit Compilerswitches angepasst.. konnte meine Simu jetzt mal 64bit kompilieren... bis auf weitere Probleme mit Mappedfiles etc läufts.. doch die Ausbeute ist ernüchternt.. wenn überhaupt 1-2fps mehr bei meinen Partikelberechnungen.. Da kann man sich die Arbeit auch sparen, wenn man nicht grad mehr als 3GB RAM braucht
nun ich hatte einfach mal ein paar test mit simplen Fließkommaoperationen gemacht.. als Beispiel: 10mio wert := wert + 0.1 * sqrt(9)
auf meiner CPU brauchte er dafür: 32bit 700ms 64bit 360ms
So nun hab ich mich mit einem .NET Kollegen aus der VB ecke angelegt und behauptet das Delphi bzw generell W32/64 apps schneller als .NET wären und ich deshalb dabei bleibe.. Nun da hab ich mich echt auf den Hintern gesetzt... Die gleiche Berechnung in seinem Prog:
32Bit 360ms 64bit 500ms
Nun war ich doch echt geschockt... Wir haben noch zahlreiche weitere Berechnungstests gemacht, .NET war immer mit der Nase vorn.. Ich hab eigentlich immer gedacht das durch das Echtzeitcompilieren immer Perf. verloren geht..
Nun war ich doch echt geschockt... Wir haben noch zahlreiche weitere Berechnungstests gemacht, .NET war immer mit der Nase vorn.. Ich hab eigentlich immer gedacht das durch das Echtzeitcompilieren immer Perf. verloren geht..
Just in Time Compilierung bedeutet dass irgendwann vorher in Maschinencode übersetzt wird - z.B. wenn assemblies geladen werden, im einfachen Fall also wenn das Programm in den Speicher geladen wird. Bei einfachen Berechnungsfunktionen wird normalerweise nichts mehr übersetzt sobald sie laufen - wenn Du die Zeit also zu messen beginnst, braucht nichts mehr übersetzt zu werden. Meistens sagt das Ergebnis aber nicht viel aus, weil es von vielen Kleinigkeiten abhängt, wie bestimmten erlaubten/nicht erlaubten Optimierungen etc. Würde mir über diese Ergebnisse nicht weiter den Kopf zerbrechen
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
@32/64bit: Der Hauptunterschied ist der, dass die Register 64-bit groß sind und es davon viel mehr gibt⁽¹⁾. Außerdem noch ein paar neue Instruktionen, die dinge vereinfachen. Aber das hilft alles nicht, wenn der Compiler es nicht zu nutzen weiß. Und das traue ich den Delphi-Leuten mal erstmal nicht zu . Gerade bei Vektoroperationen kann man mit den Multimedia-Registern (128bit breit, gehen also 4 Floats bzw. 2 Doubles rein) bei Vektorberechnungen einiges rausholen (das kommt aber eher aus SSE und konsorten als aus 64bit).
Pascaller haben weniger vorteil durch 64-bit, da sie schon bei 32-bit die Register-Aufrufkonvention verwendet haben, die nun bei 64-bit auch bei anderen Compilern standard ist. Die Argumente werden dabei in Register verpackt, anstatt sie auf den Stack zu schieben (was um längen schneller ist). Davon wird viel des Performance-boosts kommen, den man bei einigen Anwendungen bemerken kann. Pascal macht das aber schon immer so – nur stehen bei 64-bit mal eben mindestens doppelt so viele Register für Argumente zur verfügung (bringt nur etwas bei funktionen mit mehr als drei argumenten bzw. mit mehr als zwei argumenten und einem rückgabewert).
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.