Erros, bugs, perguntas - página 2162

 
Artyom Trishkin:
Enumeração é uma enumeração de números inteiros.
0,1,2,3..., etc....

Se um modelo de função contém

EnumToString();

os problemas ocorrem...

 
Vladimir Pastushak:

Se o modelo de função contiver

EnumToString();

Os problemas surgem...

É necessário um exemplo.
 
Artyom Trishkin:
É necessário um exemplo.

Fiz uma sobrecarga, uma das quais foi um padrão.

para poder separar as moscas das costeletas.

 
Vladimir Pastushak:

Fiz uma sobrecarga, uma das quais foi um padrão.

para poder separar as moscas das costeletas.

Conheço as moscas, já vi as costeletas, mas não consigo ver o problema sem o código de função.
 
Renat Fatkhullin:

Optimização da matemática: tentar utilizar arrays em vez de sqrt.

Portanto, tirar um elemento por índice de uma simples matriz deveria ser uma operação muito rápida, não deveria?

 
Комбинатор:

por isso tomar um elemento por índice de uma simples matriz deveria ser uma operação muito rápida, não deveria?

Onde se vê uma simples matriz?

É um conjunto dinâmico de uma linguagem gerida com todas as implicações de controlo. E a sqrt é uma única instrução de CPU nativa.


Bem-vindo ao mundo das incríveis descobertas de optimizações e da influência de uma massa de factores em cada caso em cada geração de CPU, cada diferença no tamanho da cache, multitarefas, penalizações, etc.

Apenas há 20 anos atrás eu estava a mexer no código assembler num processador 486, lutando com velocidades que variavam em dezenas de por cento devido à reorganização de instruções, alinhamento e simples posicionamento da memória. Parecia uma loucura, mas os manuais da Intel e Vtune explicaram mais tarde a imagem.

Mas hoje em dia a situação com resultados de optimização já há muito que se descontrolou. Há tantos processadores diferentes com caches diferentes no mercado que o seu código é garantido de executar a velocidades diferentes. As caches de processadores e a arquitectura dos processadores têm um enorme impacto. Mesmo o controlo dinâmico da frequência do CPU tem de ser desligado para remover dezenas de por cento de diferença num padrão de referência.

Por exemplo: átomos com falhas de cache aparentemente em arquitectura decente ou modelos U estrangulados mostram frequentemente resultados várias vezes inferiores mesmo em casos simples. Mais caches falhados e adeus.

 
Artyom Trishkin:
Conheço as moscas, já vi as costeletas, mas o problema não é visível sem o código de função.
Se uma função sobrecarregada tem um fio, há um problema quando lhe chamamos um número inteiro...
 
Renat Fatkhullin:

Onde se vê uma simples matriz?

Não é o caso certo para definir a complexidade. As matrizes são utilizadas em todo o lado, nos indicadores são a parte principal do cálculo, e está agora quase directamente a admitir que a sua implementação de matrizes é lenta.

Creio que é muito melhor nas optimizações, mas do ponto de vista de um utilizador comum parece estranho - afirma-se que o compilador MQL gera código comparável ao C++, mas de repente verifica-se que as matrizes em MQL não são de todo rápidas.
 
Комбинатор:

Não é o caso certo para definir a complexidade. As matrizes são utilizadas em todo o lado, nos indicadores são a parte principal do cálculo, e está agora quase directamente a admitir que a sua implementação de matrizes é lenta.

Em comparação com um comando de montagem directa de um único montador?

Sim, é. O que não se sabe é que os processadores há muito que têm tabelas pré-calculadas de várias funções matemáticas incorporadas. E os dispendiosos comandos matemáticos da cpu utilizam-nos para acelerar as coisas.

Faremos uma análise detalhada do seu exemplo na segunda-feira e descobriremos a causa exacta.
 
Renat Fatkhullin:

Em comparação com um comando de montagem directa de um único montador?

oíndice da matriz é, na melhor das hipóteses, também reduzido a um único comando de montagem directa, pelo que a questão continua a ser