OpenCL: test di implementazione interna in MQL5 - pagina 20

 

I codici saranno aggiunti:

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:

I codici saranno aggiunti:

Grazie, allora quello che manca è una funzione per controllare la validità dell'handle.

Accettiamo dalle funzioni CL solo il valore del puntatore, non il puntatore stesso, quindi memorizzare il puntatore in posti diversi causerà una situazione di tentativo di rimozione di un processo non valido (sia esso contesto, buffer, programma o kernel).

funzione richiesta:

bool CLCheckHandle(int handle);
 
E dovete anche ottenere programmaticamente la dimensione della memoria del dispositivo, perché i widget hanno meno memoria di quella della CPU, e tutti i contesti esistenti simultaneamente usano la stessa memoria.
 
Urain:
Ed è anche necessario ottenere programmaticamente la dimensione della memoria del dispositivo, perché le visioni hanno meno memoria delle CPU, mentre tutti i contesti esistenti simultaneamente usano la stessa memoria.

Sarebbe bene ottenere la temperatura della scheda (e anche della CPU) con mezzi standard mql per dosare il carico.

// Perché sono andato un po' su tutte le furie... :)

 
MetaDriver:
C'è qualcuno che legge questo thread? È un po' come un monologo :)
 
Non c'è alcuna funzionalità in OpenCL per ottenere la temperatura e il carico della GPU.
Ottenere le proprietà degli oggetti OpenCL arriverà presto.
Verrà anche organizzato il controllo delle maniglie.
 
mql5:
1. non c'è alcuna funzionalità in OpenCL per ottenere la temperatura e il carico della GPU.
2. il recupero delle proprietà degli oggetti OpenCL sarà presto disponibile.
3. Verrà anche organizzato il controllo della maniglia.

1. lo so. Non deve essere attraverso OpenCL, deve essere attraverso il sistema. L'idea è solo quella di rendere la funzionalità nativa (senza chiamate DLL dai programmi mql5).

Ecco alcune funzioni eccellenti:

TerminalInfoInteger

Restituisce un valore intero di una proprietà ambientale corrispondente di un programma mql5.

TerminalInfoString

Restituisce un valore stringa di una proprietà ambientale corrispondente di un programma mql5

MQL5InfoInteger

Restituisce un valore di tipo intero di una proprietà corrispondente di un programma mql5 in esecuzione

MQL5InfoStringa

Restituisce un valore di tipo stringa di una proprietà corrispondente di un programma mql5 lanciato

Sarebbe bello e logico aggiungere:

SystemInfoInteger e quindi

SystemInfoString

che fornisce l'accesso a tutte le informazioni necessarie sull'ambiente del sistema: numero di core, nome e dimensione del sistema operativo, quantità di memoria (totale), quantità di memoria disponibile (libera) (RAM e spazio su disco), ecc.

Dopo tutto, il terminale non funziona nello spazio eterno vuoto. Altrimenti sembra molto sabbioso.

2, 3.

4. Assicuratevi di implementare un normale accesso al buffer (cl_Read/WriteBuffer), specificando entrambi gli offset di partenza (sia l'offset di mql-array che l'offset nel cl-buffer). Altrimenti, quasi tutti gli array devono essere copiati due volte - ne abbiamo davvero bisogno? Non stiamo scrivendo in OpenCL per perdere tempo a riscrivere dal nulla nel nulla. Non è giusto. :)

 
MetaDriver:
...

4. assicurarsi di avere già un normale accesso al buffer (cl_Read/WriteBuffer), specificando entrambi gli offset di partenza (sia l'offset mql-array che l'offset cl-buffer). Altrimenti, quasi tutti gli array devono essere copiati due volte - ne abbiamo davvero bisogno? Non stiamo scrivendo in OpenCL per perdere tempo a riscrivere dal nulla nel nulla. Non è giusto. :)

Specificate cosa intendete con questo.

Non mi sono ancora imbattuto nelle situazioni che descrivi.

 
Urain:

Specificate cosa intendete con questo.

A cosa serva, non ho ancora incontrato le situazioni che descrivi.

Nessun problema. Ecco un esempio recente. Costruire la famiglia Ema.

...........  
 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);
.........
..........

Non è richiesto nulla di esotico, voglio solo che sia come qui:

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

 
MetaDriver:

Nessun problema. Ecco un esempio recente. Costruire la famiglia Ema

Non è richiesto nulla di esotico, voglio solo che sia come qui:

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



Sì, ho capito, non volete algoritmi più complicati e overrun di memoria dall'uso di

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

e volete essere in grado di compensare in fase di copia.

Non voglio copiare 100000 elementi e poi fare 998000 shift. Ma dovremmo lasciare la variante con shift che abbiamo ora, perché non permette di copiare molte volte gli stessi dati, ma di prenderli per un nuovo compito da un buffer CL già preparato con un nuovo shift.

SZY sarebbe anche bello essere in grado di sovrascrivere riallocando o sovrascrivendo parte dei dati nel buffer CL, quindi i nuovi dati ricevuti da tick potrebbero essere aggiunti senza dover acquistare tutti i dati. In tempo reale questo è poco utile, ma nel tester sì.