Evaluación de los núcleos de la CPU para su optimización - página 11

 
Aleksey Vyazmikin:

La pregunta que surge es ¿cuál es el efecto - por supuesto he visto en el código, que de hecho han eliminado "si"? Pero me gustaría un comentario, porque no está claro cuál es la ganancia en términos de lógica más rápida.

Solución intuitiva - mover el código grande a la función (incluso mejor sería en un include separado), deshacerse de if, incrementar y romper.

También estoy muy confundido sobre cómo obtener los valores de las variables a analizar. En el ejemplo de la prueba, son aleatorios, pero en la realidad... Yo ya dejaría allí los valores booleanos puros para comprobar (bool_a > 10,0) en lugar de (double_a).

 
Igor Zakharov:

Nueva construcción, nuevo probador, nuevo compilador... en la tabla resumen falta la columna "build mt5

Hasta ahora el resultado es estable - comprobado ayer, así que no esperes saltos de rendimiento de una compilación a otra.

 
Andrey Khatimlianskii:

La solución intuitiva es poner el código grande en una función (incluso mejor en un inlude separado) y deshacerse de if, increment y break.

De hecho, ya es una función, ¡así que no está claro por qué se gana en rendimiento!

Yo uso inlude en mi código de trabajo, pero es pura migración de código, ¿cómo propones organizarlo? El bray añade significativamente al rendimiento: ¿cómo puedo deshacerme de él para no perder velocidad?

Andrey Khatimlianskii:

También estoy muy confundido al obtener los valores de las variables analizadas. En el ejemplo de la prueba son aleatorios, ¿pero en la realidad? Ya dejaría allí los valores booleanos puros, para poder comprobar (bool_a > 10,0) en lugar de (double_a).

En realidad es lo mismo que el doble - los datos se toman de un archivo externo, que se lee completamente en el buffer durante la inicialización. Así que no entendí exactamente cómo hacer un bool con ellos.

 
Maxim Romanov:
El 3800x casi alcanza al i7 8700 en términos de rendimiento en streaming. Y salió del 2700.
Esto se debe probablemente a la reducción de la latencia de la memoria y al doble de caché.
Conclusión: para el mt5, el factor decisivo es la latencia de acceso a la memoria y la velocidad de lectura de la misma.
Esto también se evidencia por el bajo rendimiento en el hilo 2990 wx. Tienen altas latencias de memoria a pesar del manejo de 4 canales y de la caché específica.
Así que la velocidad de los núcleos en sí no es tan importante.
Tal vez sea así.

¿y se supone que el 3800X no va a romper con el 2700?

 
Aleksey Vyazmikin:

Entonces supondré que durante la optimización la frecuencia baja simplemente por ideología. Por el bien de interés, hacer una carrera más larga de cualquier EA - no 16 pases, pero digamos 160 - Me pregunto cómo cambia el tiempo de paso - la diferencia debe ser mínima - dentro de 1 segundo.

F


P.D. ¿Tal vez tengas una prueba que cargue la RAM?

 
Pavel Verveyko:

F


P.D. ¿Tal vez tengas una prueba que cargue la RAM?

Gracias, la media era más o menos la misma que la de las 16 pasadas, supondremos que son los datos correctos.

Para la memoria, por desgracia, no hay nada adecuado en el dominio público.

 
Pavel Verveyko:

¿No debería el 3800X separarse del 2700?

Debería tener, sugerí razones para basarse en el futuro cuando se seleccione el hardware.
 
Maxim Romanov:
Debería haberlo hecho, supuse las razones, para tener algo en lo que basar mi elección de plancha en el futuro.

Entendido, gracias.

 
Aleksey Vyazmikin:

El bray añade significativamente al rendimiento: ¿cómo puedo deshacerme de él para no perder velocidad?

Sustitúyalo por un retorno, como en mi ejemplo.


Aleksey Vyazmikin:

En realidad también es doble - los datos se toman del archivo externo, que se lee completamente en el buffer durante la inicialización. Por eso no entendí cómo hacer exactamente un bool.

En lugar de

int Povtor_High_M1 = X;

if ( Povtor_High_M1>=0 ) ***

if ( Povtor_High_M1< 0 ) ***

Hacer

bool Povtor_High_M1 = (X >= 0);

if ( Povtor_High_M1 ) ***

if ( !Povtor_High_M1 ) ***
 
Andrey Khatimlianskii:

Sustitúyalo por un retornado, como en mi ejemplo.


En lugar de

Hacer

Por desgracia, no soy inteligente, pero X>=0 puede ser mayor que cualquier otro número - hay muchas combinaciones - no se puede prever todo en el código, y el código crecerá en muchos órdenes de magnitud debido a varias combinaciones.