AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

grundsätzliche Frage zu Multithreading

Ein Thema von Gargamel · begonnen am 26. Mär 2013 · letzter Beitrag vom 26. Mär 2013
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 08:38
Hi

Die Tage habe ich die Geschwindigkeit von C#, Delphi und C++ getestet. Dazu habe ich in einer 10-Mio.-For-Schleife einen Vektor normalisiert. Dabei kam heraus, dass C# dafür 1,5 Sekunden benötigt. Delphi 0,5 Sekunden und C++ irgendwas um 0,003 Sekunden. Dass C# am langsamsten ist, dachte ich mir fast. Aber der Unterschied zwischen Delphi und C++ ist arg groß. Da ich nun für meine KI jeden Leistungsvorteil nutzen möchte, will ich sämtliche Berechnungen über C++ erledigen, wobei die Verwaltung der KI selbst in Delphi erfolgt.
(Ich mag halt Delphi und will C++ nur dann nutzen, wenn es unbedingt nötig ist)

Der Aufbau sieht so aus: Hauptprogramm(3D-Engine) --> KI(Delphi-DLL) --> reine Berechnungen(C++-DLL)

Was mich nun interessieren würde ist, inwieweit sich das mit Multithreading vereinbaren lässt. In der Delphi-DLL werden, z.B. bei einem Quad-Core, 4 Threads erstellt, die ständig auf exportierte Funktionen der C++-DLL zugreifen (Pathfinding, Fuzzy-Logic, usw.).

Geht das so überhaupt?

Danke
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.161 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 09:14
Ich sehe jetzt nicht ganz, eine weitere "Zwischen-DLL" überhaupt nötig ist, aber noch eher glaube ich, dass man den generellen Performance-Unterschied jetzt nicht an einer Vektor-Operation festmachen sollte. Ich glaube nicht, dass es so einen argen Unterschied gibt...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 09:15
Eine weitere Idee um es ggf. in Delphi noch schneller zu kriegen:

1. inline funktion
2. inline assembler (ggf. sogar mit MMX, SSE ?)

Dann sparst du dir den ganzen C++ Kram.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 09:32
Und wenn man wirklich das letzte Bischen herausquetschen will, wäre Bei Google suchenCUDA bzw. Bei Google suchenOpenCL eine prima Sache. Gerade für Aufgaben wie "führe N Mal die gleiche Operation auf Member in einem langen Datenstrom aus". In welcher Sprache man das dann einbettet dürfte auch ziemlich egal werden. Ansonsten stimme ich zu: Es kommt auch stark darauf an, wie man konkret gecoded hat. Delphi ist sicherlich nicht per se langsamer als C++, beide erzeugen ähnlich performanten Maschinencode. Die Frage ist, ob du die Aufgabe in Delphi für Delphi sinnvoll optimiert umgesetzt hast. (Nutzung von SSE via inline asm wäre ein ähnliches Schmankerl wie GPGPU, aber da würde ich eher zu letzterem greifen, wenn man schon was neues lernen muss. Zudem krallt man sich damit dann auch nicht so arg an eine Architektur.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#5

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 09:34
@Günther

Wie gesagt, die reine Verwaltung mache ich lieber in Delphi. Nur den Mathe-Kram würde ich gerne wegen der Geschwindigkeit auslagern.

@General

Inline Assembler kann ich nicht nutzen, da der 64bit-Delphi-Compiler sowas nicht kann. (Delphi XE3)
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#6

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 09:39
@Medium:

Mit CUDA binde ich mich leider an nVidia. Für ein Spiel ist das nicht sinnvoll. OpenCL hingegen klingt ganz gut.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 09:45
@Gargamel: Soweit ich weiß kannst du zwar keine kompletten inline-Funktionen mit asm - end machen aber du kannst glaube ich sowas machen:

Delphi-Quellcode:
begin
  asm

  end;
end;
? Kann mich aber auch täuschen.

Ansonsten probier mal deine Funktion zum normalisieren von Vektoren mit inline; zu markieren.
Ich denke das sollte wie gesagt auch noch mal etwas bringen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 10:08
Es wäre sowieso kein gültiger Vergleich, wenn beide Algorithmen nicht zu 100% identisch ablaufen. Dh. wenn in C++ geinlinet wird, dann muss in Delphi das auch geschehen und vice versa. Von daher ist es eig. relativ egal.

Ich würde übrigens gerne Code sehen...
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.161 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 10:09
Das gehört hier wahrscheinlich nicht mehr hin.

Aber gibt es überhaupt Nvidia-Karten mit OpenCL? Ich dachte die bleiben weiterhin bei CUDA. Auch haben Sie das Format geöffnet, vielleicht springt ja sogar ATI auf diesen Zug auf...
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.473 Beiträge
 
Delphi 12 Athens
 
#10

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 10:15
Ein Unterschied von 2-5% zwischen den einzelnen Compilern ist durchaus denkbar, deine Ergebnisse mit hundertfacher Laufzeit deuten aber eher auf Fehler in der Implementierung hin.
Assembler ist wirklich nur das letzte Mittel, wenn alle anderen Optimierungen schon durch sind. OpenCL scheint hier der bessere Weg zu sein.

Multithreading und DLL-Aufrufe geht natürlich, sofern die Funktionen in der DLL auch threadsicher implementiert sind oder nur von einem Thread verwendet werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
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