OpenCL : tests de l'implémentation interne dans MQL5 - page 29

 
MetaDriver:

...

--

Faites 512 et voyez ce que vous obtenez. N'ayez pas peur de croquer le programme, cela ne fera que l'améliorer. :) Quand vous l'aurez fait, postez-le ici.

OK ! A 512 passages et 144000 bars :

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

Bien et si 60 est optimal, alors généralement cool :

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

//---

C'est-à-dire, sur l'ordinateur portable le plus faible présenté dans ce fil, voici le résultat. C'est très prometteur.

//---

Malheureusement, je ne suis pas en mesure de discuter librement du sujet, car je n'ai même pas abordé l'article de Joo et les réseaux neuronaux, tandis que je n'ai jamais creusé la question d'OpenCL. Je ne peux pas utiliser tel ou tel code sans en comprendre chaque ligne. Je veux tout savoir. ))) Je travaille toujours sur le moteur du programme de trading. Il y a tellement de choses à faire que j'ai déjà la tête qui tourne. )))

 

J'ai augmenté CountBars d'un facteur 30 (à 4 320 000), j'ai décidé de vérifier la résistance de la pierre à la charge.

Peu importe : ça marche, ça se réchauffe, mais ça ne transpire pas trop. La température augmente lentement, mais a déjà atteint la saturation.

La ligne rouge est la température, la ligne verte est la charge des cœurs.


C'est pourquoi j'aime le spécimen Sandy Bridge d'Intel : il est "vert". Oui, les graphismes ne sont pas géniaux, mais nous verrons ce que devient Ivy Bridge...
 
Mathemat:

...

C'est pourquoi j'aime le modèle Sandy Bridge d'Intel : il est "vert". Oui, les graphismes ne sont pas super, mais on verra ce que devient Ivy Bridge...

Oh. (gloussements) Ça, c'est un vrai test de résistance. :) Le mien serait probablement mort maintenant.

Puis ce qu'un Haswell et ensuite un Rockwell un peu plus tard... )))

 

Un exemple d'implémentation d'une fougère de Barnsley en OpenCL.

Le calcul est basé sur l'algorithme Chaos Game(exemple) et utilise un générateur de nombres aléatoires avec une base de génération qui dépend de l'ID du fil et renvoie get_global_id(0) pour créer des trajectoires uniques.

Fougère IFS OpenCL

Lors de la mise à l'échelle, le nombre de points requis pour maintenir la qualité de l'image croît de manière quadratique. Cette mise en œuvre suppose donc que chaque instance du noyau dessine un nombre fixe de points qui se trouvent dans la zone visible.

Le nombre de fils estimés est spécifié à la ligne 191 :

   uint  work  []={500};

le nombre de points est à la ligne 233 :

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

UPD

IFS-fern.mq5 - Analogique du CPU

A l'échelle=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...
Dossiers :
 
Magnifique.
 

J'ai fait trois couches de neurones 16x7x3. En fait, je l'ai fait avant-hier, je l'ai débogué aujourd'hui. Avant cela, les résultats ne correspondaient pas à la vérification avec le CPU - je ne vais pas décrire ici les raisons, du moins pas maintenant - j'ai trop sommeil. :)

Caractéristiques temporelles :

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

Demain je ferai l'Optimizer pour cette grille. Ensuite je m'occuperai de charger des données réelles et de finir le testeur jusqu'aux calculs réalistes vérifiables avec MT5-tester. Ensuite je m'occuperai du générateur MLP+cl-codes des grilles pour leur optimisation.

Je ne poste pas le code source par cupidité, mais ex5 est inclus pour ceux qui voudraient le tester sur leur matériel.

 
MetaDriver: Je ne télécharge pas le code source, par cupidité, mais pour ceux qui veulent le tester sur leur matériel, ex5 est joint.

Je suis aussi stable que sous Poutine :

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 propos, faites attention : au niveau du temps d'exécution du CPU, la différence entre votre système et le mien (basé sur un Pentium G840) n'est pas si grande.

Votre RAM est-elle rapide ? J'ai 1333 MHz.

Une dernière chose : il est intéressant que les deux cœurs soient chargés sur le CPU pendant les calculs. La chute brutale de la charge à la fin est postérieure à la fin des calculs. Qu'est-ce que ça veut dire ?


 
Mathemat:

Je suis aussi stable que sous Poutine :

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 propos, remarquez la différence entre votre système et le mien (basé sur un Pentium G840) en ce qui concerne le temps d'exécution du CPU.

2. votre RAM est-elle rapide ? J'ai 1333 MHz.

1. J'ai restauré mon overclocking pendant mon temps libre. Une fois, j'ai eu un très mauvais plantage (j'ai découvert plus tard que le cordon d'alimentation du disque était tombé), alors j'ai appuyé sur le bouton "MemoryOK" de la carte mère à la recherche d'un miracle. Après cela, il n'a toujours pas fonctionné, seuls les paramètres CMOS ont été remis par défaut. Maintenant, j'ai overclocké le processeur à 3840 MHz à nouveau, donc il fonctionne mieux maintenant.

2. Je n'arrive toujours pas à comprendre. :) En particulier, le benchmark, vers lequel Renat a montré le lien, montre 1600MHz. Windows affiche même 1033MHz :)))), en dépit du fait que la mémoire elle-même est de 2GHz, mais ma mère peut aller jusqu'à 1866 (au sens figuré).

 
Mathemat:

Une dernière chose : il est intéressant de constater que les deux cœurs sont chargés lorsque je calcule sur le CPU. La forte baisse de la charge à la fin se situe après la fin des calculs. Qu'est-ce que cela signifierait ?

Alors peut-être que ce n'est pas du tout sur le GPU ? Le pilote est en place, mais... Ma seule explication est que le calcul est effectué sur CPU-OpenCL, uniquement, bien sûr, sur tous les cœurs disponibles et en utilisant les instructions vectorielles SSE. :)

La deuxième variante est qu'il compte simultanément sur le CPU et le LPU. Je ne sais pas comment ce support (CPU-LPU) est implémenté par le pilote, mais en principe je n'exclus pas une telle variante du démarrage du traitement opentCL aussi.

C'est ma spéculation, s'il y a lieu. Ou, comme il est de bon ton de l'écrire maintenant, "IMHO". ;)

 
MetaDriver: La seule explication que j'ai est que le calcul est effectué sur le CPU OpenCL en utilisant tous les cœurs disponibles et les instructions vectorielles SSE, bien sûr. :)

J'en doute. D'autant plus que je n'ai que deux cœurs. D'où vient alors le bénéfice multiplié par 25 ?

Si vous avez Intel Math Kernel Library ou Intel Performance Primitives (je ne les ai pas téléchargés), il est possible... dans certains cas. Mais c'est peu probable, car ils pèsent des centaines de meg.

Je vais devoir voir ce que Google a à dire à ce sujet.

Mathemat : Aussi, de façon intéressante, mes calculs CPU ont les deux cœurs chargés.

Non, je voulais parler de calcul purement CPU sans aucun OpenCL. La charge est juste en dessous de 100 % où chaque noyau a des valeurs de charge comparables. Mais lors de l'exécution du code OpenCL, il passe à 100 %, ce qui peut facilement s'expliquer par le fonctionnement du GPU.