![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es gibt Klarstellungen:
...
2) Wir unterstützen OpenCL 1.1 und höher, da es Doppeltypen unterstützt. DieVersion OpenCL 1.0 kann nur mit Float arbeiten, dessen Genauigkeit für Finanzberechnungen in keiner Weise geeignet ist
Versuchen Sie, neuere Treiber zu installieren, obwohl viele Karten früherer Generationen keine Doppeloperationen unterstützen.
Beim Testen vonJavaDev-Skripten in diesem Sommerstießen wir auf das Problem, dass meine Grafikkarte keinDoubleunterstützte, aber mitFloat funktionierte es. Die Treiber können das Problem nicht beheben, wir müssen die Karte austauschen :(
Setzen Sie das Katalysezentrum auf 12, vorher war es 11. Sie haben bereits Ergebnisse erhalten (in rot hervorgehoben):
Ich habe einfach mit der Dropdown-Liste "0" bis "1" herumgespielt und das ATI-Symbol erschien. Bei diesem Start des Programms ist es nicht wieder verschwunden. Eine kleine Panne in der Software scheint....
Super! Ich habe MSI R6970 - 1536 Threads (Agenten) und Gigabyte HD5870 (1600 Prozessoren). Im BOINC-Manager können sie verwendet werden, ohne dass sie in crossfair kombiniert werden müssen (schließen Sie einfach einen Ausgang der zweiten Karte an oder verbinden Sie einen der Ausgänge des zweiten Monitors. Frage: Wird es möglich sein, beide ohne Crossfire zu verwenden???
Ich bin noch nicht sicher. Es hängt eher von dem Programm selbst ab, das die Geräte auswählt, was die explizite Verwendung jeder Karte im Code erfordert.
Das werden wir später sehen, wenn wir die erste Beta-Version veröffentlichen.
Ich hoffe, dass 1.1 Float auch noch unterstützt wird? Float ist im allgemeinen Fall nicht genug, aber in vielen speziellen Fällen ist es sogar sehr genug. Und zusätzlicher Speicher ist oft sehr teuer, insbesondere bei parallelen Berechnungen.
Wenn ich das richtig verstehe, ist 1 GPU ein sehr leistungsfähiges Mittel? Könnten in diesem Fall die CPU-Agenten deaktiviert werden (aufgrund ihrer geringen Geschwindigkeit im Vergleich zum Video)?
Der CPU-Kern kann in keiner Weise deaktiviert werden, da er in der MQL5-Umgebung ohnehin als Host-Plattform verwendet wird.
Es ist wichtig zu verstehen, dass GPU-Kerne "ein Schwarm hochspezialisierter Bienen" sind, verglichen mit den "Arbeitspferden" der CPU-Kerne. GPU-Kerne können keinesfalls als Ersatz für Kerne einer herkömmlichen CPU dienen.
Wenn ein EA-Entwickler in der Lage ist, die Aufgabe in Hunderte und Tausende von unabhängigen Threads zu parallelisieren, wird die GPU eine 10-100fache Beschleunigung ermöglichen. Bei den meisten Einzelaufgaben (z. B. Handel und Indikatoren) sind die Berechnungen jedoch sequenziell und es gibt keine Möglichkeit, die Prozesse effektiv zu parallelisieren. Außerdem führt die Verwendung von realen Berechnungen mit doppelter Genauigkeit auf normalen GPUs zu Geschwindigkeiten, die nur halb so schnell sind wie die Spitzenwerte, die auf Float erreicht werden. Hier ist ein interessanter Link mit einer Diskussion über die Geschwindigkeitsreduzierung auf Double: http://www.gpgpu.ru/node/901
Wir selbst werden Karten verschiedener Klassen kaufen, um eine kleine Forschung für Berechnungen einiger Aufgaben auf double und float zu veröffentlichen. Wir selbst sind daran interessiert, was wir bekommen können.
Hier ist eine kleine Studie über die Berechnungsgeschwindigkeiten mit float und double auf verschiedenen Geräten (vollständiger Bericht: http://agora.guru.ru/hpc-h/files/017_Krivov_NvidiaGpuComparision.pdf). Sie können sehen, dass die doppelte Geschwindigkeit auf Tesla 2 Mal niedriger ist als die Spitzengeschwindigkeit von float, während sie auf gewöhnlichen Karten wie GeForce 480 GTX fast 10 Mal langsamer ist. Das bedeutet, dass es möglich ist, auf einer normalen 4-8-Kern-CPU mit aktiver Nutzung von SSE2-4 und AVX in der Doppelmathematik noch bessere Ergebnisse zu erzielen:
Wir waren in der Lage, hundertfache (im Grenzbereich 100-1000 und mehr) Beschleunigungen bei sequentiellen Tests im Optimierer für Handelsstrategien und zehnfache (im Grenzbereich 10-20-50-100-200) Beschleunigungen in der Genetik aufgrund der nativen Idee der parallelen Testläufe und des MQL5 Cloud Network zu erreichen. Wenn es jedoch um die Parallelität innerhalb einer einzelnen Aufgabe geht, liegen alle Anstrengungen auf den Schultern des GPU-Programmierers, der die Aufgabe auf intelligente Weise auf Hunderte oder Tausende unabhängiger einfacher Kerne verteilen kann.
Es gibt noch eine weitere Nuance: Wenn mehrere Agenten auf dem Computer arbeiten, wird wahrscheinlich nur einem Agenten das Recht zur Nutzung der GPU zugewiesen. Oder, wenn es nur wenige physische GPU-Geräte gibt, werden diese beim Start der Agenten auf die Agenten verteilt.
Der Punkt ist, dass es unvernünftig ist, ein physisches Gerät auf mehrere Agenten aufzuteilen, da die daraus resultierende gemeinsame Nutzung zu einem nicht linearen Abfall der endgültigen Leistung führt. Mit anderen Worten: 4 Agenten auf einer GPU würden um ein Vielfaches schlechter abschneiden als 1 Agent auf einer GPU. Unsere internen Tests haben dies gezeigt.
Wir werden genauere Tests durchführen und eine Lösung finden, die das Ergebnis maximiert.
........
Wir waren in der Lage, hundertfache (in der Grenze 100-1000 und mehr) Beschleunigungen bei sequentiellen Suchen im Strategy Trading Optimizer und zehnfache (in der Grenze 10-20-50-100-200 mal) Beschleunigungen bei der Genetik aufgrund der nativen Idee von parallelen Testläufen und MQL5 Cloud Network zu erhalten. Aber wenn es um Parallelität innerhalb einer einzelnen Aufgabe geht, liegen alle Anstrengungen auf den Schultern des GPU-Programmierers, der die Aufgabe vernünftig auf Hunderte oder Tausende unabhängiger einfacher Kerne verteilen kann.
........
Wiederveröffentlicht aus dem OpenCL-Thread bei MQL4.com:
https://www.mql5.com/ru/forum/137422/page6
So einfach ist das nicht.
Außerdem verwirrt Rinat die Leute: OpenCL 1.0 kann problemlos mit Double Float arbeiten, es ist eine "offen verfügbare Option", die von allen Herstellern unterstützt wird - ABER NICHT FÜR ALLE ALTEN KARTEN.
http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/
"Optionale doppelte Präzision und halbes Fließkomma
OpenCL 1.0 fügt Unterstützung für Double Precision und Half Floating Point als optionale Erweiterungen hinzu. Der Datentyp double muss dem Speicherformat IEEE-754 double precision entsprechen.
Eine Anwendung, die double verwenden möchte, muss die Direktive #pragma OPENCL EXTENSION cl_khr_fp64 : enable einfügen, bevor ein Datentyp mit doppelter Genauigkeit im Kernel-Code deklariert wird. Damit wird die Liste der eingebauten Vektor- und Skalardatentypen um folgende Typen erweitert: .....".
Es kann im Strategy Tester funktionieren, aber es wird nicht im OpenCL 1.0 Expert Advisor funktionieren, nicht weil, wie Rinat sagt, "es dort keinen Double Float gibt", sondern, wie ich bereits erwähnt habe, weil es kein Safe Threading in OpenCL 1.0 gibt und es kein Threading in MT4-5 gibt.
Bei OpenCL (und CUDA) herrscht im Allgemeinen große Verwirrung. Was wollen Sie? Schließlich wollten die Eisen- und Radiotechniker das Konzept der Programmierung verändern. Sie haben eine eiserne Mentalität.
Es gibt auch ein Problem mit der so genannten PLATFORM-Auswahl: Das Programm, d.h. MT oder DLL oder Expert Advisor, MUSS einfach manuell die Plattform auswählen (AMD, Nvidia, Intel), die auf einem Computer mehrere verschiedene sein kann und den OpenCL-Kernel ausführt, und dann manuell DEVICE auswählen, wenn der Computer Multi-GPU hat. Die automatische Plattformauswahl in OpenCL ist noch nicht vorhanden. Rinat spricht von "automatischer Auswahl des Stärksten", aber ich weiß nicht, wie das geht. In dem dort gezeigten Beispiel gibt es keine Plattformauswahl und keine Geräteauswahl (GPU, CPU).
Außerdem gibt es im Standard noch keine automatische OpenCL-Parallelisierung von Aufgaben auf mehreren GPUs oder auf GPU+CPU. Sagen wir es mal so: AMD hat in einigen Versionen seiner Treiber/SDKs ein solches Autoprovisioning eingeführt, aber es gab einige Probleme und AMD hat diese Funktion vorerst abgeschaltet.
Fazit: Die Entwicklung und Aktivierung von OpenCL-Programmen mit MT4-5 erfordert einen gewissen manuellen Aufwand und funktioniert daher nicht automatisch oder durch "Neukompilierung mit Option". Das wiederum ist im realen Betrieb mit einer Vielzahl von Verzögerungen verbunden. Es wird eine subtile Arbeit sein, und, was wichtig ist, ich erlaube mir zu wiederholen, es ist leider JEWISH ORIENTED PROGRAMMING, das falsch ist. Das Debuggen von parallelen Programmen für CUDA oder OpenCL erwies sich als viel schwieriger, als die eisernen Revolutionäre annahmen. Nvidia hat sogar seine CUDA-Konferenz im Herbst 2011 abgesagt - aufgrund von Treiberproblemen und einer Vielzahl von Beschwerden über stockendes Debugging. Nun, sie haben dem neuesten Toolkit weitere 1000 neue Funktionen hinzugefügt - und was macht man nun damit, wenn die einfachen Leute nicht einmal das einfachste Programm zum Laufen bringen können oder es mit Unterbrechungen arbeitet? Schließlich haben sie in ihren Beschreibungswerkzeugen nicht einmal die Hälfte der internen Mechanismen von OpenCL oder CUDA erwähnt.
Die GPU-Geschwindigkeit (in GigaFLOPS) einer hängenden Grafikkarte aufgrund von Treiber- oder Softwarekompatibilität ist Null.