x64 플랫폼용 새로운 MQL5 컴파일러 테스트 - 계산 속도가 2배에서 10배로 빨라졌습니다! - 페이지 20

 
Denis Kirichenko :

논리를 최적화합니다. 예를 들어, 배열과 루프로 작업하십시오. 기준 값을 배열로 압축해 보십시오. 주기에서 수행할 검사입니다. 아마도 74,000 건의 필요성이 사라질 것입니다 ...

물론 이론상 긴 해시로 각 행을 생성하고 이 해시만 전송한 다음 모든 것을 생성하는 것이 가능합니다. 그러나 이것이 빠르고 작업이 쉽지 않을지 확신이 서지 않습니다...

 
Alexey Kozitsyn :

1. 코드에서 가장 "제동된" 위치를 볼 수 있습니다. 그래도 ... 여전히 질문이지만 컴파일에 영향을 미치는지 여부는 ...

2. 원하는 대로: 케이스를 통해 할 수 있습니다. 또한 작은 기능으로 분해하는 것이 좋습니다. 분해해서 확인해보세요. 예, 물론 코드가 훨씬 더 늘어날 것입니다. 그래서 뭐 할까.

하지만 코드를 함수로 다시 만들었습니다. 응용 프로그램에서.

컴파일 후 이전 코드가 14428kb를 차지했고 새로운 9447kb(5MB의 차이가 이미 놀랍습니다)가 어디에서 온 것인지 주목됩니다!?

컴파일 속도면에서 이전 버전

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

새로운 버전

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

새 버전은 컴파일 속도가 5.46배 빨라졌습니다!

그러나 속도 측면에서 이전 버전은 다음과 같습니다.

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

새로운 버전

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

그리고 여기에서 에이전트(4 에이전트)의 첫 번째 패스가 매우 느린 것을 볼 수 있습니다. 여러 번 시도했지만 결과는 안정적이지만 로그에는

 2019.10 . 15 14 : 38 : 07.002 Tester   OnTesterInit works too long ...

지금 그 이유는 무엇입니까? @Renat Fatkhullin 또는 @Slava 가 왜 그러한 효과가 있는지 알려줄 것입니다.

 
Andrey Khatimlianskii :

zip으로 파일을 압축합니다. 지퍼를 읽고 내부 포장을 풉니다. 500MB Advisor를 보내는 것보다 빠릅니다(각 에이전트에도 전송됨).

그러면 새 패스마다 다시 포장을 풀지 않습니까?

그리고 파일에서 읽는 것이 일회성 전송보다 빠를 것입니다 ....

 
Aleksey Vyazmikin :

그러면 새 패스마다 다시 포장을 풀지 않습니까?

그리고 파일에서 읽는 것이 일회성 전송보다 빠를 것입니다 ....

예, 최적화할 때 더 느릴 수 있습니다. 그러나 확인하겠습니다. 모든 것이 준비되었습니다.

 
Andrey Khatimlianskii :

예, 최적화할 때 더 느릴 수 있습니다. 그러나 확인하겠습니다. 모든 것이 준비되었습니다.

정확히 준비된 것 - 이해하지 못했습니다.

 
Aleksey Vyazmikin :

정확히 준비된 것 - 이해하지 못했습니다.

zip 아카이브 작업.

 
Andrey Khatimlianskii :

zip 아카이브 작업.

예, 실제로 작동하는 방식을 보았지만 시도하지는 않았습니다.

여기에서 오히려 문제는 나에게 더 큰 범위에서 이것이 데이터 준비에 있다는 것입니다. 코드를 테이블로 변환 - 초기 데이터를 다시 처리해야 합니다...

 
불행히도 컴파일러는 큰 코드에 대처할 수 없다는 것이 밝혀졌습니다. "EX5 쓰기 오류"라는 오류가 발생했습니다. 다른 오류는 없습니다. 사용 설명서에 제한 사항에 대해 작성하는 것이 좋을 것입니다!
 
어드바이저의 공개 버전을 만들었습니다. 이제 컴파일 여부를 확인하고 있습니다. 프로세스가 빠르지 않지만 이제 코드의 46%가 컴파일되고 36GB의 RAM이 이미 컴파일되었음을 알 수 있습니다. 먹었다...
 
Aleksey Vyazmikin :
어드바이저의 공개 버전을 만들었습니다. 이제 컴파일 여부를 확인하고 있습니다. 프로세스가 빠르지 않지만 이제 코드의 46%가 컴파일되고 36GB의 RAM이 이미 컴파일되었음을 알 수 있습니다. 먹었다...

제가 조사할 수 있도록 코드를 제공해 주십시오.
컴파일 속도가 느리고 메모리를 많이 소모하는 이유를 확인하겠습니다.

사유: