Un po' sorpreso :) Ho pensato di condividere e fare una domanda NON retorica. - pagina 24

 
TheXpert:
Sarebbe perfetto per testarlo su EMA.

Ahem... non credo sia più necessario. La situazione è diventata più chiara. Come si usa in questo thread - un po' sorpreso e ho pensato di condividere... :)

Ecco un estratto del test, il test completo è nel trailer, anche la libreria è lì dentro:

..........
....................
    IntRational ira={2345,3456};
    IntRational irb={67,93};
    IntRational irc={93,67};
    t = GetTickCount();
    for(int i=0;i<Count;i++)
      {
       ira.Div(irb); ira.Div(irc);
       ira.Mul(irb); ira.Mul(irc);
       ira.Add(irb); ira.Add(irc);
       ira.Sub(irb); ira.Sub(irc);
       ira.Norm();
      }
    Print("Common time IntRational test = ", GetTickCount()-t, " ms; // ",Count," calls");
    double da=2345.0/3456.0;
    double db=67.0/93.0;
    double dc=93.0/67.0;
    t = GetTickCount();
     for(int i=0;i<Count;i++)
      {
       da/=db; da/=dc;
       da*=db; da*=dc;
       da+=db; da+=dc;
       da-=db; da-=dc;
      }
    Print("Common time double test = ", GetTickCount()-t, " ms; // ",Count," calls");
..................
......

Risultati:

2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tempo comune int test = 62 ms; // 1000000 chiamate
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tempo comune test lungo = 141 ms; // 1000000 chiamate
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tempo comune doppio test = 62 ms; // 1000000 chiamate
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tempo comune IntRational test = 1032 ms; // 1000000 chiamate
2011.04.04 20:29:14 RationalSpeedTest (EURUSD,M20) Tempo comune LongRational test = 921 ms; // 1000000 chiamate

Ero molto perplesso: double e int erano assolutamente uguali nella velocità delle operazioni aritmetiche e inoltre, long era il più veloce, Rational era completamente fregato.

Alla luce di questi esperimenti mi sento un po' riluttante a costruire un tester intero. :-))

Forse con altri processori i risultati saranno un po' diversi (sarò grato a coloro che testeranno e posteranno), ma non posso credere a grandi differenze.

È interessante notare che una volta, negli indimenticati anni '90, ho testato la differenza tra operazioni intere e in virgola mobile, le differenze erano abbastanza evidenti (per usare un eufemismo).

Riassunto - Gli anni '90 sono finiti, l'aritmetica in virgola mobile funziona molto velocemente al giorno d'oggi.

Anche cambiarlo in aritmetica intera non è ragionevole (nel contesto del commercio) - il guadagno è trascurabile se non illusorio.

Ripresa finale - se Intel non fa urgentemente il supporto dell'aritmetica razionale a livello di ferro, non c'è più da preoccuparsi... almeno in termini di prestazioni. :)

Amen.

// Ripeto. I test sono stati eseguiti su un solo PC della marmotta, quindi, per evitare di cadere in qualche illusione, vorrei chiedere a tutti di eseguire il test sui loro computer e postare i risultati con indicazione dei parametri del ferro.

// Il mio computer: 2 giga di RAM, Sempron 3100+ 2.2 gigahertz CPU, 32 bit, sistema operativo WinXP

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Основы языка / Операции и выражения / Арифметические операции - Документация по MQL5
File:
 
MetaDriver:

Ahem... non credo sia più necessario. La situazione è diventata più chiara. Come si usa in questo thread - un po' sorpreso e ho pensato di condividere... :)



Il 99% delle deduzioni non richiede un denominatore comune, quindi il test non è del tutto corretto. Bisogna prendere i calcoli reali e farli bene. Inty secondo le mie stime è 1000000 volte più veloce (e grazie al fatto che tutto in memoria e nella cache della CPU) :) I risultati sono semplicemente sbalorditivi. Come 2000 corse in 1 secondo. :)

 
MetaDriver:

Riassunto - Gli anni '90 sono finiti, l'aritmetica in virgola mobile funziona molto velocemente al giorno d'oggi.

Anche cambiarlo in aritmetica intera non è ragionevole (nel contesto del trading) - il guadagno è trascurabile se non addirittura illusorio.

Chi ha programmato negli ultimi ...trent'anni lo sa da tempo.

Inoltre, non è per niente che siamo passati a SSE2, perché senza di esso non c'è un miglioramento generale delle prestazioni.

 
Renat:

Chi ha programmato negli ultimi ... centinaia di anni, lo sa da molto tempo.

Non è per niente che siamo passati a SSE2, perché senza di esso non vedremo alcun miglioramento generale delle prestazioni.

Ho impacchettato un tick in 32 bit (asc, bid e tempo). E ho ottenuto l'accelerazione, che è già utilizzabile.

:) Inoltre, non funziona a memoria come MT5 - tutte le varianti della ricerca girano intorno alla barra, non il contrario. :) Volare!!! :)

**

A proposito, se non è troppo difficile farlo su MT, ho scritto lì sopra.

 
Academic:
Ho messo un tick in 32 bit (asc, bid e tempo). E ho ottenuto un aumento di velocità, che è già utilizzabile.

Si può fare molto di più in un sogno... Solo la pratica mi sveglia e rovina tutto.

Ma niente, ci sarà un nuovo volo di fantasia stasera!

 
Renat:

Puoi fare molto di più di questo nel sonno... Solo la pratica mi sveglia e rovina tutto.

Ma niente, stasera sarà un nuovo volo di fantasia!

Non hai paura di essere inquinato. Non sto mentendo. :) E' facile da stipare, basta pensarci. Già... Sono stupito dalla fiducia in me stesso nel sonno. :)
 
Academic:
Non hai paura di essere inquinato. Non sto mentendo. :) È facile da stipare, basta pensarci. Già... Sono stupito dalla fiducia in me stesso nel sonno. :)

Non continuo a dire "pratica" per niente.

Abbiamo fatto per molto tempo e con successo l'impacchettamento estremo bit per bit delle citazioni durante la trasmissione in rete. La compressione media è di 1:13, quando 10 anni di una storia minuta vengono compressi in 10-12 mb.

Ma la pratica è che la compressione (per non parlare delle operazioni matematiche su di esse) di questo casino richiede così tanto tempo che la velocità è fuori questione.

 
Renat:

Non continuo a dire "pratica" per niente.

Abbiamo una lunga storia di successo nell'impacchettamento estremo bit per bit delle quotazioni quando vengono trasmesse in rete. La compressione media è di 1:13, dove 10 anni di una storia minuta sono compressi in 10-12 mb.

Ma la pratica è che la compressione (per non parlare delle operazioni matematiche su di esse) di questo casino richiede così tanto tempo che la velocità è fuori questione.

Vi dico che dovete avere esperienza nella programmazione di applicazioni ad alte prestazioni. Non c'è bisogno di essere un teorico, non ci vorrà più tempo per capire questi 32 bit che cinque comandi macchina.
 
MetaDriver:
...

Amen.

// Ripeto. I test sono stati eseguiti su un computer separato, quindi, al fine di non cadere in illusioni superflue, chiedo a coloro che sono disposti a eseguire il test sui loro computer e postare i risultati con indicazione dei parametri hardware.

// Il mio computer: 2 Gigs di RAM, processore Sempron 3100+ 2.2 GHz, 32 bit, sistema operativo WinXP

È quello che dicevano anche i duri boscaioli siberiani :o)

2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time int test = 78 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time long test = 125 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time double test = 94 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time IntRational test = 1391 ms; // 1000000 calls
2011.04.04 20:30:58     RationalSpeedTest (USDCHF,M1)   Common time LongRational test = 1015 ms; // 1000000 calls
P4 3 Гц [32 бита] 1Гб оперативы, ОС: Windows XP SP 3 версия 5.1 сборка 2600  

Dammi un altro zero in Conta per chiarezza

2011.04.04 20:39:22     RationalSpeedTest (USDCHF,M1)   Common time int test = 718 ms; // 10000000 calls
2011.04.04 20:39:22     RationalSpeedTest (USDCHF,M1)   Common time long test = 1266 ms; // 10000000 calls
2011.04.04 20:39:20     RationalSpeedTest (USDCHF,M1)   Common time double test = 1000 ms; // 10000000 calls
2011.04.04 20:39:19     RationalSpeedTest (USDCHF,M1)   Common time IntRational test = 13156 ms; // 10000000 calls
2011.04.04 20:39:06     RationalSpeedTest (USDCHF,M1)   Common time LongRational test = 9282 ms; // 10000000 calls
 
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time int test = 63 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time long test = 94 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time double test = 47 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time IntRational test = 734 ms; // 1000000 calls
2011.04.04 22:36:00    RationalSpeedTest (EURUSD,H1)    Common time LongRational test = 594 ms; // 1000000 calls
AMD Phenom 9850 Quad-Core (2.5GHz), 2Gb, WinXP SP3 32