uzmanlar için soru #define - sayfa 8

 
void OnStart ()
  {
   int mas[];
   int mas1[ 300 ];
   int mas2[ 300 ];
   int mas3[ 300 ];
   int mas4[ 300 ];
   int mas5[ 300 ];
   int mas6[ 300 ];
   int z= 300 ;
   int size= 100000000 ;
   ArrayResize (mas,size);
   ulong r= 0 ;
   ulong r1= 0 ;
   ulong r2= 0 ;
   int random;
   ulong max= 100 ; 
   int t= 0 ;
   int tr= 0 ; 
   MathSrand ( 10 );
     int num_steps= ArraySize (mas);
     double x, pi, sum= 0.0 ;
     double step = 1.0 /( double )num_steps;
    
     int v=size;
     ulong t1 = GetMicrosecondCount ();
     
    
   // for(ulong z=0; z<max; z++)
     {
       for ( ulong i= 0 ; i< ArraySize (mas); i++)
        { 
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2=r2/ 10 ;
        }

     }  
   ulong t2= GetMicrosecondCount ();
   //for(ulong z=0; z<max; z++)
     {
       for ( ulong i= 0 ; i<v; i++)
        { 
        r1+=v;
        r1=r1/ 10 ;
        }
     }
   
   int pi2 = sum*step;
   ulong t3= GetMicrosecondCount ();
   Print (t2-t1, "  " ,t3-t2, " " ,r, " " ,r1, " " ,r2, " " ,pi, " " ,pi2);
// Templ();
  }

Öyle olsa bile, üst kod kazanır, ancak çok nadiren. bağlantıya tıklayın - ücretsiz düşünün

 
Alexandr Andreev :

) iyi, bu şekilde çalışmıyor)


C++'da bu şekilde çalışır
Mql'de de aynı şeyi düşünüyorum, ancak MQ'dan ek paketleyicilerle


Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5

Roma , 2019.12.11 14:02

Elbette neden diye düşünmenize gerek yok... derleyici her şeyi kendi başına yapacak. ))
C# C değil

Ve __inline için videoyu izleyin.
Farkı olmayanlar için sadece hafızadaki fonksiyonların nasıl çalıştığını açıklıyor.


 
Roman :

C++'da bu şekilde çalışır
Mql'de de aynı şeyi düşünüyorum, ancak MQ'dan ek paketleyicilerle

peki, şimdi bu konuyu ve bir dizi ifadeyi ve test örneğini yeniden okuduk - bazı farklar var. Ve sonuçta bulundu)))

 
Alexandr Andreev :

peki, şimdi bu konuyu ve bir dizi ifadeyi ve test örneğini yeniden okuduk - bazı farklar var. Ve sonuçta bulundu)))

Hayır)) Tekrar okumak gibi bir arzum yok.
Benim için bir fark olduğu açık.

 
Roman :

Hayır)) Tekrar okumak gibi bir arzum yok.
Benim için bir fark olduğu açık.

))) başka bir IMHO

 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   int mas[];
   int mas1[ 300 ];
   int mas2[ 300 ];
   int mas3[ 300 ];
   int mas4[ 300 ];
   int mas5[ 300 ];
   int mas6[ 300 ];
   int z= 300 ;
   int size= 1000000000 ;
   ArrayResize (mas,size);
   ulong r= 0 ;
   ulong r1= 0 ;
   ulong r2= 0 ;
   int random;
   ulong max= 100 ; 
   int t= 0 ;
   int tr= 0 ; 
   MathSrand ( 10 );
     int num_steps= ArraySize (mas);
     double x, pi, sum= 0.0 ;
     double step = 1.0 /( double )num_steps;
    
     int v=size;
     ulong t1 = GetMicrosecondCount ();
     
    
   // for(ulong z=0; z<max; z++)
     {
       for ( int i= 0 ; i< ArraySize (mas); i++)
        { 
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1);
        r2+= ArraySize (mas2);
        r2+= ArraySize (mas3);
        r2+= ArraySize (mas4);
        r2+= ArraySize (mas5);
        r2+= ArraySize (mas6);
        r2+= ArraySize (mas1); 
        r2++;
        r2=r2/ 100 ;
        }

     }  
   ulong t2= GetMicrosecondCount ();
   //for(ulong z=0; z<max; z++)
   int sizem= ArraySize (mas);
     {
       for ( int i= 0 ; i<sizem; i++)
        { 
        r1++;
        r1=r1/ 100 ;
        r1++;
        
        }
     }
    
   ulong t3= GetMicrosecondCount ();
   Print (t2-t1, "  " ,t3-t2, " " ,r2, " " ,r1);
// Templ();
  }

//+------------------------------------------------------------------+
//|                                           
  
void Funk( ulong &a){a++;}
void FunkRand( ulong &a){a+= rand ();}

//+------------------------------------------------------------------+

Üst yöntem neredeyse %15 daha hızlı, bu çok önemli, her şey çok açık olduğu için bana açıklayın)


 
Alexandr Andreev :

))) başka bir IMHO

Üstteki yöntem neredeyse %20 daha hızlı, peki, çünkü her şey çok açık, bana açıkla)


Karşılaştırılan döngüler, gövdedeki kodda aynı değildir.
Gövdedeki ilk döngüde bir kod var, döngünün ikinci gövdesinde başka bir kod var.
Doğal olarak farklı kod talimatları, doğal olarak farklı yürütme süreleri.
Döngü gövdesinde aynı kodu yapın ve yalnızca ArraySize döngü koşulunu ve boyut değişkenini değiştirin.
Bu kısmı test ediyoruz, vücudu değil.

 
Roman :

Karşılaştırılan döngüler, gövdedeki kodda aynı değildir.
İlk döngüde gövdede bir kod var, ikinci döngü gövdesinde başka bir kod var.
Doğal olarak farklı kod talimatları, doğal olarak farklı yürütme süreleri.
Döngü gövdesinde aynı kodu yapın ve yalnızca ArraySize döngü koşulunu ve boyut değişkenini değiştirin.
Bu kısmı test ediyoruz, vücudu değil.

Testiniz artık doğru değil. başlatma durumuna bağlıdır, ancak tekrar çalıştırın. Burada her iki durumda da bir artış ve bir bölme vardır. + Üstte hala birkaç on milyarlarca ArraySize çağrısı var

Bu arada, test ettiğimiz şeyi yazmamız gereken vücutta. Çünkü kendini tekrar eden bedendir. Sonucu elde etmek için bir döngüye sarmaya çalışıyoruz .... yani. başlangıçta gövdeden ArraySize'ı çağırmak gerekliydi

Документация по MQL5: Операции с массивами / ArraySize
Документация по MQL5: Операции с массивами / ArraySize
  • www.mql5.com
"Нулевое измерение = Размер массива / (Первое измерение * Второе измерение * Третье измерение)"
 
Alexandr Andreev :

Testiniz artık doğru değil. başlatma durumuna bağlıdır, ancak tekrar çalıştırın. Burada her iki durumda da bir artış ve bir bölme vardır. + Üstte hala birkaç on milyarlarca ArraySize çağrısı var

Bu arada, test ettiğimiz şeyi yazmamız gereken vücutta. Çünkü kendini tekrar eden bedendir. Sonucu elde etmek için bir döngüye sarmaya çalışıyoruz .... yani. başlangıçta gövdeden ArraySize'ı çağırmak gerekliydi

Her yinelemede, döngü koşulunda, i<ArraySize() veya i<size koşulu yine de kontrol edilir
Yani, her yinelemede ya bir fonksiyona ya da bir değişkene bir çağrı vardır.
Bir cismi teste tabi tutacak bir vücutta ne işe yarar?

Burada mantığın kendisi neyin daha hızlı ele alınacağını gösteriyor? Bir fonksiyona veya bir değişkene.
Derleyici orada nasıl satır içi olacak, umurumda değil. Derleyiciye değil, tersine çevirme açısından işlenmesi daha hızlı olan sağduyuya güveniyorum.

 
Roman :

Her yinelemede, döngü koşulunda, i<ArraySize() veya i<size koşulu yine de kontrol edilir
Yani her yinelemede ya bir fonksiyona ya da bir değişkene erişilir.
Bir cismi teste tabi tutacak bir vücutta ne işe yarar?

Bu fonksiyon konusunda şanslı olduğumuz için fonksiyon herhangi bir fonksiyon olabilir. Ve onu vücuda koydular. Ve onu çoğalttığım gerçeği, yalnızca efekti geliştirmeye ve farklı dizilere atıfta bulunmaya çalışıyorum.

Ancak, hesaplama hatası incelenen etkiyi gölgeleyebilecek daha karmaşık görevler eklemek yanlıştır. Bu arada, montajın µl benzeri sabit olmaması hala mümkündür. onlar. yeniden derlerken, biraz farklı veriler alabilir (bu doğru olmasa da, ancak onu bilgisayar korsanlığına karşı koruma olarak kullanıyorum) Böylece kodunuzdaki her şeyi test edebilirsiniz. Bakıyorsun ve sonuçlar değişiyor.

Mkl sadece kodu videoda belirtildiği gibi değiştirmeye çalışıyor. Eh, orada biraz farklı. Ama genel anlamda.

Ve hangi değeri alacaklarını bilmeyen işlevler için bu talimatlar - js ve php ve diğer benzer diller böyle çalışır, µl bile bu şekilde çalışır, ancak yalnızca hata ayıklama modunda

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Информация о запущенной MQL5-программе - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman :

Her yinelemede, döngü koşulunda, i<ArraySize() veya i<size koşulu yine de kontrol edilir
Yani, her yinelemede ya bir fonksiyona ya da bir değişkene erişilir.
Test edilmiş bir nesneyi yerleştirecek bir vücutta ne için?

Burada mantığın kendisi neyin daha hızlı ele alınacağını gösteriyor? Bir fonksiyona veya bir değişkene.
Derleyici orada nasıl satır içi olacak, umurumda değil. Derleyiciye değil, tersine çevirme açısından işlenmesi daha hızlı olan sağduyuya güveniyorum.

Her zaman işe yaramaz.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

uzmanlar için soru #define

Roma , 2020.11.02 19:44

Mesajımı değiştirdim.
Görünüşe göre, tam tersine, ArraySize artık cnt değişkeninden daha hızlı yerine getiriyor.
Eskiden durum tam tersiydi. Muhtemelen artış cnt-- etkiler, döngünün gövdesi farklıdır ve muhtemelen yük için başka bir şeyin icat edilmesi gerekir.

 void OnStart ()
{
   int arr[];
   int sz = ArrayResize (arr, 100000000 );  
   
   ulong t = GetMicrosecondCount ();
   
   for ( int i= 0 ; i < ArraySize (arr) ; i++) 
   {
       ArrayResize (arr, sz--); //какая то нагрузка
   }   
   
   t = GetMicrosecondCount () - t;
   
   PrintFormat ( "Total time: %.3f ms" , t / 1000.0 );
}
 2020.11 . 02 21 : 33 : 22.863 TestScript (USDJPY,M1)  Total time: 451.200 ms


 void OnStart ()
{
   int arr[];
   int sz = ArrayResize (arr, 100000000 );  
   int cnt = ArraySize (arr);
   
   ulong t = GetMicrosecondCount ();
   
   for ( int i= 0 ; i < cnt ; i++) 
   {
       ArrayResize (arr, sz--);
      cnt--;
   }
      
   t = GetMicrosecondCount () - t;
   
   PrintFormat ( "Total time: %.3f ms" , t / 1000.0 );
}
 2020.11 . 02 21 : 56 : 26.591 TestScript (USDJPY,M1)  Total time: 531.872 ms

Neden: