Un poco sorprendido :) Pensé en compartir y hacer una pregunta NO retórica. - página 24

 
TheXpert:
Sería perfecto probarlo en la EMA.

Ejem... no creo que eso sea ya necesario. La situación se ha aclarado. Como es costumbre en este hilo - un poco sorprendido y pensé en compartir... :)

Aquí hay un extracto de la prueba, la prueba completa está en el tráiler, la biblioteca también está ahí:

..........
....................
    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");
..................
......

Resultados:

2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tiempo común int test = 62 ms; // 1000000 llamadas
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tiempo común prueba larga = 141 ms; // 1000000 llamadas
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tiempo común double test = 62 ms; // 1000000 llamadas
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tiempo común IntRational test = 1032 ms; // 1000000 llamadas
2011.04.04 20:29:14 RationalSpeedTest (EURUSD,M20) Tiempo común LongRational test = 921 ms; // 1000000 llamadas

Me quedé muy perplejo: double e int coincidían absolutamente en la velocidad de las operaciones aritméticas y además, long era el más rápido, Rational estaba completamente jodido.

A la luz de estos experimentos, me siento un poco reacio a construir un probador de enteros. :-))

Tal vez con otros procesadores los resultados sean un poco diferentes (agradeceré a los que hagan pruebas y publiquen), pero no creo que haya grandes diferencias.

Curiosamente, una vez en los inolvidables años 90 probé la diferencia entre las operaciones con enteros y con coma flotante, las diferencias eran bastante notables (por decirlo suavemente).

Resumen - Los años 90 ya han pasado, la aritmética de punto flotante funciona muy rápido hoy en día.

Incluso el cambio a la aritmética de enteros no es razonable (en el contexto comercial) - la ganancia es insignificante, si no ilusoria.

Resumen final - si Intel no hace urgentemente el soporte de la aritmética racional a nivel de hierro, no hay que preocuparse más... al menos en términos de rendimiento. :)

Amén.

// Voy a repetir. Las pruebas se realizaron en un único PC de la marmota, por lo que, para no caer en ilusiones, me gustaría pedir a todo el mundo que realice la prueba en sus ordenadores y publique los resultados con indicación de los parámetros de hierro.

// Mi ordenador: 2 gigas de RAM, CPU Sempron 3100+ de 2,2 gigahercios, 32 bits, sistema operativo WinXP

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

Ejem... no creo que eso sea ya necesario. La situación se ha aclarado. Como es costumbre en este hilo - un poco sorprendido y pensé en compartir... :)



El 99% de las deducciones no requerirán denominador común, por lo que la prueba no es del todo correcta. Hay que tomar los cálculos reales y hacerlos bien. Inty según mis estimaciones es 1000000 veces más rápido ( y debido a que todo en la memoria y en la caché del procesador) :) Los resultados son simplemente asombrosos. Como 2000 carreras en 1 segundo. :)

 
MetaDriver:

Resumen - Los años 90 ya han pasado, la aritmética de punto flotante funciona muy rápido hoy en día.

Incluso el cambio a la aritmética de números enteros no es razonable (en el contexto del comercio): la ganancia es insignificante, si no ilusoria.

Los que han estado programando durante los últimos ...treinta años lo saben desde hace tiempo.

Además, no en vano hemos cambiado a SSE2, ya que sin él no hay una mejora general del rendimiento.

 
Renat:

Quien ha estado programando durante los últimos ...tientos de años, lo sabe desde hace mucho tiempo.

No es por nada que cambiamos a SSE2, porque sin él no veremos ninguna mejora de rendimiento general.

He empaquetado un tick en 32 bits (asc, bid y time). Y conseguí la aceleración, que ya es utilizable.

:) Además, no funciono por memoria como MT5 - todas las variantes de la búsqueda van alrededor de la barra, no al revés. :) ¡¡¡Volando!!! :)

**

Por cierto, si no es muy difícil hacerlo en MT, escribí allí arriba.

 
Academic:
Pongo un tick en 32 bits ( asc, bid y time ) . Y tengo un aumento de velocidad, que ya es utilizable.

Puedes hacer mucho más que eso en un sueño... Sólo la práctica me despierta y estropea todo.

Pero nada, ¡esta noche habrá una nueva fuga!

 
Renat:

Puedes hacer mucho más que eso mientras duermes... Sólo la práctica me despierta y estropea todo.

Pero nada, ¡esta noche será un nuevo vuelo de la fantasía!

No tienes miedo a la contaminación. No estoy mintiendo. :) Es fácil empollar, sólo hay que pensar en ello. Sí... Me asombra la confianza en mí mismo mientras duermo. :)
 
Academic:
No tienes miedo a la contaminación. No estoy mintiendo. :) Es fácil empollar, sólo hay que pensar en ello. Sí... Me asombra la confianza en mí mismo mientras duermo. :)

No sigo diciendo "práctica" por nada.

Llevamos mucho tiempo haciendo un empaquetamiento extremo bit a bit de las cotizaciones al transmitir por la red y con éxito. La compresión media es de 1:13, cuando 10 años de una historia de un minuto se comprimen en 10-12 mb.

Pero la práctica es que la compresión (por no hablar de las operaciones matemáticas sobre ellas) de este lío lleva tanto tiempo que la velocidad está fuera de lugar.

 
Renat:

No sigo diciendo "práctica" por nada.

Tenemos un largo y exitoso historial de empaquetamiento extremo bit a bit de las cotizaciones cuando se transmiten por la red. La compresión media es de 1:13, donde 10 años de una historia de un minuto se comprimen en 10-12 mb.

Pero la práctica es que la compresión (por no hablar de las operaciones matemáticas sobre ellas) de este lío lleva tanto tiempo que la velocidad está fuera de lugar.

Te lo digo: necesitas tener experiencia en la programación de aplicaciones de alto rendimiento. No hace falta ser un teórico, no se tarda más en averiguar estos 32 bits que lo que se tarda en dar cinco comandos de máquina.
 
MetaDriver:
...

Amén.

// Repito. Las pruebas se realizaron en un ordenador distinto, por lo que, para no caer en ilusiones superfluas, pido a quienes estén dispuestos a realizar la prueba en sus ordenadores y publicar los resultados con indicación de los parámetros de hardware.

// Mi ordenador: 2 gigas de RAM, procesador Sempron 3100+ 2,2 GHz, 32 bits, sistema operativo WinXP

Eso es lo que decían también los duros leñadores siberianos :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  

Dame otro cero en el Conde para que quede claro

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