OpenCL : tests de l'implémentation interne dans MQL5 - page 20

 

Les codes seront ajoutés :

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:

Les codes seront ajoutés :

Merci, alors ce qui manque est une fonction pour vérifier la validité de la poignée.

Nous n'acceptons des fonctions CL que la valeur du pointeur, pas le pointeur lui-même, donc stocker le pointeur à différents endroits provoquera une situation où l'on essaiera de supprimer un processus invalide (que ce soit le contexte, le tampon, le programme ou le noyau).

fonction requise :

bool CLCheckHandle(int handle);
 
Vous devez également obtenir de manière programmatique la taille de la mémoire de l'appareil, car les widgets ont moins de mémoire que l'unité centrale, et tous les contextes existant simultanément utilisent la même mémoire.
 
Urain:
Il est également nécessaire d'obtenir par programmation la taille de la mémoire du dispositif, car les visions ont moins de mémoire que les CPU, tandis que tous les contextes existant simultanément utilisent la même mémoire.

Il serait bon d'obtenir la température de la carte (et du CPU aussi) par des moyens standards mql afin de doser la charge.

// Parce que je me suis un peu déchaînée... :)

 
MetaDriver:
Est-ce que quelqu'un lit ce fil de discussion ? C'est un peu comme un monologue :)
 
Il n'y a pas de fonctionnalité dans OpenCL pour obtenir la température et la charge du GPU.
L'obtention des propriétés des objets OpenCL sera bientôt disponible.
Un contrôle des poignées sera également organisé.
 
mql5:
1. il n'y a pas de fonctionnalité dans OpenCL pour obtenir la température et la charge du GPU.
2. La récupération des propriétés des objets OpenCL sera bientôt disponible.
3. un contrôle de la poignée sera également organisé.

1. Je sais. Il n'est pas nécessaire de passer par OpenCL, mais par le système. L'idée est simplement de rendre la fonctionnalité native (sans appels de DLL depuis les programmes mql5).

Voici d'excellentes fonctions :

TerminalInfoInteger

Renvoie une valeur entière d'une propriété d'environnement correspondante d'un programme mql5.

TerminalInfoString

Renvoie une valeur de chaîne de caractères d'une propriété d'environnement correspondante d'un programme mql5.

MQL5InfoInteger

Renvoie une valeur de type entier d'une propriété correspondante d'un programme mql5 en cours d'exécution.

MQL5InfoString

Renvoie une valeur de type chaîne de caractères d'une propriété correspondante d'un programme mql5 lancé.

Il serait agréable et logique de l'ajouter :

SystemInfoInteger et donc

SystemInfoString

qui permet d'obtenir les informations requises sur l'environnement du système : nombre de cœurs, nom et taille du système d'exploitation, quantité de mémoire (totale), quantité de mémoire disponible (libre) (RAM et espace disque), etc.

Après tout, le terminal ne fonctionne pas dans un espace vide éternel. Sinon, il semble très sablonneux.

2, 3.

4. assurez-vous d'implémenter un accès normal au tampon (cl_Read/WriteBuffer), en spécifiant les deux décalages de départ (à la fois le décalage du mql-array et le décalage dans le cl-buffer). Sinon, presque tous les tableaux doivent être copiés deux fois - en avons-nous vraiment besoin ? Nous n'écrivons pas en OpenCL pour perdre du temps à réécrire de rien à rien. Ce n'est pas juste. :)

 
MetaDriver:
...

4. assurez-vous que vous avez déjà un accès normal au tampon (cl_Read/WriteBuffer), en spécifiant les deux offsets de départ (offset mql-array et offset cl-buffer). Sinon, presque tous les tableaux doivent être copiés deux fois - en avons-nous vraiment besoin ? Nous n'écrivons pas en OpenCL pour perdre du temps à réécrire de rien à rien. Ce n'est pas juste. :)

Précisez ce que vous entendez par là.

Je n'ai pas rencontré les situations que vous décrivez jusqu'à présent.

 
Urain:

Précisez ce que vous entendez par là.

A quoi ça sert, je n'ai pas encore rencontré les situations que vous décrivez.

Pas de problème. Voici un exemple récent. Construire la famille 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);
.........
..........

Rien d'exotique n'est requis. Je veux juste que ce soit comme ici :

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

 
MetaDriver:

Pas de problème. Voici un exemple récent. Construire la famille Ema

Rien d'exotique n'est requis, je veux juste que ce soit comme ici :

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



Oui, j'ai compris, tu ne veux pas d'algorithmes plus compliqués et de dépassements de mémoire en utilisant

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

et vous voulez être en mesure de compenser au stade de la copie.

Je ne veux pas copier 100000 éléments et ensuite faire 998000 décalages. Mais nous devrions laisser la variante avec décalage que nous avons maintenant, car elle permet de ne pas copier plusieurs fois les mêmes données, mais de les prendre pour une nouvelle tâche à partir d'un tampon CL déjà préparé avec un nouveau décalage.

SZY, il serait également agréable de pouvoir écraser en réallouant ou en écrasant une partie des données dans le tampon CL, puis les nouvelles données reçues du tick pourraient être ajoutées sans avoir à acheter toutes les données. En temps réel, cela n'est guère utile, mais dans le testeur, ça l'est.