Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Quelle partie de mon code vous intéresse exactement ? J'ai beaucoup de dépendances sur différents fichiers.
Le problème que j'ai maintenant est que l'écriture et la lecture du tampon ne se fait qu'en 1 tick du testeur, et pour la vérification c'est suffisant :
Exécution par script :
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) Dispositif n°0 = Cypress
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) OpenCL : périphérique GPU 'Cypress' sélectionné
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) build log =
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) Taille du tampon en octets =240
Exécution de l'expert dans le testeur du 2013.01.09 au 2013.10.10 sur M5 avec "OHLC sur M1" :
2013.10.30 19:01:44 Core 1 2013.01.09 00:00:00 Dispositif #0 = Cypress
2013.10.30 19:01:44 Core 1 2013.01.09 00:00:00 OpenCL : périphérique GPU 'Cypress' sélectionné
2013.10.30 19:01:44 Core 1 2013.01.09 00:00:00 build log =
2013.10.30 19:01:44 Core 1 2013.01.09 00:00:00 taille du tampon en octets =240
2013.10.30 19:04:55 Core 1 EURUSD,M5 : 1108637 ticks (55953 barres) générés en 192443 ms (total barres dans l'historique 131439, temps total 192521 ms)
2013.10.30 19:04:55 Core 1 294 Mb de mémoire utilisée
Notez qu'il n'y a qu'un seul appareil dans le testeur.
Si
//CLBufferRead(hbuffer[1], price);
puis
S'il est nécessaire d'effectuer des calculs sur des données OHLC, il est alors impératif de procéder à une écriture parcimonieuse, c'est-à-dire de créer à l'avance un tampon plus grand et de n'écraser ces nouvelles données que lorsque celles-ci arrivent, en indiquant au noyau le nouveau début et la taille du tampon.
Même si nous parvenons à optimiser le transfert OHLC (nous utiliserons CLSetKernelArg pour transférer la dernière barre), nous nous planterons toujours lors de la lecture du tampon de résultats :
Eh bien, qui vous empêche de le faire ? Va et écris quelque chose de réel qui ne soit pas un conte de fées. Mais essayez de trouver un exemple pour que l'accélération se produise. C'est la partie la plus difficile.
Si vous parlez de mes articles... Eh bien, j'écrivais un abécédaire. Et la multiplication de la matrice est une opération très utile.
P.S. À propos, si votre CPU est de type Intel, l'émulation des cœurs x86 sur celui-ci est beaucoup plus rapide que sur un CPU concurrent. C'est-à-dire si vous le recalculez par cœur.
HD5850 : à la base, une carte assez décente, mais les cartes modernes sont meilleures - non seulement en raison du plus grand nombre de mouches, mais aussi en raison des optimisations OpenCL. Par exemple, le temps d'accès à la mémoire globale est considérablement réduit.
P.P.S. OpenCL n'est pas une panacée, c'est un outil viable qui peut accélérer de manière significative dans certains cas rares. Et dans d'autres cas moins pratiques, l'accélération n'est pas si impressionnante - s'il y en a une.
Eh... Les articles sur l'accélération de la vitesse en utilisant OpenCL sur GPU se sont avérés être un conte de fées car ils ne traitent pas vraiment de tâches réelles :(
Pas du tout. Le conte de fées est que "tout algorithme peut être accéléré dans OpenCL". Pas n'importe quel algorithme.
Le premier fil de discussion sur OpenCL décrit même assez bien les critères qu'un algorithme doit posséder pour avoir un potentiel d'accélération ocl.
Bonne chance avec ça.
La revendication ne concerne pas la vitesse de calcul - il y a un gain de vitesse de 2x (0,02 ms contre 0,05 ms).
L'argument est qu'il n'y a aucune information dans les articles :
Je suis probablement le premier à vouloir accélérer le test au détriment du GPU, après avoir lu les promesses...
Relisez mon message.
Le critère principal : l'exécution du code MQL dans le "style OpenCL" doit dépasser le temps = Number of_Buffers * 0.35300 ms en 1 tick.
Pour connaître la vitesse de l'algorithme dans MQL avec une précision de l'ordre de la microseconde (1000 microsecondes = 1 milliseconde), il faudra exécuter dans le testeur plusieurs fois et Total_Time / Number_of_Ticks (mon post du haut).
Sans le retard de la mémoire tampon, mon code passerait le test en ~30 secondes - c'est ~2 fois plus rapide que le MQL "style OpenCL" (55 secondes) et ~11 fois plus rapide que le code normal (320 secondes).
Quels sont les autres critères ?
À en juger par votre expérience en matière d'OpenCL, vous devez déjà avoir compris que tous les algorithmes ne sont pas directement accélérés. L'un des principaux problèmes ici est de minimiser les accès à la mémoire globale.
Au fait, je dois maintenant résoudre un problème similaire avec l'accès aléatoire à la mémoire globale du dispositif (trop privé cet accès aléatoire, et c'est une putain de surcharge). Je le résoudrai dès que j'aurai remis mon cerveau sur les rails.
Le testeur ne sélectionne pas le CPU pour OpenCL - cela n'est signalé nulle part !
Écrivez au Service Desk et justifiez le besoin d'une telle fonctionnalité.
Si le testeur n'est pas utilisé, c'est qu'il est déjà fait (c'est mon application). Et je n'ai pas encore vérifié le testeur.
Il a déjà été écrit que tous les algorithmes ne sont pas directement accélérés. Vous devez utiliser votre cerveau ici, et l'un des principaux problèmes est de minimiser les accès à la mémoire globale.
Eh bien, maintenant je dois résoudre un problème similaire avec l'accès aléatoire à la mémoire globale (cet accès aléatoire est trop fréquent). Je le résoudrai dès que mon cerveau fonctionnera.
Il est temps d'utiliser votre cerveau car 0,35300 ms se réfère exactement à clEnqueue[Read/Write]Buffer() et non aux accès globaux à la mémoire à l'intérieur du noyau.
La seconde peut être résolue en optimisant le noyau lui-même alors que la première est une limite de fer.