Valutazione dei core della CPU per l'ottimizzazione - pagina 11

 
Aleksey Vyazmikin:

La domanda sorge spontanea, qual è l'effetto - naturalmente ho visto dal codice che in effetti il "if" è stato rimosso? Ma vorrei un commento, perché non è chiaro quale sia il guadagno in termini di logica più veloce.

Soluzione intuitiva - spostare il codice di grandi dimensioni in una funzione (ancora meglio sarebbe in include separati), sbarazzarsi di if, increment e break.

Sono anche molto confuso su come ottenere i valori delle variabili da analizzare. Nell'esempio del test, questi sono randomi, ma nella realtà? Lascerei già lì i valori booleani puri per controllare (bool_a > 10.0) invece di (double_a).

 
Igor Zakharov:

Nuova build, nuovo tester, nuovo compilatore... la tabella riassuntiva manca della colonna "build mt5".

Finora il risultato è stabile - controllato ieri, quindi non aspettatevi salti di prestazioni da una build all'altra.

 
Andrey Khatimlianskii:

La soluzione intuitiva è di mettere il grande codice in una funzione (o meglio ancora, in un inlude separato) e sbarazzarsi di if, increment e break.

In effetti, è già una funzione, quindi non è chiaro perché ci sia un tale guadagno di prestazioni!

Uso inlude nel mio codice di lavoro, ma è puramente una migrazione di codice, come proponi di organizzarla? Bray aggiunge significativamente alle prestazioni - come posso liberarmene in modo da non perdere velocità?

Andrey Khatimlianskii:

Sono anche molto confuso nell'ottenere i valori delle variabili analizzate. Nell'esempio del test si tratta di randomi, ma nella realtà? Lascerei già lì i valori booleani puri, così potrei controllare (bool_a > 10.0) invece di (double_a).

In realtà è la stessa cosa del doppio - i dati sono presi da un file esterno, che viene letto completamente nel buffer durante l'inizializzazione. Quindi non ho capito esattamente come fare un bool da loro.

 
Maxim Romanov:
La 3800x ha quasi raggiunto l'i7 8700 in termini di prestazioni in streaming. Ed è venuto fuori dal 2700.
Questo è probabilmente dovuto alla ridotta latenza della memoria e al doppio della cache.
Conclusione: per la mt5, il fattore decisivo è la latenza di accesso alla memoria e la velocità di lettura della memoria.
Questo è anche confermato dalle basse prestazioni sul thread 2990 wx. Hanno alte latenze di memoria nonostante i 4 canali e la gestione specifica della cache.
Quindi la velocità dei core stessi non è così importante.
Forse è così che funziona.

e la 3800X non dovrebbe staccarsi dalla 2700?

 
Aleksey Vyazmikin:

Allora assumerò che durante l'ottimizzazione la frequenza scende semplicemente per ideologia. Per interesse, fate una corsa più lunga di qualsiasi EA - non 16 passaggi, ma diciamo 160 - mi chiedo come cambia il tempo di passaggio - la differenza dovrebbe essere minima - entro 1 secondo.

F


PS Forse avete un test che carica la RAM?

 
Pavel Verveyko:

F


PS Forse avete un test che carica la RAM?

Grazie, la media era circa la stessa dei 16 passaggi - assumeremo che siano i dati corretti.

Per la memoria, purtroppo, non c'è nulla di adatto nel dominio pubblico.

 
Pavel Verveyko:

La 3800X non avrebbe dovuto staccarsi dalla 2700?

Avrebbe dovuto, ho suggerito ragioni su cui costruire per avere qualcosa su cui ripiegare quando si sceglie l'hardware.
 
Maxim Romanov:
Avrei dovuto, ho supposto le ragioni, in modo da avere qualcosa su cui basare la mia scelta del ferro in futuro.

Capito, grazie.

 
Aleksey Vyazmikin:

Bray aggiunge significativamente alle prestazioni - come posso liberarmene per non perdere velocità?

Sostituiscilo con un ritorno, come nel mio esempio.


Aleksey Vyazmikin:

In realtà è anche doppio - i dati sono presi da un file esterno, che viene letto completamente nel buffer durante l'inizializzazione. Ecco perché non ho capito come renderlo esattamente un bool.

Invece di

int Povtor_High_M1 = X;

if ( Povtor_High_M1>=0 ) ***

if ( Povtor_High_M1< 0 ) ***

Fare

bool Povtor_High_M1 = (X >= 0);

if ( Povtor_High_M1 ) ***

if ( !Povtor_High_M1 ) ***
 
Andrey Khatimlianskii:

Sostituire con un retournee, come nel mio esempio.


Invece di

Fare

Purtroppo non sono intelligente, ma X>=0 può essere più grande di qualsiasi altro numero - ci sono molte combinazioni - non si può prevedere tutto nel codice, e il codice crescerà di molti ordini di grandezza a causa di varie combinazioni.