Acerca del perfilador de código de MT5 - página 7

 

¿Qué es esto?


 
fxsaber #:

El perfilador muestra llamadas a funciones que en realidad no han ocurrido. Incluso me he encontrado con algo así:

Algún tipo de ArrayCopy, ¡que no está en la fuente del archivo mqh! Incluso he dibujado una línea roja en la declaración de un array estático.

Por desgracia, todavía no puedo utilizar el perfilador.

Y piensa en cómo y en qué se mueven las matrices al construir, asignar y mover objetos (y tienes un objeto).

¿Realmente crees que el programa se compone sólo de tus hilos?

Los ejemplos no son completos.

 
Renat Fatkhullin #:

Y piensa en cómo y por qué se mueven las matrices al construir, asignar y mover objetos (y tienes un objeto).

¿De verdad crees que el programa consiste sólo en tus hilos?

Los ejemplos no son completos.

Dar instrucciones claras sobre lo que hay que hacer por mi parte para que abordes este tema sin aplazarlo.

 
fxsaber #:

Dame una instrucción clara sobre lo que debo hacer por mi parte para que abordes este tema sin aplazarlo.

Estás haciendo declaraciones sobre un tema (los compiladores y sus entrañas) que no entiendes.

La instrucción no ayuda: no estás haciendo un curso de desarrollador de compiladores para entender el vasto mundo del código generado implícitamente en los lenguajes de objetos. Los lenguajes de alto nivel utilizan muchas bibliotecas y código en línea. Construya un proyecto promedio en WinAPI y mire el archivo *.map - hay miles de funciones auxiliares allí y cualquiera de ellas puede aparecer en el perfilado.

Las palabras que he repetido decenas de veces sobre "el código resultante no tiene nada que ver con tu código, está optimizado, incrustado y barajado por el compilador optimizador" tampoco me llaman la atención. El trabajo principal del compilador es hacer que el código sea lo más rápido posible, no legible. El trabajo del perfilador es mostrar los verdaderos cuellos de botella en el código optimizado(real), no hacer trampas al coincidir las líneas.

A modo de comparación, perfilar el código C++ en la actualidad suele ser una tarea muy difícil, ya que el optimizador es un gran fijador de coincidencias. Y sí, Microsoft Visual Studio C++ no es un referente, el código que genera es muy débil/malo. Es un 20-30% peor que sus competidores de LLVM/Clang.


Una vez más tenemos un perfilador que no cambia el código que se examina. El tiempo de comprobación aumenta, pero el código no se estropea realmente al incrustar contadores, lo que acabaría con la optimización del código.

El método utilizado para la elaboración de perfiles es el "muestreo". El perfilador pausa el programa MQL (~1000 veces por segundo) y recoge estadísticas sobre cuántas veces se ha producido una pausa en un fragmento de código concreto. Esto incluye el análisis de las pilas de llamadas para determinar la "contribución" de cada función al tiempo total de ejecución del código. Al final del perfilado se obtiene cuántas veces se ha pausado cada función y cuántas veces ha estado cada función en la pila de llamadas:

  • Actividad total de la CPU [unidad, %]: el número total de veces que una función "apareció" en la pila de llamadas.
  • Actividad propia de la CPU [unidad, %] - el número de "pausas" que se produjeron directamente dentro de la función especificada. Este contador es el más importante para identificar los cuellos de botella porque, estadísticamente, las paradas se producen con más frecuencia en aquellas partes del programa que requieren más tiempo de CPU.



Sin ejemplos reproducibles de un solo paso no consideramos los problemas. Las síntesis simplificadas de un par de llamadas en microtareas tampoco pueden considerarse en términos de porcentaje de tiempo empleado o de contribución al tiempo total.

 
Renat Fatkhullin #:

Estás haciendo declaraciones sobre un tema (los compiladores y sus entrañas) que no entiendes.

Totalmente ignorante del tema que has identificado. El perfilador muestra algunos datos que no se pueden interpretar de ninguna manera.

Una vez más tenemos un perfilador que casi no introduce retrasos en el código que estamos investigando. El tiempo de comprobación aumenta, pero el código no se estropea realmente por incrustar contadores - eso mataría la optimización del código.

Estoy tratando de ver los cuellos de botella con el nuevo perfilador. No ha habido suerte, aunque lo estoy intentando con todas mis fuerzas.

Sin ejemplos reproducibles de un solo paso no vemos los problemas. Las síntesis simplificadas de un par de llamadas sobre microtareas tampoco pueden considerarse en términos de porcentaje de tiempo empleado o de contribución al tiempo total.

¿A quién envío los datos para la repetición? Los datos de LS muestran que los mensajes de LS pueden no ser leídos durante mucho tiempo.

Dos marcas verdes indican que el mensaje ha sido leído, una indica que no ha sido leído.

 
fxsaber #:

Completamente ignorante del tema que has expuesto. El perfilador muestra algunos datos que no puedo interpretar de ninguna manera.

Estoy tratando de ver los cuellos de botella con el nuevo perfilador. No hubo suerte, aunque lo estoy intentando.

¿A quién envío los datos para la repetición? Los datos del PM muestran que los mensajes del PM pueden no ser leídos durante mucho tiempo.

Dos ticks verdes - mensaje leído, uno - no leído.

Igualmente, cuanto más a menudo se golpea el martillo, en un lugar u otro, más costosa es la función

¿cuál es la probabilidad de que un contador golpee variables baratas? casi 0

hay funciones inmediatamente comprensibles que el contador va a golpear, se saltan, mira las siguientes personalizadas

 
Fast235 #:

simplemente, cuanto más a menudo se golpea el martillo, en un lugar u otro, más costosa es la función

¿cuál es la probabilidad de que un contador golpee variables baratas? casi 0

hay funciones inmediatamente comprensibles que el contador va a golpear, se saltan, mira las siguientes personalizadas

Me refiero a la aplicación práctica, no a la hermosa teoría que queda clara a primera vista.

 
fxsaber #:

Me refiero a la aplicación práctica, no a la hermosa teoría que es fácil de entender la primera vez.

práctico es lo que solía ser, ¿cuántas veces se invoca?

es un interés puramente perfeccionista,

Estoy de acuerdo en que hay que ver las llamadas extra, aunque sean baratas.

 
Fast235 #:

Lo práctico es como antes, ¿cuántas veces se llama?

El anterior perfilador era capaz de encontrar cuellos de botella, pero aquí estamos hablando de un nuevo perfilador cuyos datos no nos permiten entender lo que está pasando, aunque en teoría se haya estudiado varias veces.

 
fxsaber #:

El anterior perfilador permitía encontrar cuellos de botella, pero aquí estamos hablando de uno nuevo, cuyos datos no permiten entender lo que está pasando, aunque en teoría todo ha sido estudiado varias veces.

Renat no debería mostrar el nuevo perfilador en frases generales, sino dejarlo claro incluso para los convencidos como el sub) (no estoy menospreciando.)

Razón de la queja: