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

 

앞서 약속드린 대로 MetaTrader 5의 64비트 버전에 최적화된 새로운 MQL5 컴파일러를 출시합니다.

32비트 버전의 터미널과 이전 버전의 터미널 모두에 대해 생성된 코드의 완전한 호환성을 유지했습니다.

이미 데모 서버 MetaQuotes-Demo에서 새로운 기능을 사용할 수 있는 MetaTrader 5 빌드 1108로 업그레이드할 수 있습니다. 새로운 최적화 컴파일러의 모드를 활성화하려면 [Experts] 섹션의 metaeditor.ini에 Optimize=1 키를 등록해야 합니다.

[Experts]
Author=Copyright 2014 , MetaQuotes Software Corp.
Address=http: //www.mql5.com
Optimize= 1


MQL4, MQL5 및 C++ 컴파일러의 성능을 테스트하기 위해 표준 컴파일러 테스트 가 사용되었습니다. 모든 원본 파일은 Excel 스프레드시트와 함께 첨부되어 누구나 다시 확인할 수 있습니다.

그동안 다음과 같은 환경에서 테스트 결과를 살펴보자.

  • Intel Xeon E5-2687W v3 @3.10Ghz, 20코어, 32Gb DDR4 2100
  • MetaTrader 4 빌드 794의 MQL4
  • MetaTrader 5 빌드 1111 x64의 MQL5, 일반 모드
  • MetaTrader 5 빌드 1111 x64의 MQL5, 새 컴파일러, 최적화=1 모드
  • Visual Studio 2012 업데이트 4의 C++, x64 코드, 최대 최적화
  • 시간(밀리초)은 낮을수록 좋습니다.

시험 MT4 794 MT5 1111x64
MT5 1111 신규 C++x64 논평
테스트아커만 3718 3109 0 0 이상적으로는 두 컴파일러가 모든 코드를 삭제하여 컴파일 시 계산을 최적화할 수 있었습니다.
테스트 어레이 15063 2531 203 31 아직 개선할 여지가 있습니다
테스트버블정렬 10609 2484 656 860 놀랍게도 MQL5는 버블 정렬에서 선두를 차지했습니다.
테스트 콜 922 891 0 0 이상적으로는 두 컴파일러가 모든 코드를 삭제하여 컴파일 시 계산을 최적화할 수 있었습니다.
테스트피보 2547 1187 0 0 이상적으로는 두 컴파일러가 모든 코드를 삭제하여 컴파일 시 계산을 최적화할 수 있었습니다.
테스트매트릭스 15375 4359 422 281 아직 개선할 여지가 있습니다
테스트 모멘트 5719 4323 4078 0 아마도 더 많은 최적화 방법을 포함하여 코드를 MSVC로 버릴 수 있습니다.
TestNestedLoop 6219 6141 0 0 이상적으로는 두 컴파일러가 모든 코드를 삭제하여 컴파일 시 계산을 최적화할 수 있었습니다.
TestPiCalculated 5047 3500 1875년 1859년 MSVC로 콧구멍에서 콧구멍으로
테스트랜덤 2375 1828년 468 438 MSVC와 거의 동일
테스트시브 13578 4031 875 515 닫다
테스트 문자열 187 218 422 266 MSVC를 최적화하고 추월합시다. 이것은 최적화 부족으로 인한 일시적인 실패입니다(손이 닿지 않음)
테스트스트렙 3938 3328 1703 1875년 MSVC보다 빠름
TestStrRev 4000 3141 2719 438 알아내야 해
TestStrSum 5344 2812 2844 0 아마도 더 많은 최적화 방법을 포함하여 코드를 MSVC로 버릴 수 있습니다.


자세한 차트를 보려면 클릭하십시오.


어떤 결론:

  1. MQL4는 동일한 컴파일러를 기반으로 해도 MQL5에 심각하게 집니다.

    MQL5는 MQL4보다 수십 퍼센트에서 몇 배 빠릅니다. 런타임 및 32비트 손실의 원인. MetaTrader 5는 훨씬 더 효율적이고 지속적으로 발전하는 실행 환경을 갖추고 있습니다.

  2. 새로운 64비트 MQL5 컴파일러는 현재 MQL5 컴파일러보다 2~10배 빠릅니다.

    새로운 컴파일러의 개발은 매우 오랜 시간이 걸렸지만 결과는 놀라웠습니다. 문자열 연산의 최적화에 대한 질문이 있지만 우리는 또한 속도를 높이려고 노력할 것입니다.

  3. 새로운 컴파일러는 Visual Studio 2012 x64 컴파일러의 품질과 속도에 가까워졌습니다.

    아직 테스트 중이므로 모든 최적화 방법을 활성화하지 않았습니다. 따라서 결과는 더욱 좋아질 것입니다.


그것은 상인에게 무엇을 제공합니까?

동시에 더 많은 계산을 수행하고 DLL로의 전환에 대해 덜 생각할 수 있는 기능. 이것은 무거운 수학을 하는 사람들에게 특히 중요합니다.

 

잘하셨어요!

 

각자의 분야에서 전문가!

고맙습니다!

 

또한 다음 릴리스에서는 5월 20일까지 과거 데이터를 기반으로 하는 디버거를 사용할 수 있을 가능성이 높습니다.

iFX Expo 에서 5월 26-28일에 선보일 예정입니다.

iFX EXPO International 2015
  • iFX EXPO
  • www.ifxexpo.com
Booth 01 Get the world’s fastest HTML5 chart for mobile & desktop, and the highest user-rated mobile apps - with or without trading. Founded in 1998, NetDania pioneered streaming price technology, and have since delivered solutions to global Tier-1 banks, brokers, currency managers, and analysts. With a strong position within corporate FX and...
 

Renat Fatkhullin :

  1. 새로운 64비트 MQL5 컴파일러는 현재 MQL5 컴파일러보다 2~10배 빠릅니다.

    새로운 컴파일러의 개발은 매우 오랜 시간이 걸렸지만 결과는 놀라웠습니다. 문자열 연산의 최적화에 대한 질문이 있지만 우리는 또한 속도를 높이려고 노력할 것입니다.

  2. 새로운 컴파일러는 Visual Studio 2012 x64 컴파일러의 품질과 속도에 가까워졌습니다.

    아직 테스트 중이므로 모든 최적화 방법을 활성화하지 않았습니다. 따라서 결과는 더욱 향상될 것입니다.


또한 다음 릴리스에서는 5월 20일까지 과거 데이터를 기반으로 하는 디버거를 사용할 수 있을 가능성이 높습니다.

iFX Expo 에서 5월 26-28일에 선보일 예정입니다.

매우 반가운 소식입니다. 감사합니다!
 
감사합니다. 계속해서 성공하시길 바랍니다!
 
Renat Fatkhullin :

새로운 컴파일러는 Visual Studio 2012 x64 컴파일러의 품질과 속도에 가까워졌습니다.

아직 테스트 중이므로 모든 최적화 방법을 활성화하지 않았습니다. 따라서 결과는 더욱 좋아질 것입니다.

좋은 소식 ! 괜찮은 !

레나트 팻쿨린 :

동시에 더 많은 계산을 수행하고 DLL로의 전환에 대해 덜 생각할 수 있는 기능. 이것은 무거운 수학을 하는 사람들에게 특히 중요합니다.


예, 외부 DLL이 필요한 작업은 정말 생각나지 않습니다.


레나트 팻쿨린 :

또한 다음 릴리스에서는 5월 20일까지 과거 데이터를 기반으로 하는 디버거를 사용할 수 있을 가능성이 높습니다.

그리고 이것은 정말 가장 필요한 기능입니다. 이것에 대해 - 정말 대단히 감사합니다.

개인적으로 여전히 한 가지 질문이 있습니다. 배열에 대한 포인터입니다. 개인 배열의 경우 이 문제는 배열을 클래스로 래핑하여 해결됩니다.

그러나 OnCalculate() 함수 에 전달된 배열의 경우 데이터를 먼저 내부 버퍼에 복사해야 할 때마다 분석기 및 처리기 개체 내부에 포인터를 전달해야 합니다. 일단 memcpy를 사용하여 포인터를 전달하려고 시도했지만 어떤 이유로 속도가 거의 같았고 제 생각에는 그러한 "트릭"을 사용해서는 안됩니다.

아마도 액세스 유형을 사용하는 것이 더 적합할 것입니다. 일반적으로 작업은 복사하지 않고 배열의 요소에 액세스하는 것입니다.

 
George Merts :

예, 외부 DLL이 필요한 작업은 정말 생각나지 않습니다.

예를 들어, 터미널 간 통신.
 
최적화로 로봇 중 하나를 컴파일하려고 했습니다.
MqlTradeRequest 구조 인스턴스의 편차 필드에 입력 매개변수를 할당하면 코드 생성 오류가 발생하는 것으로 나타났습니다.
가상의 예(다른 모든 것은 제거됨):
 sinput ulong deviation = 100 ;
int OnInit ()
  {
        MqlTradeRequest request =
        {
                 0
        };
        request.deviation = deviation;
//---
   return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
" 코드 생성 오류 1 1 "이 나타납니다.

"100"만 할당하는 경우:

 int OnInit ()
  {
        MqlTradeRequest request =
        {
                 0
        };
        request.deviation = 100 ;
//---
   return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }

...그러면 컴파일이 오류 없이 실행됩니다. 참고로 저는 AMD Athlon II X4 645, 3.1GHz 프로세서를 사용하고 있습니다. 아마도 이것이 중요할 것입니다(말 그대로 이번 주 AMD의 특정 버그가 서비스 데스크의 MQL4에서 포착되었습니다).

컴파일러는 다른 것에 대해 불평하지 않습니다.

 
버그를 신고해 주셔서 감사합니다. 수정하겠습니다.