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

 
Yury Kulikov :
Örneğin, terminaller arası iletişim.

Eh, böyle sapıklık yapıyorsanız, tabii ki DLL gerekli bir özelliktir...

Ama şahsen, sadece böyle bir görev için, bunun için gerçekten bir DLL'ye ihtiyacım olmadığına karar verdim. Şu anda bir DC'de fiyat teklifi alacak ve yalnızca başka bir DC'ye değil, aynı zamanda MetaTrader'ın olmadığı ticaret için sinyaller gönderecek bir danışman düşünüyorum. (Bu arada DukaKopy, MetaQuotes'in bu saygıdeğer komisyoncuyla ilgilenip ilgilenmediğini merak ediyorum?).

DLL yönünde düşündüm. Ancak paylaşılan dosyaların çok daha güvenli ve daha makul olduğuna karar verdim. MetaTrader'ın dosyaya sinyal yazmasına izin verin. Ve başka bir MetaTrader (veya JForex veya başka biri) - onları okumalarına ve yürütmelerine izin verin.

 

Bu arada, burada dizilere yapılan referansları düşünüyordum ...

Renat , bir öneride bulunuyorum:

Standart Kitaplığımız olduğundan, aşağıdaki prototiple OnCalculate() işlevinin bir türevini eklememeli miyiz:

int   OnCalculate ( const   int Rates_total, // giriş zaman serisinin boyutu
                  const   int prev_calculated, // önceki çağrıda işlenen çubuklar
                  const СiTime* ptTime, // Zaman
                  const CiOpen * poOpen, // Aç
                  const CiHigh* phYüksek, // Yüksek
                  const CiLow* plLow, // Düşük
                  const CiClose* pcClose, // Kapat
                  const CiTickVolume* ptvT ickVolume, // Tick Volume
                  const CiRealVolume* prvRealVolume , // Gerçek Hacim
                  const CiSpread* psS pread // Yayılma
);

?

Benim düşünceme göre, bu MetaTrader'da çok küçük değişiklikler gerektirecektir, ancak diğer yandan işlev, kopyalanmadan işleyici sınıflarına iletilebilen dizilere hemen işaretçiler sağlar. Ve Standart Kütüphane fikri popüler hale geliyor.

 

Gerçek bir büyük proje örneğinde (~ 20.000 satır kaynak kodu) eski ve yeni derleyicinin performansını karşılaştırmanın ilk sonuçlarını aldım.

Derleyicinin eski sürümünde derlenen programın çalışma süresinin sonuçları (4 çalıştırma):

 2015.05 . 02 13 : 48 : 46.641 *** (EURUSD,D1)       Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 6.443 sec. 116 MB RAM used.
2015.05 . 02 13 : 48 : 27.879 *** (EURUSD,D1)       Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 6.427 sec. 116 MB RAM used.
2015.05 . 02 13 : 48 : 12.067 *** (EURUSD,D1)       Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 6.287 sec. 116 MB RAM used.
2015.05 . 02 13 : 47 : 49.719 *** (EURUSD,D1)       Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 8.751 sec. 116 MB RAM used.

Derleyicinin yeni sürümünde derlenen programın çalışma süresinin sonuçları (4 çalıştırma):

 2015.05 . 02 13 : 54 : 18.638 *** (EURUSD,D1) Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 5.475 sec. 116 MB RAM used.
2015.05 . 02 13 : 54 : 01.995 *** (EURUSD,D1) Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 5.616 sec. 116 MB RAM used.
2015.05 . 02 13 : 53 : 43.853 *** (EURUSD,D1) Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 5.444 sec. 116 MB RAM used.
2015.05 . 02 13 : 53 : 25.809 *** (EURUSD,D1) Start ***. Parsing of history deals ( 22575 ) and orders ( 22656 ) completed in 6.147 sec. 116 MB RAM used.

*Programın ikinci ve sonraki lansmanları sıcak bir önbellek üzerinde gerçekleştirildi - gördüğünüz gibi, sıcak bir önbellek performansı %15-30 oranında artırıyor.

Gördüğünüz gibi, yeni derleyicideki çalışmanın sonuçları daha iyi: 20.000'den fazla anlaşma ve siparişin ayrıştırılması ilk durumda ~6,4 saniye, ikinci durumda ~ 5,4 saniye sürdü, yani. %15-20 performans artışı.

Performans iyileştirmesi daha büyük olabilir, ancak çoğu zaman sistem işlev çağrıları tarafından alınır.

 

Yeni derleyici, toplam hacmi 20.000 satırdan fazla kaynak kodu olan projede hiçbir hata bulamadı. Bu projenin derleyicinin eski versiyonu için oluşturulduğu düşünüldüğünde bu harika bir sonuç.

Ancak, yeni derleyici, dosya yollarının yanlış görüntülenmesiyle ilgili birkaç uyarı mesajı yayınladı (eğik çizgiden kaçma gereksinimi):

Bu, birkaç küçük değişiklikle kolayca karşılanabilecek oldukça adil bir gerekliliktir.

Böylece, MQL5'teki büyük projelerin bile yeni derleyici için hazır olduğu ve profesyonel geliştiriciler için buna geçişin zor olmayacağı sonucuna varabiliriz.

 
Sergey Eremin :
...
" Kod oluşturma hatası 1 1 " alıyorum

...

Ben de bu hatayı alıyorum.
 
Matematik ve kendi hesaplamalarındaki ana kazanç.

Sıkı çalışmanın büyük kısmı sistem çağrılarındaysa, hızlanma küçük olacaktır.
 
Renat Fatkhullin :
Matematik ve kendi hesaplamalarındaki ana kazanç.

Sıkı çalışmanın büyük kısmı sistem çağrılarındaysa, hızlanma küçük olacaktır.

Yine de iyi, çünkü minimum sistem işlevleri çağrısıyla kendi ortamınızı yaratabilirsiniz.

(ortamı bir kez sınıflarımıza kopyalıyoruz ve doğrudan onunla çalışıyoruz)

 
George Merts :

Eh, böyle sapıklık yapıyorsanız, tabii ki DLL gerekli bir özelliktir...

Ama şahsen, sadece böyle bir görev için, bunun için gerçekten bir DLL'ye ihtiyacım olmadığına karar verdim. Şu anda bir DC'de fiyat teklifi alacak ve yalnızca başka bir DC'ye değil, aynı zamanda MetaTrader'ın olmadığı ticaret için sinyaller gönderecek bir danışman düşünüyorum. (Bu arada DukaKopy, MetaQuotes'un bu saygıdeğer komisyoncuyla ilgilenip ilgilenmeyeceğini merak ediyorum?).

DLL yönünde düşündüm. Ancak paylaşılan dosyaların çok daha güvenli ve daha makul olduğuna karar verdim. MetaTrader'ın dosyaya sinyal yazmasına izin verin. Ve başka bir MetaTrader (veya JForex veya başka biri) - onları okumalarına ve yürütmelerine izin verin.

adlandırılmış kanallara sahip bir seçenek var, ancak burada bir ara sunucuya ihtiyacınız var,

nasıl yapılır, forumda örnekleri var. işe yaradığı bile söylenebilir.

 
Yury Kulikov :
Örneğin, terminaller arası iletişim.

Alexandr Bryzgalov :

adlandırılmış kanallara sahip bir seçenek var, ancak burada bir ara sunucuya ihtiyacınız var,

nasıl yapılır, forumda örnekleri var. işe yaradığı bile söylenebilir.

Adlandırılmış borulara gerek yok! SQL desteği eklemek için sabırsızlanıyoruz. Tablo üzerinden veri alışverişi. SQL, çok iş parçacıklı, yüksek yüklü sistemler için yerleşik destektir.
 
Vasiliy Sokolov :

Adlandırılmış borulara gerek yok! SQL desteği eklemek için sabırsızlanıyoruz. Tablo üzerinden veri alışverişi. SQL, çok iş parçacıklı, yüksek yüklü sistemler için yerleşik destektir.
ne olduğu hakkında konuşulacak, sql olacak, ondan bahsetmek mümkün olacak)