Erros, bugs, perguntas - página 2878
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
qual variante de conversão funcionará mais rapidamente durante a optimização
Isto só será chamado uma vez por passe. Por conseguinte, não faz qualquer diferença.
Isto só será chamado uma vez para toda a passagem. Portanto, não faz qualquer diferença.
por isso, sim... Mas vou executá-lo durante alguns dias para optimização, quero medir o desempenho de alguma forma ..... embora suspeite que a variante 1 será mais eficiente, não haverá 100500 vezes de cópia em matrizes
sim... Mas vou executar o computador durante alguns dias para o optimizar, quero medir o desempenho de alguma forma ..... embora suspeite que a opção 1 será mais eficiente, não haverá 100500 vezes de cópia para as matrizes
união não é copiar para matrizes, é uma interpretação diferente do mesmo espaço de memória. por isso a 2ª opção é provavelmente mais rápida, mas como já foi referido acima, não importa.
sim... Mas vou executar o computador durante alguns dias para o optimizar, quero medir o desempenho de alguma forma ..... embora suspeite que a opção 1 será mais eficiente, não haverá 100500 vezes de cópia para as matrizes
há uma maneira antiga de medir a velocidade
no estilo de
para (int i=0; i< 1000000; i++) {nosso código1}
para (int i=0; i< 1000000; i++) {nosso código2}....
A união não é tão rápida como parece. Aposto no primeiro.
Aposto também no primeiro! Os operadores binários são várias vezes mais rápidos do que o se operador, embora o segundo não o tenha.
verificado:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : : loops=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : : loops=10000000000 ms=10862287
a diferença não é significativa, é altamente provável que se mudarmos os testes na ordem oposta, os resultados sejam o oposto
não crítico
não uma diferença significativa, é altamente provável que, se trocar os testes, os resultados sejam o oposto
É altamente provável que o compilador tenha gerado o mesmo código para ambos os casos. Neste caso, basta escolher o que mais lhe agrada subjectivamente
verificado:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : : loops=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : : loops=10000000000 ms=10862287
a diferença não é significativa, é altamente provável que se mudarmos os testes na ordem oposta, os resultados sejam o oposto
não crítico
O script aqui demonstra que o tempo de criação do número aleatório pode ser desigual e depende do tamanho das variáveis criadas))))
E o código de que precisamos neste número de repetições leva-me 0 ms.
Ainda sem resposta.
ou o optimizador de código está a cortar algo desnecessárioParece haver um guião que demonstra que o momento da geração de números aleatórios pode ser desigual
nenhum rand() é uma função normal, funciona sempre da mesma forma
Mas ao testar a velocidade, se a inicializar com constantes, os testes "aceleram" na execução - a optimização do código em MQL durante o tempo de execução é boa
em geral, foi verificado muitas vezes
e muito depende do tamanho das variáveis criadas))))
claro, a atribuição de memória é demorada, verifiquei-a, estou a testar tanto objectos criados dinamicamente ( novo ponteiro ) como apenas objectos de âmbito local, o teste estica-se 100500 vezes por novo + apagar
toda a questão foi, porque no testador no âmbito global a memória é atribuída às variáveis uma vez e não a cada passagem - mas preciso de arrays uint, por isso testei com este guião, não como o escrevi da primeira vez
E o código de que precisamos neste número de repetições leva-me 0 ms
ainda sem resposta
Ou o optimizador de códigos está a cortar algo desnecessário.usou o meu guião? - ou não esperou até ao fim do teste e interrompeu ou transbordou ulong - o primeiro parâmetro macro é 10^ contagem
é altamente provável que o compilador tenha gerado o mesmo código para ambos os casos. neste caso, basta escolher aquele que mais lhe agrada subjectivamente.
sim, talvez sim
era isso que eu estava a pedir - li muitas vezes que os processadores modernos podem executar mais do que uma operação elementar por relógio optimizando o pipeline de instruções .... muito blá, blá, blá, blá... e a questão é que as instruções aritméticas são executadas pelo processador num número imprevisível de ciclos de relógio
Quanto às operações de ramificação e alocação de memória, são muito mal optimizadas pelo processador, por isso não procure a optimização na simplificação da aritmética, tente escrever código linear máximo com ramificações mínimas, e as variáveis são melhor declaradas e atribuídas valores imediatamente antes dos cálculos, o que permite uma pipeline de instruções e uma previsão de amostragem em cache para optimizar este código
Isto é, os valores de amostragem dos elementos da matriz (endereçamento) muito provavelmente não serão cruciais para a velocidade - pensei que haveria uma vantagem de mudança versus união, afinal não há qualquer diferença