La tela è forte! - pagina 16

 

Al livello attuale del processore si può dimenticare i freni della doppia matematica. Non ci sono ritardi.

E i metodi di ottimizzazione tramite conversione in numeri interi sono già molto superati. Perderete molte volte di più con la conversione che con la matematica.


Tenendo conto del codice a 64 bit e del nostro compilatore, dovreste dimenticare gli interi nella classe dei compiti basati su calcoli doppi.

Ecco un esempio precedente dei tentativi di ottimizzazione di Nikolai: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

Il compilatore è riuscito a combinare i calcoli di due radici doppie a 64 bit da espressioni diverse in un comando assembler a 128 bit. Quando si lavora con la matematica doppia è fortemente sconsigliato saltare/convertire ai tipi interi. Ci sono overheads di CPU selvaggi sulla conversione (non i nostri).

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Nikolai Semko:

Non devi arrotondare nulla.

Ecco uno script come esempio.

Eseguilo prima con i parametri di default (con cerchi antialias e coordinate e dimensioni di tipo doppio)

e poi eseguirlo con parametro typ = not_smoothed_circles (con cerchi non smussati e coordinate e dimensioni di tipo int - dalla classe CCanvas).

Ha funzionato alla grande.

Ho ottenuto 347 fps senza antialiasing e 97 con antialiasing su tela con 2100x550 pixel.

Per informazione, abbiamo un limitatore della velocità di aggiornamento della finestra di 500fps. Questo mostra quante prestazioni si possono ottenere nella grafica.

 
Renat Fatkhullin:

Al livello attuale dei processori si può dimenticare la frenata della doppia matematica. Non ci sono freni.

E i metodi di ottimizzazione tramite conversione in interi sono già molto superati. Perderete molte volte di più con la conversione che con la matematica.


Tenendo conto del codice a 64 bit e del nostro compilatore, dovreste dimenticare gli interi nella classe dei compiti basati su calcoli doppi.

Ecco un esempio precedente dei tentativi di ottimizzazione di Nikolai: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

Il compilatore è riuscito a combinare i calcoli di due radici doppie a 64 bit da espressioni diverse in un comando assembler a 128 bit. Quando si lavora con la matematica doppia è fortemente sconsigliato saltare/convertire ai tipi interi. Ci sono overheads di CPU selvaggi sulla conversione (non i nostri).

Sono quasi sicuro che se rendiamo i tick basati su interi, il Tester inizierà a lavorare molto più velocemente.

 
Artyom Trishkin:

No, questo non è morphing. È una forzatura chiamarlo morphing:


In realtà, ero troppo pigro per farne uno vero io stesso - l'ho trovato nelle cartelle di esempio.

Morphing, letteralmente - mortificazione.

 
fxsaber:

È quasi certo che se rendete i tick interi, il Tester inizierà a lavorare molto più velocemente.

È chiaro al cavallo, come ha detto Elena Yurievna.

 
Nikolai Semko:

Basato su Doom e sul consiglio di @fxsaber.

Ho usato l'algoritmo diquesto sito con alcune leggere modifiche.

Davvero forte!

Cosa usi per fare le foto, Nikolai?

 
fxsaber:

È quasi certo che se rendete i tick interi, il Tester inizierà a lavorare molto più velocemente.

No.

Per cominciare, rendetevi conto che:

  1. tutto dovrà essere convertito in ints.
  2. ottenere un sacco di ritardi nella conversione dei dati
  3. ottenere il consumo selvaggio di memoria
  4. ottenere una probabilità del 100% di overflow in ogni operazione e la morte completa del sistema
  5. ottenere un disinteresse per gli sviluppatori che si offrono di leggere i loro indicatori e lavorare in ints invece che in dubs
  6. E ta da, non c'è più differenza tra i dub e gli int in velocità. Difficile da credere, ma sì.
Non ho citato le prove di cui sopra per niente. Lì Nikolai ha cercato di applicare il metodo di ottimizzazione tramite tabelle di radici precalcolate e ha perso contro il calcolo rltime di radici dabbili sul processo.
 
Алексей Тарабанов:

Morphing, letteralmente - la morte.

Non vale la pena discuterne qui, ma Morphing ( morphing) Dove si vede gente morta, sobria...

 
Artyom Trishkin:

Non vale la pena discuterne qui, ma Morphing ( morphing- trasformazione) Dove si vede la gente morta - sobria...

L'analisi morfometrica è l'analisi delle cellule morte. Prima li uccidiamo, poi li mettiamo sotto il microscopio.

 
Renat Fatkhullin:

No.

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

template <typename T>
T Tester( const int Amount = 1 e7 )
{
  T Sum = 1;
  T Price = 1;
  
  for (int i = 0; i < Amount; i++)
  {
    Price = 1 - Price;
    
    Sum += (Sum > Price) ? 1 : 0;
  }
  
  Print(Sum);
  
  return(Sum);
}

void OnStart()
{
  BENCH(Tester<int>());
  BENCH(Tester<double>());
}


Il doppio int è due volte più veloce del doppio

10000001
Time[Tester<int>()] = 25523
10000001.0
Time[Tester<double>()] = 51253