http://www.ixbt.com/video3/rad2.shtml- È meglio usare librerie ottimizzate per i big data piuttosto che diventare "creativi" con la scrittura di programmi in OpenCL (non lo escludo). È possibile utilizzare un sistema ibrido, dove piccole quantità sono gestite utilizzandoOpenCL e grandi quantità sono gestiteutilizzando librerie ottimizzate. Potrebbe essere necessario convertire la libreria in un linguaggio di programmazione specifico e creare condizioni per l'inclusione di questa libreria. Se questo può essere implementato, darebbe un risultato impressionante e di conseguenza accelererebbe l'operazione molte volte. Nota a .....
P.S Questo potrebbe essere un nuovo thread nel forum
GKS: Può essere necessario convertire le librerie in un linguaggio di programmazione specifico e creare condizioni per abilitare questa libreria. Se questo può essere implementato, si otterrà un risultato impressionante e di conseguenza l'operazione sarà accelerata molte volte.
Non è tecnologico per gli sviluppatori mettere a punto il compilatore specificamente per un prodotto estremamente specifico, anche se unico.
E finora non vedo nessun compito del trader che richieda una dimensione così grande di matrici moltiplicate.
Un aggiornamento della piattaforma MetaTrader 5 sarà pubblicato nei prossimi giorni. Una volta pubblicato l'aggiornamento, ci sarà un ulteriore comunicato stampa contenente la lista finale dei cambiamenti e i numeri di build. Sono previste le seguenti modifiche:
Terminale client MetaTrader 5 build 648
MetaTester: aggiunto il supporto per l'utilizzo di programmi OpenCL negli agenti di test.
Quelli che capiscono OpenCL, preparano un task-test sotto Cloud+OpenCL. Prospettive matematiche molto interessanti.
Driver video aggiornato di recente (NVIDIA301.42).
Ho fatto uno dei vecchi test per interesse (ParallelTester_00-01x) e non potevo credere ai miei occhi.
Nella pagina 24 stavo facendo dei test e ce n'erano 29, poi ho impostato la memoria in modalità 2 canali ed è andata a 39.
Ora è ~306.
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) GPU time = 141 ms
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CPU time = 43259 ms
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 306.8014184397163
fyords, come hai fatto a far apparire gli eventi precedenti più in alto nel registro?
Ma in generale è fantastico, ti capisco. Ero altrettanto felice quando ho comprato la mia HD 4870 a buon mercato e ho visto la sua potenza.
Una piccola raccomandazione: scegliete i parametri in modo che il tempo di esecuzione della GPU sia paragonabile a 1 secondo. Allora anche il rapporto temporale sarà più accurato. L'errore medio della funzione GteTickCount() non è inferiore alle decine di millisecondi. Quindi potreste facilmente ottenere 120 ms o 170 ms sulla GPU. E il valore dell'accelerazione dipende molto da questo.
Ho messo un po' a punto questo script per farlo funzionare su tutti i dispositivi disponibili (guarda dal basso verso l'alto: 1) CPU su piattaforma Intel, poi 2) HD 4870 su piattaforma AMD, e 3) CPU su piattaforma AMD):
2012.05.3115:48:35 OpenCL CPU: GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version2.0 (sse2))
2012.05.3115:48:35 OpenCL GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.05.3115:48:35 OpenCL CPU: Intel(R) Corporation Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version1.1)
I risultati dello script sono dal basso verso l'alto!
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 24.769437551695622012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 9672 ms
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 22012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 204.76068376068382012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 1170 ms
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 12012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 77.555843314988662012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 3089 ms
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 02012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) -------------------------
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Cpu МахResult==0.87527 at 10902 pass
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CPU time = 239570 ms
2012.06.0101:01:58 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ========================================
A quest'ultimo parametro, che è 10 volte meno, la mia scheda non è veloce come la tua. Probabilmente non ha il tempo di overcloccare correttamente :)
fyords, come hai fatto a far apparire gli eventi precedenti più in alto nel registro?
Nei rapporti, pulsante destro "Visualizza", nuova finestra pulsante "Query" e il registro è costruito per tempo correttamente, ed è più comodo da leggere (per me).
Per quanto riguarda lo script, grazie, lo proverò domani, è una lunga attesa per il suo completamento, soprattutto con Count pass = 12800.
Per ora ecco un vecchio script con Count pass = 12800
2012.06.0101:05:53 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) GPU time = 999 ms
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CPU time = 434167 ms
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 434.6016016016016
Renat: Per informazione: GetTickCount ha un errore molto inferiore a 16 ms, non è che state usando Windows 95.
L'errore in realtà non è molto inferiore. Sì, vicino ad esso, ma ci sono dei fuori scala rispetto alla media, che si raggruppano intorno a 32, 48 e anche di più. Sono rari, non discuto, possono essere ignorati.
Ma quando una persona esegue uno script, non sta necessariamente facendo qualcosa sul computer. E il sistema può anche eseguire i propri compiti, il che può rallentare l'esecuzione.
Tecnicamente, la deviazione standard è effettivamente piccola, circa 6-7, e debolmente dipendente dal tempo di esecuzione stesso. Ma riflette male la vera variazione. Ecco un istogramma dei tempi registrati quando si eseguono gli stessi calcoli:
La distanza tra barre adiacenti è di 16ms. Le colonne più piccole sono abbastanza probabili, e differiscono l'una dall'altra anche di 32ms. Se la colonna centrale ("tempo di esecuzione reale") è di 140 millisecondi, allora quella di sinistra è di 124 ms e quella di destra di 156 ms.
Quindi, la variazione reale, se divisa per il basso tempo di esecuzione della GPU, può essere abbastanza grande:
20 secondi/124ms ~ 161
20 secondi/156 ms ~ 128.
Il "vero rapporto" dei tempi di esecuzione corrisponde approssimativamente alla barra più grande:
20 sec/140ms ~ 143.
Se prendiamo un tempo di esecuzione più lungo sulla GPU, l'impatto di questo errore sarà molto minore. Almeno che sia di 500ms.
Script per la simulazione:
#define BIG 10000000#define SMALL 1000voidOnStart( )
{
Print( "Script started..." );
double k;
int times[ SMALL ];
MathSrand( TimeCurrent( ) );
for( int ii = 0; ii < SMALL; ii ++ )
{
Comment( ii );
int st = GetTickCount( );
for( int i = 0; i < BIG; i ++ ) k = sin( i );
int timeTotal = GetTickCount( ) - st;
times[ ii ] = timeTotal;
}
int h = FileOpen( "gtc_times.txt", FILE_WRITE, "\r\n" );
for( int ii = 0; ii < SMALL; ii ++ )
FileWrite( h, times[ ii ] );
FileClose( h );
Print("Script unloaded");
}
//+------------------------------------------------------------------+
http://www.ixbt.com/video3/rad2.shtml- È meglio usare librerie ottimizzate per i big data piuttosto che diventare "creativi" con la scrittura di programmi in OpenCL (non lo escludo). È possibile utilizzare un sistema ibrido, dove piccole quantità sono gestite utilizzandoOpenCL e grandi quantità sono gestiteutilizzando librerie ottimizzate. Potrebbe essere necessario convertire la libreria in un linguaggio di programmazione specifico e creare condizioni per l'inclusione di questa libreria. Se questo può essere implementato, darebbe un risultato impressionante e di conseguenza accelererebbe l'operazione molte volte. Nota a .....
P.S Questo potrebbe essere un nuovo thread nel forum
Non è tecnologico per gli sviluppatori mettere a punto il compilatore specificamente per un prodotto estremamente specifico, anche se unico.
E finora non vedo nessun compito del trader che richieda una dimensione così grande di matrici moltiplicate.
Annuncio dell'aggiornamento di MetaTrader 5
Un aggiornamento della piattaforma MetaTrader 5 sarà pubblicato nei prossimi giorni. Una volta pubblicato l'aggiornamento, ci sarà un ulteriore comunicato stampa contenente la lista finale dei cambiamenti e i numeri di build. Sono previste le seguenti modifiche:
Terminale client MetaTrader 5 build 648
MetaTester: aggiunto il supporto per l'utilizzo di programmi OpenCL negli agenti di test.
Capire OpenCL, preparare un task-test per Cloud+OpenCL. Prospettive matematiche molto interessanti.
Questo è più per MetaDriver........................
Driver video aggiornato di recente (NVIDIA301.42).
Ho fatto uno dei vecchi test per interesse (ParallelTester_00-01x) e non potevo credere ai miei occhi.
Nella pagina 24 stavo facendo dei test e ce n'erano 29, poi ho impostato la memoria in modalità 2 canali ed è andata a 39.
Ora è ~306.
Incredibile. Sembra che NVIDIA abbia modificato umanamente i driver.fyords, come hai fatto a far apparire gli eventi precedenti più in alto nel registro?
Ma in generale è fantastico, ti capisco. Ero altrettanto felice quando ho comprato la mia HD 4870 a buon mercato e ho visto la sua potenza.
Una piccola raccomandazione: scegliete i parametri in modo che il tempo di esecuzione della GPU sia paragonabile a 1 secondo. Allora anche il rapporto temporale sarà più accurato. L'errore medio della funzione GteTickCount() non è inferiore alle decine di millisecondi. Quindi potreste facilmente ottenere 120 ms o 170 ms sulla GPU. E il valore dell'accelerazione dipende molto da questo.
Ho messo un po' a punto questo script per farlo funzionare su tutti i dispositivi disponibili (guarda dal basso verso l'alto: 1) CPU su piattaforma Intel, poi 2) HD 4870 su piattaforma AMD, e 3) CPU su piattaforma AMD):
I risultati dello script sono dal basso verso l'alto!
A quest'ultimo parametro, che è 10 volte meno, la mia scheda non è veloce come la tua. Probabilmente non ha il tempo di overcloccare correttamente :)fyords, come hai fatto a far apparire gli eventi precedenti più in alto nel registro?
Nei rapporti, pulsante destro "Visualizza", nuova finestra pulsante "Query" e il registro è costruito per tempo correttamente, ed è più comodo da leggere (per me).
Per quanto riguarda lo script, grazie, lo proverò domani, è una lunga attesa per il suo completamento, soprattutto con Count pass = 12800.
Per ora ecco un vecchio script con Count pass = 12800
Il guadagno è diventato ancora più grande.L'errore in realtà non è molto inferiore. Sì, vicino ad esso, ma ci sono dei fuori scala rispetto alla media, che si raggruppano intorno a 32, 48 e anche di più. Sono rari, non discuto, possono essere ignorati.
Ma quando una persona esegue uno script, non sta necessariamente facendo qualcosa sul computer. E il sistema può anche eseguire i propri compiti, il che può rallentare l'esecuzione.
Tecnicamente, la deviazione standard è effettivamente piccola, circa 6-7, e debolmente dipendente dal tempo di esecuzione stesso. Ma riflette male la vera variazione. Ecco un istogramma dei tempi registrati quando si eseguono gli stessi calcoli:
La distanza tra barre adiacenti è di 16ms. Le colonne più piccole sono abbastanza probabili, e differiscono l'una dall'altra anche di 32ms. Se la colonna centrale ("tempo di esecuzione reale") è di 140 millisecondi, allora quella di sinistra è di 124 ms e quella di destra di 156 ms.
Quindi, la variazione reale, se divisa per il basso tempo di esecuzione della GPU, può essere abbastanza grande:
20 secondi/124ms ~ 161
20 secondi/156 ms ~ 128.
Il "vero rapporto" dei tempi di esecuzione corrisponde approssimativamente alla barra più grande:
20 sec/140ms ~ 143.
Se prendiamo un tempo di esecuzione più lungo sulla GPU, l'impatto di questo errore sarà molto minore. Almeno che sia di 500ms.
Script per la simulazione: