MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet - Seite 25

 
fxsaber:

Wie haben Sie den OpenCL-Teil des Codes debuggt?

Durch Ausführen und Entpinnen der Ergebnisse.
 
Fast235:

Renat, könnten Sie bitte einige Hinweise darauf geben, wann OpenCL bei der Arbeit mit einer großen Anzahl von Arrays oder bei einem großen Satz von Symbolen und Indikatoren in einem EA von Vorteil wäre?

Wenn man Millionen von Arrays ohne Vernetzung aufbauen kann und diese parallel analysiert werden können, kann man die Geschwindigkeit erhöhen.

Im Allgemeinen wird jeder, der seine Aufgaben löst und ihre Grenzen versteht, seine Frage leicht beantworten können. Solange es kein Verständnis für die Grenzen gibt (und es nur Träume von "was wäre wenn" gibt),die ständig unter dem Druck der zu lösenden Aufgaben stehen, bleibt die Parallelität nur eine coole Idee.

Die meisten Aufgaben können leider nicht effektiv parallelisiert werden.

 
Renat Fatkhullin:

Wenn Sie Millionen von Arrays ohne Querverbindungen erstellen können, die parallel analysiert werden können, können Sie die Geschwindigkeit erhöhen.

Im Allgemeinen wird jemand, der seine Aufgaben löst und ihre Grenzen versteht, seine Frage leicht beantworten. Solange es kein Verständnis für die Grenzen gibt (und es gibt nur Träume "was wäre wenn"), die ständig mit dem Lösen von Tearing-Aufgaben verbunden sind, bleibt Parallelität nur eine coole Idee.

Die meisten Aufgaben können leider nicht effektiv parallelisiert werden.

Ich erinnere mich an die Tatsache, dass es bei Berechnungen begleitende Momente gibt, deshalb kam mir die Frage in den Sinn

 
Renat Fatkhullin:
Durch Ausführen und Aufheben der Grundierung der Ergebnisse.

Ist es möglich, einen Primer in OpenCL-Code zu integrieren?

 

Grob gesagt über OpenCL

Man kann sich vorstellen, dass es einen Prozessor mit großen (Vektor-)Registern gibt, in die einzelne N Doppelwerte geschrieben werden können (z.B. N=64, dann können 64 Werte in das Register geschrieben werden).
Solche Register können miteinander addiert, multipliziert usw. werden, d.h. mit einer Anweisung kann man eine Operation an N Tabellen durchführen.

Aber es gibt Grenzen.

Es ist nicht möglich, mit Werten in einem Register zu arbeiten, d.h. es ist z.B. nicht möglich, einen Teil der Werte eines Registers untereinander zu addieren.
In Bezug auf die Frequenz ist ein solcher Prozessor einer normalen CPU stark unterlegen, weshalb es keinen Sinn macht, ihn für Aufgaben zu verwenden, bei denen die sequentielle Verarbeitung eines Wertes erforderlich ist.
Neben der niedrigeren Frequenz gibt es auch eine Speicherbeschränkung, Werte können nur aus dem speziellen Speicher geladen und entladen werden.
Es ist möglich, Daten aus dem RAM in diesen speziellen Speicher zu kopieren, allerdings nur über einen sehr schmalen (langsamen) Kanal.
Daher sind Aufgaben, die große Datenmengen verarbeiten müssen, ebenfalls schlecht für OpenCL geeignet.

 
fxsaber:

Ist es möglich, einen Primer in OpenCL-Code zu integrieren?

Außerhalb.

Überspringen wir die Vortragssitzung. Sie nehmen und lesen einfach alles, was von uns und allgemein im Internet über OpenCL erstellt und ausführlich beschrieben wurde.

OpenCL-Suche:




Eigentlich ist es sehr interessant, dass "opencl trading" eine Menge Google-Inhalte aus unseren Ressourcen hat:


 
Renat Fatkhullin:

Hier ist ein Vergleich in Python 3.8 und MQL5 im Single-Thread/OpenCL-Modus: Zeit in Sekunden, je weniger, desto besser

pi-single.py
pi-multi.py
Geschwindigkeit PI.mq5 einzeln
Geschwindigkeit PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python im JIT-Modus über numba, Hardware ist wie folgt:

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

Das Beispiel für die Verwendung von OpenCL ist sehr einfach, und es gibt keinen Schnickschnack bei seiner Optimierung. Obwohl die Aufgabe für OpenCL nicht sehr umfangreich ist und bei der Vorbereitung einen Overhead verursacht hat, hat sie dennoch ein viel besseres Ergebnis erzielt.

Sehr große parallele Berechnungen können routinemäßig mit OpenCL durchgeführt werden. Die Einstiegshürde ist nicht hoch, und es dauert nur einen Tag, um herauszufinden, wie man es benutzt.

Dateien für die Wiedergabe sind beigefügt.

Es scheint, dass dieses Problem der PI-Berechnung in OpenCL bereits vor 7 Jahren gelöst wurde:

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • www.mql5.com
Настоящая статья открывает небольшой цикл публикаций, посвященных программированию на OpenCL, или Open Computing Language. Платформа MetaTrader 5 в ее текущем воплощении до подключения OpenCL не позволяла напрямую, т.е. нативно, использовать преимущества многоядерных процессоров для ускорения вычислений. В разделе "Статьи", правда, еще полтора...
 
Ich kann es noch nicht herausfinden.
Single thread: the value of PI is 3.141592653590
Single thread: calculated in 7.382561 seconds
OpenCL not found. Error code=5100
OpenCL initialization failed with 5100

Hat jemand einen direkten Link zu dem, was heruntergeladen werden muss? Bei Intel ist eine Registrierung erforderlich.


HI Auf Intel GPU in CPU habe ich die Video-Adapter-Treiber zu grok, dann installiert Intel_OpenCL_driver, dann legte die Video-Adapter-Treiber. Auf diese Weise funktioniert alles und das Video wird nicht langsamer.

 

Vict:

Ich befürchte, dass die aktive Nutzung dieser Funktion den Start in eine mehrminütige Suche verwandeln wird.

Sie können das Caching nicht aktivieren.

Renat Fatkhullin:

Hier ist ein Vergleich in Python 3.8 und MQL5 im Single-Thread/OpenCL-Modus: Zeit in Sekunden, je weniger, desto besser

pi-single.py
pi-multi.py
Geschwindigkeit PI.mq5 einzeln
Geschwindigkeit PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python im JIT-Modus über numba, Hardware ist wie folgt:

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

Im Multithreading-Modus vergleichen Sie die Leistung von CPU und GPU in 10000 Threads. Die GPU ist nicht an Python beteiligt.

Wenn ich einen Computer mit einer geeigneten Grafikkarte finde, werde ich den Python-Code korrigieren und ihn auf diesem Computer testen. Ich werde versuchen, Ihren Code auf CPU laufen zu lassen, ich dachte, GPU ist erforderlich.

Es ist nicht meine Absicht, zu beweisen, wer schneller ist. Interessanter wäre es, mehr über Ihre Pläne zur Integration von Python zu erfahren.

Planen Sie irgendwelche Handelsfunktionen und Tick-Events in Python?


Die GPU scheint jedoch obligatorisch zu sein, das "AMD APP SDK" ist nicht herunterladbar.
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция: Ордер – это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк...
 
Ilyas:

Grob gesagt über OpenCL

Wir können uns vorstellen, dass es einen Prozessor mit großen (Vektor-)Registern gibt, in die wir einzelne N Doppelwerte schreiben können (z.B. sei N=64, dann können 64 Werte in das Register geschrieben werden).
Solche Register können miteinander addiert, multipliziert usw. werden, d.h. mit einer Anweisung kann man eine Operation an N Tabellen durchführen.

Aber es gibt Grenzen.

Es ist nicht möglich, mit Werten in einem Register zu arbeiten, d.h. es ist z.B. nicht möglich, einen Teil der Werte eines Registers untereinander zu addieren.
In Bezug auf die Frequenz ist ein solcher Prozessor einer normalen CPU stark unterlegen, weshalb es keinen Sinn macht, ihn für Aufgaben zu verwenden, bei denen die sequentielle Verarbeitung eines Wertes erforderlich ist.
Neben der niedrigeren Frequenz gibt es auch eine Speicherbeschränkung, Werte können nur aus dem speziellen Speicher geladen und entladen werden.
Es ist möglich, Daten aus dem RAM in diesen speziellen Speicher zu kopieren, allerdings nur über einen sehr schmalen (langsamen) Kanal.
Daher sind Aufgaben, die große Datenmengen verarbeiten müssen, ebenfalls schlecht für OpenCL geeignet.

Im Beispiel der PI-Berechnung gibt es keine Vektoren. Es teilt die Gesamtsumme einfach in mehrere unabhängige Chunks auf und sendet sie an jeden OpenCL-Kern. Am Ende wird alles zusammengezählt.

Wenn beispielsweise keine diskrete Grafikkarte vorhanden ist und die CPU über 4 physische + 4 virtuelle Kerne verfügt, wird die Ausführung achtmal schneller sein. Das heißt, dass Teile der Summe auf jedem Kern parallel gezählt werden.

Grund der Beschwerde: