Discussion de l'article "OpenCL : De la programmation naïve à une programmation plus perspicace" - page 2

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
Je vais déjà le faire, (très probablement) ce sera juste la collecte de statistiques sur une grande histoire. Rien à voir avec les muves cependant. Je déteste les muves - j'ai le droit de le faire :)
Synchroniser les citations.
Il s'agit d'une tâche pour le CPU plutôt que pour le GPU. Toutes les tâches ne sont pas adaptées au GPU, n'est-ce pas ? Il vaut mieux en choisir une qui soit adaptée, car c'est à cela que sert le GPU.
Il s'agira d'un tableau à deux dimensions.
Je suppose que dans le futur article, il sera tridimensionnel. En même temps, il deviendra clair comment travailler avec la mémoire tampon du GPU qui affiche un tableau de n'importe quelle dimension.
J'ai déjà l'intention de le faire, (très probablement) il s'agira simplement de collecter des statistiques sur une grande histoire....
Je suppose que dans un prochain article, il sera question de trois dimensions. En même temps, il deviendra clair comment écrire un tableau de n'importe quelle dimensionnalité dans le tampon GPU et comment travailler avec lui.
super ! Attendons...
Faut-il les synchroniser également ?
P.S. J'ai lu l'aide, je vois que c'est nécessaire.
J'ai recalculé les résultats de l'article en tenant compte de la mise à jour du matériel.
Il y a un an : CPU Intel Pentium G840 (2 cœurs @ 2.8 GHz) + carte vidéo AMD HD4870.
Récemment : CPU Intel Xeon E3-1230v2 (4 cœurs/8 threads @ 3.3 GHz ; légèrement derrière i7-3770) + carte vidéo AMD HD.6 870.
Les résultats des calculs en OpenCL sont indiqués sur le graphique (horizontalement - le nombre d'optimisations appliquées dans l'article) :
Le temps de calcul est indiqué verticalement en secondes. Le temps d'exécution du script "en un coup sur le CPU" (sur un cœur, sans OpenCL) a varié en fonction des changements d'algorithme dans une fourchette de 95 plus ou moins 25 secondes.
Comme on peut le voir, tout semble clair, mais pas encore très évident.
L'outsider évident est le G840 dual-core. Eh bien, on s'y attendait. D'autres optimisations n'ont pas trop modifié le temps d'exécution, qui a varié de 4 à 5,5 secondes. Il est à noter que même dans ce cas, l'accélération de l'exécution des scripts a atteint des valeurs supérieures à 20 fois.
Dans la compétition entre deux cartes vidéo de générations différentes - l'ancienne HD4870 et la plus moderne HD6870 - nous pouvons presque considérer la 6870 comme la gagnante. A l'exception de la dernière phase d'optimisation, où l'ancien monstre 4870 a remporté une victoire nominale (bien qu'il soit resté à la traîne presque tout le temps). Les raisons ne sont pas claires : les shaders sont plus petits et leur fréquence est également plus basse, mais le 6870 a quand même gagné.
Supposons qu'il s'agisse des aléas du développement des générations de cartes vidéo. Ou une erreur dans mon algorithme :)
J'ai été franchement satisfait du Xeon, qui a réussi à être meilleur que l'ancien 4870 sur toutes les optimisations, et qui s'est battu avec le 6870 presque à armes égales, et à la fin a même réussi à les battre tous. Je ne dis pas qu'il en sera toujours ainsi pour n'importe quelle tâche. Mais la tâche était assez difficile sur le plan du calcul - après tout, il s'agissait de la multiplication de deux matrices de taille 2000 x 2000 !
La conclusion est simple : si vous avez déjà un CPU décent comme i7, et que les calculs OpenCL ne sont pas trop longs, alors peut-être que vous n'avez pas besoin d'un chauffage puissant supplémentaire (carte vidéo). En revanche, charger la pierre à 100% pendant des dizaines de secondes (lors de longs calculs) n'est pas très agréable, car l'ordinateur "perd en réactivité" pendant ce temps.
Bonjour,
Pouvez-vous nous donner un exemple de la façon dont OpenCL peut accélérer le backtesting d' un EA en mode EveryTick ? Actuellement, il me faut 18 minutes pour exécuter 14 ans de données en mode EveryTick. Je pense que beaucoup de traders seront intéressés si OpenCL peut réduire le temps de test de 50%.
Je n'ai pas compris comment le transfert de la ligne de l'intérieur de la boucle à l'extérieur vers la mémoire privée l'accélérait.
La même opération de transfert se produit de toute façon, j'ai eu zéro impact sur mon code mais bien sûr chaque cas est différent. (mais encore une fois, 0 impact après avoir ajouté quelque chose signifie que quelque chose s'est accéléré mais qu'il n'y a pas eu de gain)
Cette partie se trouve dans la source OpenCL :
Où vous le déplacez à l'extérieur de la boucle de calcul.
Je vous remercie de votre attention.