Diskussion zum Artikel "Neuronale Netze leicht gemacht (Teil 5): Parallele Berechnungen mit OpenCL" - Seite 3

 
Dmitriy Gizlyk:

Die Verwendung von Vektoroperationen ermöglicht es Ihnen, das Produkt von 4 Elementen parallel statt sequentiell durchzuführen. Sehen Sie sich das Video https://ru.coursera.org/lecture/parallelnoye-programmirovaniye/4-1-chto-takoie-viektorizatsiia-i-zachiem-ona-nuzhna-f8lh3 an. Es geht um OpenMP, aber die Bedeutung ist dieselbe.

Vielen Dank!

Die Vektorisierung wird also automatisch vom Compiler für OpenCL durchgeführt? Ich sehe keine speziellen Befehle in dem Code.

 
Aleksey Vyazmikin:

Ich danke Ihnen!

Also Vektorisierung wird automatisch durch den Compiler für OpenCL getan? Ich sehe keine speziellen Befehle in dem Code.

Nein, es gibt keine automatische Vektorisierung. Im Code deklarieren wir zuerst 2 Vektorvariablen.

double4 inp, weight;

Dann schreiben wir einen Teil der Daten aus den eingehenden Puffern in die Vektorvariablen.

         default:
           inp=(double4)(matrix_i[k],matrix_i[k+1],matrix_i[k+2],matrix_i[k+3]);
           weight=(double4)(matrix_w[shift+k],matrix_w[shift+k+1],matrix_w[shift+k+2],matrix_w[shift+k+3]);
           break;

Die Durchführung von Operationen mit Vektorvariablen bedeutet dann die Durchführung von Vektoroperationen. Die im Code verwendete Punktfunktion ist nur für Vektoroperationen vorgesehen.

      sum+=dot(inp,weight);

Wir haben also die Multiplikationsoperation parallelisiert, aber nicht auf der Ebene des Threads, sondern auf der Ebene einer konkreten Operation mit Vektorberechnungen.

 
Dmitriy Gizlyk:

Nein, es gibt keine automatische Vektorisierung. Im Code deklarieren wir zunächst 2 Vektorvariablen

Dann schreiben wir einen Teil der Daten aus den eingehenden Puffern in die Vektorvariablen.

Und wenn man dann Operationen mit Vektorvariablen durchführt, bedeutet das, dass man Vektoroperationen durchführt. Die im Code verwendete Punktfunktion ist nur für Vektoroperationen gedacht.

Wir haben also die Multiplikationsoperation parallelisiert, aber nicht auf der Ebene des Threads, sondern auf der Ebene einer konkreten Operation mit Vektorberechnungen.

D.h. eine spezielle Funktion dot() ist für die Vektorisierung zuständig? Kann diese Vektorisierung in MQL5 ohne OpenCL durchgeführt werden?

 
Aleksey Vyazmikin:

D.h. eine spezielle Funktion dot() ist für die Vektorisierung zuständig? Kann diese Vektorisierung in MQL5 ohne OpenCL durchgeführt werden?

dot führt nur das Skalarprodukt aus. Es gibt andere Funktionen, um andere Operationen durchzuführen.
Es gibt keine Vektorvariablen in MQL.

 
Dmitriy Gizlyk:

dot führt nur das Skalarprodukt aus. Es gibt andere Funktionen, um andere Operationen durchzuführen.
Es gibt keine Vektorvariablen in MQL.

Verstanden, danke für die Klarstellung.

 

Trotz der extremen Notwendigkeit des Artikels und des Dankes an den Autor für den Artikel fasse ich dennoch zusammen, was in ihm wirklich fehlt:

1. Der Code des Hauptprogramms mql wird nicht berücksichtigt, das Handelsprinzip selbst ist nicht klar

2. Es ist nicht klar, wo die Kernel aufgerufen werden.

3. Der Code enthält Verweise auf Bibliotheken von Drittanbietern, die in dem Artikel nicht beschrieben sind, es ist nicht klar

4. Kernel werden im Artikel selbst nicht berücksichtigt und erklärt, deshalb haben sie eine so hitzige Diskussion im Forum ausgelöst.

5. Der Kernel selbst ist für die meisten Benutzer, die keine Erfahrung mit OpenCL haben, sehr schwierig geschrieben.

6. Die Methode zum Training des neuronalen Netzwerks ist überhaupt nicht klar.

Diese 6 Punkte machen den Artikel für die absolute Mehrheit praktisch nutzlos.

Ich werde meine Meinung beibehalten:

1. Sie müssen den mql-Code eines sehr einfachen Expert Advisors erstellen, der mit einem einfachen Indikator handelt, seine Version auf mql mit einer Beschreibung des Codes und der OpenCL-Version schreiben und die Geschwindigkeit vergleichen, idealerweise nehmen Sie ein fertiges Beispiel wie Moving Average.mq5.

2. Die Funktionsaufrufe aus allen Drittanbieter-Bibliotheken sollten beschrieben werden.

3. Beschreiben Sie den Kernel im Detail, Zeile für Zeile, beschreiben Sie mehrere Varianten des Kernels und vergleichen Sie die Leistung.

4. Beschreiben Sie detailliert die Methodik des Trainings neuronaler Netze.

Nun, so ist es ....

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Ich würde gerne mehr über neuronale Netze erfahren und mich eingehender mit ihnen beschäftigen. Aber wo soll ich anfangen? Empfehlen Sie mir etwas Relevantes, wenn auch nicht Schwieriges.
 
Ich bin auch daran interessiert, aber es gibt so viele Quellen, dass man darin versinken würde. Wo soll ich anfangen?
 
Wie lautet die Datei im NeuroNet-Archiv - copy.mqh?
 
Ivan Titov:
Was ist die NeuroNet.mqh-Datei im Archiv?

Ich habe die NeuroNet.mqh-Datei ein wenig bereinigt. Und für die Kompatibilität mit EAs von früheren Artikeln, habe ich die alte Version in einer Kopie gespeichert.