Voici ce que vous pouvez faire avec OpenCL directement dans MetaTrader 5, sans aucune DLL. - page 5

 
Renat Fatkhullin:

Dans ce contexte, AMD semble avantageux non seulement en raison de la rapidité évidente de ses calculs mathématiques (les fermes d'exploitation minière sont généralement construites sur AMD), mais aussi pour sa stratégie de normes ouvertes (ils se sont ouverts et font beaucoup de promotion auprès du public). L'introduction d'OpenCL 2.0 dans les cartes AMD a rapproché cette spécification des capacités de CUDA et il est désormais inutile de préparer le terrain pour CUDA.

Ce sont des informations utiles, alors qu'il y a environ 7 ans, je m'amusais avec CUDA et je pensais qu'il régnait toujours sur le jeu.

Ma question est la suivante: qu'en est-il des débogueurs pour OpenCL aujourd'hui ? Je ne fais pas référence au terminal MT5 mais au terminal MT5 en général. Jusqu'à présent, je n'ai vu que le débogueur d'Intel en tant que plugin de Visual Studio et un débogueur autonome (déprécarisé) de la même société. Mais il semble que ce soient les processeurs et les graphiques intégrés d'Intel qui soient destinés à cet usage. Je ne comprends pas bien comment déboguer un code parallèle - pour moi, c'est encore une boîte noire.

 

Vous ne pouvez travailler avec CUDA que pour vous-même ou pour des domaines spécifiques où vous pouvez exiger la présence explicite de cartes Nvidia.

Oui, CUDA avait plus de fonctionnalités. Cependant, avec le matériel AMD qui sort avec OpenCL 2.0 et la nouvelle version d'OpenCL 2.1, il n'y a pas de raison de rester enfermé dans le carcan des fournisseurs. Surtout lorsque ce fournisseur réduit également la fonctionnalité.

En termes de couverture maximale, il n'y a qu'un seul choix : OpenCL, qui fonctionne également très bien sur les processeurs normaux. Autrement dit, il n'est pas nécessaire d'exiger la présence inconditionnelle du GPU ou d'écrire deux versions du code pour le GPU et le CPU. Une fois écrit, le code OpenCL fonctionnera sur différentes configurations.

CUDA/OpenCL ne peut être débogué que par des débogueurs spécialisés. Il ne peut y avoir de miracle ici.

 
Renat Fatkhullin:

dans l'exemple

if((cl_ctx=CLContextCreate())==INVALID_HANDLE)

Sur les configurations avec un périphérique disponible pour le CPU, le message "OpenCL non trouvé" s'affiche.

Autrement.

if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)

travaux

*Le problème est la sélection de l'appareil par défaut

 

Peut-on avoir tout cela sous une forme agréable, sans toutes les citations ? C'est gênant pour la perception et la création.

Et pour les réseaux neuronaux, nous devrions avoir des classes standard, et il est possible d'utiliser opcl instantly) comme wellslab

"#define HL1Count "             + (string)hl1NeuronCount + "                     \r\n"
          "#define HL2Count "             + (string)hl2NeuronCount + "                     \r\n"
          //------------------------------------------------------------------------------------
          "#define NeuronSensitivity  "   + (string)NeuronSensitivity_P + "                \r\n"
          //------------------------------------------------------------------------------------
          "#define sampleCount "          + (string)sampleCount + "                        \r\n"
          //------------------------------------------------------------------------------------
          "#define signalCount "          + (string)signalCount + "                        \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrSaSize "         + (string)(sizeof(ArrSample) / sizeof(float)) + "\r\n"
          "typedef struct{float C[StrArrSaSize];} ArrSa;                                   \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrWeSize "         + (string)(sizeof(ArrWe) / sizeof(float)) + "    \r\n"
          "typedef struct{float C[StrArrWeSize];} ArrWe;                                   \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrCrSize "         + (string)(sizeof(ArrCr) / sizeof(float)) + "    \r\n"
          "typedef struct{float C[StrArrCrSize];}ArrCr;                                    \r\n"
          //------------------------------------------------------------------------------------
          "#define Spread "               + (string)(Spread_P * Point()) + "               \r\n"
          //------------------------------------------------------------------------------------
          "#define Point "                + (string)Point() + "                            \r\n"
          "#define SL "                   + (string)(StopLoss_P * Point()) + "             \r\n"
          "#define TP "                   + (string)(TakeProfit_P * Point()) + "           \r\n"
          //------------------------------------------------------------------------------------
          "                                                                                \r\n"
          "__kernel void Work(__global ArrSa *Sample,                                      \r\n"
          "                   __global ArrWe *Weights,                                     \r\n"
          "                   __global ArrCr *Result)                                      \r\n"
          "{                                                                               \r\n"
          "  int thread       = get_global_id(0);                                          \r\n"
          "                                                                                \r\n"
          "  //------------------Переменные нейронной сети---------------------------------\r\n"
 
Maxim Dmitrievsky:

Peut-on avoir tout cela sous une forme agréable, sans toutes les citations ? C'est trop gênant pour la perception et la création.

Et pour les réseaux neuronaux, nous devrions avoir des classes standard, et il est possible d'utiliser opcl instantly) comme wellslab

Eh bien, pourquoi pas ? Ecoutez, il n'y a pas une seule fonction spécifique que MQL ne connaisse pas. J'ai utilisé MQL pour écrire et déboguer cette fonction pour l'OCL, puis j'ai simplement durci le tout. Vous pouvez même faire un convertisseur de code en OCL, mais je ne vois pas d'intérêt particulier à le faire pour moi. Peut-être que MQ le fera, mais j'en doute.
 
Renat Fatkhullin:

Il s'agit d'une démonstration non seulement des calculs GPU dans le code MQL5, mais aussi des capacités graphiques du terminal :

Le code source complet sous forme de script est joint. Le bogue sur OpenCL 1.2 a été corrigé.

Je sais aussi broder. Et sur une machine à écrire... (c) A quoi sert tout ce terminal d'échange?
 
Va-t-il être transféré dans le nuage pour les agents ?
 
GKS:
Va-t-il être transféré dans le nuage pour les agents ?
Non
 

Tout est génial, mais ! Il y a un gros problème avec OCL et en général avec tous les moyens de parallélisation - très peu d'algorithmes peuvent être efficacement parallélisés. Pourquoi dans les exemples de calcul parallèle si populaires sont la simulation de vagues, la chute d'une balle sur une pyramide avec leur destruction, c'est-à-dire tout ce qui peut être décomposé en petits morceaux et calculé sur votre propre processeur.

Pour fora/bear, il s'agit bien sûr des réseaux neuronaux, des diverses transformées de Fourier, des ondelettes, des filtres, etc. qui sont tous parfaitement parallèles. Mais il existe des algorithmes linéaires qui ne peuvent pas du tout être mis en parallèle. En règle générale, c'est lorsque le résultat de l'étape suivante de l'algorithme est basé sur le résultat de l'étape précédente.

J'ai écrit ceci pour ceux qui pensent que je vais acheter deux cartes vidéo cool et que tout va bien fonctionner dans mon testeur.

Raison: