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

 
Mathemat:

Oui, MD, tu ne te débrouilles pas très bien avec un processeur nu. Intel est un peu partout, cependant...

Oh, allez, tu as une super carte graphique.

J'ai peur d'y toucher. Je l'ai désinstallé une fois et je me suis retrouvé dans l'obscurité presque totale - Windows l'avait branché avec un pilote inapproprié. J'ai dû réinsérer AMD APP SDK dans des conditions de visibilité de 1%. C'était amusant... :)) Appuyez sur tous les boutons pour la centième fois...................
 
MetaDriver: Oui. Je me gratte la tête. Mais peut-être que le conducteur est de travers. J'ai peur de le toucher.
C'est drôle : même les pilotes natifs sont tordus - tant pour Intel que pour AMD. Espérons que c'est juste un problème de croissance.
 

Pourriez-vous nous dire si cet OpenCL sur un pur CPU donne une telle accélération seulement dans MQL5 ou dans d'autres langages aussi ?

Avez-vous fait la comparaison suivante : MQL5 + OpenCL VS C++ + Optimisation complète du compilateur?

Je soupçonne que ce n'est pas OpenCL qui est si cool mais le manque d'optimisations dans MQL5 lui-même.

P.S. J'ai un i7 2700K, j'essaierai (quand j'y serai) de le tester sur un CPU propre.

 
Mathemat:
C'est drôle : même les pilotes natifs sont tordus - pour Intel et AMD. Espérons que c'est juste un problème de croissance.
Eh bien, j'espère que dans quelques années, cela n'arrivera plus et que tout fonctionnera bien. Pour l'instant, j'ai d'autres problèmes - apprendre à programmer ce truc correctement... :)
 
hrenfx:

Pourriez-vous nous dire si cet OpenCL sur un pur CPU donne une telle accélération seulement dans MQL5 ou dans d'autres langages aussi ?

Avez-vous fait la comparaison suivante : MQL5 + OpenCL VS C++ + Optimisation complète du compilateur?

Je soupçonne que ce n'est pas OpenCL qui est si cool mais le manque d'optimisations dans MQL5 lui-même.

P.S. J'ai un i7 2700K et j'essaierai (quand je serai là) de le tester sur un CPU propre.

Non, on ne l'a pas fait.

Allez-y ! C'est bien.

En gros, le code est porté en C++ en dix minutes au maximum (sur un CPU nu qui compte). Comment utiliser OpenCL en C++, je ne l'ai vu que dans un abécédaire et je n'ai jamais essayé. En fait, j'aurais bien aimé.

 
hrenfx: Je soupçonne que ce n'est pas OpenCL qui pose problème mais le manque d'optimisations dans MQL5 lui-même.

Oui, c'est logique. J'ai récemment eu une discussion sur le forum ixbt avec un analyste CPU qui partage la même opinion. La discussion a commencé ici (mon pseudo est tamehtaM). S'il vous plaît, ne me frappez pas pour mon incompétence. Mais j'ai l'impression que Felid en fait aussi trop : il parle trop souvent d'IGP - même lorsque celui-ci est absent ou trop faible.

Mon premier message dans ce fil de discussion a été écrit lorsque je ne savais toujours pas comment installer correctement le runtime Intel OpenCL. En fait, je ne suis toujours pas sûr qu'il ait été réglé correctement. Mais il est déjà environ trois fois meilleur que sur AMD APP SDK.

Les chiffres de l'accélération sont douloureusement élevés, c'est certain. Et ils devraient évidemment devenir plus faibles lorsque les optimisations apparaîtront.

Ce qui est intéressant, c'est que même sans ces optimisations, la cinquième est plus rapide que la quatrième.

Et l'accélération elle-même n'est pas l'essentiel. L'essentiel, ce sont les chiffres absolus de la durée d'exécution. Ils ne vont certainement pas s'aggraver. Pour être plus précis, ils ne devraient pas empirer.

 
Mathemat:

Il s'agit manifestement d'une carte discrète, pas d'un processeur : de telles accélérations sont difficilement réalisables en émulation. Et le nombre d'appareils est déjà de 5, ce qui est vraiment effrayant.

Si vous voulez bien exécuter un code légèrement modifié, s'il vous plaît, et postez le résultat ici. Dans le code, les calculs pour les différents dispositifs OpenCL sont mis en boucle (ils devraient être rapides) tandis que le calcul sur x86, le plus long, est exécuté une seule fois. Il sera long, mais le script lui-même n'est exécuté qu'une fois.

Je me rends compte que je vous ennuie déjà. Mais dans tous les cas, ce sera une bonne information pour l'équipe de support.

Voici le résultat.

2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) CpuTime/GpuTime = 439.0727802037846
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Cpu MachResult==1.41575 at 7544 pass
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Indicateurs sociaux = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passes = 12800
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Temps CPU = 301643 ms
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu MachResult==1.41575 at 7544 pass
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Indicateurs sociaux = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passes = 12800
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Temps GPU = 687 ms
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK ! Numéro du dispositif = 4
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu MachResult==1.41575 at 7544 pass
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passages = 12800
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Temps GPU = 234 ms
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK ! Numéro du dispositif = 3
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu MachResult==1.41575 at 7544 pass
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passages = 12800
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Temps GPU = 234 ms
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK ! Numéro du dispositif = 2
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu MachResult==1.41575 at 7544 pass
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passages = 12800
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Temps GPU = 234 ms
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK ! Numéro du dispositif = 1
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu MachResult==1.41575 at 7544 pass
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passes = 12800
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Temps GPU = 234 ms
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK ! Numéro du dispositif = 0

 
casinonsk:

Voici le résultat.

2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) CpuTime/GpuTime = 439.0727802037846
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Cpu MachResult==1.41575 at 7544 pass
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Indicateurs sociaux = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passes = 12800
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Temps CPU = 301643 ms
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu MachResult==1.41575 at 7544 pass
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Indicateurs sociaux = 16 ; Nombre de barres d'historique = 144000 ; Nombre de passes = 12800
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Temps GPU = 687 ms
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK ! Numéro du dispositif = 4

Donc, c'est clair maintenant, le dispositif = 4 est le CPU nu. Et tempsGPU = 687 ms- assez cohérent. Ça a bien marché pour vous.

Je ne comprends pas pourquoi le temps d'exécution de CPU time est si long. J'ai environ 235 000 ms avec une fréquence de noyau beaucoup plus basse (2,8 GHz).

Soit votre mémoire est faible, soit elle est très lente, soit le CPU est en permanence surchargé par une tâche terriblement gourmande en ressources. Ce n'est pas clair. Le chiffre du ratio temps est anormalement élevé.

 
Mathemat:

Donc, c'est clair maintenant, le dispositif = 4 est le CPU nu. Et tempsGPU = 687 ms- assez cohérent. Ça a bien marché pour vous.

Je ne comprends pas pourquoi le temps d'exécution est si élevé. J'ai environ 235000 ms - à une fréquence de noyau beaucoup plus basse (2,8 GHz).

Soit votre mémoire est faible, soit elle est très lente, soit le CPU est en permanence surchargé par une tâche terriblement gourmande en ressources. Ce n'est pas clair. Le chiffre du ratio temps est anormalement élevé.

Le Conseiller Expert est en train de s'optimiser, il est un peu chargé en cores.

Mémoire de 16 Go

 
casinonsk: L'Expert Advisor est en train d'optimiser, les cœurs sont un peu chargés.

Alors tout est clair. Essayez d'exécuter le même script lorsque l'optimisation est terminée. Il charge probablement tous les noyaux.

Il est très intéressant d'examiner une unité centrale de traitement de haut niveau lorsque rien d'autre ne s'y oppose.