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

 
Aleksey Vyazmikin :

Zaten bir profil oluşturucu kullanmayı önerdiniz mi?

 
Aleksey Vyazmikin :

Seçenek numarası 2. Her satırı aşağıdaki gibi çıkarın:

 if (Test_P== 1000 ) if (DonProc< 5.5 && Levl_Down_DC<- 7.5 ) CalcTest=CalcTest+ 1 ; //(0.4810127 0.3037975 0.2151899)
                   if (Test_P== 1001 ) if (DonProc< 5.5 && Levl_Down_DC>=- 7.5 && TimeH< 21.5 && TimeH>= 16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5 ) CalcTest=CalcTest+ 1 ; //(0.4400657 0.4072250 0.1527094)
                   if (Test_P== 1002 ) if (DonProc< 5.5 && Levl_Down_DC>=- 7.5 && TimeH< 21.5 && TimeH>= 16.5 && TimeH< 19.5 && Levl_Close_H1s1N>= 2.5 ) CalcTest=CalcTest+ 1 ; //(0.3739837 0.5121951 0.1138211)
                   if (Test_P== 1003 ) if (DonProc< 5.5 && Levl_Down_DC>=- 7.5 && TimeH< 21.5 && TimeH>= 16.5 && TimeH>= 19.5 ) CalcTest=CalcTest+ 1 ; //(0.3390706 0.4647160 0.1962134)

ayrı bir işleve dönüştürülür. Renata'ya inanmaya çalış :)

Onlar. nihai sonuç şöyle olmalıdır:

 if (Test_P== 1000 && Func1000()) CalcTest = CalcTest+ 1 ;
if (Test_P== 1001 && Func1001()) CalcTest = CalcTest+ 1 ;
vb.
 
Aleksey Vyazmikin :

Evet, işte danışmana bir bağlantı .

İki gün geçti -% 7'lik bir derleme ...

'Tree_Brut_TestPL_F_Fast.mq5'
'Normal.mqh'
'Math.mqh'
code generated
0 error(s), 0 warning(s), 1456022 msec elapsed

İşte bu el arabası üzerinde

 2019.10 . 15 09 : 08 : 34.692 Terminal        Windows 10 (build 18362 ) x64, IE 11 , UAC, Intel Xeon  E5- 2630 v4 @ 2.20 GHz, Memory: 58760 / 65457 Mb, Disk: 20 / 224 Gb, GMT+ 2
 
Alexey Kozitsyn :

Zaten bir profil oluşturucu kullanmayı önerdiniz mi?

Hayır, teklif etmediler - içinde tam olarak ne görmeliyim? Onları kullanmakta pek iyi değilim.


Alexey Kozitsyn :

Seçenek numarası 2. Her satırı aşağıdaki gibi çıkarın:

ayrı bir işleve dönüştürülür. Renata'ya inanmaya çalış :)

Onlar. nihai sonuç şöyle olmalıdır:

vb.

Orada, hızda önemli bir artış sağlayan "eğer" değil, "durum :" olan varyanttır. gibi bir şey yapsan bile

               switch (Test_P)
                    {
                     case 1000 : F1(); break ;
                     case 1001 : F2(); break ;
                    }
   

O kod daha da artacak... ama derleme zamanı ve performansını karşılaştırabilirsin tabii ki...

 
Slava :

İşte bu el arabası üzerinde

Evet, bu kod büyük değil, 500 megabaytlık kodu göndermedim - gerekirse yapabilirim ...

 
Aleksey Vyazmikin :

Başka hangi kaynakları önerirsiniz? Şimdiye kadar bulduğum en hızlı yol bu...

Mantığı optimize edin. Örneğin, diziler ve döngülerle çalışın. Ölçüt değerlerini bir dizide paketlemeye çalışın. Ve bir döngüde yapılacak kontroller. Belki o zaman 74 bin vakaya olan ihtiyaç ortadan kalkar...

 
Aleksey Vyazmikin :

1. Hayır, teklif etmediler - içinde tam olarak ne görmeliyim? Onları kullanmakta pek iyi değilim.


2. Orada, "eğer" yerine "durum :" olan varyant tarafından hızda önemli bir artış verilir. gibi bir şey yapsan bile

O kod daha da artacak... ama derleme zamanı ve performansını karşılaştırabilirsin tabii ki...

1. Oradaki kodda en "frenlenen" yerleri göreceksiniz. Yine de ... hala bir soru, derlemeyi etkileyip etkilemediği ...

2. Dilediğiniz gibi: davadan geçebilirsiniz. Ayrıca, onu küçük işlevlere ayırmanız tavsiye edildi. Onu kır ve kontrol et. Evet tabi ki kod daha da artacak. Peki ne yapmalı.

 
@Renat Fatkhullin , lütfen profil oluşturucunun derleme sırasında ince noktaları belirlemeye yardımcı olup olamayacağını açıklayabilir misiniz? Yoksa yalnızca kodun hızını gerçek zamanlı olarak kontrol etmek için mi kullanılmalıdır?
 
Aleksey Vyazmikin :

Bu numaralandırmayı harici bir CSV dosyasına aktarırdım, ancak sonra başka bir sorun ortaya çıkar - dosyayı okumak için zaman kaybetmek ve ayrıca, görevleri aracılara dağıtırken, danışman iken her aracıya 500 megabayt gönderemiyorum. kod bir aracıya gönderilir (veya gönderilmez mi?) ve aralarında bölünür.

Ve başka bir soru, kodum 7zip ile 500'den 15 megabayta kolayca sıkıştırılıyor, ancak derlemeden sonra dosya 500 civarında olacak - neden böyle - derleme sırasında ilkel sıkıştırma yapmanın bir yolu yok (en az 100 megabayta kadar) ?

Dosyayı bir zip ile sıkıştırın. Zip'i okuyun, içindekileri açın. 500 MB'lık bir danışman göndermekten daha hızlı olacaktır (her temsilciye de gönderilir).

 
Alexey Kozitsyn :
@Renat Fatkhullin , lütfen profil oluşturucunun derleme sırasında ince noktaları belirlemeye yardımcı olup olamayacağını açıklayabilir misiniz? Yoksa yalnızca kodun hızını gerçek zamanlı olarak kontrol etmek için mi kullanılmalıdır?

Profil oluşturucunun derleme ile ilgisi yoktur.

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...