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

 
Denis Kirichenko:

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. Tal vez no sea necesario en 74 mil casos entonces...

Por supuesto, en teoría, se puede generar cada cadena mediante un hash largo, y pasar sólo estos hashes, y luego usarlo para generar todo - pero no estoy seguro de que esto sea rápido y la tarea no es sencilla...

 
Alexey Kozitsyn:

1. allí verás los lugares más "lentos" del código. Aunque... otra cuestión es que afecte 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.

Y aquí he reescrito el código en funciones - en el apéndice.

Me he dado cuenta enseguida de que el código anterior ocupaba 14428 kb tras la compilación y el nuevo 9447 kb - ya me sorprende la diferencia de 5 Mbytes - ¡de dónde!

Más adelante, por la velocidad de compilación, la primera

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

nueva versión

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

La nueva versión es 5,46 veces más rápida de compilar.

Y aquí está la versión anterior en términos de velocidad:

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%)

la nueva versión.

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%)

Y aquí vemos que la primera pasada de agentes (4 agentes) es muy lenta - lo he probado muchas veces - el resultado es estable, pero en el registro

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

¿Qué tiene que ver con esto ahora, quizás@Renat Fatkhullin o@Slava puedan decirme por qué se produce ese efecto?

Archivos adjuntos:
 
Andrey Khatimlianskii:

El archivo está comprimido. Lee el zip, descomprime el interior. Será más rápido que transferir un EA de 500 MB (también se transfiere a cada agente).

¿No se vuelve a descomprimir con cada nuevo pase?

¿Y la lectura del archivo sería más rápida que una transferencia única de....

 
Aleksey Vyazmikin:

¿No se vuelve a desempaquetar cada vez que se hace un nuevo pase?

Sí, ¿y la lectura de un archivo sería más rápida que una sola pasada....

Sí, puede ser más lento con la optimización... Pero yo lo comprobaría, todo está preparado para ello.

 
Andrey Khatimlianskii:

Sí, puede ser más lento durante la optimización... Pero yo lo comprobaría, todo está preparado para ello.

No entiendo qué es exactamente lo que está preparado.

 
Aleksey Vyazmikin:

No entiendo qué es exactamente lo que está preparado.

Trabajar con archivos zip.

 
Andrey Khatimlianskii:

Trabajar con archivos zip.

Sí, lo he visto, pero no lo he probado en la práctica.

Para mí es más bien un problema la preparación de los datos, es decir, la traducción del código en una tabla: tendré que volver a procesar los datos brutos...

 
Por desgracia, resultó que el compilador no puede hacer frente a un código grande - obtuvo el error "EX5 error de escritura" - ningún otro error. Sería bueno escribir sobre las limitaciones en el manual de usuario.
 
Hice una versión pública del EA, ahora estoy comprobando si compila o no - el proceso no es rápido, pero ahora se puede ver que el 46% del código se compila y ya se come 36 GB de RAM...
 
Aleksey Vyazmikin:
Hice una versión pública del EA, ahora estoy comprobando si compila o no - el proceso no es rápido, pero ahora se puede ver que el 46% del código se compila y ya se come 36 GB de RAM...

Por favor, facilítame el código para investigar.
Comprobaré por qué compila tan lentamente y consume tanta memoria.

Razón de la queja: