OpenCl und die dazugehörigen Werkzeuge. Bewertungen und Eindrücke. - Seite 5

 
Mathemat:

Großartig, es wird eine Grundlage für den Vergleich von MQL und C/C++ bieten. Ich habe nur die Fakten genannt. Und überhaupt, warum zum Teufel sollte ich ein Thomas der Gläubige sein?

Bei den Nerven könnte es etwas mehr Unterschied geben, da gibt es keinen Streit.

Übrigens, ich würde gerne Ihre "just the facts" sehen.

Meine "just the facts" sind fast fertig. "Fast" - denn ich habe die Quellen meiner alten Tests ausgegraben. Ich werde sie ein wenig aktualisieren, und dann werde ich die Quellen mit den Testergebnissen hier in einer Tabelle veröffentlichen.

 
joo: Übrigens, ich würde gerne Ihre "just the facts" sehen.

Genau hier. Siehe meinen zweiten Beitrag auf dieser Seite.

Sie haben übrigens bereits auf meinen Beitrag mit dem Link geantwortet. Der obige C-Code kann in MQL4 leicht nachbearbeitet werden. Bitte sehen Sie sich die Anlage an.

Dateien:
pi.mq4  1 kb
 
Mathemat:

Genau hier. Siehe meinen zweiten Beitrag auf dieser Seite.

Übrigens, Sie haben bereits auf meinen Beitrag mit dem Link geantwortet. Der obige C-Code kann leicht für MQL4 überarbeitet werden. Bitte sehen Sie sich die Anlage an.

Bitte erstellen Sie eine Tabelle mit den Testergebnissen und stellen Sie sie hier ein, damit niemand, der diesen Thread liest, sich durch die Links klicken muss.
 
AlexEro:

Ich habe Ihnen in einer privaten Nachricht einen Link zu den Bildern dieser Ungetüme geschickt - nicht um den digitalen ******ismus der Berufsschüler zu befriedigen.

Glauben Sie mir, Ihr Bild wird die Zahlen hier nicht einmal um einen Prozentpunkt verändern. Machen Sie weiter und veröffentlichen Sie es.

Aber wie lange wird es dauern? Für ein solches Rig sollte man eine gute Kühlung einbauen, z.B. eine Wasserkühlung, wie auf dem nächsten Bild.

 
joo:
Bitte schreiben Sie die Testergebnisse als Tabelle auf und posten Sie sie hier, damit niemand, der diesen Thread liest, durch die Links springen muss.

Es ist kein Tisch. Ein paar Bilder.

Tests von parallelpi_x.cpp-Programmen mit verschiedenen Kompilierungseinstellungen. Beim Vergleich mit MQL4 ist nur das 1. Ergebnis wichtig: 6,723 Sekunden. Dort werden keine Beschleuniger (SSE*, IPP, OML) verwendet.

Aber wenn jemand einen Ruck nehmen und sehen möchte, wie sich die Ergebnisse ändern, wenn man die Beschleuniger einschaltet, ist unten im Anhang ein Archiv mit kompilierten .exe-Dateien und erforderlichen parallelen Bibliotheken. Sie müssen sie nur in einem Verzeichnis ablegen und über die Befehlszeile ausführen.

Natürlich stellen diese Ergebnisse keine Konkurrenz zu den Monstern auf dem Grafikkarten-Array dar.

Dasselbe Programm, umgeschrieben in MQL4:


Das Ergebnis: 22,98 Sekunden, d. h. 3,4 Mal mehr. Aber dort gibt es keine Arbeit mit Arrays, und das kann für uns entscheidend sein. Im Anhang finden Sie den Code des Skripts.

Dateien:
release.zip  278 kb
pi_1.mq4  1 kb
 
joo:

MQL5 ist 20 Mal schneller als MQL4.

C++ ist 6 Mal schneller als MQL5 (bei Verwendung von Bibliotheken, die die Ausführung automatisch parallelisieren).

Insgesamt: 20*6=120 Mal.

Wenn Sie GPU-Berechnungen verwenden, wird es sogar noch schneller sein.

GESAMT: 10/120=0,083c.

etwa so.

Also, Fanfare! Es gibt vier verschiedene Compiler im Ring, die um den Sieg konkurrieren... zu kompilieren.

Nun, das ist natürlich ein Witz. Aber im Ernst: Es wurden sechs Tests geschrieben. Die Ergebnisse sind in der nachstehenden Tabelle aufgeführt. Und die Kommentare sind noch niedriger. :)

*Tests
Beschreibung
Name der ausführbaren Datei
Testergebnis, s
1
Ex5-Skript und Ex5-Bibliothek
1 MLP MQL compiler.ex5
97.2
2
Ex5-Skript und C++ dll-Bibliothek, MS-Compiler, alle Optimierungen deaktiviert
2 MLP MS-Compiler nonOpt.ex5
42.6
3
Ex5-Skript und C++ dll-Bibliothek, MS-Compiler, alle Optimierungen auf
3 MLP MS Compiler Opt.ex5
27.1
4
Ex5-Skript und C++ dll-Bibliothek, Intel-Compiler, einschließlich aller Optimierungen
4 MLP Intel compiler.ex5
12.5
5
Ex4-Skript und Ex4-Bibliothek
5 MLP MQL4 compiler.ex4
669.6
6
Ex4-Skript und C++ dll-Bibliothek, Intel-Compiler, alle Optimierungen aktiviert
6 MLP MQL4 Intel compiler.ex4
10.7




Als Test wird ein 4-schichtiges neuronales Netz MLP 80-100-100-10 verwendet, das als steckbare Bibliotheken ex4, ex5 und dll konzipiert ist.

Wir sehen das:

- die Ergebnisse der verbundenen ex5-Bibliotheken und ex4-Bibliotheken unterscheiden sich um den Faktor 6,8 (1 und 5 Tests)

- die Ergebnisse der angeschlossenen eX5-Bibliotheken und der dll-Bibliotheken des Intel-Compilers unterscheiden sich um den Faktor 7,8 (1 und 4 Tests)

- die Ergebnisse der angeschlossenen eX4-Bibliotheken und der dll-Bibliotheken des Intel-Compilers unterscheiden sich 62,5 Mal (Tests 5 und 6)

Schlussfolgerungen:

Natürlich habe ich ein wenig übertrieben, was den 20-fachen Unterschied zwischen MQL4 und MQL5 angeht. Ein solcher Unterschied tritt (ich erinnere mich, wo mir diese Zahl in den Sinn kam) bei intensiver Nutzung von 2-dimensionalen Arrays auf, aber ich bin zu faul, die Tests speziell für diese Besonderheit zu optimieren (außerdem entspricht es nicht den typischen Fällen von "schweren" Berechnungen - typische Fälle werden in den Tests dargestellt), daher können Sie mich beim Wort nehmen oder selbst einen Test schreiben. Wir können also von einem 6,8-fachen Geschwindigkeitsunterschied zwischen MQL4 und MQL5 und einem 62,5-fachen Unterschied zwischen MQL4 und C++ sprechen.

Und diese Tatsache entmutigt mich - ahtung! - Das MQL4-Skript, das die DLL aufgerufen hat, arbeitet schneller als das MQL5-Skript mit der gleichen DLL... Was bedeutet das? - Ich habe es überprüft, mehrmals ausgeführt, keine Fehler. Die Entwickler scheinen gesagt zu haben, dass MT5 im Vergleich zu MT4 optimierte DLL-Aufrufe hat. Entweder sind es Eigenheiten der Builds (MT5 574 und MT4 409) und die Tests sind nicht ganz korrekt oder... Ich weiß es nicht.


Wer es braucht, kann Grid (kompilierte dll von 4 oder 6 Tests - sehr schnelles Grid) verwenden, Quellen sind beigefügt. Die Anzahl der Neuronen in jeder Schicht ist konfigurierbar. Aber der Optimierer (sowohl für 4 als auch für 5) unterstützt nicht mehr als 64 Parameter, außerdem muss man einen großen Schritt verwenden, so dass dieses Monster (wie in Tests, 80-100-100-10, 19210 zu optimierende Parameter!) nicht mit Standardmitteln trainiert werden kann, man muss benutzerdefinierte Optimierungsalgorithmen verwenden. Übrigens, für diese (und nicht nur für diese) habe ich beschlossen, ein kostenpflichtiges Tool (wird in den Shop, natürlich), die es ermöglichen, sowohl 4 und 5 Schritt benutzerdefinierte Optimierer zu trainieren unbegrenzte Anzahl von Parametern, auch 0 Schritt.

Dateien:
tests_mlp.zip  71 kb
 

Das ist überzeugend, Joo, sehr überzeugend sogar. Aber es gibt ein paar Punkte.

Erstens: Bei der Kompilierung durch MS ist selbst das beste Ergebnis (Option 3) weniger als viermal besser als Option 1.

Zweitens glaube ich nicht, dass der Intel-All-Inclusive-Compiler um mehr als einen Faktor 2 besser ist als MS. Sie haben also weitere Optimierungen bei Intel aktiviert.

Auf jeden Fall - beeindruckend. Warten, bis der Tisch bis zum Ende gefüllt ist.

Jetzt weiß ich, wozu diese Reihen von Grafikkarten da sind: um diese Berechnungen bei jedem Tick durchzuführen!

 
Mathemat:

Zweitens glaube ich nicht, dass Intels All-inclusive-Compiler mehr als doppelt so gut ist wie der von MS. Intel hat also mehr Optimierungen aktiviert.

Welche es gibt - alle. Es macht keinen Sinn, einen Compiler zu verwenden, ohne alle seine Funktionen zu nutzen - die Fische suchen dort, wo es am tiefsten ist, während der Programmierer nach dem besten Compiler sucht. In diesem Sinne sind die Compiler von MQ nicht angepasst, so dass wir davon ausgehen können, dass sie optimal abgestimmt sind.
 

Und diese Tatsache hat mich entmutigt, akhtung! - MQL4-Skript, das die DLL aufruft, arbeitet schneller als MQL5-Skript mit der gleichen DLL... Was bedeutet das? - Ich habe es überprüft, mehrmals ausgeführt, keine Fehler. Die Entwickler scheinen gesagt zu haben, dass MT5 im Vergleich zu MT4 optimierte DLL-Aufrufe hat. Entweder sind es Eigenheiten der Builds (MT5 574 und MT4 409) und die Tests sind nicht ganz korrekt oder... Ich weiß es nicht.



Vielen Dank, es ist sehr anschaulich und illustrativ.

Ich denke, wir sollten die einzelnen Prozentsätze nicht so sehr vergleichen, denn die CPU-Geschwindigkeit (wenn man sie in MegaHertz MHz oder GigaHertz, GHz) des aufgehängten Computers ... ist Null.

Wenn der Geschwindigkeitsunterschied etwa 10-20 % beträgt, ist es sinnvoll, sich mehr Gedanken über die Zuverlässigkeit des Programms und seiner Umgebung sowie die Fehlerbehandlung zu machen. Wenn Sie z. B. eine in MSC erstellte DLL verwenden, sollten Sie darauf achten, wie sie mit MSVCRT.DLL verknüpft ist und welche Version sie hat, da sie in der Umgebung des komplizierten terminal.exe-Prozesses und in der Umgebung des MSVCRT.DLL-Initialisierungsblocks funktionieren muss, die sich von Version zu Version unterscheiden kann usw. Für die normale Fehlerbehandlung in der DLL erstellt (und überwacht) MetaTrader eine Kette von Ausnahmen, die an sich das gesamte System verlangsamt und die DLL aufruft usw.

Zum Thema Geschwindigkeit der Neuronen:

hier ist ein Mann, der die FANN-Bibliothek für neuronale Netze in OpenCL übersetzt hat und eine 20-fache Beschleunigung auf einer durchschnittlichen GTX 285-Karte behauptet:

"Auf meiner aktuellen GPU (GeForce 9500 GT) erhalte ich ungefähr die gleiche Geschwindigkeit zwischen der normalen und der OpenCL-Version. Ich habe derzeit eine GTX 285 bestellt, die mindestens 10x schneller sein sollte. Mit einer modernen GPU wie der GTX 480 erwarte ich, dass er mindestens 20 Mal schneller ist als mein 2,26 GHz Nehalem Mac Pro. "

...

"Ja, mit der neuen Karte (GTX 285) läuft der Kernel etwa 20 Mal schneller."

http://leenissen.dk/fann/forum/viewtopic.php?f=2&t=658&start=0

http://leenissen.dk/fann/wp/

 

Fast jeder hat das natürlich schon erlebt.

Für fanatische B4-Fans, die nicht mql5.com besuchen: OpenCL: Interne Implementierungstests in MQL5

Aber fast fertig.

Ich vermute, dass es für Autohändler, die andere Plattformen nutzen, sehr attraktiv sein wird.

Grund der Beschwerde: