Sobre o profiler do código MT5 - página 7

 

O que é isso?!


 
fxsaber #:

O perfilador mostra chamadas de função que não aconteceram de fato. Eu até já me deparei com algo assim:

Algum tipo de ArrayCopy, que não está na fonte do arquivo mqh! Eu até desenhei uma linha vermelha na declaração de uma matriz estática.

Infelizmente, ainda não posso usar o perfilador.

E pense em como e que matrizes se movem ao construir, atribuir e mover objetos (e você tem um objeto).

Você realmente acha que o programa consiste apenas de suas cordas?

Os exemplos não são completos.

 
Renat Fatkhullin #:

E pense em como e por quais matrizes são movidas ao construir, atribuir e mover objetos (e você tem um objeto).

Você realmente acha que o programa consiste apenas de suas cordas?

Os exemplos não são completos.

Dê instruções claras sobre o que fazer de minha parte para que você possa abordar este tópico sem adiá-lo.

 
fxsaber #:

Dê-me uma instrução clara sobre o que fazer de minha parte para que você possa abordar este tópico sem adiá-lo.

Você está fazendo declarações sobre um tópico (compiladores e suas entranhas) que não entendeu.

Instrução não ajuda - você não está seguindo o curso de um desenvolvedor de compilador para entender o vasto mundo do código gerado implicitamente em linguagens de objeto. Idiomas de alto nível usam muita biblioteca e código em linha. Construa um projeto médio no WinAPI e veja o arquivo *.map - há milhares de funções auxiliares lá e qualquer uma delas pode aparecer no perfil.

As palavras que repeti dezenas de vezes sobre "o código resultante não tem nada a ver com seu código, ele é otimizado, incorporado e baralhado pelo compilador otimizador" também não me pegam no ouvido. O principal trabalho do compilador é fazer o código o mais rápido possível, não legível. O trabalho do profiler é mostrar os gargalos reais no código otimizado (real), e não fazer batota através de linhas correspondentes.

Como comparação, traçar o perfil do código C++ no momento é muitas vezes uma tarefa muito difícil, pois o otimizador é um ótimo corretor de fósforos. E sim, o Microsoft Visual Studio C++ não é uma referência, o código que ele gera é muito fraco/mau. É 20-30% pior do que seus concorrentes LLVM/Clang.


Mais uma vez, temos um profiler que não altera o código que está sendo examinado. O tempo de verificação aumenta, mas o código não é realmente estragado pela incorporação de contadores, o que mataria a otimização do código.

O método utilizado para a elaboração do perfil é "Amostragem". O profiler pausa o programa MQL (~1000 vezes por segundo) e coleta estatísticas sobre quantas vezes uma pausa ocorreu em um determinado fragmento de código. Isto inclui a análise das pilhas de chamadas a fim de determinar a "contribuição" de cada função para o tempo total de execução do código. Ao final do perfil você obtém quantas vezes cada função foi pausada e quantas vezes cada função esteve na pilha de chamadas:

  • Atividade total da CPU [unidade, %] - o número total de vezes que uma função "apareceu" na pilha de chamadas.
  • Atividade própria da CPU [unidade, %] - o número de "pausas" que ocorreram diretamente dentro da função especificada. Este contador é o mais importante para identificar gargalos porque, estatisticamente, a parada ocorre com mais freqüência nas partes do programa que requerem mais tempo de CPU.



Sem exemplos reprodutíveis em uma etapa, não consideramos questões. Sintéticos simplificados de um par de chamadas em micro tarefas também não podem ser considerados em termos de porcentagem de tempo gasto ou contribuição para o tempo total.

 
Renat Fatkhullin #:

Você está fazendo declarações sobre um tópico (compiladores e suas entranhas) que você não entende.

Totalmente ignorante sobre o tópico que você identificou. O perfilador mostra alguns dados que não podem ser interpretados de forma alguma.

Mais uma vez temos um perfilador que quase não introduz atrasos no código que estamos investigando. O tempo de verificação aumenta, mas o código não é realmente estragado pela incorporação de contadores - o que mataria a otimização do código.

Estou tentando ver os gargalos com o novo perfilador. Sem sorte, embora eu esteja tentando muito.

Sem exemplos reprodutíveis em uma etapa, não olhamos para os problemas. Sintéticos simplificados de um par de chamadas em micro tarefas também não podem ser considerados em termos de porcentagem de tempo gasto ou contribuição para o tempo total.

Para quem eu envio os dados para reprodução? Os dados da LS mostram que as mensagens da LS podem não ser lidas por muito tempo.

Dois carrapatos verdes indicam que a mensagem foi lida, um indica que ela não foi lida.

 
fxsaber #:

Totalmente ignorante sobre o assunto que você identificou. O perfilador mostra alguns dados que não consigo interpretar de forma alguma.

Estou tentando ver os gargalos com o novo perfilador. Sem sorte, embora eu esteja tentando.

Para quem eu envio os dados para reprodução? Os dados do PM mostram que as mensagens PM podem não ser lidas por um longo período de tempo.

Dois carrapatos verdes - mensagem lida, um - não lida.

da mesma forma, quanto mais frequentemente o martelo é golpeado, em um lugar ou outro, mais cara é a função

qual é a probabilidade de um contador atingir variáveis baratas? quase 0

há funções imediatamente compreensíveis que o contador irá atingir, elas são puladas, veja as seguintes funções personalizadas

 
Fast235 #:

simplesmente tudo, quanto mais frequentemente o martelo for atingido, em um lugar ou outro, mais cara é a função

qual é a probabilidade de um contador atingir variáveis baratas? quase 0

há funções imediatamente compreensíveis que o contador irá atingir, elas são puladas, veja as seguintes funções personalizadas

Estou falando de aplicação prática, não de uma bela teoria que é clara à primeira vista.

 
fxsaber #:

Estou falando de aplicação prática, não de uma bela teoria que é fácil de entender na primeira vez.

prático é o que costumava ser, quantas vezes ele é invocado?

é um interesse puramente perfeccionista,

Concordo que chamadas extras precisam ser vistas, mesmo que sejam baratas.

 
Fast235 #:

O prático é como era antes, quantas vezes é chamado?

O profiler anterior foi capaz de encontrar gargalos, mas aqui estamos falando de um novo profiler cujos dados não nos permitem entender o que está acontecendo, mesmo que em teoria tenha sido estudado várias vezes.

 
fxsaber #:

O profiler anterior permitiu encontrar gargalos, mas aqui estamos falando de um novo, cujos dados não permitem entender o que está acontecendo, embora em teoria tudo tenha sido estudado várias vezes.

Renat não deve mostrar o novo profiler em frases gerais, mas para deixar claro até mesmo para os convencidos como o sub) (não estou depreciando).