Teste o novo compilador MQL5 para plataformas x64 - cálculos 2 a 10 vezes mais rápidos! - página 20

 
Denis Kirichenko:

Otimizar a lógica. Por exemplo, trabalhar com arrays e loops. Tente embalar os valores dos critérios em uma matriz. E fazer verificações em loop. Talvez não haja necessidade em 74 mil casos então...

É claro que, em teoria, você pode gerar cada fio por um longo hash, e passar apenas esses hashes, e depois usá-lo para gerar tudo - mas não tenho certeza de que isso será rápido e a tarefa não é simples...

 
Alexey Kozitsyn:

1. você verá os lugares mais "lentos" do código. Embora... é outra questão se ela afeta a compilação...

2. Como você quiser: você pode usar o case. Você foi aconselhado a dividi-lo em pequenas funções. Separar e testar. Sim, é claro, o código vai ficar maior. Mas o que fazer.

E aqui eu reescrevi o código em funções - no apêndice.

Notei imediatamente que o código anterior levou 14428 kb após a compilação e o novo levou 9447 kb - já estou surpreso com a diferença de 5 Mbytes - de onde!

Mais adiante, pela velocidade de compilação, o primeiro

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

nova versão

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

A nova versão é 5,46 vezes mais rápida de compilar.

E aqui está a versão anterior em termos de velocidade:

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

a nova versão.

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

E aqui vemos que a primeira passagem de agentes (4 agentes) é muito lenta - eu tentei muitas vezes - o resultado é estável, mas no tronco

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

O que isso tem a ver agora, talvez@Renat Fatkhullin ou@Slava possa me dizer por que ocorre tal efeito?

Arquivos anexados:
 
Andrey Khatimlianskii:

O arquivo está zipado. Leia o zip, descompacte dentro. Será mais rápido do que transferir um 500 MB EA (também é transferido para cada agente).

Não se descomprime novamente a cada novo passe?

E a leitura do arquivo seria mais rápida do que uma transferência única de....

 
Aleksey Vyazmikin:

Não será então desembalado novamente cada vez que um novo passe é feito?

Sim, e a leitura de um arquivo seria mais rápida do que uma simples passagem....

Sim, pode ser mais lento com a otimização... Mas eu verificaria, tudo está preparado para isso.

 
Andrey Khatimlianskii:

Sim, pode ser mais lento durante a otimização... Mas eu verificaria, tudo está pronto para isso.

O que exatamente está pronto - eu não entendo.

 
Aleksey Vyazmikin:

O que exatamente está pronto - eu não entendo.

Trabalhando com arquivos zip.

 
Andrey Khatimlianskii:

Trabalhando com arquivos zip.

Sim, eu o vi, mas não o experimentei na prática.

É mais um problema para mim na preparação dos dados, ou seja, na tradução do código em uma tabela - terei que processar os dados brutos novamente...

 
Infelizmente, verificou-se que o compilador não consegue lidar com códigos grandes - recebeu o erro "EX5 write error" - nenhum outro erro. Seria bom escrever sobre as limitações no manual do usuário!
 
Fez uma versão pública do EA, agora estou verificando - compilará ou não - o processo não é rápido, mas agora você pode ver que 46% do código é compilado e já 36 GB de RAM são comidos...
 
Aleksey Vyazmikin:
Fiz uma versão pública do EA, agora estou verificando - compilará ou não - o processo não é rápido, mas agora posso ver que 46% do código está compilado e 36 gigabytes de RAM já foram comidos...

Por favor, me forneça o código para investigar.
Vou verificar por que ele compila tão lentamente e consome tanta memória.

Razão: