OpenCL: test di implementazione interna in MQL5 - pagina 51

 
Mathemat:

E il risultato del tuo emulatore OpenCL (il tuo secondo test) sembra sospettosamente debole anche in confronto al mio (ho avuto circa 10 secondi su "GPU").

Contava su una GPU ad alta intensità di CPU - avevo più core della mia. E il mio contava su una CPU pura con 4 core (dispositivo 1).
 
joo: Stavi calcolando su una GPU ad alta intensità di CPU - più core della mia. E il mio contava su una CPU pura con 4 core.

No, non è così, Andrei. imho, ho anche contato su una CPU pura con 2 core. Ci sono tre argomenti a favore. La prima è semplicemente di ferro, la seconda e la terza non sono così solide:

1. Ho solo un dispositivo OpenCL sul mio sistema. D'altra parte, uno di questi dischi deve essere comunque l'host, cioè la CPU nuda. Lo è. Non è una GPU, ho controllato su GPU Caps.

Quindi sospetto che il dispositivo della CPU che emula OpenCL potrebbe essere qualsiasi roccia che supporta SSE2 e superiori. Non importa se ha la grafica integrata o no. Compreso un Intel Core i5-750, a proposito.

2. La grafica della mia CPU è Intel HD Graphics. Ha 6 pipeline, ma 24 processori (threads, mosche?). Cerchia le specifiche grafiche vicine a quelle che abbiamo io e te.

Dato che la frequenza della mosca è molto più bassa di quella della pietra, non posso immaginare che 24 thread della GPU a una frequenza inferiore accelerino l'esecuzione rispetto a una CPU pura di più di 25 volte (e mi è capitato). Questo lascia solo una cosa: non è la GPU, è l'emulazione CPU di OpenCL. Forse conto male, ma non ho dati più dettagliati sull'architettura grafica delle pietre Intel.

La tua grafica integrata è circa la stessa della mia - Intel HD Graphics 2000 - ma c'è qualcosa che non va. Non so come spiegare un risultato così stranamente basso di una pietra Intel Sandy Bridge quasi top di gamma. L'accelerazione su di esso dovrebbe essere, secondo stime approssimative, dell'ordine di 50.

3. Formalmente, la grafica integrata di Intel avrà il supporto OpenCL solo su Ivy Bridge insieme a Intel HD Graphics 2500 e 4000 (avrà già 64 mosche veloci che sono molto più veloci di quelle integrate di AMD). E in questo momento non sembra proprio esistere.

Io stesso devo ancora capire perché il mio i3 non accelera i miei calcoli.

 
Mathemat:

...

Io stesso devo ancora capire perché la mia i3 non accelera i miei calcoli.

Urrà! Funziona!

2012.04.09 15:32:01 Terminale CPU: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.1 (4 unità, 3092 MHz, 4008 Mb, versione 2.0)
2012.04.09 15:32:01 Terminale MetaTrader 5 x64 build 619 avviato (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Risultato su Cpu MachResult==3.64642 a 1594 pass
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tempo CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Risultato su Gpu MachResult==3.64642 a 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tempo GPU = 93460 ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) OpenCL init OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Cpu MachResult==3.82222 a 3357 pass
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo CPU = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Gpu MachResult==3.82222 a 3357 pass
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo GPU = 94787 ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!

 
Ashes:

Evviva! Funziona!

2012.04.09 15:32:01 Terminale CPU: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.1 (4 unità, 3092 MHz, 4008 Mb, versione 2.0)
2012.04.09 15:32:01 Terminale MetaTrader 5 x64 build 619 avviato (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1)CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tempo CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Risultato su Gpu MachResult==3.64642 a 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1)Tempo GPU = 93460 ms

Beh, questo è meglio di 0.7 - almeno ha una certa accelerazione. Quindi cosa hai fatto?

Anche se... È molto debole. Sul mio Pentium G840, così:

2012.04.08 22:01:08 Terminale CPU: GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80GHz con OpenCL 1.2 (2 unità, 2793 MHz, 8040 Mb, versione 2.0 (sse2))

2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Risultato su Cpu MachResult==4.04242 a 1775 pass
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Tempo CPU = 269461 ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Risultato su Gpu MachResult==4.04242 a 1775 pass
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Tempo GPU = 10343 ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL init OK!

Pensate che sia normale che una roccia a basso costo batta una più potente della stessa azienda di quasi un ordine di grandezza? Hanno quasi la stessa architettura, e il set di istruzioni dell'i3 non è almeno più povero...

 
Mathemat:

Beh, è già meglio di 0.7, almeno un po' di accelerazione. E cosa avete fatto?

Anche se... è molto debole. Sul mio Pentium G840 va così:

Cosa ne pensate, è normale o no, se una pietra economica batte una più potente della stessa azienda di quasi un ordine di grandezza? Hanno quasi la stessa architettura, e il set di istruzioni dell'i3 non è almeno più povero...

Aggiornato il driver HD Graphics e installato il nuovo AMD OpenCL SDK in inglese.

Il mio suggerimento per quanto riguarda la differenza di prestazioni è il seguente: versioni diverse di OCL + inizialmente si ha il vantaggio della frequenza della GPU su quella della CPU (supponendo che la parte GPU sia la stessa).

 
Ashes: Per quanto riguarda la differenza di prestazioni presumo: versioni diverse di OCL + inizialmente si ha il vantaggio della frequenza della GPU sulla CPU (supponendo che la parte GPU sia la stessa).

Non ho nessun dispositivo GPU OpenCL, leggete la mia risposta a joo. E non dovreste nemmeno averne uno (sto parlando della grafica integrata). Tutto va in pura emulazione sui core della CPU. Sì e il vantaggio in frequenza è di 2x al massimo, mentre le prestazioni differiscono di un ordine di grandezza. Questa è una discrepanza.

Secondo: la differenza di versione non influisce sulle prestazioni di tutti i test qui esposti. Ed era lo stesso veloce su 1.1 (sul mio G840).

 
Mathemat:

Non ho nessun dispositivo GPU OpenCL, leggete la mia risposta a joo. E non dovreste nemmeno averne uno (sto parlando della grafica integrata). Tutto gira in pura emulazione sui core della CPU. Sì e il vantaggio in frequenza è di 2x al massimo, mentre le prestazioni differiscono di un ordine di grandezza. Questa è una discrepanza.

Secondo: la differenza di versione non influisce sulle prestazioni di tutti i test qui esposti. Ed era lo stesso veloce su 1.1 (sul mio G840).

Sembra che tu abbia ragione. Ho gioito troppo presto. A giudicare dal carico della CPU sembra che la parte GPU dello script sia parallelizzata a 4 core/thread (carico CPU 100%), mentre la parte CPU è praticamente eseguita su un solo core (25-30%).

Quindi risulta che 4*0,7 (overhead?) ~= 2,8 - GPU/CPU.

Non è chiaro perché ci sia una tale differenza tra il tuo e il mio, tranne che AMD SDK non usa tutte le caratteristiche dell'hardware di "qualcun altro" nella versione x64 (tu hai, per quanto ho capito, x32). Versione del driver HD Graphics (Intel Corporation, 14.02.2012, 8.15.10.2653).

Confronto tra G840 e i3-2100 da intel.com:

PS. Ops, mi è sfuggita la 8040Mb che hai (cioè x32/x64 è fuori).

 
Mathemat:

In secondo luogo, la differenza di versione non ha alcun effetto sulle prestazioni di tutti i test qui postati. E con la 1.1 era altrettanto veloce (sul mio G840).

OpenCL 1.2 ha dato un guadagno di circa il 10% rispetto a 1.1:

2012.04.10 09:41:19 Terminale MetaTrader 5 x64 build 619 avviato (MetaQuotes Software Corp.)
2012.04.10 09:41:19 Terminale CPU: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.1 (4 unità, 3092 MHz, 4008 Mb, versione 2.0)

2012.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo GPU = 94365 ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Gpu MachResult==3.52408 a 1914 passaggi
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo CPU = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Cpu MachResult==3.52408 a 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo GPU = 93756 ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Gpu MachResult==4.06735 a 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo CPU = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Cpu MachResult==4.06735 a 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.58571184775076


2012.04.10 11:33:50 PM Terminale MetaTrader 5 x64 build 619 avviato (MetaQuotes Software Corp.)
2012.04.10 11:33:50 Terminale CPU: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.2 (4 unità, 3092 MHz, 4008 Mb, versione 2.0 (sse2,avx))

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo GPU = 86923 ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Gpu MachResult==4.27665 a 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo CPU = 246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Cpu MachResult==4.27665 a 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo GPU = 87610 ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Gpu MachResult==4.43566 a 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo CPU = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Conte inticators = 16; Count history bars = 50.000; Count pass = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Risultato su Cpu MachResult==4.43566 a 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
Immagino che se vogliamo passare un array 2D/multidimensionale con dati alla GPU, possiamo usare la rappresentazione dei dati come una struttura e passare la struttura?
 
Ashes: OpenCL 1.2 ha dato un guadagno di circa il 10% rispetto a 1.1:

Sì, a proposito di questo. Il guadagno non è comunque critico, non molte volte.

L'unica differenza è che AMD SDK non usa tutte le caratteristiche su hardware "straniero".

Anche io avevo questa ipotesi all'inizio.

Ma i test OpenCL della CPU con l'utility GPU Caps passano tutti abbastanza decentemente, ho controllato. L'attrezzo è nel rimorchio se ne avete bisogno. Basta far girare le emulazioni della CPU.

In alcuni test gli fps su i3 sono diverse volte più alti che su G840 (su 4D Quaternion Julia Set - circa 17 vs 4-5).

Quindi, risulta che AMD ha fatto un buon lavoro qui.

Il problema è nel terminale che per qualche motivo "capisce" il G840 ma "non capisce" le pietre Intel più fresche con AMD APP SDK installato. Ho inviato un messaggio a servicedesk una settimana fa, ma finora nessuna risposta.

File: