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).
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.
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.
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 ) ***
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.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
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).
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.
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à?
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.
La 3800x ha quasi raggiunto l'i7 8700 in termini di prestazioni in streaming. Ed è venuto fuori dal 2700.
e la 3800X non dovrebbe staccarsi dalla 2700?
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?
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.
La 3800X non avrebbe dovuto staccarsi dalla 2700?
Avrei dovuto, ho supposto le ragioni, in modo da avere qualcosa su cui basare la mia scelta del ferro in futuro.
Capito, grazie.
Bray aggiunge significativamente alle prestazioni - come posso liberarmene per non perdere velocità?
Sostituiscilo con un ritorno, come nel mio esempio.
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
Fare
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.