El lienzo es genial. - página 16

 

Con el nivel actual de los procesadores puedes olvidarte de los frenos de las matemáticas dobles. No hay retrasos.

Y los métodos de optimización por conversión a enteros ya están realmente desfasados. Perderás muchas veces más en la conversión que en las matemáticas.


Teniendo en cuenta el código de 64 bits y nuestro compilador, deberías olvidarte de los enteros en la clase de tareas basadas en cálculos dobles.

He aquí una muestra anterior de los intentos de optimización de Nikolai: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

El compilador logró combinar los cálculos de dos raíces dobles de 64 bits de diferentes expresiones en un solo comando de ensamblaje de 128 bits. Cuando se trabaja con matemáticas dobles, no se recomienda saltar/convertir a tipos enteros. La conversión tiene una sobrecarga salvaje de la CPU (no la nuestra).

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Nikolai Semko:

No hay que redondear nada.

Aquí hay un script como ejemplo.

Ejecútalo primero con los parámetros por defecto (con círculos antialiasing y coordenadas y dimensiones de tipo double)

y luego ejecutarlo con el parámetro typ = not_smoothed_circles (con círculos no suavizados y coordenadas y tamaños de tipo int - de la clase CCanvas).

Eso funcionó muy bien.

Conseguí 347 fps sin antialiasing y 97 con antialiasing en lienzo con 2100x550 píxeles.

A título informativo, tenemos un limitador de velocidad de actualización de la ventana de 500 fps. Esto demuestra el rendimiento que se puede conseguir en los gráficos.

 
Renat Fatkhullin:

Con el nivel actual de los procesadores puedes olvidarte de los frenos de las matemáticas dobles. No hay frenos.

Y los métodos de optimización por conversión a enteros ya están realmente desfasados. Perderá muchas veces más en la conversión que en las matemáticas.


Teniendo en cuenta el código de 64 bits y nuestro compilador, deberías olvidarte de los enteros en la clase de tareas basadas en cálculos dobles.

He aquí una muestra anterior de los intentos de optimización de Nikolai: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

El compilador ha conseguido combinar los cálculos de dos raíces dobles de 64 bits de diferentes expresiones en un solo comando de ensamblador de 128 bits. Cuando se trabaja con matemáticas dobles, no se recomienda saltar/convertir a tipos enteros. La conversión tiene una sobrecarga salvaje de la CPU (no la nuestra).

Estoy casi seguro de que si hacemos que los ticks se basen en números enteros, el Comprobador empezará a funcionar mucho más rápido.

 
Artyom Trishkin:

No, eso no es morphing. Es una exageración llamarlo morphing:


En realidad, me daba pereza hacer uno de verdad yo mismo; lo encontré en las carpetas de ejemplos.

Morphing, literalmente - mortificación.

 
fxsaber:

Es casi seguro que si haces que los ticks sean enteros, el Probador comenzará a trabajar mucho más rápido.

Está claro para el caballo, como dijo Elena Yurievna.

 
Nikolai Semko:

Basado en Doom y en el consejo de @fxsaber.

Utilicé el algoritmo deeste sitio con algunas ligeras modificaciones.

¡Realmente genial!

¿Qué usas para hacer fotos, Nikolai?

 
fxsaber:

Es casi seguro que si haces que los ticks sean enteros, el Probador empezará a trabajar mucho más rápido.

No.

Para empezar, date cuenta de que:

  1. todo tendrá que ser convertido a ints.
  2. obtener muchos retrasos en la conversión de datos
  3. obtener un consumo de memoria salvaje
  4. obtener un 100% de posibilidades de desbordamiento en cada operación y la muerte completa del sistema
  5. obtener un desprecio de los desarrolladores que se ofrecen a leer sus indicadores y trabajar en ints en lugar de dubs
  6. Y ta da, ya no hay diferencia entre los dubs y los ints en cuanto a velocidad. Es difícil de creer, pero sí.
No he citado las pruebas de arriba por nada. Allí Nikolai trató de aplicar el método de optimización a través de tablas de raíces precalculadas y perdió ante el cálculo rltime de las raíces dabble en el proceso.
 
Алексей Тарабанов:

Morphing, literalmente: la muerte.

No vale la pena discutirlo aquí, pero el Morphing ( transformación) Donde se ve a la gente muerta, sobria...

 
Artyom Trishkin:

No vale la pena discutirlo aquí, pero Morphing ( morphing- transformación) Donde se ve gente muerta - sobria...

El análisis morfométrico es el análisis de las células muertas. Primero los matamos y luego los ponemos bajo el microscopio.

 
Renat Fatkhullin:

No.

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

template <typename T>
T Tester( const int Amount = 1 e7 )
{
  T Sum = 1;
  T Price = 1;
  
  for (int i = 0; i < Amount; i++)
  {
    Price = 1 - Price;
    
    Sum += (Sum > Price) ? 1 : 0;
  }
  
  Print(Sum);
  
  return(Sum);
}

void OnStart()
{
  BENCH(Tester<int>());
  BENCH(Tester<double>());
}


Double int es dos veces más rápido que double

10000001
Time[Tester<int>()] = 25523
10000001.0
Time[Tester<double>()] = 51253