OpenCL: interne Implementierungstests in MQL5 - Seite 20

 

Die Codes werden hinzugefügt:

ERR_OPENCL_NOT_SUPPORTED           5100    
ERR_OPENCL_INTERNAL                5101
ERR_OPENCL_INVALID_HANDLE          5102
ERR_OPENCL_CONTEXT_CREATE          5103
ERR_OPENCL_QUEUE_CREATE            5104
ERR_OPENCL_PROGRAM_CREATE          5105
ERR_OPENCL_TOO_LONG_KERNEL_NAME    5106
ERR_OPENCL_KERNEL_CREATE           5107
ERR_OPENCL_SET_KERNEL_PARAMETER    5108
ERR_OPENCL_EXECUTE                 5109
ERR_OPENCL_WRONG_BUFFER_SIZE       5110
ERR_OPENCL_WRONG_BUFFER_OFFSET     5111
ERR_OPENCL_BUFFER_CREATE           5112
 
Rosh:

Die Codes werden hinzugefügt:

Danke, dann fehlt noch eine Funktion, um den Handle auf Gültigkeit zu prüfen.

Wir akzeptieren von CL-Funktionen nur den Wert des Zeigers, nicht den Zeiger selbst, so dass die Speicherung des Zeigers an verschiedenen Stellen zu einer Situation führen wird, in der versucht wird, einen ungültigen Prozess zu entfernen (sei es Kontext, Puffer, Programm oder Kernel).

Funktion erforderlich:

bool CLCheckHandle(int handle);
 
Außerdem muss die Speichergröße des Geräts programmatisch ermittelt werden, da Widgets weniger Speicher haben als die CPU, und alle gleichzeitig vorhandenen Kontexte denselben Speicher verwenden.
 
Urain:
Außerdem ist es notwendig, die Speichergröße des Geräts programmatisch zu ermitteln, da Visionen weniger Speicher haben als CPUs, während alle gleichzeitig vorhandenen Kontexte denselben Speicher verwenden.

Es wäre gut, die Kartentemperatur (und auch die CPU-Temperatur) mit Standard-MQL-Mitteln zu ermitteln, um die Last zu dosieren.

// Weil ich ein bisschen randaliert habe... :)

 
MetaDriver:
Liest überhaupt jemand diesen Thread, der wie ein Monolog wirkt :)
 
Es gibt keine Funktion in OpenCL, um Temperatur und GPU-Last zu ermitteln.
Das Abrufen von Eigenschaften von OpenCL-Objekten wird in Kürze verfügbar sein.
Auch die Kontrolle der Griffe wird organisiert.
 
mql5:
1. Es gibt keine Funktion in OpenCL, um die GPU-Temperatur und -Last zu ermitteln.
2. Das Abrufen von Eigenschaften von OpenCL-Objekten wird bald verfügbar sein.
3. auch die Kontrolle der Handhabe wird organisiert.

1. Ich weiß. Es muss nicht über OpenCL sein, sondern über das System, um die Funktionalität nativ zu machen (ohne DLL-Aufrufe von mql5-Programmen).

Hier sind einige ausgezeichnete Funktionen:

TerminalInfoInteger

Gibt einen ganzzahligen Wert einer entsprechenden Umgebungseigenschaft eines mql5-Programms zurück.

TerminalInfoString

Liefert einen String-Wert einer entsprechenden Umgebungseigenschaft eines mql5-Programms

MQL5InfoInteger

Gibt einen ganzzahligen Wert einer entsprechenden Eigenschaft eines laufenden mql5-Programms zurück

MQL5InfoString

Liefert einen Wert vom Typ String für eine entsprechende Eigenschaft eines gestarteten mql5-Programms

Es wäre schön und logisch, dies hinzuzufügen:

SystemInfoInteger und damit

SystemInfoString

die den Zugang zu allen notwendigen Informationen über die Systemumgebung ermöglicht: Anzahl der Kerne, Name und Größe des Betriebssystems, Größe des Speichers (insgesamt), Größe des verfügbaren (freien) Speichers (RAM und Festplattenplatz), usw., usw.

Schließlich funktioniert das Terminal nicht im leeren, ewigen Raum. Ansonsten sieht es sehr sandig aus.

2, 3.

4. stellen Sie sicher, dass Sie einen normalen Pufferzugriff (cl_Read/WriteBuffer) implementieren und beide Startoffsets angeben (sowohl den mql-Array-Offset als auch den Offset im cl-Puffer). Andernfalls müssen fast alle Arrays zweimal kopiert werden - brauchen wir das wirklich? Wir schreiben nicht in OpenCL, um Zeit damit zu verschwenden, aus dem Nichts ins Nichts umzuschreiben. Das ist nicht fair. :)

 
MetaDriver:
...

4. Vergewissern Sie sich, dass Sie bereits einen normalen Pufferzugriff haben (cl_Read/WriteBuffer), wobei Sie beide Startoffsets angeben (sowohl mql-array offset als auch cl-buffer offset). Andernfalls müssen fast alle Arrays zweimal kopiert werden - brauchen wir das wirklich? Wir schreiben nicht in OpenCL, um Zeit damit zu verschwenden, aus dem Nichts ins Nichts umzuschreiben. Das ist nicht fair. :)

Klären Sie, was Sie damit meinen.

Die von Ihnen beschriebene Situation ist mir bisher noch nicht begegnet.

 
Urain:

Geben Sie an, was Sie damit meinen.

Wozu das gut sein soll, habe ich noch nicht herausgefunden.

Kein Problem. Hier ist ein aktuelles Beispiel. Aufbau einer Ema-Familie.

...........  
 while(limit/(cl_BufLength-1)>0)
     {
       for(int i=0;i<CountLine;i++)
         {
          dOut[i]=EmaBuffer[i].B[limit];  // переписываем начальные значения Ema
                            // в промежуточный массив, поскольку напрямую с указанного смещения 
                            // загрузить в буфер невозможно.
         }
       CLBufferWrite(cl_Mem_Out,dOut,0,CountLine*sizeof(double));  // загружаем в gpu
       for(int i=1;i<cl_BufLength;i++)
         {
          dIn[i]=price[limit-i];                 // переписываем цены
                                                // То же самое с ценами.
         }
       CLBufferWrite(cl_Mem_In,dIn);  // загружаем в gpu

       CLExecute(cl_Krn,1,kOfs,kWork);
.........
..........

Es muss nichts Exotisches sein, ich will nur, dass es so ist wie hier:

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );

 
MetaDriver:

Kein Problem. Hier ist ein aktuelles Beispiel. Aufbau der Familie Ema

Es ist nichts Exotisches erforderlich, ich möchte nur, dass es so ist wie hier:

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );



Ja, ich verstehe, Sie wollen keine komplizierten Algorithmen und Speicherüberläufe durch die Verwendung von

//Выполняет OpenCL программу.
bool  CLExecute(int          kernel,                 // хендл на кернел OpenCL
                uint         work_dim,               // размерность пространства задач 
                const uint&  global_work_offset[],   // начальное смещение индексов
                const uint&  global_work_size[]     // общее количество индексов
                );

und Sie möchten in der Lage sein, in der Kopierphase einen Ausgleich vorzunehmen.

Ich möchte nicht 100000 Elemente kopieren und dann 998000 Verschiebungen vornehmen. Aber wir sollten die Variante mit Verschiebung, die wir jetzt haben, beibehalten, denn sie erlaubt es, nicht mehrmals die gleichen Daten zu kopieren, sondern sie für eine neue Aufgabe aus einem bereits vorbereiteten CL-Puffer mit einer neuen Verschiebung zu übernehmen.

SZY: Es wäre auch schön, wenn man einen Teil der Daten im CL-Puffer überschreiben oder neu zuweisen könnte, so dass neu empfangene Daten von der Zecke hinzugefügt werden könnten, ohne alle Daten kaufen zu müssen. In Echtzeit ist dies kaum von Nutzen, aber im Prüfprogramm schon.