OpenCL: interne Implementierungstests in MQL5 - Seite 50

 
Mathemat:
Genau darum geht es bei diesem Trick. Das Argument in CLContextCreate() kann die CPU nicht explizit auswählen, wenn es mindestens eine externe GPU gibt.

So sollte es nicht sein - https://www.mql5.com/ru/docs/opencl/clcontextcreate

Parameter

Gerät

[in] Anzahl der OpenCL-Geräte im System, in dieser Reihenfolge. Anstelle einer bestimmten Zahl kann einer der folgenden Werte angegeben werden: CL_USE_ANY - jedes verfügbare OpenCL-fähige Gerät kann verwendet werden; CL_USE_GPU_ONLY- die OpenCL-Emulation ist deaktiviert und es können nur dedizierte OpenCL-Geräte (Grafikkarten) verwendet werden.

Документация по MQL5: Работа с OpenCL / CLContextCreate
Документация по MQL5: Работа с OpenCL / CLContextCreate
  • www.mql5.com
Работа с OpenCL / CLContextCreate - Документация по MQL5
 

Ich denke schon, das sollte es nicht sein. Aber woher bekommt man diese Nummer und wählt dann die richtige aus?

https://www.mql5.com/ru/docs/opencl/clgetinfointeger? Aber es gibt nur eine Eigenschaft - die Anzahl der Geräte, CL_DEVICE_COUNT.

Ich habe eine in meinem System, deshalb wird eine 1 angezeigt.

Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
  • www.mql5.com
Работа с OpenCL / CLGetInfoInteger - Документация по MQL5
 
Denken Sie daran, auf das neueste 619-Build zu aktualisieren und Programme neu zu kompilieren. Das OpenCL-Initialisierungsprinzip hat sich in diesem Build geändert.
 
Mathemat:

Ich denke schon, das sollte es nicht sein. Aber woher bekommt man diese Zahl und wie wählt man dann die richtige aus?



Sie sollten versuchen, CL_USE_GPU_ONLY anzugeben, dann wird die Grafikkarte genommen und die Nummer wird nicht benötigt.
 
Rosh: Sie sollten versuchen, CL_USE_GPU_ONLY anzugeben, dann wird die Grafikkarte genommen und die Nummer wird nicht benötigt.
Das ist verständlich. Aber ich möchte CPU angeben - mit einer diskreten Grafikkarte. Wie kann ich das tun?
 

Fantastisch! Die HD4200 ist also kein OpenCL-Gerät, oder?

Es sieht so aus, als ob hier wirklich eine reine CPU-Emulation im Gange ist. Das gefällt mir!

Was wäre, wenn ich i3 beibringen könnte, das zu tun?

Ich habe einen vagen Verdacht, warum das AMD APP SDK im MT5 auf dem i3 nicht richtig funktioniert: nicht alle Kerne sind echt, und AMD hat keine Hypertrading-Technologie. Wahrscheinlich ist das der Grund, warum der Fahrer auf seltsame Art und Weise einsteigt.

Oder liegt der Trick vielleicht im MT5, der das Gerät zwar formal erkennt, aber eigentlich nichts taugt?

 
Mathemat:
Hier ist der Trick. Das Argument in CLContextCreate() kann nicht explizit eine CPU auswählen, wenn es mindestens eine externe GPU gibt.

Dies ist auf der CPU (in meinem Fall ist es Gerät 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!

Der CLContextCreate(device) -Parameter wurde in einen Skriptparameter umgewandelt, so dass man in allen Optionen herumstochern kann.

// Vielleicht gibt es noch eine geheime stinkende Kombination? :))

 

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!


Danke, das habe ich nicht gewusst...

Nun, ich war mir ziemlich sicher, dass das Verhältnis etwa 3 zu 1 sein würde: Sie haben dreimal mehr Kerne, 74,735/26,952 ~ 2,77. Und das ist eine gute Nachricht: Mehr Kerne bedeuten mehr Gewinn! Auch hier ist AMD ausgestiegen - wegen der Anzahl der Kerne!

Aber ich frage mich, was andere haben werden - sagen wir, jemand mit einem i5 Sandy Bridge?

Und wenn jemand einen Bulldozer e hat, könnte das wirklich cool sein... obwohl das vielleicht nicht der Fall ist, da es sich um ein FPU-Problem handelt.

 
MetaDriver:

Und bei diesem Test hat mein Bügeleisen aus irgendeinem Grund Ihres zerrissen.

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!


Und hier ist dieser Test auf einer OpenCL-CPU (alle 4 Kerne sind zu 100% ausgelastet)

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!


Die GPU hat 480 Fliegen und die CPU hat 4, der Unterschied beträgt 120 Mal, d. h. es können 120 Mal mehr Berechnungen auf einmal durchgeführt werden, aber die CPU liegt nur 68547/1295 = 52,9 Mal hinter der GPU zurück. Das bedeutet, dass der CPU-Thread schneller ist als der GPU-Thread, aber die GPU gewinnt nur, weil sie mehr Aufgaben gleichzeitig ausführen kann. Habe ich es richtig verstanden?


Die Skalierung auf der CPU ist viel weniger als 100% (ca. 76%), statt 4x nur 3x Beschleunigung 208496/68547=3.04

Allerdings könnten die Besonderheiten dieses Tests einen Einfluss darauf haben.

 

Andrei, ich glaube, du hast etwas falsch verstanden: MD hat diesen Test hier nur auf der CPU gepostet, ohne die Grafikkarte, d.h. er hat direkt die CPU-Emulation ausgewählt. So wie ich es verstanden habe, ist Ihr erster Test auf der Grafikkarte.

Und das Ergebnis Ihrer OpenCL emulierenden Grafikkarte (Ihr zweiter Test) scheint verdächtig niedrig zu sein, selbst im Vergleich zu meinem (ich hatte etwa 10 Sekunden auf "GPU").

Wenn ich etwas missverstanden habe, korrigieren Sie mich bitte.