x64 platformları için yeni MQL5 derleyicisinin test edilmesi - hesaplamaların 2'den 10'a hızlandırılması!

 

Daha önce söz verdiğimiz gibi, MetaTrader 5'in 64-bit sürümü için optimize edilmiş yeni bir MQL5 derleyicisi yayınlıyoruz.

Hem terminalin 32 bit sürümleri hem de terminallerin eski sürümleri için oluşturulan kodun tam uyumluluğunu koruduk.

Halihazırda demo sunucumuz MetaQuotes-Demo'da, mevcut yeni işlevlere sahip MetaTrader 5 build 1108'e yükseltebilirsiniz. Yeni optimize edici derleyicinin modunu etkinleştirmek için, [Uzmanlar] bölümündeki Metaeditor.ini dosyasına Optimize=1 anahtarına kaydolmak gerekir:

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


MQL4, MQL5 ve C++ derleyicilerinin performansını test etmek için standart derleyici testleri kullanıldı. Tüm kaynak dosyalar, herkesin kendileri için iki kez kontrol edebilmesi için bir Excel elektronik tablosuyla birlikte eklenir.

Bu arada aşağıdaki ortamdaki test sonuçlarına bir göz atalım:

  • Intel Xeon E5-2687W v3 @3.10 Ghz, 20 çekirdek, 32 Gb DDR4 2100
  • MetaTrader 4'te MQL4 yapı 794
  • MetaTrader 5'te MQL5 yapı 1111 x64, normal mod
  • MetaTrader 5 build 1111 x64 üzerinde MQL5, yeni derleyici, Optimize=1 modu
  • Visual Studio 2012 Güncelleme 4'te C++, x64 kodu, maksimum optimizasyon
  • milisaniye cinsinden süre, ne kadar düşükse o kadar iyi

Ölçek MT4 794 MT5 1111x64
MT5 1111 Yeni C++x64 Yorum
TestAckermann 3718 3109 0 0 İdeal olarak, iki derleyici, tüm kodu atarak derlemedeki hesaplamaları optimize edebildi.
TestArrays 15063 2531 203 31 Hala geliştirmek için yerimiz var
TestKabarcıkSıralama 10609 2484 656 860 Şaşırtıcı bir şekilde, MQL5 balon sıralamada liderliği aldı
deneme çağrısı 922 891 0 0 İdeal olarak, iki derleyici, tüm kodu atarak derlemedeki hesaplamaları optimize edebildi.
TestFibo 2547 1187 0 0 İdeal olarak, iki derleyici, tüm kodu atarak derlemedeki hesaplamaları optimize edebildi.
TestMatrisi 15375 4359 422 281 Hala geliştirmek için yerimiz var
TestMoments 5719 4323 4078 0 Belki daha fazla optimizasyon yöntemi ekleyerek, kodu MSVC olarak atabiliriz.
Testİç İçe Döngü 6219 6141 0 0 İdeal olarak, iki derleyici, tüm kodu atarak derlemedeki hesaplamaları optimize edebildi.
TestPiHesaplanmış 5047 3500 1875 1859 MSVC ile burun deliğinden burun deliğine
TestRandom 2375 1828 468 438 MSVC ile hemen hemen aynı
TestElek 13578 4031 875 515 Kapat
TestString 187 218 422 266 MSVC'yi optimize edelim ve sollayalım, bu yetersiz optimizasyon nedeniyle geçici bir başarısızlıktır (eller ulaşmadı)
TestStrPrep 3938 3328 1703 1875 MSVC'den daha hızlı
TestStrRev 4000 3141 2719 438 bunu çözmeliyim
TestStrSum 5344 2812 2844 0 Belki daha fazla optimizasyon yöntemi ekleyerek, kodu MSVC olarak atabiliriz.


Ayrıntılı bir tablo görmek için lütfen üzerine tıklayın.


Hangi sonuçlar:

  1. MQL4, aynı derleyiciye dayalı olsa bile MQL5'e ciddi şekilde kaybeder

    MQL5, MQL4'ten yüzde onlarca ile birkaç kat arasında daha hızlıdır. Çalışma zamanı ve 32 bit kaybının nedeni. MetaTrader 5, çok daha verimli ve sürekli gelişen bir yürütme ortamına sahiptir.

  2. Yeni 64-bit MQL5 derleyicisi, mevcut MQL5 derleyicisinden 2 ila 10 kat daha hızlıdır

    Yeni derleyicinin geliştirilmesi çok uzun zaman aldı, ancak getirisi inanılmazdı. Dize işlemlerinin optimizasyonu ile ilgili sorular var ama onları da hızlandırmaya çalışacağız.

  3. Yeni derleyici, Visual Studio 2012 x64 derleyicisinin kalitesine ve hızına yaklaştı

    Hala test yaptığımız için tüm optimizasyon yöntemlerini henüz etkinleştirmedik. Bu nedenle, sonuçlar daha da iyi olacaktır.


Tüccarlara ne veriyor?

Aynı anda daha fazla hesaplama yapma ve DLL'ye geçiş hakkında daha az düşünme yeteneği. Bu özellikle ağır matematik yapanlar için önemlidir.

 

Aferin!

 

Alanında profesyoneller!

Teşekkür ederim!

 

Ayrıca, 20 Mayıs'a kadarki bir sonraki sürümde, büyük olasılıkla geçmiş verilere dayalı bir hata ayıklayıcı kullanıma sunulacaktır.

Sadece iFX Expo'da 26-28 Mayıs'ta göstereceğiz.

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. Yeni 64-bit MQL5 derleyicisi, mevcut MQL5 derleyicisinden 2 ila 10 kat daha hızlıdır

    Yeni derleyicinin geliştirilmesi çok uzun zaman aldı, ancak getirisi inanılmazdı. Dize işlemlerinin optimizasyonu ile ilgili sorular var ama onları da hızlandırmaya çalışacağız.

  2. Yeni derleyici, Visual Studio 2012 x64 derleyicisinin kalitesine ve hızına yaklaştı

    Hala test yaptığımız için tüm optimizasyon yöntemlerini henüz etkinleştirmedik. Bu nedenle, sonuçlar daha da iyileşecektir.


Ayrıca, 20 Mayıs'a kadarki bir sonraki sürümde, büyük olasılıkla geçmiş verilere dayalı bir hata ayıklayıcı kullanıma sunulacaktır.

Sadece iFX Expo'da 26-28 Mayıs'ta göstereceğiz.

Çok hoş bir haber, teşekkürler!
 
Teşekkürler, başarılarınızın devamını dilerim!
 
Renat Fatkhullin :

Yeni derleyici, Visual Studio 2012 x64 derleyicisinin kalitesine ve hızına yaklaştı

Hala test yaptığımız için tüm optimizasyon yöntemlerini henüz etkinleştirmedik. Bu nedenle, sonuçlar daha da iyileşecektir.

İyi haberler ! İyi !

Renat Fatkhullin'in fotoğrafı.

Aynı anda daha fazla hesaplama yapma ve DLL'ye geçiş hakkında daha az düşünme yeteneği. Bu özellikle ağır matematik yapanlar için önemlidir.


Evet, gerçekten harici DLL'ler gerektirecek herhangi bir görev düşünemiyorum.


Renat Fatkhullin'in fotoğrafı.

Ayrıca, 20 Mayıs'a kadarki bir sonraki sürümde, büyük olasılıkla geçmiş verilere dayalı bir hata ayıklayıcı kullanıma sunulacaktır.

Ve bu gerçekten en çok ihtiyaç duyulan özellik. Bunun için - gerçekten çok teşekkür ederim.

Şahsen, hala bir sorum var - dizilere işaretçiler. Özel diziler için sorun, diziyi bir sınıfa sararak çözülür.

Ancak OnCalculate() işlevine iletilen diziler için, verileri ilk olarak dahili arabelleklere kopyalamanız ve ancak ondan sonra işaretçileri çözümleyici ve işleyici nesnelerinin içine geçirmeniz gerekir. Bir keresinde memcpy kullanarak işaretçileri geçmeye çalıştım, ancak bir nedenden dolayı hız neredeyse aynıydı ve bence bu tür "hileler" kullanılmamalıdır.

Belki bir erişim türü kullanmak daha kabul edilebilir olacaktır. Genel olarak görev, bir dizinin öğelerine onu kopyalamadan erişmektir.

 
George Merts :

Evet, gerçekten harici DLL'ler gerektirecek herhangi bir görev düşünemiyorum.

Örneğin, terminaller arası iletişim.
 
Robotlarımdan birini optimizasyon ile derlemeye çalıştım.
MqlTradeRequest yapısının bir örneğinin sapma alanına bir girdi parametresi atamanın bir kod oluşturma hatasına yol açtığı bulundu.
Varsayımsal örnek (diğer her şey kaldırıldı):
 sinput ulong deviation = 100 ;
int OnInit ()
  {
        MqlTradeRequest request =
        {
                 0
        };
        request.deviation = deviation;
//---
   return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
" Kod oluşturma hatası 1 1 " alıyorum

Yalnızca "100" atarsanız:

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

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

...o zaman derleme hatasız çalışacaktır. Lütfen dikkat, AMD Athlon II X4 645, 3.1 GHz işlemcim var. Belki de bu önemlidir (tam anlamıyla bu hafta AMD'de belirli bir hata servis masasıyla birlikte MQL4'te yakalandı).

Derleyici başka hiçbir şeyden şikayet etmez.

 
Hatayı bildirdiğiniz için teşekkürler - düzelteceğiz.