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

 
Mathemat:
C'est le but de l'astuce. L'argument dans CLContextCreate() ne peut pas sélectionner explicitement le CPU s'il y a au moins un GPU externe.

Cela ne devrait pas être comme ça - https://www.mql5.com/ru/docs/opencl/clcontextcreate

Paramètres

dispositif

[in] Nombre de périphériques OpenCL dans le système, dans l'ordre. Une des valeurs peut être spécifiée à la place d'un nombre spécifique : CL_USE_ANY - tout périphérique OpenCL disponible peut être utilisé ; CL_USE_GPU_ONLY- l'émulation OpenCL est désactivée et seuls les périphériques OpenCL dédiés (cartes vidéo) peuvent être utilisés.

Документация по MQL5: Работа с OpenCL / CLContextCreate
Документация по MQL5: Работа с OpenCL / CLContextCreate
  • www.mql5.com
Работа с OpenCL / CLContextCreate - Документация по MQL5
 
Rosh: Cela ne devrait pas être comme ça - https://www.mql5.com/ru/docs/opencl/clcontextcreate

Je pense que oui, ça ne devrait pas l'être. Mais où trouver ce numéro et ensuite choisir le bon ?

https://www.mql5.com/ru/docs/opencl/clgetinfointeger? Mais il n'y a qu'une seule propriété - le nombre de dispositifs, CL_DEVICE_COUNT.

J'en ai un dans mon système, c'est pourquoi il renvoie 1.

Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
  • www.mql5.com
Работа с OpenCL / CLGetInfoInteger - Документация по MQL5
 
N'oubliez pas de mettre à niveau vers la dernière version 619 et de recompiler les programmes. Le principe d'initialisation d'OpenCL a été modifié dans cette version.
 
Mathemat:

Je pense que oui, ça ne devrait pas l'être. Mais où trouver ce numéro et ensuite choisir le bon ?



Vous devriez essayer de spécifier CL_USE_GPU_ONLY, alors la carte vidéo sera prise et le numéro n'est pas nécessaire.
 
Rosh: Vous devriez essayer de spécifier CL_USE_GPU_ONLY, alors la carte vidéo est prise et le numéro n'est pas nécessaire.
C'est compréhensible. Mais je veux préciser CPU - avec une carte graphique discrète. Comment je fais ça ?
 

Génial ! La HD4200 n'est donc pas un périphérique OpenCL, n'est-ce pas ?

On dirait qu'il y a vraiment une émulation pure de CPU ici. J'aime ça !

Et si je pouvais apprendre à i3 à le faire...

Je commence à soupçonner vaguement pourquoi AMD APP SDK ne fonctionne pas correctement dans MT5 sur i3 : tous les cœurs ne sont pas réels, et AMD n'a pas de technologie hypertrading. C'est probablement pour cela que le conducteur s'insère d'une drôle de façon.

Ou peut-être que l'astuce se trouve dans MT5 qui reconnaît formellement l'appareil mais n'est en fait d'aucune utilité ?

 
Mathemat:
Voici l'astuce. L'argument dans CLContextCreate() ne peut pas sélectionner explicitement un CPU s'il y a au moins un GPU externe.

C'est sur le CPU (dans mon cas, c'est le dispositif 1) :

2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      CpuTime/GpuTime = 74.73506433823529
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Result on Cpu МахResult==4.54091 at 2233 pass
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      CPU time = 325247 ms
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Result on Gpu МахResult==4.54091 at 2233 pass
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      GPU time = 4352 ms
2012.04.08 20:57:32     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      OpenCL init OK!

Le paramètre CLContextCreate(device) a été transformé en paramètre de script. Vous pouvez vous promener dans toutes les options.

// Peut-être qu'il y a encore une combinaison secrète qui pue ? :))

 

2012.04.08 22:01:08    Terminal    CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))

2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CpuTime/GpuTime = 26.95192501511792
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Cpu МахResult==4.98137 at 1628 pass
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CPU time = 267417 ms
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Gpu МахResult==4.98137 at 1628 pass
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    GPU time = 9922 ms
2012.04.08 22:01:22    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    OpenCL init OK!


Merci, je ne le savais pas...

Eh bien, j'étais à peu près sûr que le rapport serait d'environ 3 pour 1 : vous avez 3 fois plus de cœurs, 74.735/26.952 ~ 2.77. Et c'est une bonne nouvelle : plus de cœurs signifie plus de gain ! Ici aussi, AMD s'est désisté - en raison du nombre de cœurs !

Mais je me demande ce que les autres auront - disons, quelqu'un avec un i5 Sandy Bridge ?

Et si quelqu'un a un Bulldozer e, ça pourrait être vraiment cool... mais peut-être pas, car c'est un peu un problème de FPU.

 
MetaDriver:

Et dans ce test, pour une raison quelconque, mon fer a déchiré le vôtre.

2012.04.09 01:09:36        ParallelTester_00-02-316x7x3j (EURUSD,H1)          CpuTime/GpuTime = 161.0007722007722

2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Result on Cpu МахResult==4.85831 at 2497 pass
2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    CPU time = 208496 ms
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Result on Gpu МахResult==4.85831 at 2497 pass
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    GPU time = 1295 ms

2012.04.09 01:06:07        ParallelTester_00-02-316x7x3j (EURUSD,H1)           OpenCL init OK!


Et voici ce test sur le CPU OpenCL (les 4 cœurs sont chargés à 100%)

2012.04.09 01:11:15    ParallelTester_00-02-316x7x3j (EURUSD,H1)    GPU time = 68547 ms

2012.04.09 01:10:07    ParallelTester_00-02-316x7x3j (EURUSD,H1)    OpenCL init OK!


Le GPU a 480 mouches et le CPU en a 4, la différence est de 120 fois, c'est-à-dire qu'il est possible d'effectuer 120 fois plus de calculs à la fois, mais le CPU n'a pris du retard sur le GPU que 68547/1295=52,9 fois. Cela signifie que le thread du CPU est plus rapide que celui du GPU, mais que le GPU ne gagne que parce qu'il peut effectuer plus de tâches simultanées. Est-ce que j'ai bien compris ?


L'échelle sur le CPU est beaucoup moins de 100% (environ 76%), au lieu de 4x seulement 3x l'accélération 208496/68547=3.04

Cependant, les spécificités de ce test peuvent l'affecter.

 

Andrei, je pense que vous vous trompez : MD a seulement posté ce test ici sur le CPU, sans la carte graphique, c'est-à-dire en sélectionnant directement l'émulation du CPU. Si je comprends bien, votre premier test porte sur la carte graphique.

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

Si j'ai mal compris quelque chose, corrigez-moi.
Raison: