Testen des neuen MQL5-Compilers für x64-Plattformen - 2 bis 10 Mal schnellere Berechnungen! - Seite 20

 
Denis Kirichenko:

Optimieren Sie die Logik. Arbeiten Sie zum Beispiel mit Arrays und Schleifen. Versuchen Sie, die Kriterienwerte in ein Array zu packen. Und Kontrollen in einer Schleife durchführen. Vielleicht gibt es dann in 74 Tausend Fällen keinen Bedarf mehr...

Natürlich kann man theoretisch jede Zeichenkette durch einen langen Hash generieren und nur diese Hashes übergeben, und dann alles damit generieren - aber ich bin mir nicht sicher, ob das schnell geht und die Aufgabe ist nicht einfach...

 
Alexey Kozitsyn:

1. Sie werden dort die "langsamsten" Stellen im Code sehen. Obwohl... Es ist eine andere Frage, ob es die Kompilierung beeinflusst...

2. Wie Sie möchten: Sie können Case verwenden. Es wurde Ihnen geraten, sie in kleine Funktionen aufzuteilen. Brechen Sie es auf und testen Sie es. Ja, natürlich wird der Code größer werden. Aber was ist zu tun?

Und hier habe ich den Code in Funktionen umgeschrieben - im Anhang.

Mir ist sofort aufgefallen, dass der vorherige Code nach dem Kompilieren 14428 kb brauchte und der neue 9447 kb - ich bin schon überrascht über den Unterschied von 5 Mbytes - woher!

Weiterhin durch die Kompilierungsgeschwindigkeit, die ehemalige

0 error(s), 0 warning(s), 2109302 msec elapsed

neue Version

0 error(s), 0 warning(s), 386131 msec elapsed

Die neue Version ist 5,46 Mal schneller zu kompilieren.

Und hier ist die vorherige Version in Bezug auf die Geschwindigkeit:

2019.10.15 14:35:47.593 Core 1  pass 0 returned result 1001000.000000 in 0:00:29.555
2019.10.15 14:35:47.595 Core 3  pass 4 returned result 1001000.000000 in 0:00:29.490
2019.10.15 14:35:47.605 Core 2  pass 2 returned result 1001000.000000 in 0:00:29.540
2019.10.15 14:35:47.641 Core 4  pass 6 returned result 1001000.000000 in 0:00:29.541
2019.10.15 14:36:15.511 Core 2  pass 3 returned result 1001000.000000 in 0:00:27.907
2019.10.15 14:36:15.523 Core 1  pass 1 returned result 1001000.000000 in 0:00:27.932
2019.10.15 14:36:15.535 Core 3  pass 5 returned result 1001000.000000 in 0:00:27.942
2019.10.15 14:36:15.537 Core 4  pass 7 returned result 1001000.000000 in 0:00:27.897
2019.10.15 14:36:15.537 Tester  optimization finished, total passes 8
2019.10.15 14:36:15.547 Statistics      optimization done in 0 minutes 58 seconds
2019.10.15 14:36:15.547 Statistics      shortest pass 0:00:27.897, longest pass 0:00:29.555, average pass 0:00:28.725
2019.10.15 14:36:15.547 Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.15 14:36:15.547 Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

die neue Version.

2019.10.15 14:33:51.458 Core 3  pass 6 returned result 1001000.000000 in 0:01:01.840
2019.10.15 14:33:51.485 Core 2  pass 4 returned result 1001000.000000 in 0:01:01.867
2019.10.15 14:33:51.521 Core 1  pass 2 returned result 1001000.000000 in 0:01:01.903
2019.10.15 14:33:51.524 Core 4  pass 0 returned result 1001000.000000 in 0:01:01.906
2019.10.15 14:34:18.802 Core 3  pass 7 returned result 1001000.000000 in 0:00:27.346
2019.10.15 14:34:18.837 Core 2  pass 5 returned result 1001000.000000 in 0:00:27.354
2019.10.15 14:34:18.892 Core 4  pass 1 returned result 1001000.000000 in 0:00:27.370
2019.10.15 14:34:18.922 Core 1  pass 3 returned result 1001000.000000 in 0:00:27.403
2019.10.15 14:34:18.922 Tester  optimization finished, total passes 8
2019.10.15 14:34:18.932 Statistics      optimization done in 1 minutes 29 seconds
2019.10.15 14:34:18.932 Statistics      shortest pass 0:00:27.346, longest pass 0:01:01.906, average pass 0:00:44.623
2019.10.15 14:34:18.932 Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.15 14:34:18.932 Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Und hier sehen wir, dass der erste Durchlauf von Agenten (4 Agenten) sehr langsam ist - ich habe es viele Male versucht - das Ergebnis ist stabil, aber im Protokoll

2019.10.15 14:38:07.002 Tester  OnTesterInit works too long...

Was hat das jetzt damit zu tun, vielleicht kann mir@Renat Fatkhullin oder@Slava sagen, warum ein solcher Effekt auftritt?

Dateien:
 
Andrey Khatimlianskii:

Die Datei ist gezippt. Lesen Sie den Reißverschluss, entpacken Sie ihn. Das ist schneller als die Übertragung eines 500 MB großen EA (der auch an jeden Agenten übertragen wird).

Wird sie dann nicht bei jedem neuen Durchgang wieder dekomprimiert?

Ja, und wäre das Lesen aus der Datei schneller als eine einmalige Übertragung von....

 
Aleksey Vyazmikin:

Wird sie dann nicht jedes Mal wieder ausgepackt, wenn ein neuer Pass gemacht wird?

Ja, und wäre das Lesen aus einer Datei schneller als ein einzelner Pass....

Ja, es könnte mit der Optimierung langsamer sein... Aber ich würde überprüfen, ob alles dafür vorbereitet ist.

 
Andrey Khatimlianskii:

Ja, es könnte während der Optimierung langsamer sein... Aber ich würde prüfen, ob alles dafür bereit ist.

Was genau ist bereit - ich verstehe es nicht.

 
Aleksey Vyazmikin:

Was genau ist bereit - ich verstehe es nicht.

Arbeiten mit Zip-Archiven.

 
Andrey Khatimlianskii:

Arbeiten mit Zip-Archiven.

Ja, das habe ich gesehen, aber noch nicht in der Praxis ausprobiert.

Das Problem liegt für mich eher in der Datenaufbereitung, d. h. in der Übersetzung des Codes in eine Tabelle - ich muss die Rohdaten erneut verarbeiten...

 
Leider stellte sich heraus, dass der Compiler mit großem Code nicht zurechtkommt - er bekam die Fehlermeldung "EX5 write error" - keine anderen Fehler. Es wäre gut, die Einschränkungen im Benutzerhandbuch zu beschreiben!
 
Ich habe eine öffentliche Version des EA erstellt, jetzt prüfe ich, ob er sich kompilieren lässt oder nicht - der Prozess ist nicht schnell, aber jetzt kann ich sehen, dass 46% des Codes kompiliert sind und 36 Gigabyte RAM bereits verbraucht wurden...
 
Aleksey Vyazmikin:
Ich habe eine öffentliche Version des EA erstellt, jetzt prüfe ich, ob er kompiliert werden kann oder nicht - der Prozess ist nicht schnell, aber jetzt kann man sehen, dass 46% des Codes kompiliert sind und bereits 36 GB RAM verbraucht sind...

Bitte stellen Sie mir den zu untersuchenden Code zur Verfügung.
Ich werde prüfen, warum es so langsam kompiliert und so viel Speicher verbraucht.