Probando el nuevo compilador MQL5 para plataformas x64 - ¡Cálculos de 2 a 10 veces más rápidos! - página 19

 
Aleksey Vyazmikin:

¿Se ha sugerido yael perfilador?

 
Aleksey Vyazmikin:

Opción nº 2. Tome cada línea de tipo:

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)

en una función separada. Intenta creer a Renate:)

Es decir, el resultado debería ser así al final:

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

Sí, hay un enlace a la EA aquí.

Han pasado dos días - la compilación es del 7%...

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

En esta máquina.

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:

¿Se ha ofrecido yael perfilador?

No, no lo ha hecho. ¿Qué se supone que debo ver en él? Realmente no sé cómo usarlo.


Alexey Kozitsyn:

Opción 2. Para poner cada cadena de tipo:

en una función separada. Intenta creer a Renat:)

Es decir, el resultado debe ser así al final:

etc.

Es la variante "case :" y no la variante "if" la que da una ganancia de velocidad significativa allí. Si incluso lo haces como

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

El código se hará aún más grande. Pero puede comparar el tiempo de compilación y el rendimiento, por supuesto...

 
Slava:

En este coche.

Sí, ese código no es grande, no he publicado un código de 500 megabytes - si lo necesitas puedo...

 
Aleksey Vyazmikin:

¿Qué otros medios sugiere? Esta es la opción más rápida que se me ha ocurrido hasta ahora...

Optimizar la lógica. Por ejemplo, trabajar con matrices y bucles. Intenta empaquetar los valores de los criterios en un array. Y hacer comprobaciones en bucle. Quizá entonces no sea necesario en 74 mil casos...

 
Aleksey Vyazmikin:

1. No, no lo hicieron. ¿Qué se supone que debo ver en él? Realmente no sé cómo usarlo.


2. es la variante "case :" y no la variante "if" la que da un aumento significativo de la velocidad. Si incluso lo haces como

El código será aún más rápido... Pero sí puedes comparar el tiempo de compilación y el rendimiento...

1. Ahí verás las partes más lentas del código. Aunque... Otra cuestión es si afecta a la compilación...

2. Como quieras: puedes utilizar el caso. Se le aconsejó que lo dividiera en pequeñas funciones. Desmóntalo y pruébalo. Sí, por supuesto, el código se hará más grande. Pero qué hacer.

 
@Renat Fatkhullin, por favor aclara, ¿puede el perfilador ayudar a revelar los cuellos de botella de la compilación? ¿O lo utilizas sólo para comprobar la velocidad del código en tiempo real?
 
Aleksey Vyazmikin:

Podría transferir esta enumeración, digamos, a un archivo CSV externo, pero entonces surge otro problema - pérdida de tiempo para leer el archivo, y además, al repartir las tareas a los agentes no puedo enviar a cada agente 500 megabytes, mientras que el código EA se envía a un agente (¿o no?) y se divide entre ellos.

Y otra pregunta, mi código se comprime fácilmente por 7zip de 500 a 15 megabytes, pero después de la compresión, el archivo será de alrededor de 500 - ¿por qué es así - no hay manera de hacer la compresión primitiva (al menos hasta 100 megabytes)?

Comprimir el archivo por medio de un zip. Leer zip, descomprimir en el interior. Será más rápido que transferir 500 Mb de EA (también se transfiere a cada agente).

 
Alexey Kozitsyn:
@Renat Fatkhullin, ¿podría aclarar que el perfilador puede ayudar a revelar los cuellos de botella de la compilación? ¿O lo utilizas sólo para comprobar la velocidad del código en tiempo real?

El perfilador no tiene nada que ver con la compilación.

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