pergunta para #define experts - página 9

 
Alexandr Andreev:

Isto nem sempre funciona.


Este não é o teste correto, pois os corpos do laço são diferentes.
O segundo corpo tem mais instruções cnt--
Portanto, este não é o meu teste correto.
Com a PI, acho que é mais correto.

 
Roman:

Este não é o teste correto, pois os corpos do laço são diferentes.
O segundo corpo também tem instruções cnt--
Este não é o meu teste correto.
Com a PI, acho que é mais correto.

este é apenas o modo de vida, o teste é tão correto quanto pode ser em termos de uso e bom senso. Em qualquer laço onde mudamos o tamanho da própria matriz, haverá exatamente o mesmo código. Este exemplo está certo.

Mas o PI está lá e os resultados não são obviamente um caminho, confira.

 
Alexandr Andreev:

Este é exatamente o modo de vida, um teste que não é correto em termos de uso e senso comum.
Em qualquer laço onde mudamos o tamanho da própria matriz, haverá exatamente o mesmo código. Este exemplo está bem na hora.

Mas o PI está lá e os resultados não estão obviamente em uma direção.

Mas como é correto?
Se houver mais instruções no corpo do laço, mais código é executado durante a iteração, uma instrução extra é incrementada.
O que aumenta o tempo de execução. É lógico.
E quando os corpos são os mesmos, já é seguro avaliar a referência à condição do laço.

 
Roman:

Como é correto?
Se houver mais instruções no corpo do laço, mais código é executado durante a iteração, uma instrução extra é incrementada.
O que aumenta o tempo de execução. É lógico.
E quando os corpos são os mesmos, já podemos estimar com segurança a chamada para a condição de loop.

))))

Não é correto por todos os cânones. Você tem entre execuções (executar mais vezes, compilar mais execuções - uma via), então a diferença no cálculo de uma via é maior do que o valor que você está calculando. A diferença é devida às tarefas atuais do sistema. Isto é, a parte do valor examinado é muito pequena, para aumentá-la você deve aumentar o número dessas funções no corpo.... e pegar a operação mais barata. E isto é multiplicação!... Eu ainda não encontrei outro. Por exemplo, meu exemplo usa uma divisão - que é muitas vezes menor do que a forma como o pi é calculado, onde o tipo fantasma também é usado (processo bastante caro).

 
Alexandr Andreev:

))))

Não é correto por todos os cânones. Você tem entre execuções (executar mais vezes, compilar mais execuções - de uma maneira), então você tem uma diferença no cálculo entre execuções para uma maneira mais do que o valor professado. A diferença é devida às tarefas atuais do sistema. Isto é, a parte do valor examinado é muito pequena, para aumentá-la você deve aumentar o número dessas funções no corpo.... e pegar a operação mais barata. E isto é multiplicação!... Eu ainda não encontrei outro. Por exemplo, meu exemplo usa uma divisão - que é muitas vezes menor do que a forma como o pi é calculado, onde o tipo fantasma também é usado (processo bastante caro).

Mais uma vez. Não é o corpo do laço que está sendo testado, mas a condição do laço.
Os corpos dos laços devem ser os mesmos para medir se a condição é cumprida ou não.
Caso contrário, o tempo de medição será diferente, pois os corpos são executados com tempos diferentes.
Que é o que temos neste caso, já que há um cnt de instrução extra...

 
void OnStart()
  {
   int mas[];
   int mas1[300];
   int mas2[300];
   int mas3[300];
   int mas4[300];
   int mas5[300];
   int mas6[300];
   int z=300;
   int size=1000000000;
   ArrayResize(mas,size);
   int r=0;
   int r1=0;
   int r2=0;
   int random;
   ulong max=100; 
   int t=0;
   int tr=0; 
   MathSrand(10);
    int num_steps=ArraySize(mas);
    double x, pi, sum=0.0;
    double step = 1.0/(double)num_steps;
    
     int v=size;
    ulong t1 = GetMicrosecondCount();
     
    
  // for(ulong z=0; z<max; z++)
     {
      for(int i=0; i<ArraySize(mas); i++)
        {  
        r2+=ArraySize(mas);
        r2<<=3;
        }

     }  
   ulong t2=GetMicrosecondCount();
   //for(ulong z=0; z<max; z++)
   int sizem=ArraySize(mas);
     {
      for(int i=0; i<sizem; i++)
        { 
        r2+=sizem;
        r2<<=3;
        
        }
     }
    
   ulong t3=GetMicrosecondCount();
   Print(t2-t1,"  ",t3-t2," ",r2," ",r1);
// Templ();
  }

Em geral, acontece que a alternância entre perdão e deslocamento binário (que é uma das operações mais baratas) também afeta o cálculo de.... Bem, não há diferença, esse é o veredicto
 
Roman:

Mais uma vez. Não é o corpo do laço que está sendo testado, mas a condição do laço.
A fim de medir a condição, os corpos do laço devem ser os mesmos.
Caso contrário, o tempo de medição será diferente, pois os corpos são executados com tempos diferentes.
Que temos neste caso, já que há um cnt de instrução extra...

Na verdade, meu texto era exatamente sobre o caminho com pi

 
Tenho medo até de perguntar sobre #define
 
Алексей Тарабанов:
Tenho medo até de perguntar sobre #define

Vamos falar mais sobre a definição.
Pelo que entendi, isso não dá um impulso de tempo de execução no executável.

 
Roman:

Vamos falar mais sobre a definição.
Pelo que entendi, isso não dá um aumento na execução do arquivo executável.

Certo. Primeiro o definido, depois o executável, depois o executável.

Razão: