OpenCL: test di implementazione interna in MQL5 - pagina 29

 
MetaDriver:

...

--

Fai 512 e vedi cosa ottieni. Non abbiate paura di scricchiolare il programma, lo renderà solo migliore. :) Quando l'hai fatto, pubblicalo qui.

OK! A 512 passaggi e 144000 battute:

PK      0       po_00-02 (GBPJPY,M5)    23:38:29        OpenCL init OK.
LS      0       po_00-02 (GBPJPY,M5)    23:38:30        Generation 001 (512 passes, 1186 ms) : MaxResult==81.21127; Average Result==24.14348
PR      0       po_00-02 (GBPJPY,M5)    23:38:32        Generation 002 (512 passes, 1170 ms) : MaxResult==88.56933; Average Result==45.67882
RF      0       po_00-02 (GBPJPY,M5)    23:38:33        Generation 003 (512 passes, 1170 ms) : MaxResult==100.78146; Average Result==66.20171
RF      0       po_00-02 (GBPJPY,M5)    23:38:34        Generation 004 (512 passes, 1170 ms) : MaxResult==107.30714; Average Result==82.67181
RG      0       po_00-02 (GBPJPY,M5)    23:38:35        Generation 005 (512 passes, 1170 ms) : MaxResult==115.61784; Average Result==93.52664
DG      0       po_00-02 (GBPJPY,M5)    23:38:36        Generation 006 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==100.41042
CG      0       po_00-02 (GBPJPY,M5)    23:38:37        Generation 007 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==103.95667
JF      0       po_00-02 (GBPJPY,M5)    23:38:39        Generation 008 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==105.85167
NI      0       po_00-02 (GBPJPY,M5)    23:38:40        Generation 009 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==106.22531
MI      0       po_00-02 (GBPJPY,M5)    23:38:41        Generation 010 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==106.33067
GH      0       po_00-02 (GBPJPY,M5)    23:38:42        Generation 011 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==106.23798
DK      0       po_00-02 (GBPJPY,M5)    23:38:43        Generation 012 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==106.02062
PK      0       po_00-02 (GBPJPY,M5)    23:38:44        Generation 013 (512 passes, 1170 ms) : MaxResult==116.37332; Average Result==105.62199
CJ      0       po_00-02 (GBPJPY,M5)    23:38:44        Optimization finished. Best result == 116.37332 at 13 generation.
RM      0       po_00-02 (GBPJPY,M5)    23:38:44        Total time of optimization == 15 sec 226 ms

Bene e se 60 è ottimale, allora in generale va bene:

FG      0       po_00-02 (GBPJPY,M5)    23:39:44        OpenCL init OK.
OO      0       po_00-02 (GBPJPY,M5)    23:39:44        Generation 001 (60 passes, 312 ms) : MaxResult==91.27985; Average Result==38.30907
RN      0       po_00-02 (GBPJPY,M5)    23:39:44        Generation 002 (60 passes, 312 ms) : MaxResult==94.08679; Average Result==48.68662
DR      0       po_00-02 (GBPJPY,M5)    23:39:45        Generation 003 (60 passes, 296 ms) : MaxResult==108.52215; Average Result==58.43468
IS      0       po_00-02 (GBPJPY,M5)    23:39:45        Generation 004 (60 passes, 312 ms) : MaxResult==129.80438; Average Result==65.32684
DP      0       po_00-02 (GBPJPY,M5)    23:39:45        Generation 005 (60 passes, 297 ms) : MaxResult==144.99834; Average Result==73.78468
MQ      0       po_00-02 (GBPJPY,M5)    23:39:46        Generation 006 (60 passes, 297 ms) : MaxResult==144.99834; Average Result==79.96281
QF      0       po_00-02 (GBPJPY,M5)    23:39:46        Generation 007 (60 passes, 312 ms) : MaxResult==152.74852; Average Result==85.70296
EG      0       po_00-02 (GBPJPY,M5)    23:39:46        Generation 008 (60 passes, 312 ms) : MaxResult==152.74852; Average Result==87.95421
PD      0       po_00-02 (GBPJPY,M5)    23:39:46        Generation 009 (60 passes, 296 ms) : MaxResult==152.74852; Average Result==89.29836
CE      0       po_00-02 (GBPJPY,M5)    23:39:47        Generation 010 (60 passes, 312 ms) : MaxResult==152.74852; Average Result==87.88991
OI      0       po_00-02 (GBPJPY,M5)    23:39:47        Generation 011 (60 passes, 296 ms) : MaxResult==152.74852; Average Result==85.3231
HK      0       po_00-02 (GBPJPY,M5)    23:39:47        Generation 012 (60 passes, 312 ms) : MaxResult==152.74852; Average Result==81.60567
IH      0       po_00-02 (GBPJPY,M5)    23:39:48        Generation 013 (60 passes, 297 ms) : MaxResult==152.74852; Average Result==77.38504
QI      0       po_00-02 (GBPJPY,M5)    23:39:48        Generation 014 (60 passes, 312 ms) : MaxResult==152.74852; Average Result==76.46695
EM      0       po_00-02 (GBPJPY,M5)    23:39:48        Optimization finished. Best result == 152.74852 at 14 generation.
PO      0       po_00-02 (GBPJPY,M5)    23:39:48        Total time of optimization == 4 sec 290 ms

//---

Cioè, sul portatile più debole presentato in questo thread, questo è il risultato. Così molto promettente.

//---

Sfortunatamente, non sono in grado di discutere liberamente l'argomento, dato che non sono nemmeno entrato nell'articolo di joo e nelle reti neurali, mentre non ho mai scavato su OpenCL. Non posso usare questo o quel codice senza capire ogni singola linea di codice. Voglio sapere tutto. ))) Sto ancora lavorando sul motore del programma di trading. C'è così tanto da fare che la mia testa è già in subbuglio. )))

 

Aumentato CountBars di un fattore 30 (a 4.320.000), ha deciso di verificare la resistenza della pietra al carico.

Non importa: funziona, si scalda, ma non suda troppo. La temperatura sale lentamente, ma ha già raggiunto la saturazione.

La linea rossa è la temperatura, la linea verde è il carico dei core.


Ecco perché amo l'esemplare Sandy Bridge di Intel: è "verde". Sì, la grafica non è il massimo, ma vedremo cosa diventerà Ivy Bridge...
 
Mathemat:

...

Ecco perché amo il modello Sandy Bridge di Intel: è "verde". Sì, la grafica non è il massimo, ma vedremo cosa diventerà Ivy Bridge...

Oh. Questo sì che è un vero test di stress. :) Il mio sarebbe probabilmente già morto.

Poi cosa un Haswell e poi un Rockwell un po' più tardi... )))

 

Un esempio di implementazione della felce di Barnsley in OpenCL.

Il calcolo è basato sull'algoritmo Chaos Game(esempio) e utilizza un generatore di numeri casuali con una base di generazione che dipende dall'ID del thread e restituisce get_global_id(0) per creare traiettorie uniche.

IFS felce OpenCL

Man mano che si scala, il numero di punti richiesto per mantenere la qualità dell'immagine cresce quadraticamente, quindi questa implementazione assume che ogni istanza del kernel disegni un numero fisso di punti che cadono all'interno dell'area visibile.

Il numero di fili stimati è specificato alla linea 191:

   uint  work  []={500};

il numero di punti è nella linea 233:

   float pointsneeded=float(MathRound(1500+scale));

UPD

IFS-fern.mq5 - analogo della CPU

In scala=1000:


Chaos game - Wikipedia, the free encyclopedia
Chaos game - Wikipedia, the free encyclopedia
  • en.wikipedia.org
In mathematics, the term chaos game, as coined by Michael Barnsley,1 originally referred to a method of creating a fractal, using a polygon and an initial point selected at random inside it.2 The fractal is created by iteratively creating a sequence of points, starting with the initial random point, in which each point in the sequence is a...
File:
 
Bellissimo.
 

Ho fatto tre strati di neuroni 16x7x3. In realtà, l'ho fatto l'altro ieri e l'ho debuggato oggi. Prima i risultati non andavano bene quando controllavo con la CPU - non descriverò qui i motivi, almeno non ora - ho troppo sonno. :)

Caratteristiche temporali :

2012.03.08 04:46:13 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  CpuTime/GpuTime = 776.72 18045112782
2012.03.08 04:46:13 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  Result on Cpu МахResult==1.06443 at 1004 pass
2012.03.08 04:46:13 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  Соunt inticators = 16; Count history bars = 144000; Count pass = 1024
2012.03.08 04:46:13 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  CPU time = 206608 ms
2012.03.08 04:42:46 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  Result on Gpu МахResult==1.06443 at 1004 pass
2012.03.08 04:42:46 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  Соunt inticators = 16; Count history bars = 144000; Count pass = 1024
2012.03.08 04:42:46 ParallelTester_00-02-(16 x7x3) (EURUSD,M30)  GPU time = 266 ms

Domani farò Optimizer per questa griglia. Poi mi occuperò di caricare dati reali e di finire il tester fino a calcoli realistici verificabili con MT5-tester. Poi mi occuperò del generatore MLP+cl-code delle griglie per la loro ottimizzazione.

Non pubblico il codice sorgente per avidità, ma l'ex5 è incluso per coloro che vorrebbero testarlo sul loro hardware.

 
MetaDriver: Non carico il codice sorgente, a causa dell'avidità, ma per coloro che vogliono testarlo sul loro hardware, l'ex5 è allegato.

Sono stabile come sotto Putin:

2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    CpuTime/GpuTime = 24.08037178786222
2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Result on Cpu МахResult==1.09311 at 771 pass
2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Соunt inticators = 16; Count history bars = 144000; Count pass = 1024
2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    CPU time = 176172 ms
2012.03.08 05:35:26    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Result on Gpu МахResult==1.09311 at 771 pass
2012.03.08 05:35:26    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Соunt inticators = 16; Count history bars = 144000; Count pass = 1024
2012.03.08 05:35:26    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    GPU time = 7316 ms
2012.03.08 05:35:18    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    OpenCL init OK!


A proposito, fai attenzione: per il runtime della CPU la differenza tra il tuo sistema e il mio (basato su Pentium G840) non è così grande.

La vostra RAM è veloce? Ho 1333 MHz.

Un'altra cosa: è interessante che entrambi i core siano caricati sulla CPU durante i calcoli. Il forte calo di carico alla fine è dopo la fine dei calcoli. Che cosa significherebbe?


 
Mathemat:

Sono stabile come sotto Putin:

2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    CpuTime/GpuTime = 24.08037178786222
2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Result on Cpu МахResult==1.09311 at 771 pass
2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Соunt inticators = 16; Count history bars = 144000; Count pass = 1024
2012.03.08 05:38:22    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    CPU time = 176172 ms
2012.03.08 05:35:26    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Result on Gpu МахResult==1.09311 at 771 pass
2012.03.08 05:35:26    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    Соunt inticators = 16; Count history bars = 144000; Count pass = 1024
2012.03.08 05:35:26    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    GPU time = 7316 ms
2012.03.08 05:35:18    ParallelTester_00-02-j16x7x3z (EURUSD,H1)    OpenCL init OK!


1. A proposito, nota la differenza tra il tuo sistema e il mio (basato su Pentium G840) nel tempo di esecuzione della CPU.

2. La vostra RAM è veloce? Ho 1333 MHz.

1. Ho ripristinato il mio overclock nel mio tempo libero. Una volta ho avuto un crash davvero brutto (ho scoperto più tardi che il cavo di alimentazione del disco era caduto), così ho premuto il pulsante "MemoryOK" sulla scheda madre in cerca di un miracolo. Dopo di che, ancora non funzionava, solo le impostazioni CMOS sono state riportate a quelle di default. Ora, ho overcloccato il processore a 3840 MHz di nuovo, quindi ora funziona in modo più intelligente.

2. Ancora non riesco a capirlo. :) In particolare, il benchmark a cui Renat ha mostrato il link, mostra 1600MHz. I Windows mostrano addirittura 1033MHz :)))), nonostante il fatto che la memoria stessa sia 2GHz, ma mia madre può tirare fino a 1866 (in senso figurato).

 
Mathemat:

Un'altra cosa: è interessante che ho entrambi i core caricati quando calcolo sulla CPU. Il forte calo di carico alla fine è dopo la fine dei calcoli. Cosa significherebbe?

Quindi forse non è affatto sulla GPU? Il driver è attivo, ma... La mia unica spiegazione è che il calcolo è fatto su CPU-OpenCL, solo, ovviamente, su tutti i core disponibili e usando istruzioni SSE vettoriali. :)

La seconda variante è che conta contemporaneamente su CPU e CPU. Non so come questo supporto (CPU-LPU) sia implementato dal driver, ma in linea di principio non escludo anche una tale variante di avvio dell'elaborazione di opentCL.

Questa è la mia speculazione, semmai. O come va di moda scrivere ora - "IMHO". ;)

 
MetaDriver: L'unica spiegazione che ho è che il calcolo è fatto sulla CPU OpenCL usando tutti i core disponibili e le istruzioni SSE vettoriali, ovviamente. :)

Ne dubito. Soprattutto perché ho solo due core. Da dove viene allora il profitto 25x?

Se avete Intel Math Kernel Library o Intel Performance Primitives (non li ho scaricati), è possibile... in alcuni casi. Ma è improbabile, visto che pesano centinaia di meg.

Dovrò vedere cosa ha da dire Google al riguardo.

Mathemat: Inoltre, è interessante notare che i miei calcoli sulla CPU hanno entrambi i core caricati.

No, intendevo il puro calcolo della CPU senza alcun OpenCL. Il carico è appena sotto il 100% dove ogni nucleo ha valori di carico comparabili. Ma quando si esegue codice OpenCL, sale al 100%, il che può essere facilmente spiegato dal funzionamento della GPU.