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

 
Mathemat:

Et le résultat de votre émulateur OpenCL (votre deuxième test) semble suspicieusement faible même en comparaison avec le mien (j'ai eu environ 10 secondes sur "GPU").

Il comptait sur un GPU gourmand en CPU - j'avais plus de cœurs que le mien. Et le mien comptait sur un CPU pur avec 4 cœurs (dispositif 1).
 
joo: Vous calculiez sur un GPU intensif en CPU - plus de cœurs que le mien. Et le mien comptait sur un CPU pur avec 4 cœurs.

Non, pas du tout, Andrei. Je comptais aussi sur un pur CPU à 2 cœurs. Il y a trois arguments en sa faveur. Le premier est tout simplement inébranlable, le deuxième et le troisième ne sont pas aussi solides :

1. Je n'ai qu'un seul périphérique OpenCL sur mon système. D'un autre côté, l'un de ces disques doit de toute façon être l'hôte, c'est-à-dire le CPU nu. Elle l'est. Ce n'est pas un GPU, je l'ai vérifié sur GPU Caps.

Je pense donc que le périphérique CPU qui émule OpenCL pourrait être n'importe quelle pierre qui supporte SSE2 et plus. Peu importe qu'il ait des graphiques intégrés ou non. Dont un Intel Core i5-750, d'ailleurs.

2. Mon processeur graphique est Intel HD Graphics. Il a 6 pipelines, mais 24 processeurs (threads, mouches ?). Encerclez les spécifications graphiques proches de ce que vous et moi avons.

La fréquence de la mouche étant beaucoup plus basse que celle de la pierre, je ne peux pas imaginer que 24 threads GPU à une fréquence plus basse accélèrent l'exécution par rapport à un CPU pur de plus de 25 fois (et j'ai connu ça). Il ne reste donc qu'une seule chose : ce n'est pas le GPU, c'est l'émulation CPU d'OpenCL. Je me trompe peut-être en comptant, mais je n'ai pas de données plus détaillées sur l'architecture graphique des pierres Intel.

Vos graphiques intégrés sont à peu près les mêmes que les miens - Intel HD Graphics 2000 - mais quelque chose ne tourne pas rond là-haut. Je ne sais pas comment expliquer un résultat aussi étrangement bas d'une pierre Intel Sandy Bridge presque haut de gamme. L'accélération sur celui-ci devrait être, selon des estimations grossières, de l'ordre de 50.

3. Officiellement, les graphiques intégrés d'Intel n'auront la prise en charge d'OpenCL que sur Ivy Bridge avec les Intel HD Graphics 2500 et 4000 (il y aura déjà 64 mouches rapides qui sont beaucoup plus rapides que celles intégrées d'AMD). Et pour l'instant, elle ne semble pas vraiment exister.

Pour ma part, je n'ai pas encore compris pourquoi mon i3 n'accélère pas mes calculs.

 
Mathemat:

...

Je n'ai pas encore compris pourquoi mon i3 n'accélère pas moi-même mes calculs.

Hourra ! Ça marche !

2012.04.09 15:32:01 Terminal CPU : Véritable CPU Intel(R) Core(TM) i3-2100 @ 3.10GHz avec OpenCL 1.1 (4 unités, 3092 MHz, 4008 Mb, version 2.0)
2012.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 démarré (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) Résultat sur Cpu MachResult==3.64642 at 1594 pass
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Temps CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Résultat sur Gpu MachResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Temps 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) Résultat sur Cpu MachResult==3.82222 à 3357 pass
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps CPU = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Gpu MachResult==3.82222 à 3357 pass
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps GPU = 94787 ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) Init OpenCL OK !

 
Ashes:

Yay ! Ça marche !

2012.04.09 15:32:01 Terminal CPU : Véritable CPU Intel(R) Core(TM) i3-2100 @ 3.10GHz avec OpenCL 1.1 (4 unités, 3092 MHz, 4008 Mb, version 2.0)
2012.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 démarré (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) Temps CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Résultat sur Gpu MachResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1)Temps GPU = 93460 ms

Eh bien, c'est mieux que la 0.7 - au moins, il y a une certaine accélération. Alors, qu'avez-vous fait ?

Bien que... C'est très faible. Sur mon Pentium G840, comme ceci :

2012.04.08 22:01:08 Terminal CPU : GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80GHz avec OpenCL 1.2 (2 unités, 2793 MHz, 8040 Mb, version 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) Résultat sur Cpu MachResult==4.04242 à 1775 pass
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Count inticators = 16 ; Count history bars = 50,000 ; Count pass = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Temps CPU = 269461 ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Résultat sur Gpu MachResult==4.04242 at 1775 pass
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de passages = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Temps GPU = 10343 ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL init OK !

Pensez-vous qu'il est normal qu'une pierre peu coûteuse batte une pierre plus puissante de la même entreprise par presque un ordre de grandeur ? Ils ont presque la même architecture, et le jeu d'instructions de l'i3 n'est au moins pas plus pauvre...

 
Mathemat:

Eh bien, c'est déjà mieux que la 0.7, au moins un peu plus rapide. Et qu'avez-vous fait ?

Bien que... c'est très faible. Sur mon Pentium G840, cela se passe comme suit :

Que pensez-vous, est-ce normal ou non, qu'une pierre à petit budget batte une pierre plus puissante de la même entreprise par presque un ordre de grandeur ? Ils ont presque la même architecture, et le jeu d'instructions de l'i3 n'est au moins pas plus pauvre...

Mise à jour du pilote HD Graphics et installation du nouveau SDK AMD OpenCL en anglais.

Ma suggestion concernant la différence de performance est la suivante : différentes versions d'OCL + initialement vous avez l'avantage de la fréquence du GPU sur celle du CPU (en supposant que la partie GPU est la même).

 
Ashes: Pour ce qui est de la différence de performances, je suppose que les versions d'OCL sont différentes et que la fréquence du GPU est supérieure à celle du CPU (en supposant que la partie GPU est la même).

Je n'ai pas de dispositif GPU OpenCL, lisez ma réponse à joo. Et vous ne devriez pas en avoir non plus (je parle des graphiques intégrés). Tout se passe en émulation pure sur les cœurs du CPU. Oui et l'avantage en termes de fréquence est de 2x au maximum, alors que les performances diffèrent d'un ordre de grandeur. Il s'agit d'une divergence.

Deuxièmement : la différence de version n'affecte pas les performances d'absolument tous les tests présentés ici. Et c'était aussi rapide en 1.1 (sur mon G840).

 
Mathemat:

Je n'ai pas de dispositif GPU OpenCL, lisez ma réponse à joo. Et vous ne devriez pas en avoir non plus (je parle des graphiques intégrés). Tout fonctionne en pure émulation sur des cœurs de CPU. Oui et l'avantage en termes de fréquence est de 2x au maximum, alors que les performances diffèrent d'un ordre de grandeur. Il s'agit d'une divergence.

Deuxièmement : la différence de version n'affecte pas les performances d'absolument tous les tests présentés ici. Et c'était aussi rapide en 1.1 (sur mon G840).

On dirait que tu as raison. Je me réjouissais trop tôt. À en juger par la charge CPU, il semble que la partie GPU du script soit parallélisée à 4 cœurs/threads (charge CPU 100%), tandis que la partie CPU est pratiquement exécutée sur un seul cœur (25-30%).

Il s'avère donc que 4*0,7 (frais généraux ?) ~= 2,8 - GPU/CPU.

On ne comprend pas bien pourquoi il y a une telle différence entre le vôtre et le mien, si ce n'est que le SDK d'AMD n'utilise pas toutes les fonctionnalités du matériel de "quelqu'un d'autre" en version x64 (vous avez, d'après ce que je comprends, x32). Version du pilote HD Graphics (Intel Corporation, 14.02.2012, 8.15.10.2653).

Comparaison du G840 et du i3-2100 sur intel.com :

PS. Oups, j'ai manqué les 8040Mb que vous avez (c'est-à-dire que x32/x64 est sorti).

 
Mathemat:

Deuxièmement, la différence de version n'a aucun effet sur les performances d'absolument tous les tests postés ici. Et avec la 1.1, c'était tout aussi rapide (sur mon G840).

OpenCL 1.2 a donné un gain d'environ 10% par rapport à 1.1 :

2012.04.10 09:41:19 Terminal MetaTrader 5 x64 build 619 démarré (MetaQuotes Software Corp.)
2012.04.10 09:41:19 Terminal CPU : GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz avec OpenCL 1.1 (4 unités, 3092 MHz, 4008 Mb, version 2.0)

2012.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) Init OpenCL OK !
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps GPU = 94365 ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Gpu MachResult==3.52408 à 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps CPU = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Cpu MachResult==3.52408 à 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) Init OpenCL OK !
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps GPU = 93756 ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Gpu MachResult==4.06735 à 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps CPU = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Cpu MachResult==4.06735 à 1519 pass
2012.04.10 10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.58571184775076


2012.04.10 11:33:50 PM Terminal MetaTrader 5 x64 build 619 démarré (MetaQuotes Software Corp.)
2012.04.10 11:33:50 Terminal CPU : Véritable CPU Intel(R) Core(TM) i3-2100 @ 3.10GHz avec OpenCL 1.2 (4 unités, 3092 MHz, 4008 Mb, version 2.0 (sse2,avx))

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) Init OpenCL OK !
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps GPU = 86923 ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Gpu MachResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps CPU = 246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Cpu MachResult==4.27665 à 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) Init OpenCL OK !
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps GPU = 87610 ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Gpu MachResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Temps CPU = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Nombre d'indicateurs = 16 ; Nombre de barres d'historique = 50 000 ; Nombre de succès = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Résultat sur Cpu MachResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
Je suppose que si nous voulons transmettre un tableau 2D/multidimensionnel avec des données au GPU, nous pouvons utiliser la représentation des données comme une structure et transmettre la structure ?
 
Ashes: OpenCL 1.2 a donné un gain d'environ 10% par rapport à 1.1 :

Oui, à peu près. Le gain n'est pas critique de toute façon, pas beaucoup plus.

La seule différence est que le SDK d'AMD n'utilise pas toutes les fonctionnalités sur le matériel "étranger".

J'avais aussi cette hypothèse au début.

Mais les tests CPU OpenCL effectués par l'utilitaire GPU Caps passent tous très bien, je l'ai vérifié. L'outil est dans la remorque si vous en avez besoin. Il suffit de faire tourner les émulations de CPU.

Dans certains tests, les images par seconde sur i3 sont plusieurs fois plus élevées que sur G840 (sur 4D Quaternion Julia Set - environ 17 contre 4-5).

Il s'avère donc qu'AMD a fait du bon travail ici.

Le problème se situe dans le terminal qui, pour une raison quelconque, "comprend" le G840 mais "ne comprend pas" les pierres Intel plus froides avec AMD APP SDK installé. J'ai envoyé un message à Servicedesk il y a une semaine, mais aucune réponse jusqu'à présent.

Dossiers :