DirectX - Seite 2

 
Rorschach:

https://www.mql5.com/ru/forum/227736

Übertragen auf Shader. In den ersten 15 Sekunden läuft der Quellcode auf der CPU, danach läuft die CPU-Version.

"Sie müssen das Array m_pixels[] in der Datei Canvas.mqh vor dem Kompilieren von protected: nach public: verschieben".

Hmm. Interessant. Es ergibt sich die gleiche Geschwindigkeit. Wahrscheinlich, weil es keine 3D-Konvertierungen gibt.

Ich muss es mit diesem Code versuchen.


ZSY verwendet dieses Design, damit Sie die Originalbibliotheken nicht reparieren müssen

#define protected public
#include <Canvas\Canvas.mqh>
#undef protected

SZY

Oh nein! Entschuldigung - ich habe einen Fehler im Code gemacht und deshalb nicht bemerkt, dass der CPU-Teil überhaupt nicht läuft. Ich habe es korrigiert.
Ergebnis: 2,5 Mal schneller durch GPU.

Sehr schön zu sehen. Vielen Dank für diese Umsetzung. Ich habe sie nur ein wenig optimiert.

Dateien:
 
Rorschach:

https://www.mql5.com/ru/forum/227736

Übertragen auf Shader. In den ersten 15 Sekunden wird der Quellcode auf der CPU ausgeführt, danach die Version auf der GPU.

Es ist interessant, dasselbe mit diesem Code zu tun und zu sehen, wie sich der Leistungsgewinn in Abhängigkeit von der Komplexität der Berechnungen (zunehmende Gravitationszentren) verändert.

Dieser Code verwendet kein Array von Sinuskurven, um die Dinge zu beschleunigen, sondern berechnet nur den Sinus. Sie können auch die Anzahl der rotierenden Schwerkraftzentren ändern.

Dateien:
Swirl2.mq5  5 kb
 
Nikolai Semko:

Ich muss es mit diesem Code versuchen.

Ich möchte die Indikatorberechnung vollständig auf der GPU durchführen und muss herausfinden, wie ich solche Datenmengen übertragen kann.

Nikolai Semko:

Das Ergebnis ist eine 2,5-fache Beschleunigung über die GPU.

Nikolai Semko:

Dieser Code verwendet kein Sinus-Array, um die Geschwindigkeit zu erhöhen, sondern er berechnet einfach den Sinus.

XRGB(uchar(128+127*sin(d*45)),uchar(128+127*sin(d*70)),uchar(128+127*sin(d*25)));

Übrigens, ich verwende diese Formel in meinem Shader, so dass die Beschleunigung ~10x ist.

Nikolai Semko:

Es ist interessant, dasselbe mit diesem Code zu tun und zu sehen, wie sich der Leistungsgewinn in Abhängigkeit von der Komplexität der Berechnung (zunehmende Gravitationszentren) verändert.

Ich werde versuchen, das zu tun.

 
Rorschach:

Ich möchte die Indikatorberechnung vollständig auf der GPU durchführen und muss herausfinden, wie ich solche Datenmengen übertragen kann.

Übrigens verwende ich diese Formel im Shader, also ist die Beschleunigung ~10x.

Ich werde versuchen, eine zu machen.

Ich denke, die Ergebnisse sollten inspirierend sein.

Ja, es ist wirklich eine sehr coole Ergänzung zu MQL5! Vielen Dank an das MQ-Team dafür.

Durch einfaches Einfügen der Ressource in das Programm kann die Leistung mathematischer Berechnungen um ein Vielfaches gesteigert werden, indem die Ressourcen der Grafikkarte genutzt werden. Dadurch wird die CPU selbst entlastet. Das heißt, eine super Option für den Markt.

Und während OpenCL vom Benutzer eine bestimmte Aktion zur Installation der Software erfordert, ist DirectX in Windows bereits standardmäßig installiert. Und das Erstaunlichste: Ich habe mir angesehen, um wie viel die ex5-Datei bei Verwendung von DirectX ansteigt, und konnte überhaupt keinen Anstieg der Datei feststellen. Sehr cool!!! Wir sollten sie studieren und nutzen.

 
Nikolai Semko:

Ich denke, die Ergebnisse sollten inspirierend sein.

Ja, es ist wirklich eine sehr coole Ergänzung zu MQL5! Vielen Dank an das MQ-Team dafür.

Durch einfaches Einfügen der Ressource in das Programm kann die Leistung mathematischer Berechnungen um ein Vielfaches gesteigert werden, indem die Ressourcen der Grafikkarte genutzt werden. Dadurch wird die CPU selbst entlastet. Das heißt, eine super Option für den Markt.

Und wenn OpenCL vom Benutzer eine bestimmte Aktion erfordert, um die Software zu installieren, ist DirectX in Windows bereits standardmäßig installiert. Und das Erstaunlichste: Ich habe mir angeschaut, um wie viel die ex5-Datei zunimmt, wenn ich DirectX verwende, und konnte überhaupt keine Zunahme der Datei feststellen. Sehr cool!!! Wir sollten sie studieren und nutzen.

Übrigens, ja, der DX ist vielseitiger als der OCL. Gleiche Fähigkeiten + 3D. Es gibt einen CPU-Modus, für den Sie keinen Treiber auf der CPU installieren müssen.

 
Rorschach:

Übrigens, ich verwende diese Formel im Shader, so dass die Beschleunigung ~10x ist.

Sie müssen immer noch 2,5 Mal zählen. Die CPU war von der Optimierung betroffen, die Grafikkarte jedoch nicht.

Nikolai Semko:

Es ist interessant, dasselbe mit diesem Code zu tun und zu sehen, wie sich der Leistungsgewinn in Abhängigkeit von der Komplexität der Berechnungen (Zunahme der Gravitationszentren) verändert.

Dieser Code verwendet kein Array von Sinuskurven, um die Dinge zu beschleunigen, sondern berechnet nur den Sinus. Sie können auch die Anzahl der rotierenden Schwerkraftzentren ändern.

Ich habe die Optimierung aktiviert. Der Code wurde in 3 Zyklen umstrukturiert, um die Übertragung zu erleichtern. Die Grenze liegt bei 512 Zentren. Standardmäßig läuft es direkt auf der Grafikkarte.

Dateien:
pixel.zip  1 kb
 
Rorschach:

Sie müssen immer noch 2,5 Mal zählen. Die CPU war von der Optimierung betroffen, der Grafikprozessor jedoch nicht.

Ich habe die Optimierung aktiviert. Ich habe den Code auf 3 Zyklen umgeschrieben, damit er leichter zu portieren ist. Ich habe sie auf 512 Zentren begrenzt. Standardmäßig wird es direkt auf der GPU ausgeführt.

Herzlichen Dank!
Das 2,5-fache ist auch bei einfachen Berechnungen ein sehr gutes Ergebnis. Bei 3D wird das Ergebnis meiner Meinung nach noch deutlicher ausfallen.

 
Rorschach:

Sie müssen immer noch 2,5 Mal zählen. Die CPU war von der Optimierung betroffen, der Grafikprozessor jedoch nicht.

Ich habe die Optimierung aktiviert. Ich habe den Code in 3 Schleifen aufgeteilt, um ihn leichter portieren zu können. Wir haben sie auf 512 Zentren begrenzt. Standardmäßig wird es direkt auf der GPU ausgeführt.

Sie haben nach einer OpenCl-Implementierung gefragt. Es hat sich etwas ergeben. Entschuldigung für den Code, ich hatte keine Zeit, ihn zu bereinigen. Die Hauptsache ist, dass es funktioniert.

__kernel void Func(int N, __global double *XP, __global double *YP, __global uchar *h, __global uint *buf)
{
   size_t X = get_global_id(0);
   size_t Width = get_global_size(0);
   size_t Y = get_global_id(1);
   
   float2 p;
   double D=0,S1=0,S2=0;
   
   for(int w=0;w<N;w++){ 
      p.x = XP[w]-X;
      p.y = YP[w]-Y;
      D = fast_length(p);
      S2+=D;
      if(w<N/2)
         S1+=D;
   }   
   //
   double d=S1/S2;
   buf[Y*Width+X] = upsample(upsample((uchar)0xFF,(uchar)h[(int)(d*11520)]),upsample((uchar)h[(int)(d*17920)],(uchar)h[(int)(d*6400)]));
}
Dateien:
Swirl2_OCL.mq5  14 kb
test_002.zip  1 kb
 
Serhii Shevchuk:

Sie haben nach einer OpenCl-Implementierung gefragt. Es kam etwas heraus. Verzeihen Sie den Code, ich hatte keine Zeit, ihn aufzufrischen. Die Hauptsache ist, dass es funktioniert.

WOW! Wow! Das kam für mich unerwartet, um ehrlich zu sein. Ein Gewinn von mehr als 10x mit meiner bescheidenen Grafikkarte.
Herzlichen Dank!

 
Serhii Shevchuk:

Sie haben nach einer OpenCl-Implementierung gefragt. Ich habe da etwas. Verzeihen Sie den Code, ich hatte keine Zeit, ihn aufzufrischen. Die Hauptsache ist, dass es funktioniert.

Herzlichen Dank!

Sind Ihre Berechnungen im Doppelten? Dann ist das Ergebnis besonders beeindruckend.