Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 64 Bit langsamer als 32 Bit (https://www.delphipraxis.net/176010-delphi-64-bit-langsamer-als-32-bit.html)

Medium 7. Aug 2013 14:45

AW: Delphi 64 Bit langsamer als 32 Bit
 
@Patito: Da SSE imho SIMD arbeitet (nämlich mit je 2 Werten in einer OP), halte ich die Aussage für doch sehr gewagt. Zudem: Brauchst du die Nachkommastellen wirklich alle täglich? Wenn man derart präzise werden muss, ist man doch ohnehin ziemlich schnell bei einer N-Bit Library. (Ansonsten hast du vermutlich oftmals den falschen Datentyp (bzw. schlecht optimierte Rechenwege) benutzt.)

BigAl 7. Aug 2013 15:34

AW: Delphi 64 Bit langsamer als 32 Bit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Interessant, wie viel es hier zu lesen gibt. Eine spannende Aussage ist (da hatte ich gar nicht daran gedacht), dass der 64 Bit-Compiler ja auch (mittels $IFDEF...) teilweise anderen Code nutzt.

Ich habe vor kurzem auch mal ein paar Tests mit ein paar zentralen Funktionen meiner Applikation gemacht. Ich konnte z. T. die Geschwindigkeit durch einfaches Umformulieren erheblich beschleunigen (siehe Anhang). Klar, wir reden von Millisekunden oder Mikrosekunden. Wenn aber eine Durchlauf nachher 3 Minuten anstelle von 5 Minuten braucht, und es sind 100 Durchläufe durchzuführen, dann reden wir von 200 Minuten Einsparung. Diese zentralen Funktionen werden halt teilweise mehrere Milliarden(!) mal aufgerufen.

Alex

mkinzler 7. Aug 2013 15:55

AW: Delphi 64 Bit langsamer als 32 Bit
 
Delphi-Quellcode:
function femIDsExists(const IDs: TfemIDs; const ID: Integer): Boolean;
// prüfen, ob ein Eintrag in einer Liste vorhanden ist
begin
  for CheckID := Low(IDs) to High(IDs) do
    if IDs[CheckID] = ID then
        Exit( True);
  result := False;
end;
Du überprüfst auf vollständige Gleichheit von IDs[] und ID; u.U. reicht hier auch eine "Teil"-Prüfung ( ich kenne die Deklaration von TfemIDs ja nicht)

BigAl 7. Aug 2013 15:56

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1223890)
Delphi-Quellcode:
function femIDsExists(const IDs: TfemIDs; const ID: Integer): Boolean;
// prüfen, ob ein Eintrag in einer Liste vorhanden ist
begin
  for CheckID := Low(IDs) to High(IDs) do
    if IDs[CheckID] = ID then
        Exit( True);
  result := False;
end;
Du überprüfst auf vollständige Gleichheit von IDs[] und ID; u.U. reicht hier auch eine "Teil"-Prüfung ( ich kenne die Deklaration von TfemIDs ja nicht)

Die Definition ist:

TfemIDs: array of Integer;

Ist ja nur ein Bespiel. Obige Funktion soll halt prüfen, ob ein Integerwert in einen dynamischen Array existiert. Das Beispiel soll halt auch verdeutlichen wie ein einfaches umformulieren manchmal was anderes erzeugen kann...

Alex

Delphi-Laie 7. Aug 2013 16:00

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von jfheins (Beitrag 1223725)
Zitat:

Bei den von mir eingesetzten Typen handelt es sich im Normalfall immer um klassische "Integer" etc. Diese sollten ja den nativen Type der Umgebung entsprechen.
Integer sind eigentlich immer 32bit groß. Von 16 auf 32 bit wurden sie noch erweitert, danach sah man da keinen Sinn mehr drin.

Integer ist (neben Cardinal) ein generischer Datentyp!

mkinzler 7. Aug 2013 16:13

AW: Delphi 64 Bit langsamer als 32 Bit
 
In der 64-Bit Implementierung aber auch nur 32Bit.

jaenicke 7. Aug 2013 16:23

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1223895)
In der 64-Bit Implementierung aber auch nur 32Bit.

Leider ja... das hat bei mir einiges an Änderungen im Code erfordert und wird auch noch mehr erfordern. Zum Glück gibt es IFDEFs... (und davon deshalb reichlich)

mkinzler 7. Aug 2013 16:37

AW: Delphi 64 Bit langsamer als 32 Bit
 
Oder man ersetzt INTEGER durch NativeInt

Robotiker 7. Aug 2013 17:00

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von BigAl (Beitrag 1223886)
Ich konnte z. T. die Geschwindigkeit durch einfaches Umformulieren erheblich beschleunigen (siehe Anhang). Klar, wir reden von Millisekunden oder Mikrosekunden. Wenn aber eine Durchlauf nachher 3 Minuten anstelle von 5 Minuten braucht, und es sind 100 Durchläufe durchzuführen, dann reden wir von 200 Minuten Einsparung. Diese zentralen Funktionen werden halt teilweise mehrere Milliarden(!) mal aufgerufen.

Zu diesem Thema hätte ich noch ein Video, dort wird zwar C++ benutzt, aber die Schlussfolgerungen, wie man seine Daten anordnen soll, damit sie gut in den Cache passen, gelten ganz allgemein:
http://channel9.msdn.com/Events/Build/2013/4-329

Delphi-Laie 7. Aug 2013 17:10

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1223895)
In der 64-Bit Implementierung aber auch nur 32Bit.

Auch bei Cardinal scheint es keine "Aufbohrung" gegeben zu haben.

Wurde mit Einführung des 32-Bit-Delphis noch großspurig von "generisch" gesprochen, so daß man sich über das "automatische Mitwachsen" der (passend gewählten, also generischen) integren Datentypen bei Bitanzahlvergrößerung des Compilates freuen konnte, ist dieser gute Vorsatz keine 20 Jahre (!) später schon wieder passé und obsolet. Schade.

Bernhard Geyer 7. Aug 2013 18:08

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1223904)

Auch bei Cardinal scheint es keine "Aufbohrung" gegeben zu haben.

Wurde mit Einführung des 32-Bit-Delphis noch großspurig von "generisch" gesprochen, so daß man sich über das "automatische Mitwachsen" der (passend gewählten, also generischen) integren Datentypen bei Bitanzahlvergrößerung des Compilates freuen konnte, ist dieser gute Vorsatz keine 20 Jahre (!) später schon wieder passé und obsolet. Schade.

Ein glück das hier Delphi kein eigenbrötlerischen Weg geht und genau das macht wie 98% der andereen Programiersprachen auch. Ich fände es schlechter wenn Delphie hier den falschen Wef des Mitwachsens gehen würde.

Union 7. Aug 2013 18:48

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Smut (Beitrag 1223917)
Meine konkrete Frage: Warum wird von M$ auf einen 64bit System 32bit Software per Default installiert?

Weil die ganzen existierenden AddOns nicht 64-bit fähig sind. Z.B. das ganze Mail API.

Bernhard Geyer 7. Aug 2013 18:56

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Union (Beitrag 1223918)
Z.B. das ganze Mail API.

Kann ich nicht bestätigen. Nachdem die in der JCL die Anpassungen/Fixes vorgenommen wurden funktioniert der Simple-MAPI-Zugriff auch mit 64-Bit Outlook

Union 7. Aug 2013 19:02

AW: Delphi 64 Bit langsamer als 32 Bit
 
Es ging darum warum Microsoft 32bit auf 64bit Systemen standardmäíg installiert. Es ging nicht um JVCL Kompatibilität.

jaenicke 7. Aug 2013 19:09

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1223902)
Oder man ersetzt INTEGER durch NativeInt

Bzw. deklariert NativeInt als Integer für ältere Delphiversionen, da es NativeInt halt noch nicht so lange in Delphi gibt.
Aber von diesen Typersetzungen halte ich nicht viel, da sie im Quelltext an einer konkreten Stelle (abgesehen von Mouseover-Hints) nicht direkt ersichtlich sind. Da schreibe ich es lieber dort hin wo es wirklich gebraucht wird und nehme das IFDEF in Kauf...

Beruflich habe ich das Problem ohnehin nicht, da wir Wartungsverträge haben und die Projekte nicht viele Delphiversionen zurückliegen, wenn überhaupt. Aber bei Open Source sieht das halt anders aus...

Daniel 7. Aug 2013 19:22

AW: Delphi 64 Bit langsamer als 32 Bit
 
Microsoft hat sich das mit der Frage, wo welches Office installiert werden sollte, schon überlegt. Es gibt reichlich Dokumente dazu, z.B. Folgendes:

http://office.microsoft.com/en-us/wo...010369476.aspx

Kurzfassung ist wohl, dass die überwiegende Mehrheit der Anwender keinen Vorteil aus den weiteren 32bit ziehen kann.



Und die Entscheidung, den Datentyp "int" bei 32-Bit zu belassen ist ja nicht aus der Hüfte heraus getroffen worden. Und schon gar nicht von Embarcadero. Wir dürfen dabei nicht vergessen, dass wir mit Delphi für ein Betriebssystem bzw. Framework - hier: Windows - programmieren und gut damit beraten sind, uns dessen Datenmodels zu bedienen. Alles andere würde unnötige Komplikationen mit sich bringen.

Also könnte man auf Microsoft einprügeln - das geht im Allgemeinen ganz gut, man ist ja in Übung. *g* Aber ... auch bei C unter Linux ist der Datentyp "int" 32-Bit. Und bei Mac OS X ebenfalls. Es steht uns natürlich frei, dies weiterhin als skandalös zu empfinden, aber so langsam drängt sich die Frage nach dem "warum" auf.

Als das Thema "64 Bit" akut wurde, lag damit natürlich auch die Frage auf dem Tisch, wie man mit den Datentypen umgehen möge. In der Sprache C beispielsweise ist der Datentyp "int" der Meist-Genutzte. Die Entscheidung, wie mit ihm zu verfahren sei, wollte also wohl überlegt werden.

Was haben sie getan? Die Entwickler von Microsoft und auch die der Unix-Gemeinde haben unabhängig voneinander Analysearbeit betrieben und einfach eine Art Bestandsaufnahme gemacht. Wo wird der Datentyp "int" genutzt und was bringt es jeweils, diesen um weitere 32 Bit zu ergänzen. Alle Beteiligten kamen zu dem Schluss, dass es in der überwiegenden Mehrheit an Fällen eben gerade keinen Vorteil brächte, weitere 32 Bit zu spendieren oder zu vergeuden.

Dies führte zu der bewussten Entscheidung für das Datenmodell "LLP64" (Windows) bzw. "LP64" (Unix / Linux), bei dem der Datentyp "int" eben bei seinen alten 32 Bit verblieb. (Datenmodelle: http://en.wikipedia.org/wiki/64-bit_...it_data_models)

Bei Windows kam noch ein weiterer Aspekt hinzu: Die Interoperabilität von Win32 und Win64. http://blogs.msdn.com/b/oldnewthing/...31/363790.aspx So sind z.B. die Header von Bitmap-Dateien recht klar strukturiert und hätten allesamt neu angepasst werden müssen. Ein Mords-Aufwand für Null Ertrag.

jaenicke 7. Aug 2013 21:15

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Daniel (Beitrag 1223927)
So sind z.B. die Header von Bitmap-Dateien recht klar strukturiert und hätten allesamt neu angepasst werden müssen. Ein Mords-Aufwand für Null Ertrag.

Laut der Definition des Integer-Typs vor der Umdefinition durch Embarcadero waren dort ja gar keine Integer-Werte involviert. Das sind dort LongInts usw. (und so steht es auch in der Doku).
Deshalb hätte es dort keinerlei Anpassungsbedarf gegeben.

Dass Integer an vielen Stellen benutzt wurde, wo eigentlich eher ein anderer Typ gepasst hätte, mag ja sein, aber letztlich wurde so die falsche Verwendung statt LongInt nachträglich als korrekt erklärt zu Lasten all derjenigen, die den Typ seiner Definition entsprechend genutzt haben.
Das finde ich nun einmal nicht gut.

Für 32-Bit gab und gibt es LongInt und dessen Name ist ja nicht umsonst entsprechend gewählt worden, eigentlich mit einer klaren Abgrenzung zum Typ Integer, der eine solche Größenangabe gerade nicht enthielt.

Nichtsdestotrotz hilft die nachträgliche Diskussion auch nicht weiter. Diejenigen, die sich an die Dokumentation gehalten haben, müssen ihren Quelltext anpassen, die, die es nicht getan haben, können lachen und weitermachen. Aber das ist nun eben so, ändern lässt es sich nicht mehr.

Insider2004 7. Aug 2013 23:12

AW: Delphi 64 Bit langsamer als 32 Bit
 
Alles ganz einfach:

1. 64 bit müssen einfach langsamer sein als 32 bit, weil die Pipelines im Prozessor mehr Füllung haben, um das mal so auszudrücken.

2. Floats unter 64 bit sind schneller, weil Delphi da die neuen SSE-Befehle nutzt. In 32 bit wird der uralte FPU-Codegenerator von Turbo Pascal anno 1988 benutzt.

danielmagin 8. Aug 2013 01:09

AW: Delphi 64 Bit langsamer als 32 Bit
 
In diesem Blog geht es zwar um die Problematik MSSQL 64bit ist teilweise langsamer als 32bit.

Jedoch die Ansatzpunkte sind nicht schlecht (in der zweiten Hälfte).

http://blogs.msdn.com/b/sqlprogramma...edirected=true

JamesTKirk 8. Aug 2013 08:25

AW: Delphi 64 Bit langsamer als 32 Bit
 
Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:

Da die FPU nur unter Windows 64-Bit als "deprecated" deklariert ist, nicht aber unter Linux, Mac OS X und Co verwenden wir nur unter Win64 per default die SSE Unit (Standard ist hier SSE Version 1) mit maximal Double-Precision, aber unter den anderen x86_64-Systemen verwenden wir weiterhin per Default die FPU mit Extended-Precision. Es gibt übrigens ein Define für den Compiler, welches es erlaubt auch die FPU für Win64 zu verwenden, dieses ist aber standardmäßig deaktiviert (und wahrscheinlich auch nicht wirklich getestet). Dies funktioniert aber deswegen, weil Windows trotzdem die FPU Register sichern muss, damit 32-Bit Anwendungen (welche ja die FPU erwarten) weiterhin korrekt laufen. Die Verwendung von SSE bedeutet aber nicht automatisch, dass der Compiler auch Vectorizing oder ähnliche Späße macht. In dem Zusammenhang wird SSE einfach nicht als SIMD, sondern als SISD (Single Instruction Single Data) verwendet...
Das es manchmal sinnvoll sein kann von SSE auf SSE2 oder SSE3 zu wechseln zeigt dieser Bugreport in dem die Laufzeit eines Algorithmus unter x86_64 von 125ms auf 64ms gedrückt werden konnte (und noch ein paar Millisekunden mehr nach einer weiteren Optimierung).

Ein anderer Fall ist "reine Pascalcode" vs. "Assemblercode". Da hatten wir das Beispiel von
Delphi-Quellcode:
Move
und
Delphi-Quellcode:
FillChar
. Die Einführung von Assemblerroutinen für diese beiden Basisfunktionen hat bei einem Nutzer den Code von etwa 4 Sekunden auf etwa 500ms beschleunigt. :mrgreen:

Nebenbei erwähnt: FPC erlaubt es auch für x86_64 die Verwendung von inline Assembler Abschnitten (es muss also nicht die gesamte Routine Assembler sein). :)

Gruß,
Sven

Robotiker 8. Aug 2013 09:31

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von JamesTKirk (Beitrag 1223975)
Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:

Sind Anwendungen, wie die des Threaderstellers, eigentlich eine Zielgruppe für Pascal Compiler Entwickler ?

Leute die solche Berechnungen mit Millionen Daten und Millarden Operationen darauf machen, haben ja meist dicke Rechner mit mehreren Prozessoren. (GPUs usw. lassen wir mal ganz außen vor.) Bei den oben erwähnten C++ Lösungen dafür hat man ja heute Libs zum z.B. große Arrays auf CPUs zu partitionieren und hinterher die Teillösungen zusammenzubringen.

Sind die Delphi/Pascal Lösungen dafür Assemblerroutinen und Threads ? Tiling, Loadbalancing usw. alles händisch ? Arbeitet nicht die Zeit gegen solche Lösungen ? Es gibt schliessich immer mehr Kerne auf CPUs, die aber einzeln nicht schneller werden.

mkinzler 8. Aug 2013 10:04

AW: Delphi 64 Bit langsamer als 32 Bit
 
@Robotiker: Wir befinden uns hier in einem Delphi (also Pascal Forum) und da wunderst Du dich, dass man hier über Delphi diskutiert? Nach Deiner Definition/Sichtweise gibt es natürlich keinen Grund überhaupt auf die Idee zu kommen, etwas nicht mit (Visual) C++ zu lösen zu wollen, da man mit VC++ ja alles besser machen kann als mit irgendeinem anderen Tool.
Native Gemüter (was wir ja aus Deiner Sicht zu sein scheinen) verwenden, aus vielleicht sentimentalen Gründen, "veraltete" Dinge wie Delphi/FPC/Lazarus, ...

Dieser Beitrag habe ich als Mitglied und nichta als Moderator verfasst, das heisst er muss nicht unbedingt der Meinung des Teams entsprechen.

Robotiker 8. Aug 2013 10:34

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1223988)
Native Gemüter (was wir ja aus Deiner Sicht zu sein scheinen)

Dieser Eindruck entsteht da in der Tat.

Der Fragesteller hat weiter oben festgestellt, dass ihm schon eine kleine Verbesserung des Codes 200 Minuten (!) Verbesserung bringen würden. Ist es bei solchen Dimensionen vermessen mal zu fragen, warum keiner überhaupt mal über das Thema Parallelisierung redet ?

Ich arbeite seit Turbo Pascal 3 mit Pascal, aber bei solchen Aufgaben heute nicht mehr. Aber ich habe Erfahrungen mit solchen Datenmengen.

Geht es hier also darum möglichst schnell solche Berechnungen zu lösen, oder einfach nur darum "ein Programm wie früher" zu schreiben ?

Besteht "native Code Performance" in Delphi heutzutage daraus "stunning multimedia apps" in FireMonkey zu schreiben, über die dann alle ganz "exited" sind ?

Meine Absicht war nicht den Fragesteller zu einer anderen Programmiersprache zu drängen, sondern zu zeigen, was man braucht um auf heutiger Hardware solche Probleme zu lösen. Deswegen meine Frage, ob und wie man sich bei FreePascal dieser Entwicklung stellt. Das solche Frage nicht erwünscht sind, weil man ja auf dem richten Weg ist, habe ich jetzt verstanden.

mkinzler 8. Aug 2013 10:45

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Das solche Frage nicht erwünscht sind, weil man ja auf dem richten Weg ist, habe ich jetzt verstanden.
Darum geht es nicht, sondern um die Tatsache, dass in fast jedem Deiner Beiträge etwas von VC, C++ u.ä. steht.

Zitat:

Ist es bei solchen Dimensionen vermessen mal zu fragen, warum keiner überhaupt mal über das Thema Parallelisierung redet ?
Nein es ging hier aber um 32Bit vs. 64Bit. Parallelisierung sollte unabhängig von der Busbreite ein Thema sein.

Zitat:

Besteht "native Code Performance" in Delphi heutzutage daraus "stunning multimedia apps" in FireMonkey zu schreiben, über die dann alle ganz "exited" sind ?
Nein, ich würde sogar sagen "reines FM2 wäre hierfür nicht meine 1. Wahl.
Zitat:

Meine Absicht war nicht den Fragesteller zu einer anderen Programmiersprache zu drängen, sondern zu zeigen, was man braucht um auf heutiger Hardware solche Probleme zu lösen
Nämlich die Verwendung von Bibliotheken für (V)C++, welche in Delphi/BC++ nicht funktionieren.

Robotiker 8. Aug 2013 11:00

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1223992)
Nämlich die Verwendung von Bibliotheken für (V)C++, welche in Delphi/BC++ nicht funktionieren.

Diese Aussage erstaunt mich jetzt. Hat man den neuen Compiler im BCB nicht eingeführt, damit man Libs wie die Threading Collections und TBB (beide übrigens von Intel) verwenden kann ?

Hat nicht JT von Embarcadero einen Blogeintrag darüber geschrieben, dass man das MS Rest SDK im BCB integriert, da ist die PPLx enthalten, die Cross-Plattform Opensource Variante der PPL aus VC.

Ich hatte eigentlich durchaus den Eindruck, dass es hier Leute gibt, die professionelle leistungsfähige Software erstellen. Die auch mal eine Blick über den Tellerrand wagen, sei es auch nur um sich Ideen für die Entwicklung in Delphi zu holen.

Vom Fragesteller hatte ich schon den Eindruck, dass er sich ernsthaft mit der Materie auseinandersetzt. Ist da ein Link auf ein Video zu MS, wo gezeigt wird, wie man Schleifen cachegünstig optimiert, schlecht, weil es von MS kommt ? Hat das nicht zumindest indirekt mit dem 32/64 Bit Thema zu tun ? (Ganz sicher aber mit dem Problem des Fragestellers.) Gibt es auch nur ansatzweise ähnliche Doku bei Embarcadero, dann verweise ich gerne drauf ?

Der schöne Günther 8. Aug 2013 11:02

AW: Delphi 64 Bit langsamer als 32 Bit
 
Das Thema war so angenehm zu lesen, eine wahrer Leuchtturm in den tosenden Böen des Internets. Jetzt nicht mehr. :(

Was hat das jetzt noch mit der ursprünglichen Frage am Hut?

Patito 8. Aug 2013 11:29

AW: Delphi 64 Bit langsamer als 32 Bit
 
Um das ganze wieder mehr relevant für Pascal zu machen hätte ich da die Frage wie es denn mit der Verwendung der GPU
in Pascal aussieht?

Vermutlich ist da ein Hybrid aus solider Pascal-GUI und einem Number-Cruncher in C for CUDA sinnvoll.

Robotiker 8. Aug 2013 11:48

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Patito (Beitrag 1224004)
Vermutlich ist da ein Hybrid aus solider Pascal-GUI und einem Number-Cruncher in C for CUDA sinnvoll.

Möglicherweise. Soweit wollte ich gar nicht gehen. Rechnen auf der GPU ist gut, wenn viele Tasks unabhängig laufen können (separate Daten) und nicht so viel Datenaustausch zwischen CPU und GPU anfällt.

Auch in Pascal hängt die ganze 32/64 Bit Geschichte und eine mögliche Parallelisierung über die Cache-Problematik zusammen. Der 64-Bit Code ist ggf. größer, passt schlechter in den Cache. Noch schwieriger ist es bei Parallelisierung, wie in dem Video gezeigt, man muss möglichst viele "heiße" Daten beieinander halten. Ganz blöd wäre es, wenn man das ganze als Single Thread Lösung implementiert und dann mehrere Programme mit unterschiedlichen Daten parallel startet "um den Rechner besser auszulasten", die klauen sich dann gegenseitig Cache Kapazität.

Die Kunst besteht darin eine Balance zischen Parallelisierung und Speicherdurchsatz zu finden, das eventuell auch skalierbar auf unterschiedlich großen PCs. Dazu muss man nicht umbedingt die zitieren Libs verwenden, aber da steckt viel Know-How drin, und in der Doku ist viel darüber geschrieben, wie man Probleme effizient aufteilt.

pertzschc 8. Aug 2013 13:35

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1223999)
Das Thema war so angenehm zu lesen, eine wahrer Leuchtturm in den tosenden Böen des Internets. Jetzt nicht mehr.

Recht hast Du - seit Monaten mal wieder ein fesselnder Thread!

BUG 8. Aug 2013 16:14

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Insider2004 (Beitrag 1223956)
1. 64 bit müssen einfach langsamer sein als 32 bit, weil die Pipelines im Prozessor mehr Füllung haben, um das mal so auszudrücken.

Hä :gruebel:

Ich weiß nicht, wie die Bitbreite der Register die Pipeline beeinflussen sollten.
Außerdem: Volle Pipeline, gute Pipeline :mrgreen:

JamesTKirk 9. Aug 2013 08:26

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Robotiker (Beitrag 1223980)
Zitat:

Zitat von JamesTKirk (Beitrag 1223975)
Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:

Sind Anwendungen, wie die des Threaderstellers, eigentlich eine Zielgruppe für Pascal Compiler Entwickler ?

Leute die solche Berechnungen mit Millionen Daten und Millarden Operationen darauf machen, haben ja meist dicke Rechner mit mehreren Prozessoren. (GPUs usw. lassen wir mal ganz außen vor.) Bei den oben erwähnten C++ Lösungen dafür hat man ja heute Libs zum z.B. große Arrays auf CPUs zu partitionieren und hinterher die Teillösungen zusammenzubringen.

Es sehe hier durchaus Anwendungsmöglichkeiten für Pascal Compiler. Aktuell ist FPC und vielleicht auch die Laufzeitbibliothek nicht unbedingt darauf ausgelegt, aber das heißt ja nicht, dass das so bleiben muss. Vor allem bei einem Open Source Projekt, wo jeder was beitragen kann.
Meine Idee ist zum Beispiel die Funktionalität von Vector Pascal in FPC zu integrieren, was eine native Nutzung von SIMD Units ermöglichen würde (FPC unterstützt zwar aktuell SIMD Instructions, wendet die aber nur für einzelne Werte an, also eher als FPU-Ersatz). Dann müssten auch noch ein paar Optimierungen her wie Auto Vectorizing oder sonstige Nettigkeiten, wie sie LLVM zur Zeit bekommt. Vielleicht auch ein paar Threading Erweiterungen wie sie Oxygene kennt (z. B.
Delphi-Quellcode:
parallel for
).

Zitat:

Zitat von Robotiker (Beitrag 1223980)
Sind die Delphi/Pascal Lösungen dafür Assemblerroutinen und Threads ? Tiling, Loadbalancing usw. alles händisch ? Arbeitet nicht die Zeit gegen solche Lösungen ? Es gibt schliessich immer mehr Kerne auf CPUs, die aber einzeln nicht schneller werden.

Meine Anmerkung mit Assembler betraf zwei Grundroutinen, die sehr häufig implizit aufgerufen werden. Wenn die nicht schnell sind, dann bringt dir auch die ganze sonstige Optimiererei nicht allzu viel. Und auch wenn natürlich der Compiler auch entsprechend optimieren können muss gibt es hier und da Routinen wo es besser ist, wenn man von Hand ne Assemblerroutine schreibt (eben zum Beispiel diese beiden besagten Routinen
Delphi-Quellcode:
FillChar
und
Delphi-Quellcode:
Move
), da hierdurch Prozessorbefehle verwendet werden können, die der Compiler normalerweise nicht verwendet (ein Compiler reizt das Instruction Set eines Prozessors normal nie voll aus).
Was aktuell (zumindest so weit ich das Überblicke) allerdings tatsächlich noch fehlt sind Frameworks (ich nenn es mal einfach so), die einem das Arbeiten mit und Verwalten von vielen Threads abnehmen (du magst das nennen wie du willst, aber von der OS Perspektive her sind es am Ende immer noch Threads, die da parallel laufen).

Gruß,
Sven

jaenicke 9. Aug 2013 08:39

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von JamesTKirk (Beitrag 1224101)
Was aktuell (zumindest so weit ich das Überblicke) allerdings tatsächlich noch fehlt sind Frameworks (ich nenn es mal einfach so), die einem das Arbeiten mit und Verwalten von vielen Threads abnehmen

Wobei die OmniThreadLibrary dabei durchaus einiges an Arbeit abnimmt. Ob die auch für solche massiven Berechnungen sinnvoll nutzbar ist, kann ich nicht sagen, dafür kenne ich beides zu wenig.

Robotiker 9. Aug 2013 08:49

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von JamesTKirk (Beitrag 1224101)
Es sehe hier durchaus Anwendungsmöglichkeiten für Pascal Compiler.

Vielen Dank dafür, dass Du geantwortet hast.

In diese Richtung zielte ja meine Frage. Warum sollte man es nicht in Pascal machen können, wenn man es z.B. in Matlab hinkriegt. Gerade für solche mathematischen Sachen ist die Pascal-Syntax doch sehr lesbar.

Im Grunde geht es ja nur darum, die Fähigkeiten aktueller Hardware auszunutzen. Diese riesigen Datenstrukturen des Threaderstellers kann man am besten bearbeiten, wenn man vorgeht, wie wenn man mit vielen Mähdreschern ein großes Kornfeld mäht. Man stellt alle in eine Reihe und fährt drüber, zusätzlich macht die Vektorisierung quasi jeden Mähdrescher breiter. Sowas kann man in Delphi derzeit nicht wirklich gut ausdrücken, und nur darum ging es mir.

Es geht schliesslich darum, dass Berechnungen statt Stunden möglicherweise nur Minuten dauern. Statt zu sagen, "Oh, da haben wir ein Defizit" zu sagen "wir machen das aus sentimentalen Gründen" finde ich, bestenfalls, besorgniserregend. Aber so scheinen die Leute heute eingestellt zu sein, die bei Delphi geblieben sind. Schade.

[Edit]
Ja, Vector Pascal geht offensichtlich in die Richtung, die ich meine.

Robotiker 9. Aug 2013 09:00

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von jaenicke (Beitrag 1224103)
Wobei die OmniThreadLibrary dabei durchaus einiges an Arbeit abnimmt. Ob die auch für solche massiven Berechnungen sinnvoll nutzbar ist, kann ich nicht sagen, dafür kenne ich beides zu wenig.

Ja, das legt zumindest den nächsten Level, man hat nicht mehr nur TThread.

Aber so was wäre schön (einfach die Diagramme anschauen, den Code ignorieren):
http://www.parallel-universe-online....123-flow-graph

[Edit]
Sollte aber eigentlich mit dem neuen Compiler im Builder irgendwann verwendbar sein.

JamesTKirk 9. Aug 2013 10:49

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von jaenicke (Beitrag 1224103)
Zitat:

Zitat von JamesTKirk (Beitrag 1224101)
Was aktuell (zumindest so weit ich das Überblicke) allerdings tatsächlich noch fehlt sind Frameworks (ich nenn es mal einfach so), die einem das Arbeiten mit und Verwalten von vielen Threads abnehmen

Wobei die OmniThreadLibrary dabei durchaus einiges an Arbeit abnimmt. Ob die auch für solche massiven Berechnungen sinnvoll nutzbar ist, kann ich nicht sagen, dafür kenne ich beides zu wenig.

Ne Portierung der OmniThreadLibrary für FPC wäre auch mal was...

Zitat:

Zitat von Robotiker (Beitrag 1224106)
Aber so was wäre schön (einfach die Diagramme anschauen, den Code ignorieren):
http://www.parallel-universe-online....123-flow-graph

Sowas in Pascal zu implementieren wäre durchaus auch mal interessant. :)

So viele schöne Projekte, die man angehen könnte und so wenig Zeit... *seufz*

Gruß,
Sven

mkinzler 9. Aug 2013 11:44

AW: Delphi 64 Bit langsamer als 32 Bit
 
Klingt wie Concurrent Pascal oder SuperPascal.
Eine entsprechende Erweiterung für Delphi FPC wäre sicherlich nicht schlecht.

Insider2004 10. Aug 2013 13:21

AW: Delphi 64 Bit langsamer als 32 Bit
 
Generelle Überlegung: 16 bit ist schneller als 32 bit, 32 bit ist schneller als 64 bit. Trotzdem wurde nach 16 bit 32 bit eingeführt. Vorteil: Der Scrollbalken hat bei längeren Seiten kein Range-error ausgelöst. Und man konnte mehr Speicher adressieren. Alles hat Vor- und Nachteile. Es gibt ein paar Themen in der Mathematik, da sind 32 bit der reine Horror. Von daher kann 64 bit oder noch besser 128 bit nicht schnell genug kommen. Auch wenn 128 bit für 99% aller Computerbenutzer Perlen vor die Säue wäre.

Sherlock 12. Aug 2013 08:56

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Insider2004 (Beitrag 1224254)
Auch wenn 128 bit für 99% aller Computerbenutzer Perlen vor die Säue wäre.

IMHO laufen doch GPUs mit 128 Bit...insofern sind alle Gamer total begeistert davon, und die machen mehr als 1% der Computernutzer aus ;)

Aber das nur als Zwischenruf...

Sherlock

Bernhard Geyer 12. Aug 2013 09:02

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Sherlock (Beitrag 1224410)
IMHO laufen doch GPUs mit 128 Bit...insofern sind alle Gamer total begeistert davon,

Das ist aber die Busbreite Speicherinterface und nicht die Anzahl der Bits die für die Adressierung verwendet wird.
Und über eine 128 Bit Grafikkarte gähnen alle Hardcoregamer da die besseren Grafikkarten schon bei 384 Bit angekommen sind

mentaltec 12. Aug 2013 09:58

AW: Delphi 64 Bit langsamer als 32 Bit
 
ts ts ts

was man alles durcheinanderwürfeln kann - Operandenbreite CPU, Operandenbreite SIMD (hier auch gern über alle Operanden), Adressbreite logisch ,Adressbreite physisch implementiert, Datenbusbreite intern, Datenbusbreite extern ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz