Encore une fois, à propos du multithreading

 
Chers développeurs, j'ai fait des recherches sur le sujet du multithreading et j'ai trouvé la phrase selon laquelle vous avez dit que vous n'alliez pas ajouter des fonctions de création et de gestion des threads à MQL5. Cela a été dit il y a plus d'un an et demi. Je me demande si votre point de vue a changé depuis lors ?
Si vous ne voulez toujours pas vous en occuper, pourquoi ne pas laisser les utilisateurs l'implémenter eux-mêmes ? Pour cela, nous avons besoin d'un pointeur de fonction. Que pensez-vous d'ajouter une telle fonctionnalité ? C'est-à-dire GetPointer(myfunc)

Vous pouvez également expliquer pourquoi vous n'avez pas implémenté le multithreading dans MQL5. Pourquoi avez-vous rencontré des difficultés particulières ? Ou peut-être que c'était juste une question de principe ?
Puis-je vous rappeler que nous ne sommes plus en l'an 2000 et que les processeurs multicœurs sont depuis longtemps devenus la norme pour tous, le nombre de cœurs ne fera qu'augmenter chaque année. Aujourd'hui, il est de 4, dans quelques années, il sera de 6 à 8, etc. Et vous ne permettez pas aux utilisateurs d'utiliser correctement le processeur avec le programme qu'ils exécutent.
Quel est l'intérêt de vos comparaisons constantes de vitesse entre MQL et C++ alors, si vous ne comparez que le travail dans un seul fil ? Après tout, aucun programmeur C++ raisonnable ne suspendrait une tâche gourmande en ressources à un seul thread alors qu'il existe plusieurs processeurs qui peuvent augmenter les performances de plusieurs fois. C'est pourquoi tous vos tests ont peu de rapport avec la vie réelle. Dans quelques années, le cœur du processeur passera à 10 cœurs et vous serez encore fier de vos tests MQL monofilaires ?

Quant à l'utilisation d'OpenCL, c'est du chamanisme, surtout de la manière dont elle est mise en œuvre ici - via la ligne de texte. Vous déboguez donc votre code ailleurs, puis vous le copiez dans MQL5... Quel cirque ! Il serait alors plus facile d'implémenter tout cela dans une DLL et de l'importer. En outre, très peu de personnes souhaitent écrire un programme en plusieurs langues.
OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 
meat:
Chers développeurs, j'ai fait une recherche sur le sujet du multithreading et j'ai trouvé une phrase selon laquelle vous avez dit que vous n'alliez pas ajouter de fonctions qui créent et gèrent les threads dans MQL5. Cela a été dit il y a plus d'un an et demi. Je me demande si votre point de vue a changé depuis lors ?
Si vous ne voulez toujours pas vous en occuper, pourquoi ne pas laisser les utilisateurs l'implémenter eux-mêmes ? Pour cela, nous avons besoin d'un pointeur de fonction. Que pensez-vous d'ajouter une telle fonctionnalité ? C'est-à-dire GetPointer(myfunc)

Vous pouvez également expliquer pourquoi vous n'avez pas implémenté le multithreading dans MQL5. Pourquoi avez-vous rencontré des difficultés particulières ? Ou peut-être que c'était juste une question de principe ?
Puis-je vous rappeler que nous ne sommes plus en l'an 2000 et que les processeurs multicœurs sont depuis longtemps devenus la norme pour tous, le nombre de cœurs ne fera qu'augmenter chaque année. Aujourd'hui, il est de 4, dans quelques années, il sera de 6 à 8, etc. Et vous ne permettez pas aux utilisateurs d'utiliser correctement le processeur avec le programme qu'ils exécutent.
Quel est l'intérêt de vos comparaisons constantes de vitesse entre MQL et C++ alors, si vous ne comparez que le travail dans un seul fil ? Après tout, aucun programmeur C++ raisonnable ne suspendrait une tâche gourmande en ressources à un seul thread alors qu'il existe plusieurs processeurs qui peuvent augmenter les performances de plusieurs fois. C'est pourquoi tous vos tests ont peu de rapport avec la vie réelle. Dans quelques années, le cœur du processeur passera à 10 cœurs et vous serez toujours fier de vos tests MQL monofilaires ?

Quant à l'utilisation d'OpenCL, c'est du chamanisme, surtout de la manière dont elle est mise en œuvre ici - via la ligne de texte. Vous déboguez donc votre code ailleurs, puis vous le copiez dans MQL5... Quel cirque ! Il serait alors plus facile d'implémenter tout cela dans une DLL et de l'importer. En outre, très peu de personnes souhaitent écrire un programme en plusieurs langues.

Le multithreading dans MQL5 est toujours disponible, mais contrairement à C++, il est implémenté comme un environnement d'exécution virtuel appelé diagramme.

Chaque graphique est exécuté dans un thread séparé, afin d'éviter les problèmes de synchronisation des threads, d'accès aux données et autres problèmes qui surviennent lors de la communication entre les threads.

Oui, mais pour l'utilisateur de masse (qui se plaint déjà de la complexité du langage), c'est exactement ce qu'il faut.

En ce qui concerne OpenCL, il s'agit d'une question distincte. Ce n'était même pas dans les plans de développement de la plate-forme. Au début, les utilisateurs du forum avancé ont suscité l'intérêt des développeurs à ce sujet, mais la réponse officielle était "non et ne le sera pas". Mais les dirigeants du MQ ont changé leur colère pour la pitié(merci Ilyaz).

A propos des Dll : MQ les considère comme potentiellement dangereuses, donc chaque fois qu'il est possible de les éviter, il essaie de les mettre en œuvre, en particulier pour les services publics. Mais elle ne les interdit pas en général, car les programmeurs écrivent non seulement pour le public, mais aussi pour leurs interlocuteurs.

 

Dans l'ensemble, cela ressemble à de pures déclarations théoriques.

Il n'y a rien de mal à utiliser le multithreading et à exploiter pleinement les processeurs dans le terminal. Regardez combien de threads sont en cours d'exécution dans le terminal et comment le nombre de threads évolue dans le temps. Les principes du multithreading ont été expliqués et démontrés à de nombreuses reprises. Par exemple, comment fonctionnent les fils indépendants du recalcul des indicateurs, du recalcul des symboles, de la pagination des données graphiques et du fonctionnement indépendant de tous les conseillers experts et scripts.

Pour paralléliser les calculs de quoi que ce soit, il faut d'abord réaliser que seule une infime partie des mathématiques peut être parallélisée.

Regardez le testeur multi-cœurs, le réseau de nuages MQL5 et OpenCL. Nous avons pris de l'avance depuis longtemps, notamment dans le domaine de l'informatique dématérialisée. Dès maintenant, activez le MQL5 Cloud Network dans votre testeur et obtenez jusqu'à 14 000 CPU pour vous aider :

Vous ne semblez pas non plus connaître OpenCL. Présenter le code du programme sous forme de source à envoyer au compilateur OpenCL est la manière habituelle et standard de travailler. N'oubliez pas que les différents gestionnaires OpenCL (Ndivia, AMD, Intel, etc.) doivent récupérer le code et le retravailler pour eux-mêmes.

Статистика - MQL5 Cloud Network
Статистика - MQL5 Cloud Network
  • cloud.mql5.com
Произведенный объем работы, распределение агентов по странам, RAM, CPU и битности OS
 

Qu'est-ce que le multithreading dans MetaTrader 5 :

J'ai cliqué sur le test, j'ai fait fonctionner instantanément 5 743 agents/CPU et j'ai exécuté 381 468 passages dans l'optimiseur en 6 minutes. Chaque passage prenait entre 1 et 2 secondes. Si j'avais effectué le test sur mon ordinateur avec 8 cœurs, j'aurais passé 800 à 1600 minutes au lieu de 6 minutes (381468 / 8 = 47683 secondes = 794 minutes).

Et à part appuyer sur le bouton de démarrage, je n'ai rien eu à faire d'autre. Un certain Skynet s'est levé, a synchronisé tout seul l'historique des graphiques nécessaires, a distribué la tâche à des milliers d'ordinateurs dans le monde et les a fait travailler en masse.

Bienvenue dans la réalité...

 

Renat,

question sur la création de fils de discussion dans MQL5 Expert Advisor.

 
sergeev:

Renate,

La question sur la création de fils de discussion dans MQL5 Expert Advisor.

J'en suis conscient.

Je n'ai simplement pas écrit qu'il vaut mieux ne pas parler de multithreading à une personne qui ne comprend pas pourquoi il n'y a pas de multithreading dans un langage informatique appliqué. Nous avons mis en œuvre l'ensemble de l'infrastructure multithreading du terminal de manière complète et efficace.

Le véritable multithreading est nécessaire dans les endroits où vous pouvez réellement paralléliser les tâches. Il s'agit d'un testeur. Et c'est ici que nous l'avons mis en œuvre de telle manière que de nombreuses personnes sont loin de comprendre la qualité, le contrôle et le volume du travail effectué.

Mon exemple avec claude est une simple preuve de la qualité et du niveau d'élaboration de la tâche.

 

Oui, Renat, vous n'avez pas lu attentivement mon message. Nous ne parlons pas du multithreading de MT5, mais du multithreading de MQL5. Nous ne pouvons pas créer ces fils dans un programme en cours d'exécution par nous-mêmes. L'ouverture programmée d'un nouveau graphique avec un indicateur est une danse du tambourin, pas une solution.

C'est incroyable, vous avez fait beaucoup de choses inutiles dans MQL5, en considérant un utilisateur de masse. Et en ce qui me concerne, vous vous concentrez principalement sur les nuls, pas sur les programmeurs lettrés. D'où l'amoncellement de restrictions, l'impossibilité de travailler directement avec la mémoire, etc. La question est donc de savoir pourquoi les mannequins ont besoin, par exemple, de cours.

Si vous positionnez votre produit non seulement pour les nuls, pourquoi ne pouvez-vous pas donner aux programmeurs expérimentés la possibilité d'utiliser efficacement les ressources du système ?

L'absence de multithreading ne sera compensée par aucune classe. Un programme peut sembler intelligent, mais s'il utilise les ressources du système de manière inefficace, c'est une honte pour tous. Dans votre quête d'innovation, vous avez peut-être oublié que le langage MQL est principalement destiné à l'écriture de programmes de trading et d'analyse, et non à la programmation pour le plaisir de programmer. Par conséquent, la vitesse et l'efficacité du programme, plutôt que la vitesse d'écriture du code, devraient être la première priorité. Parce que le travail avec des données de grande taille est prévu a priori.

Je pense que les capacités de MQL4 seront suffisantes pour la majorité des utilisateurs. Les seules choses qui manquaient étaient le support des structures, des pointeurs vers les variables et des pointeurs vers les fonctions (ou le support intégré des fonctions de rappel). Et c'est tout. Avec cet arsenal, vous pouvez créer n'importe quel programme qui fonctionne très efficacement, créer le nombre requis de threads, de callbacks, etc.

 

de la viande, sans vouloir vous offenser, mais avec ce niveau de compréhension des enjeux de la maternelle.

J'ai tout lu attentivement, mais je n'ai pas la possibilité de donner un enseignement complet. J'ai 11 ans d'expérience dans les langages MQL/MQL2/MQL4/MQL5.

 
meat:

Il ne s'agit pas du tout du multithreading MT5, mais du multithreading MQL5. Nous ne pouvons pas créer ces fils dans le programme en cours par nous-mêmes. Et l'ouverture par le logiciel d'un nouveau graphique avec un indicateur est, vous en conviendrez, une danse du tambourin, pas une solution.

VinAPI est une aide. Vous n'avez pas besoin du multithreading dans MQL5. C'est-à-dire qu'il n'est pas du tout nécessaire.
 
meat:


La chose la plus surprenante est que vous avez fait tellement de choses inutiles dans MQL5, si nous prenons en compte un utilisateur de masse.

Si vous prenez un seul utilisateur, il peut y avoir beaucoup de choses inutiles. Et lorsque vous commencez à élargir vos horizons et que des fonctionnalités supplémentaires sont nécessaires, il s'avère qu'au contraire, quelque chose est déjà là et qu'il manque quelque chose.

MQL5 est toujours en cours de développement. Quelque chose de nouveau s'ajoute petit à petit. Bien sûr, il y a aussi des inconvénients, par exemple, vous ne pouvez pas créer vos propres événements, il n'y a pas de gestionnaires d'exceptions et de multithreading. J'espère que tout cela sortira un jour ? Mais je doute que tout cela soit mis en œuvre demain.

Si l'on veut vraiment, le multithreading est également disponible pour tester les agents dans OpenCL. Ce n'est pas tout à fait pratique, mais c'est quand même là et vous pouvez paralléliser les tâches.

 
Renat:

de la viande, sans vouloir vous offenser, mais avec ce niveau de compréhension des enjeux de la maternelle.

Et vous dites que ce n'est pas la norme de l'entreprise))

Si des questions sont posées, c'est que les réponses ne sont pas à la surface...