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

 
Aleksey Vyazmikin:

Wurdeder Profiler schon vorgeschlagen?

 
Aleksey Vyazmikin:

Option Nr. 2. Nehmen Sie jede Zeile der Schrift:

if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)

in eine separate Funktion. Versuchen Sie, Renate zu glauben:)

D.h. das Ergebnis sollte am Ende so aussehen:

if(Test_P==1000 && Func1000()) CalcTest = CalcTest+1;
if(Test_P==1001 && Func1001()) CalcTest = CalcTest+1;
usw.
 
Aleksey Vyazmikin:

Ja, es gibt einen Link zum EA hier.

Es ist zwei Tage her - die Zusammenstellung beträgt 7%...

'Tree_Brut_TestPL_F_Fast.mq5'
'Normal.mqh'
'Math.mqh'
code generated
0 error(s), 0 warning(s), 1456022 msec elapsed

Auf dieser Maschine.

2019.10.15 09:08:34.692 Terminal        Windows 10 (build 18362) x64, IE 11, UAC, Intel Xeon  E5-2630 v4 @ 2.20 GHz, Memory: 58760 / 65457 Mb, Disk: 20 / 224 Gb, GMT+2
 
Alexey Kozitsyn:

Wurdeder Profiler schon angeboten?

Nein, hat es nicht - was genau soll ich denn darin sehen? Ich weiß nicht wirklich, wie man es benutzt.


Alexey Kozitsyn:

Option 2. Um jede Zeile des Typs zu setzen:

in eine separate Funktion. Versuchen Sie, Renate zu glauben:)

D.h. das Ergebnis sollte am Ende so sein:

usw.

Es ist die "case :"-Variante und nicht die "if"-Variante, die hier einen erheblichen Geschwindigkeitsgewinn bringt. Wenn Sie es sogar schaffen, wie

               switch(Test_P)
                    {
                     case 1000: F1(); break;
                     case 1001: F2(); break;
                    }
   

Der Code wird noch größer werden. Aber Sie können natürlich die Kompilierungszeit und die Leistung vergleichen...

 
Slava:

An diesem Auto.

Ja, der Code ist nicht groß, ich habe keinen 500 Megabyte großen Code gepostet - wenn du ihn brauchst, kann ich ihn...

 
Aleksey Vyazmikin:

Welche anderen Mittel schlagen Sie vor? Das ist die schnellste Möglichkeit, die mir bisher eingefallen ist...

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 besteht dann in 74 Tausend Fällen kein Bedarf mehr...

 
Aleksey Vyazmikin:

1. Nein, haben sie nicht - was genau soll ich denn darin sehen? Ich weiß nicht wirklich, wie man es benutzt.


2. Es ist die "case :"-Variante und nicht die "if"-Variante, die einen erheblichen Geschwindigkeitszuwachs bewirkt. Wenn Sie es sogar schaffen, wie

Der Code wird noch schneller werden... Aber Sie können sicherlich die Kompilierungszeit und Leistung vergleichen...

(1) Sie werden dort die langsamsten Teile des Codes sehen. Obwohl... Eine andere Frage ist, 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?

 
@Renat Fatkhullin, bitte klären Sie, kann der Profiler helfen, Kompilierungsengpässe aufzudecken? Oder verwenden Sie es nur, um die Codegeschwindigkeit in Echtzeit zu überprüfen?
 
Aleksey Vyazmikin:

Ich würde diese Aufzählung, sagen wir, in eine externe CSV-Datei übertragen, aber dann entsteht ein weiteres Problem - Zeitverschwendung, um die Datei zu lesen, und außerdem, wenn ich Aufgaben an Agenten verteile, kann ich nicht jedem Agenten 500 Megabyte schicken, während EA-Code an einen Agenten geschickt (oder nicht?) und zwischen ihnen aufgeteilt wird.

Und eine andere Frage, mein Code ist leicht von 7zip von 500 bis 15 Megabyte komprimiert, aber nach der Komprimierung wird die Datei um 500 sein - warum ist es so - keine Möglichkeit, primitive Kompression (zumindest bis zu 100 Megabyte) zu tun?

Komprimieren Sie die Datei mit zip. Lesen Sie zip, dekomprimieren Sie innen. Das ist schneller als die Übertragung von 500 MB EA (die auch an jeden Agenten übertragen werden).

 
Alexey Kozitsyn:
@Renat Fatkhullin, könnten Sie bitte klarstellen, ob der Profiler helfen kann, Kompilierungsengpässe aufzudecken? Oder verwenden Sie es nur, um die Codegeschwindigkeit in Echtzeit zu überprüfen?

Der Profiler hat nichts mit der Kompilierung zu tun.

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...
Grund der Beschwerde: