MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader - page 25

 
fxsaber:

Comment avez-vous débogué la partie OpenCL du code ?

En exécutant et en décomposant les résultats.
 
Fast235:

Renat, pourriez-vous nous indiquer quand OpenCL aurait un avantage à travailler avec un grand nombre de tableaux ou quand il y a un grand nombre de symboles et d'indicateurs dans un EA ?

Si vous pouvez construire des millions de matrices sans réticulation et les analyser en parallèle, vous pouvez accélérer le processus.

En général, toute personne qui résout et comprend les limites de ses tâches répondra facilement à sa question. Tant qu'il n'y a pas de compréhension des limites (et qu'il n'y a que des rêves "et si")en permanence avec le tiraillement des tâches à résoudre, le parallélisme reste juste une idée cool.

La plupart des tâches ne peuvent malheureusement pas être parallélisées efficacement.

 
Renat Fatkhullin:

Si vous pouvez construire des millions de matrices sans liens croisés et qui peuvent être analysées en parallèle, vous pouvez accélérer.

En général, une personne qui résout et comprend les limites de ses tâches répondra facilement à sa question. Tant qu'il n'y a pas de compréhension des limites (et il n'y a que des rêves "et si") en permanence avec le déchirement des tâches à résoudre, le parallélisme reste juste une idée cool.

La plupart des tâches ne peuvent malheureusement pas être parallélisées efficacement.

Je me souviens du fait qu'il y a des moments d'accompagnement dans les calculs, c'est pourquoi la question s'est posée dans mon esprit

 
Renat Fatkhullin:
En exécutant et en désamorçant les résultats.

Est-il possible de mettre une amorce à l'intérieur du code OpenCL ?

 

Grosso modo, OpenCL

On peut imaginer un processeur doté de grands registres (vectoriels), dans lesquels il est possible d'écrire des valeurs individuelles doubles N (par exemple, si N=64, 64 valeurs peuvent être écrites dans le registre).
De tels registres peuvent être additionnés, multipliés, etc., les uns avec les autres, il s'avère que pour une instruction, vous pouvez effectuer une opération sur N tableaux.

Mais il y a des limites.

Il est impossible d'opérer avec les valeurs d'un registre, c'est-à-dire qu'il est impossible, par exemple, d'ajouter une partie des valeurs d'un registre entre elles.
En termes de fréquence, ce type de processeur est nettement inférieur à l'unité centrale habituelle. Il est donc inutile de l'utiliser pour des tâches nécessitant le traitement séquentiel d'une valeur.
Outre la fréquence plus basse, il y a également une limitation de la mémoire, les valeurs ne peuvent être chargées et déchargées qu'à partir de la mémoire spéciale.
Il est possible de copier des données de la RAM dans cette mémoire spéciale, mais uniquement via un canal très étroit (lent).
Par conséquent, les tâches qui nécessitent le traitement de grandes quantités de données sont également mal adaptées à OpenCL.

 
fxsaber:

Est-il possible de mettre une amorce à l'intérieur du code OpenCL ?

A l'extérieur.

Sautons la séance de cours. Il vous suffit de prendre et de lire tout ce qui a été créé et décrit en détail sur OpenCL par nous et sur le web en général.

Recherche OpenCL:




En fait, il est très intéressant que "opencl trading" a été googlé avec beaucoup de choses de nos ressources :


 
Renat Fatkhullin:

Voici une comparaison dans Python 3.8 et MQL5 en modes single thread/OpenCL : temps en secondes, le moins possible, le mieux c'est

pi-single.py
pi-multi.py
Vitesse PI.mq5 simple
Vitesse PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python en mode JIT via numba, le matériel est comme ceci :

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

L'exemple d'utilisation d'OpenCL est très simple et il n'y a pas de fioritures dans son optimisation. Bien que la tâche ne soit pas massive pour OpenCL et qu'elle ait déclenché des surcharges en préparation, elle a tout de même donné un bien meilleur résultat.

De très gros calculs parallèles peuvent être couramment exécutés avec OpenCL. Le seuil d'entrée n'est pas élevé et il suffit d'une journée pour comprendre comment l'utiliser.

Les fichiers de lecture sont joints.

Il s'avère que ce problème de calcul de PI dans OpenCL a déjà été résolu il y a 7 ans :

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • www.mql5.com
Настоящая статья открывает небольшой цикл публикаций, посвященных программированию на OpenCL, или Open Computing Language. Платформа MetaTrader 5 в ее текущем воплощении до подключения OpenCL не позволяла напрямую, т.е. нативно, использовать преимущества многоядерных процессоров для ускорения вычислений. В разделе "Статьи", правда, еще полтора...
 
Je n'arrive pas encore à comprendre.
Single thread: the value of PI is 3.141592653590
Single thread: calculated in 7.382561 seconds
OpenCL not found. Error code=5100
OpenCL initialization failed with 5100

Quelqu'un a-t-il des liens directs vers ce qui doit être téléchargé ? Sur Intel, il faut s'inscrire.


HH Sur Intel GPU dans CPU je dois grok les pilotes de l'adaptateur vidéo, puis installé Intel_OpenCL_driver, puis mis les pilotes de l'adaptateur vidéo. De cette façon, tout fonctionne et la vidéo ne ralentit pas.

 

Vict:

Je crains que l'utilisation active de cette fonctionnalité ne transforme le démarrage en une quête de plusieurs minutes.

Ne tournera pas vous pouvez activer la mise en cache.

Renat Fatkhullin:

Voici une comparaison dans Python 3.8 et MQL5 en modes single thread/OpenCL : temps en secondes, le moins, le mieux

pi-single.py
pi-multi.py
Vitesse PI.mq5 simple
Vitesse PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python en mode JIT via numba, le matériel est comme ceci :

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

En mode multithreading, vous comparez les performances du CPU et du GPU dans 10000 threads. Le GPU n'est pas impliqué dans python.

Si je trouve un ordinateur avec une carte vidéo appropriée, je corrigerai le code Python et le testerai sur cet ordinateur. Je vais essayer d'exécuter votre code sur le CPU, je pensais que le GPU était nécessaire.

Je n'ai pas du tout l'intention de prouver qui est le plus rapide. Il est plus intéressant de connaître vos projets d'intégration de Python.

Prévoyez-vous des fonctions de trading et des événements tick en python ?


Pourtant, le GPU semble être obligatoire, "AMD APP SDK" n'est pas téléchargeable.
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция: Ордер – это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк...
 
Ilyas:

Grosso modo, OpenCL

Nous pouvons imaginer qu'il existe un processeur avec de grands registres (vectoriels) dans lesquels nous pouvons écrire des valeurs individuelles doubles N (par exemple, si N=64, alors 64 valeurs peuvent être écrites dans le registre).
De tels registres peuvent être additionnés, multipliés, etc., les uns avec les autres, il s'avère que pour une instruction, vous pouvez effectuer une opération sur N tableaux.

Mais il y a des limites.

Il est impossible d'opérer avec les valeurs d'un registre, c'est-à-dire qu'il est impossible, par exemple, d'ajouter une partie des valeurs d'un registre entre elles.
En termes de fréquence, ce type de processeur est nettement inférieur à l'unité centrale habituelle. Il est donc inutile de l'utiliser pour des tâches nécessitant le traitement séquentiel d'une valeur.
Outre la fréquence plus faible, il existe également une limitation de la mémoire, les valeurs ne pouvant être chargées et déchargées qu'à partir de la mémoire spéciale.
Il est possible de copier des données de la RAM dans cette mémoire spéciale, mais uniquement via un canal très étroit (lent).
Par conséquent, les tâches qui nécessitent le traitement de grandes quantités de données sont également mal adaptées à OpenCL.

Il n'y a pas de vecteurs dans l'exemple de calcul de l'IP. Il divise simplement la somme totale en plusieurs morceaux indépendants et les envoie à chaque cœur OpenCL. Tout est additionné à la fin.

Par exemple, s'il n'y a pas de carte vidéo discrète et qu'il y a 4 cœurs physiques + 4 cœurs virtuels dans le CPU, l'exécution sera huit fois plus rapide. En d'autres termes, des morceaux de somme seront comptés sur chaque cœur en parallèle.

Raison: