http://www.ixbt.com/video3/rad2.shtml- Il est préférable d'utiliser des bibliothèques optimisées pour le big data plutôt que de faire preuve de "créativité" en écrivant des programmes en OpenCL (je ne l'exclus pas). Vous pouvez utiliser un système hybride, où les petites quantités sont traitées à l'aide d'OpenCL et les grandes quantités à l'aide de bibliothèques optimisées. Vous devrez peut-être convertir la bibliothèque dans un langage de programmation spécifique et créer des conditions pour l'inclusion de cette bibliothèque. Si cela peut être mis en œuvre, cela donnera un résultat impressionnant et accélérera donc l'opération de plusieurs fois. Note à .....
GKS: Il peut s'avérer nécessaire de convertir les bibliothèques en un langage de programmation spécifique et de créer les conditions nécessaires à l'activation de cette bibliothèque. Si cela peut être mis en œuvre, vous obtiendrez un résultat impressionnant et, par conséquent, l'opération sera accélérée plusieurs fois.
Il n'est pas technologique pour les développeurs de mettre au point le compilateur spécifiquement pour un produit extrêmement spécifique, bien qu'unique.
Et jusqu'à présent, je ne vois aucune tâche de trader qui nécessite une taille aussi importante de matrices multipliées.
Une mise à jour de la plateforme MetaTrader 5 sera publiée dans les prochains jours. Une fois la mise à jour publiée, il y aura un communiqué de presse supplémentaire contenant la liste finale des modifications et les numéros de version. Les changements suivants sont prévus :
MetaTrader 5 Client Terminal build 648
MetaTester : Ajout de la prise en charge de l'utilisation de programmes OpenCL dans les agents de test.
Ceux qui comprennent OpenCL peuvent préparer un test de tâches sous Cloud+OpenCL. Perspectives mathématiques très intéressantes.
J'ai fait un des anciens tests par intérêt (ParallelTester_00-01x) et je n'en croyais pas mes yeux.
Sur la page 24, je faisais un test, et il y avait 29, puis j'ai mis la mémoire en mode 2 canaux et c'est passé à 39.
Maintenant, c'est ~306.
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) GPU time = 141 ms
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CPU time = 43259 ms
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 306.8014184397163
fyords, comment avez-vous fait pour que les événements antérieurs apparaissent plus haut dans le journal ?
Mais en général, c'est génial, je vous comprends. J'étais tout aussi heureux lorsque j'ai acheté ma HD 4870 à bas prix et que j'ai vu sa puissance.
Une petite recommandation : choisissez les paramètres de façon à ce que le temps d'exécution du GPU soit comparable à 1 seconde. Alors le rapport de temps sera également plus précis. L'erreur moyenne de la fonction GteTickCount() n'est pas inférieure à quelques dizaines de millisecondes. Vous pourriez donc facilement obtenir 120 ms ou 170 ms sur le GPU. Et la valeur de l'accélération en dépend grandement.
J'ai un peu affiné ce script pour qu'il fonctionne sur tous les périphériques disponibles (regardez de bas en haut : 1) CPU sur plateforme Intel, puis 2) HD 4870 sur plateforme AMD, et 3) CPU sur plateforme AMD) :
2012.05.3115:48:35 OpenCL CPU: GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version2.0 (sse2))
2012.05.3115:48:35 OpenCL GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.05.3115:48:35 OpenCL CPU: Intel(R) Corporation Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version1.1)
Les résultats de l'écriture se font de bas en haut !
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 24.769437551695622012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 9672 ms
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 22012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 204.76068376068382012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 1170 ms
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 12012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 77.555843314988662012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 3089 ms
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 02012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) -------------------------
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Cpu МахResult==0.87527 at 10902 pass
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CPU time = 239570 ms
2012.06.0101:01:58 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ========================================
Avec ce dernier paramètre, qui est 10 fois moins élevé, ma carte n'est pas aussi rapide que la vôtre. Il n'a probablement pas le temps d'overclocker correctement :)
fyords, comment avez-vous fait pour que les événements antérieurs apparaissent plus haut dans le journal ?
Dans les rapports, bouton droit "View", nouvelle fenêtre bouton "Query" et le journal est construit par temps correctement, et c'est plus pratique à lire (pour moi).
Quant au script, merci, je l'essaierai demain, c'est une longue attente pour sa réalisation, surtout avec Count pass = 12800.
Pour l'instant, voici un ancien script avec le nombre de passages = 12800
2012.06.0101:05:53 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) GPU time = 999 ms
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CPU time = 434167 ms
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 434.6016016016016
Renat: Pour information : GetTickCount a une erreur bien inférieure à 16 ms, ce n'est pas comme si vous utilisiez Windows 95.
L'erreur n'est en fait pas beaucoup moins importante. Oui, presque, mais il y a des valeurs aberrantes par rapport à la moyenne, regroupées autour de 32, 48 et même plus. Ils sont rares, je ne discute pas, ils peuvent être ignorés.
Mais lorsqu'une personne exécute un script, elle ne fait pas nécessairement quelque chose sur l'ordinateur. Et le système peut également exécuter ses propres tâches, ce qui peut ralentir l'exécution.
Techniquement, l'écart-type est effectivement faible, autour de 6-7, et dépend faiblement du temps d'exécution lui-même. Mais elle reflète mal la véritable variation. Voici un histogramme des temps enregistrés lors de l'exécution des mêmes calculs :
La distance entre les barres adjacentes est de 16ms. Des colonnes plus petites sont tout à fait probables, et elles ne diffèrent les unes des autres que de 32 ms. Si la colonne du milieu ("temps d'exécution réel") est de 140 millisecondes, alors celle de gauche est de 124 ms et celle de droite de 156 ms.
Ainsi, la variation réelle, divisée par le faible temps d'exécution du GPU, peut être assez importante :
20 secondes/124 ms ~ 161
20 secondes/156 ms ~ 128.
Le "vrai rapport" des temps d'exécution correspond approximativement à la barre la plus grande :
20 sec/140ms ~ 143.
Si nous prenons un temps d'exécution plus long sur le GPU, l'impact de cette erreur sera bien moindre. Laissez au moins 500 ms.
Script pour la simulation :
#define BIG 10000000#define SMALL 1000voidOnStart( )
{
Print( "Script started..." );
double k;
int times[ SMALL ];
MathSrand( TimeCurrent( ) );
for( int ii = 0; ii < SMALL; ii ++ )
{
Comment( ii );
int st = GetTickCount( );
for( int i = 0; i < BIG; i ++ ) k = sin( i );
int timeTotal = GetTickCount( ) - st;
times[ ii ] = timeTotal;
}
int h = FileOpen( "gtc_times.txt", FILE_WRITE, "\r\n" );
for( int ii = 0; ii < SMALL; ii ++ )
FileWrite( h, times[ ii ] );
FileClose( h );
Print("Script unloaded");
}
//+------------------------------------------------------------------+
http://www.ixbt.com/video3/rad2.shtml- Il est préférable d'utiliser des bibliothèques optimisées pour le big data plutôt que de faire preuve de "créativité" en écrivant des programmes en OpenCL (je ne l'exclus pas). Vous pouvez utiliser un système hybride, où les petites quantités sont traitées à l'aide d'OpenCL et les grandes quantités à l'aide de bibliothèques optimisées. Vous devrez peut-être convertir la bibliothèque dans un langage de programmation spécifique et créer des conditions pour l'inclusion de cette bibliothèque. Si cela peut être mis en œuvre, cela donnera un résultat impressionnant et accélérera donc l'opération de plusieurs fois. Note à .....
P.S. Ceci peut être un nouveau fil dans le forum
Il n'est pas technologique pour les développeurs de mettre au point le compilateur spécifiquement pour un produit extrêmement spécifique, bien qu'unique.
Et jusqu'à présent, je ne vois aucune tâche de trader qui nécessite une taille aussi importante de matrices multipliées.
Annonce de la mise à jour de MetaTrader 5
Une mise à jour de la plateforme MetaTrader 5 sera publiée dans les prochains jours. Une fois la mise à jour publiée, il y aura un communiqué de presse supplémentaire contenant la liste finale des modifications et les numéros de version. Les changements suivants sont prévus :
MetaTrader 5 Client Terminal build 648
MetaTester : Ajout de la prise en charge de l'utilisation de programmes OpenCL dans les agents de test.
Comprendre OpenCL, préparer un test de tâches pour Cloud+OpenCL. Perspectives mathématiques très intéressantes.
C'est plutôt pour MetaDriver........................
Pilote vidéo récemment mis à jour (NVIDIA301.42).
J'ai fait un des anciens tests par intérêt (ParallelTester_00-01x) et je n'en croyais pas mes yeux.
Sur la page 24, je faisais un test, et il y avait 29, puis j'ai mis la mémoire en mode 2 canaux et c'est passé à 39.
Maintenant, c'est ~306.
Incroyable. Il semble que NVIDIA ait modifié les pilotes de manière humaine.fyords, comment avez-vous fait pour que les événements antérieurs apparaissent plus haut dans le journal ?
Mais en général, c'est génial, je vous comprends. J'étais tout aussi heureux lorsque j'ai acheté ma HD 4870 à bas prix et que j'ai vu sa puissance.
Une petite recommandation : choisissez les paramètres de façon à ce que le temps d'exécution du GPU soit comparable à 1 seconde. Alors le rapport de temps sera également plus précis. L'erreur moyenne de la fonction GteTickCount() n'est pas inférieure à quelques dizaines de millisecondes. Vous pourriez donc facilement obtenir 120 ms ou 170 ms sur le GPU. Et la valeur de l'accélération en dépend grandement.
J'ai un peu affiné ce script pour qu'il fonctionne sur tous les périphériques disponibles (regardez de bas en haut : 1) CPU sur plateforme Intel, puis 2) HD 4870 sur plateforme AMD, et 3) CPU sur plateforme AMD) :
Les résultats de l'écriture se font de bas en haut !
Avec ce dernier paramètre, qui est 10 fois moins élevé, ma carte n'est pas aussi rapide que la vôtre. Il n'a probablement pas le temps d'overclocker correctement :)fyords, comment avez-vous fait pour que les événements antérieurs apparaissent plus haut dans le journal ?
Dans les rapports, bouton droit "View", nouvelle fenêtre bouton "Query" et le journal est construit par temps correctement, et c'est plus pratique à lire (pour moi).
Quant au script, merci, je l'essaierai demain, c'est une longue attente pour sa réalisation, surtout avec Count pass = 12800.
Pour l'instant, voici un ancien script avec le nombre de passages = 12800
Le gain est devenu encore plus important.L'erreur n'est en fait pas beaucoup moins importante. Oui, presque, mais il y a des valeurs aberrantes par rapport à la moyenne, regroupées autour de 32, 48 et même plus. Ils sont rares, je ne discute pas, ils peuvent être ignorés.
Mais lorsqu'une personne exécute un script, elle ne fait pas nécessairement quelque chose sur l'ordinateur. Et le système peut également exécuter ses propres tâches, ce qui peut ralentir l'exécution.
Techniquement, l'écart-type est effectivement faible, autour de 6-7, et dépend faiblement du temps d'exécution lui-même. Mais elle reflète mal la véritable variation. Voici un histogramme des temps enregistrés lors de l'exécution des mêmes calculs :
La distance entre les barres adjacentes est de 16ms. Des colonnes plus petites sont tout à fait probables, et elles ne diffèrent les unes des autres que de 32 ms. Si la colonne du milieu ("temps d'exécution réel") est de 140 millisecondes, alors celle de gauche est de 124 ms et celle de droite de 156 ms.
Ainsi, la variation réelle, divisée par le faible temps d'exécution du GPU, peut être assez importante :
20 secondes/124 ms ~ 161
20 secondes/156 ms ~ 128.
Le "vrai rapport" des temps d'exécution correspond approximativement à la barre la plus grande :
20 sec/140ms ~ 143.
Si nous prenons un temps d'exécution plus long sur le GPU, l'impact de cette erreur sera bien moindre. Laissez au moins 500 ms.
Script pour la simulation :