OpenCL: test di implementazione interna in MQL5 - pagina 58

 
Mathemat:

Bene, finalmente, ti stavamo aspettando. Se siete pronti a sperimentare, installate Intel OpenCL Runtime ( istruzioni del link).

Esegui lo script senza cambiare nulla in esso e pubblica il log dalla scheda "Esperti" proprio come hanno fatto i tuoi colleghi precedenti. Lo script impiegherà circa 3 minuti per essere eseguito sul vostro gioiello, abbiate pazienza. Allo stesso tempo scopriremo come OpenCL gira sul più fresco sasso Sandy Bridge barebone.

Se non avete la pazienza o se pensate che sia al di là delle vostre capacità, va bene, senza offesa.

P.S. Lo scopo di questo script è quello di vedere cosa può fare una CPU nuda senza alcun drago video discreto. Ho il sospetto che con Intel Runtime inserito correttamente, questo script avrà un'accelerazione intorno a 200 o anche leggermente superiore.

C'è qualche dubbio che Intel OpenCL Runtime sia installato correttamente.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1347.164383561644

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==0.9316 at 10253 pass

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 4


 
casinonsk:

Ci sono dubbi che Intel OpenCL Runtime sia installato correttamente.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

Probabilmente avete impostato l'argomento di CLContextCreate() a qualcosa di diverso da zero. Beh, ti avevo chiesto di non cambiare nulla! Conosciamo già le capacità del tuo drago video a due teste. Ma sembra che tu ne abbia addirittura diversi.

Secondo le mie stime approssimative, a CLContextCreate(0) dovreste avere cifre circa il tempo della CPU = 180000 ms e il tempo della GPU = 900 ms (circa). Il tuo primo tempo di esecuzione è stranamente alto per una tale CPU. Forse era sovraccarico di altri compiti?

Puoi semplicemente eseguire lo script come l'ho allegato - senza cambiare nulla nel codice, neanche un singolo carattere?

P.S. Naturalmente, forse device = 0 non corrisponde alla CPU ma a qualcos'altro. Bene, allora sperimenta (da 0 a 3). Il tempo più alto della GPU dovrebbe in teoria corrispondere alla CPU nuda, cioè all'host.

 
Mathemat:

Non avete impostato zero come argomento di CLContextCreate() ma qualcos'altro. Beh, ti avevo chiesto di non cambiare nulla! Conosciamo già le capacità del tuo drago video a due teste. Ma sembra che tu ne abbia diversi.

Secondo la mia stima approssimativa, a CLContextCreate(0) dovreste avere cifre dell'ordine di tempo CPU = 180000 ms e tempo GPU = 900 ms (circa). Il tuo primo tempo di esecuzione è stranamente alto per una tale CPU. Forse era sovraccarico di altri compiti?

Puoi semplicemente eseguire lo script come l'ho allegato - senza cambiare nulla, nemmeno un carattere?

P.S. Naturalmente, forse device = 0 non corrisponde alla CPU ma a qualcos'altro. Bene, allora sperimenta (da 0 a 3). Il tempo più alto della GPU dovrebbe in teoria corrispondere alla CPU nuda, cioè all'host.

Non ho cambiato i parametri! Ha funzionato così com'è.

Secondo il video, sì, è 2x590.

Ho provato di nuovo con CLContextCreate(0)1,2,3, il risultato è lo stesso di prima.

Il problema potrebbe essere conIntel OpenCL Runtime.

 
casinonsk:

Non ha cambiato i parametri! Iniziato così com'è.

L'ho eseguito di nuovo con CLContextCreate(0)1,2,3 il risultato è lo stesso di prima.

Tutti i risultati sono gli stessi? Non ci credo... Beh, questo script non può avere un tempo GPU = 219 ms su una CPU nuda. Nel migliore dei casi, sarebbe circa 800 ms, ma non circa 200 ms.

Ecco il mio risultato tipico (ho una CPU Pentium G840):

2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CpuTime/GpuTime = 88.40817091454272
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Result on Cpu МахResult==1.05116 at 7785 pass
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CPU time = 235873 ms
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Result on Gpu МахResult==1.05116 at 7785 pass
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    GPU time = 2668 ms
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    OpenCL init OK!
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    CLGetInfoInteger() returned 1

Ok, andiamo avanti.

 
Mathemat:

I risultati sono tutti uguali? Non ci credo... Beh, questo script non può avere un tempo GPU = 219 ms su una CPU nuda. Nel migliore dei casi sarà di circa 800 ms, ma non di 200 ms.

Ok, lascia perdere.

Ho appena riprovato conCLContextCreate(0)

 2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1265.405982905983

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==1.48772 at 2051 pass

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 296105 ms

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==1.48772 at 2051 pass

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 234 ms

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 5


 
casinonsk: Ho appena riprovato conCLContextCreate(0)

Ovviamente è su una scheda discreta, non su CPU: tali accelerazioni su emulazione sono difficilmente possibili. E il numero di dispositivi che hai è già 5, è inquietante.

Se non vi dispiace eseguire un codice leggermente modificato, per favore, e postare qui il risultato. Nel codice, i calcoli per i vari dispositivi OpenCL sono messi in un ciclo (dovrebbero essere veloci) mentre i calcoli su x86, il più lungo, sono eseguiti solo una volta. Sarà lungo, ma lo script stesso viene eseguito una volta sola.

Mi rendo conto che vi sto già annoiando. Ma in ogni caso sarà una buona informazione per il team di supporto.
 

Ho un risultato interessante )) Capito, non è il numero totale di dispositivi, è il numero attuale

2012.04.22 22:02:51     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0

Anche se i calcoli sono in corso, li posterò quando saranno pronti.

A proposito, né CLGetInfoInteger() né CL_DEVICE_COUNT sono presenti nell'aiuto.

Risultato PS.

2012.04.22 22:02:51     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        GPU time = 11357 ms
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 1
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        GPU time = 998 ms
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        CPU time = 428706 ms
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Cpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        CpuTime/GpuTime = 429.565130260521
 
fyords: A proposito, non c'è CLGetInfoInteger() o CL_DEVICE_COUNT nell'aiuto.

Risultato PS.

Aggiornate la vostra guida, la vostra è superata.

2. Tu hai

2012.03.04 22:27:16     Terminal        GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 295.73)
2012.03.04 22:27:16     Terminal        CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2812 MHz, 2048 Mb, version 2.0)

Molto probabilmente il primo numero, 11357 ms, si riferisce all'host (CPU nuda), e il secondo, 998 ms, si riferisce alla scheda grafica. L'ordine di guadagno sull'host, grosso modo, è abbastanza coerente con l'accelerazione ottenuta su AMD OpenCL (circa 38 volte su un Athlon II a 4 core). Anche se non è molto in realtà, dovrebbe essere di più, da qualche parte vicino a 50-60. È molto probabile che la vostra memoria sia molto lenta.

La cifra CpuTime/GpuTime, ovviamente, è calcolata solo per l'ultimo dispositivo calcolato.

 
Mathemat:

1. aggiornate la guida, la vostra è chiaramente superata.

2. La cifra CpuTime/GpuTime, ovviamente, è calcolata solo per l'ultimo dispositivo calcolato.

1. aggiornato manualmente tutto è lì, grazie, ma l'aiuto non è aggiornato insieme al terminale e al meta-editor?

2. Sì, ma comunque, bello).

 
papaklass:

Con il vostro hardware è quasi chiaro, avete solo l'host che è un dispositivo OpenCL. D'altra parte, è strano come hai ottenuto un risultato così alto prima (pagina 51):

2012.04.08 13:28:01     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       OpenCL init OK!
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       GPU time = 7145 ms
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Gpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CPU time = 422888 ms
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Cpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CpuTime/GpuTime = 59.18656403079076

Per qualche motivo non riesco a far uscire il cursore dall'inserimento del codice. E se cito qualcuno, la stessa sciocchezza. È un bug del forum?

Più probabilmente un bug nel motore del forum, ma non sempre è così. Di solito clicco sulla barra HTML e inserisco manualmente un paio di lettere dopo l'ultimo tag. Poi torno alla modalità di editing visuale del post.

Motivazione: