Noch einmal zum Thema Multithreading - Seite 3

 
Renat:

Ich empfehle Ihnen, Ihr ursprüngliches Posting noch einmal zu lesen, auf alle Ihre Epitheta zu achten und dann weiter unten die Antworten zu lesen.

Die Antworten wurden in aller Ruhe gegeben, mit einigen sanften Fragen wie "Um Berechnungen von etwas zu parallelisieren, muss man erst einmal erkennen", dann wurden die Antworten gegeben und der aktuelle Stand der Dinge erklärt "was wirklich parallelisiert werden sollte".

Aber statt einer schnellen Lernkurve haben Sie noch mehr Unsinn erzählt und uns die Hunde auf den Hals gehetzt. Das Ergebnis war eine harsche Reaktion.

OK, ich gebe zu, dass ich mit den Epitheta ein wenig übertrieben habe, und ich entschuldige mich dafür. Ich habe aber nichts Unhöfliches gesagt, sondern nur übermäßig emotionale Kritik, die aber völlig unangemessen ist für die Härte, mit der Sie darauf reagieren. Ich habe nirgends gesagt, dass die Entwickler nutzlos sind und nichts verstehen, also übertreiben Sie nicht.

Da ich dieses Thema angesprochen habe, weiß ich sehr wohl, wofür es gebraucht wird, und es gibt eine Menge zu parallelisieren. Nicht alle Algorithmen beschränken sich auf "Hallo Welt!", es gibt viel komplexere und ressourcenintensivere. Deshalb ist es sehr seltsam, solche moralischen Belehrungen darüber zu hören, was man parallelisieren muss und was nicht, obwohl man den Algorithmus noch gar nicht gesehen hat.

Was die Implementierung von Code in der DLL sowie die Verwendung von OpenCL betrifft, so hat dies keine Bedeutung für MQL. Und die Frage bezog sich auf die Programmierung in MQL.

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 

OpenCL funktioniert innerhalb von MQL5-Code.

Hier ist ein Beispielcode.

 
meat:

Was die Implementierung des Codes in der DLL sowie die Verwendung von OpenCL betrifft, so ist dies für MQL nicht mehr relevant. Und wir haben über die Programmierung in MQL gesprochen.

Es gibt Skripte für Multithreading. Und Sie brauchen es nicht im Tester
 
meat:

Und wie lautete Ihre Antwort? Sie haben mir erzählt, was für ein großartiges Terminal und Tester Sie haben, die in mehreren Streams arbeiten. Und ich habe kein einziges Wort über Ihr Terminal gesagt. Ich meinte eine andere Sache: Multithreading in MQL-Code. Wenn ein Algorithmus in mehrere Teile aufgeteilt werden kann und jeder Teil parallel ausgeführt wird. Und Sie, der Sie das Thema nicht einmal verstanden haben, werden unhöflich. Nun, wie ich sehe, gibt es bei diesem Ansatz keinen konstruktiven Ansatz, so dass es keinen Sinn hat, die Diskussion fortzusetzen.

Selbst für den derzeitigen Stand der Dinge gibt es einige konstruktive Lösungen. Mehrere mql-Programme (Expert Advisors und/oder Indikatoren) können Nachrichten und damit auch Aufgaben und Ergebnisse der Aufgabenausführung austauschen - natürlich nur, wenn Sie ein entsprechendes Austauschprotokoll erstellen und einrichten. Alle Expert Advisors arbeiten in verschiedenen Threads (jeder in seinem eigenen Thread), daher ist ein solches gemeinsames Berechnungsschema offensichtlich multi-threaded und wird sie gleichmäßig belasten, wenn es mehrere Kerne gibt.

Ein Austausch von Nachrichten (mit mql5-Tools) ist möglich durch

1. terminale Ereignisse

2. benannte Kanäle

3 DLL

4. Dateien

5. usw.

Aus dieser Reihe von Werkzeugen können Sie das am besten geeignete auswählen oder mehrere (alle gleichzeitig) verwenden. Jede Methode hat ihre Vor- und Nachteile, z. B. ermöglichen Named Pipes die Übertragung von Informationen über ein lokales Netzwerk, so dass eine Parallelisierung von Aufgaben für mehr als einen Multi-Core-Prozessor möglich ist.

Viel Glück!

 
Renat:

OpenCL funktioniert innerhalb von MQL5-Code.

Hier ist ein Beispielcode.

Nun, die Tatsache, dass es funktioniert, ist schon die halbe Miete. Aber wie kann man sie anschließend bearbeiten und debuggen? Wenn sie in einer String-Konstante enthalten ist, wie würden Sie nach einem Fehler suchen? Das bedeutet, dass es in einem externen Programm entwickelt und dann in MQL eingefügt werden muss. Aber wenn man ständig mit dieser Art von Portierung zu tun hat, wird man verrückt, wie ich bereits im ersten Beitrag erwähnt habe. Da die Entwicklung des Codes ohnehin an anderer Stelle erfolgt, was bringt es dann, alles in MQL zu packen? Es ist einfacher, sie als DLL zu kompilieren und zu importieren.

Natürlich verstehe ich, dass der Zweck darin besteht, einen offenen Quellcode zu erstellen, ohne selbst geschriebene DLLs zu verwenden. Aber das sind Sonderfälle. Normalerweise wird das Programm für Sie selbst und nicht für andere geschrieben. Und nur wenige Menschen möchten sich ständig mit sinnlosen Manipulationen beschäftigen, indem sie den Code von einem Programm in ein anderes verschieben.

Aber wenn man einen eingebauten Compiler für all das macht, ist es eine andere Geschichte. Und übrigens, warum nicht? Ich meine, das ist wie eine C-Syntax da drin. D.h. Sie könnten das alles als Teil des regulären mql-Codes verwenden, indem Sie einfach zusätzliche Funktionen zu Ihrem MetaEditor hinzufügen. Und dann würde der Compiler das entsprechende Codefragment in geeigneter Weise formatieren, indem er \r\n, usw. hinzufügt.

 
meat:

Nun, die Tatsache, dass es funktioniert, ist schon die halbe Miete. Wie bearbeiten und debuggen Sie sie anschließend? Wie können wir den Fehler finden, wenn er in der String-Konstante enthalten ist? Das bedeutet, dass es in einem externen Programm entwickelt und dann in MQL eingefügt werden muss. Aber wenn man ständig mit dieser Art von Portierung zu tun hat, wird man verrückt, wie ich bereits im ersten Beitrag erwähnt habe. Da die Entwicklung des Codes ohnehin an anderer Stelle erfolgt, was bringt es dann, alles in MQL zu packen? Es ist einfacher, sie als DLL zu kompilieren und zu importieren.

Natürlich verstehe ich, dass der Zweck darin besteht, einen offenen Quellcode zu erstellen, ohne selbst geschriebene DLLs zu verwenden. Aber das sind Sonderfälle. Normalerweise wird das Programm für Sie selbst und nicht für andere geschrieben. Und nur wenige Menschen möchten sich ständig mit sinnlosen Manipulationen beschäftigen, indem sie den Code von einem Programm zum anderen ziehen.

Aber wenn man einen eingebauten Compiler für all das macht, ist es eine andere Geschichte. Und übrigens, warum nicht? Ich meine, das ist wie eine C-Syntax da drin. D.h. Sie könnten das alles als Teil des regulären mql-Codes verwenden, indem Sie einfach zusätzliche Funktionen zu Ihrem MetaEditor hinzufügen. Und dann würde der Compiler das entsprechende Codefragment in geeigneter Weise formatieren, indem er \r\n, usw. hinzufügt.

Wer es will, sucht nach Möglichkeiten. Wer nicht will, der hat Gründe © Sprichwort

 
MetaDriver:

Auch für den Status quo gibt es konstruktive Lösungen. Mehrere mql-Programme (Experten und/oder Indikatoren) können Nachrichten und damit auch Aufgaben und Aufgabenergebnisse austauschen - natürlich nur, wenn Sie ein entsprechendes Austauschprotokoll erstellen und einrichten. Alle Expert Advisors arbeiten in verschiedenen Threads (jeder in seinem eigenen Thread), daher ist ein solches gemeinsames Berechnungsschema offensichtlich multi-threaded und wird sie gleichmäßig belasten, wenn es mehrere Kerne gibt.

Ein Austausch von Nachrichten(mit mql5-Tools) ist möglich durch

1. terminale Ereignisse

2. benannte Kanäle

3 DLL.

4. Dateien

5. usw.

Aus dieser Reihe von Werkzeugen können Sie das am besten geeignete auswählen oder mehrere (alle auf einmal) verwenden. Jede Methode hat ihre Vor- und Nachteile, z. B. ermöglichen Named Pipes die Übertragung von Informationen über das LAN, so dass eine Parallelisierung der Aufgabe für mehr als einen Multi-Core-Prozessor möglich ist.

Viel Glück!

Nun, sagen wir mal, nicht alle davon sind mql5-Tools :) Und es ging nicht darum, wie man dieses Problem löst (umgeht). Man kann immer einen Weg finden, sie zu umgehen, daran besteht kein Zweifel. Die Frage ist, warum wir die entsprechende Funktionalität nicht in mql5 einbauen können, so dass wir sie nicht abschaffen müssen.

Sie müssen zugeben, dass es nicht rationell und zuverlässig ist, eine Vielzahl von Expert Advisors mit entsprechenden Charts zu starten, nur um deren Verarbeitung in mehreren Threads zu organisieren.

 
Nur wenige Menschen benötigen Multithreading in Indikatoren oder Expert Advisors. Und normalerweise sind diese Leute in der Lage, dieses Multi-Threading selbst zu implementieren, durch Dlls und andere Dinge.
 
Reshetov:

Wer will, sucht nach Möglichkeiten. Wer nicht will, der hat Gründe © Sprichwort

Zuallererst müssen wir die Machbarkeit verstehen :) Ich meine die Sinnhaftigkeit der Verwendung von MQL5 im Allgemeinen und MT5, bzw. ob es sich lohnt, auf diese Plattform zu wechseln. Wenn, wie in MT4, um richtig zu arbeiten, müssen Sie einige Assistenten verwenden, den Start von mehreren Expert Advisors oder den Code in DLL zu übertragen, dann gibt es keinen Sinn, den Müll für einen Müll zu ändern. Wenn der Code in DLL geschrieben werden muss, ist es einfacher und sicherer, eine Plattform mit einer offenen API zu verwenden, als ein zusätzliches Polster in Form eines Expert Advisors (und eines laufenden Terminals als Ganzes) zu haben.

 
meat:

Zuallererst müssen wir die Machbarkeit verstehen :) Ich meine die Angemessenheit der Verwendung von MQL5 im Allgemeinen und MT5, bzw. ob es sich lohnt, auf diese Plattform aufzurüsten. Wenn man, wie in MT4, um richtig zu arbeiten, etwas Magie einsetzen muss, um mehrere EAs laufen zu lassen oder den Code in eine DLL zu übertragen, dann macht es keinen Sinn, ein Stück Scheiße gegen ein Stück Scheiße auszutauschen. Wenn der Code in DLL geschrieben werden muss, ist es einfacher und sicherer, gleich eine Plattform mit einer offenen API zu verwenden, als ein zusätzliches Polster in Form eines Expert Advisors (und eines laufenden Terminals als Ganzes) zu haben.

Niemand zwingt jemanden, zu MQL5 zu wechseln. Ich habe zum Beispiel die Funktionalität von MQL4 vermisst und musste deshalb zu MQL5 wechseln.

Zum Beispiel können alle Funktionen in С++ implementiert werden und MQL5 sollte nur den ausführenden Teil enthalten und das Ganze sollte mit einem Protokoll mit benannten Kanälen verbunden werden. Es gibt eine Vielzahl von Varianten. Alles, was Sie brauchen, ist ein starker Wille.

Связь с MetaTrader 5 через именованные каналы без применения DLL
Связь с MetaTrader 5 через именованные каналы без применения DLL
  • 2012.10.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.
Grund der Beschwerde: