OpenCL : tests de l'implémentation interne dans MQL5 - page 52

 
joo:
Je suppose que si nous voulons transmettre un tableau bidimensionnel/multidimensionnel avec des données au GPU, nous pouvons utiliser la représentation des données comme une structure et transmettre la structure ?

J'ai essayé à travers une structure - ça a marché ! Je n'aurais jamais imaginé passer des tableaux multidimensionnels de cette façon moi-même :) Merci !

J'ai joint un petit exemple, utilisant des tableaux à deux dimensions - cela fonctionne très bien. L'exemple est un peu tordu - mais en général, il démontre assez bien la possibilité d'une telle perversion :)

PS : Ton UGA + OpenCL - c'est juste pas d'émotions :) Comment on vivait avant - c'est flippant de se souvenir...

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
Dossiers :
 
MigVRN:

PS : Votre UGA + OpenCL n'est pas du tout une émotion. :) La façon dont nous vivions autrefois est étrange à se rappeler...

Merci, je suis content que ça te plaise. Et profitant de l'occasion, je voudrais dire bonjour et merci à Ilyas Sharapov(mql5).
 

CL_DEVICE_ANY et CL_DEVICE_GPU sont-ils obsolètes ?

CL_USE_ANY et CL_USE_GPU_ONLY sont-ils maintenant pertinents ?

 
joo:

CL_DEVICE_ANY et CL_DEVICE_GPU sont-ils obsolètes ?

CL_USE_ANY et CL_USE_GPU_ONLY sont-ils maintenant pertinents ?

Oui.
 
MetaDriver:
Oui.

J'ai découvert par la méthode du Prof. Tychkov un mystérieux dispositif 1 dans mon ordinateur, qui est plus rapide que CL_USE_ANY et même plus rapide que CL_USE_GPU_ONLY.

Qu'est-ce que c'est ? :O

 
joo:

J'ai trouvé un mystérieux dispositif 1 dans mon ordinateur, en utilisant la méthode du professeur Tychkov, qui fonctionne plus vite que CL_USE_ANY et même plus vite que CL_USE_GPU_ONLY.

Qu'est-ce que c'est ? :O

Les statistiques, s'il vous plaît. Pour tous les appareils. :)
 
MetaDriver:
Des statistiques sur le tableau. Pour tous les appareils. :)
CL_USE_ANY

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) Différence de calcul entre GPY et CPY : 0.0
2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 1.326
2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) Temps GPU = 141 ms

2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) Temps SPU = 187 ms


CL_USE_GPU_ONLY

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Différence de calcul entre GPY et CPY : 0.0
2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 1.376
2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Temps GPU = 125 ms

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Temps SPU = 172 ms


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Différence de calcul entre GPY et CPY : 0.0
2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 2.397
2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Temps GPU = 78 ms

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Temps SPU = 187 ms


Je recommande à tout le monde d'essayer de la même manière que je l'ai fait, il est tout à fait possible que vous trouviez un appareil plus rapide que les graphiques discrets impuissants. :D


PS. Je soupçonne que CL_USE_ANY et CL_USE_GPU_ONLY sont les mêmes - calcul sur le CPU, mais le dispositif 1 est mon GPU. C'est une confusion élémentaire dans les constantes standard.

 
joo:

Je recommande à tout le monde de s'amuser avec comme je l'ai fait, vous trouverez probablement un appareil plus rapide que les graphiques discrets inutiles. :D

PS. Je soupçonne que CL_USE_ANY et CL_USE_GPU_ONLY sont une seule et même chose - calcul du CPU, mais le dispositif 1 est mon GPU. C'est une confusion élémentaire dans les constantes standard.

Voilà ce que j'ai lu ! Ce n'était pas dans l'aide du terminal ! J'ai modifié le code pour refléter ces changements. Voyez ce que vous obtenez. Je vois ça comme ça :

23:17:00 Temps SPU = 1155 ms
23:17:01 Nombre total de périphériques OpenCL activés : 2
23:17:02 Temps GPU #0 = 249 ms
23:17:02 CPY/GPU #0 = 4.639
23:17:03 Temps GPU #1 = 265 ms
23:17:03 CPY/GPU #1= 4.358

GPU : Advanced Micro Devices, Inc. Turcs avec OpenCL 1.1 (6 unités, 725 MHz, 1024 Mb, version CAL 1.4.1703 (VM))
CPU : véritable CPU Intel(R) Core(TM) i3-2310M @ 2.10GHz avec OpenCL 1.1 (4 unités, 2095 MHz, 5990 Mb, version 2.0)
Dossiers :
 
2012.04.12 22:37:07     OpenCL  GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 296.10)
2012.04.12 22:37:07     OpenCL  CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2998 MHz, 2048 Mb, version 2.0)
2012.04.12 22:39:46     Struct_OpenCL__1 (EURUSD,H1)    Время СPU = 686 ms
2012.04.12 22:39:47     Struct_OpenCL__1 (EURUSD,H1)    Всего устройств c возможностями OpenCL: 2
2012.04.12 22:39:50     Struct_OpenCL__1 (EURUSD,H1)    Время GPU №0 = 172 ms
2012.04.12 22:39:50     Struct_OpenCL__1 (EURUSD,H1)    CPY/GPU №0= 3.988
2012.04.12 22:39:51     Struct_OpenCL__1 (EURUSD,H1)    Время GPU №1 = 406 ms
2012.04.12 22:39:51     Struct_OpenCL__1 (EURUSD,H1)    CPY/GPU №1= 1.690
 
MigVRN:

Essayez d'utiliser cette structure, cela n'a pas fonctionné pour moi (je soupçonne que la deuxième dimension doit avoir une taille fixe, c'est pourquoi cela n'a pas fonctionné pour moi) :

struct Array2dFloat
{
  float Column[];
  int LineCount(int lineCount)
  {
    int size = ArrayResize(Column,lineCount);
    ArrayInitialize(Column,0.0);
    return(size);
  }
};

Et, pour plus de commodité, une fonction comme celle-ci pour redimensionner les deux dimensions :

void ArrayResize2DArrayFloat(Array2dFloat &ArrayOfArray[], int columnCount,int lineCount)
{
  // разбивка по вертикали
  ArrayResize(ArrayOfArray,columnCount);
  // разбивка по горизонтали
  for(int i=0;i<columnCount;i++)
    ArrayOfArray[i].LineCount(lineCount);
}