OpenCL : de vrais défis

 

Il existe de nombreux sujets sur OpenCL, mais les tâches citées sont trop éloignées du commerce.

Que peut donc apporter OpenCL aux commerçants ?

Oui, je n'ai pas encore étudié OpenCL et je souhaite donc apprendre et clarifier les points principaux :

  1. N'est-ce pas un programme distinct qui reçoit des données en entrée et en sortie ? Il n'y a donc aucune interaction du MQL ?
  2. Cela vaut-il la peine d'implémenter la recherche de tableau dans OpenCL lorsque tout ce dont vous avez besoin est d'obtenir la confirmation qu'une correspondance existe ?
  3. Pendant l'optimisation, chaque thread doit effectuer sa propre initialisation OpenCL et il n'y a pas de possibilité de se connecter au thread déjà actif ?
  4. Lors de l'optimisation, la carte graphique n'est-elle pas ralentie par plusieurs threads OpenCL simultanément ?
 
Roffild:

Il existe de nombreux sujets sur OpenCL, mais les tâches citées sont trop éloignées du commerce.

Alors, que peut apporter OpenCL aux commerçants ?

Ce que vous pouvez prendre, c'est ce qu'il vous donnera.

Oui, je n'ai pas encore étudié OpenCL, je veux donc apprendre et clarifier les points principaux :

Eh bien, étudie. Internet t'aidera. Ne te laisse pas emporter par les questions du forum, ou plutôt les questions d'entrée de gamme. Toutes les informations sur le "comment ça marche" sont sur Internet et dans les articles du forum. Moi, par exemple, j'ai envie d'aider quand je vois que l'homme lui-même se plonge dans l'étude et qu'il a déjà un certain niveau de maîtrise de la matière. Je n'ai pas envie d'aider les pique-assiettes qui sont dans la posture du "j'arrive, apprends-moi déjà !", et je ne veux que des "cerveaux réglés" :)

Je vais faire une exception aujourd'hui (je suis de bonne humeur). Cependant, étant donné que la pente est apparemment glissante au stade initial, je vais probablement ignorer le "baby talk" et ne répondre qu'à des questions spécifiques sur la programmation, à condition qu'elles ne soient pas trop stupides.

1. Il s'agit d'un programme distinct qui reçoit des données en entrée et en sortie, n'est-ce pas ? Il n'y a donc aucune interaction du MQL ?

Pendant le fonctionnement du noyau, il n'y a aucune interaction. L'interaction est similaire à celle d'un appel de fonction. 1 : 1. définir les paramètres initiaux, 2. exécuter le calcul, 3. prendre le résultat

2. Cela vaut-il la peine d'intégrer la recherche par tableau dans OpenCL si tout ce que vous voulez est d'obtenir la confirmation qu'une correspondance existe ?

Je ne sais pas. Ça dépend de la tâche à accomplir. Peut-être que tu n'as pas à le faire. Ou peut-être que vous devriez. Vous savez où est le club des télépathes ? :)

3. Pendant l'optimisation, chaque thread doit effectuer sa propre initialisation OpenCL et il n'y a aucun moyen de se connecter au thread actif ?

Je ne comprends pas bien la question. Si vous voulez dire l'optimisation dans le testeur/optimiseur des stratégies terminales, je pense qu'il doit en être ainsi. Je n'ai pas essayé d'exécuter OPTZL à partir de l'optimiseur. Je l'ai fait dans le testeur, mais tout y est cohérent et un noyau peut être utilisé plusieurs fois, c'est évident sans aucune explication.
4 Lors de l'optimisation, la carte graphique n'est-elle pas ralentie par plusieurs threads OpenCL simultanément ?

Je n'ai pas essayé de l'exécuter dans un optimiseur mais si plusieurs appels se chevauchent (je le faisais en lançant plusieurs indicateurs OpenCL et Expert Advisors simultanément), cela ralentira bien sûr.

// Ça ne prend pas les ressources du plafond, n'est-ce pas ?

Si la mémoire de la carte vidéo est surchargée (par exemple, si plusieurs processus essaient de charger des tableaux dans la mémoire vidéo en parallèle en dépassant sa capacité de mémoire), alors vous pouvez "déchirer le pilote" - obtenir un redémarrage complet (réinitialisation) de la carte vidéo et du pilote, suivi d'un message concernant le crash du pilote. Cela n'entraîne pas de dommages irréversibles, mais les programmes à l'origine du crash sont généralement suspendus (ils doivent être redémarrés). Il y a eu des cas de suspension terminale avant, mais pas dernièrement.

// Cependant, je n'ai pas "déchiré" le conducteur avec des requêtes de mémoire immodestes depuis longtemps, j'ai trouvé des "limites de luxe" approximatives. :)

 
Roffild: Il y a beaucoup de fils sur OpenCL mais les tâches décrites dans l'exemple sont trop loin d'être commerciales.

C'est très simple : vous prenez une tâche proche d'une tâche de négociation (par exemple, l'analyse de l'historique des cotations) et vous essayez de la résoudre en utilisant OpenCL. Après quelques tentatives infructueuses, une lecture plus approfondie de la littérature et de nouvelles tentatives, cela fonctionnera, je vous le garantis. Mais à condition d'être capable de digérer la littérature anglophone et d'avoir un peu de persévérance ainsi qu'un minimum de cervelle.

Les pilotes OpenCL sont déjà assez bien optimisés, tant pour les cartes vidéo que pour l'émulation sur les processeurs (dans ce dernier cas, les processeurs Intel sont probablement beaucoup plus performants). Il faut donc s'efforcer de ne pas obtenir de résultats positifs du tout au bout du compte.

 
Roffild:

Alors, que peut apporter OpenCL aux commerçants ?

Sur les points 1-4, on vous a déjà répondu, je vais me risquer à répondre à votre question principale (bien sûr, ce n'est que mon point de vue) : la grande majorité des commerçants ne tireront rien d'OpenCL, ils feraient mieux de laisser ce "pain" aux programmeurs.
 
Les amis, qui fait le shuffle ? Est-il possible de transférer à OpenCL la solution d'un système d'équations linéaires ? La taille du système peut être très importante et il existe d'autres nuances.
 
TheXpert:
Les gars, qui fait la magie ? Est-il possible de transférer à OpenCL la solution d'un système d'équations linéaires ? La taille du système peut être très importante et il existe d'autres nuances.

Résolution des SLAEs dans OpenCL

Voici un bon pdf qui répond à votre question.

 

Nikolaï, merci pour votre réactivité. Il n'y a pas de CUDA et pas de code.

Oh, j'ai oublié de mentionner une autre chose - la construction de la matrice prend plus de temps que sa solution :) donc, vous devrez peut-être paralléliser la construction.

 
TheXpert:

Nikolaï, merci pour votre réactivité. Il n'y a pas de CUDA et pas de code.

Oh, j'ai oublié de dire une autre chose - la construction de la matrice prend plus de temps que sa solution :) donc je pourrais avoir besoin de la paralléliser.

Quelles sont les données sources ? // format, structure des données

Je veux dire, à partir de quoi on construit la matrice ? Un tas de tampons ? Un arbre ? De [...] ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных - Документация по MQL5
 
TheXpert:

Nikolaï, merci pour votre réactivité. Il n'y a pas de CUDA et pas de code.

Oh, j'ai oublié une autre chose - la matrice prend plus de temps à construire qu'à résoudre :), il peut donc être nécessaire de mettre en parallèle la construction.

Je parlais du schéma, pas de la mise en œuvre. Bien sûr, CUDA est différent mais le schéma général est le même.

Je suis d'accord avec Vladimir, vous ne donnez pas assez d'informations pour vous aider.

Je ne pense pas que quelqu'un d'autre se joindra à nous, donc si vous ne voulez pas rendre votre question publique, vous pouvez la poser en privé à l'un des présentateurs.

 
MetaDriver:

Je veux dire, à partir de quoi on construit la matrice ? Un tas de tampons ? Un arbre ? De [...] ?

En gros, il existe un espace de dimensionnalité énorme (10 -- 1000 et plus), pour lequel nous devons résoudre le problème MNC.

La solution du problème des ANM se résume à

(1) construire des équations de dérivées

(2) en résolvant un système d'équations dérivé de (1)

Maintenant (1) prend la part du lion du temps de solution. Plus la dimensionnalité est grande, plus la fraction est importante.

 

Les algorithmes parallèles n'ont que deux caractéristiques qui leur donnent un avantage sur les algorithmes séquentiels.

Il s'agit de l'algorithme du peignage, où chaque dent prend son fil et le tire sur toute sa longueur.

Et l'enroulement/déroulement de la pyramide. Le déballage est moins fréquent, il s'agit surtout d'un enroulement.

Si l'énoncé du problème ne comporte aucune de ces caractéristiques, le solveur parallèle ne donnera pas d'avantage et sera le plus souvent plus lent en raison du coût du chargement de la mémoire.

Raison: