OpenCL: test di implementazione interna in MQL5 - pagina 52

 
joo:
Immagino che se vogliamo passare un array bidimensionale/multidimensionale con dati alla GPU, possiamo usare la rappresentazione dei dati come una struttura e passare la struttura?

Ho provato attraverso una struttura - ha funzionato! Non avrei mai immaginato di passare array multidimensionali in questo modo :) Grazie!

Ho allegato un piccolo esempio, usando array bidimensionali - funziona bene. L'esempio è un po' storto - ma in generale dimostra abbastanza bene la possibilità di una tale perversione :)

PS: Il tuo UGA + OpenCL - è solo senza emozioni :) Come vivevamo prima - è inquietante da ricordare...

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

PS: Il tuo UGA + OpenCL non è proprio un'emozione :) Come vivevamo prima è inquietante da ricordare...

Grazie, sono contento che vi piaccia. E cogliendo l'occasione, vorrei dire Ciao e molti ringraziamenti a Ilyas Sharapov(mql5).
 

CL_DEVICE_ANY e CL_DEVICE_GPU sono obsoleti?

CL_USE_ANY e CL_USE_GPU_ONLY sono rilevanti ora?

 
joo:

CL_DEVICE_ANY e CL_DEVICE_GPU sono obsoleti?

CL_USE_ANY e CL_USE_GPU_ONLY sono rilevanti ora?

Sì.
 
MetaDriver:
Sì.

Ho scoperto con il metodo del Prof. Tychkov un misterioso dispositivo 1 nel mio computer, che è più veloce di CL_USE_ANY e anche più veloce di CL_USE_GPU_ONLY.

Che cos'è? :O

 
joo:

Ho trovato un misterioso dispositivo 1 nel mio computer, usando il metodo del professor Tychkov, che funziona più velocemente di CL_USE_ANY e anche più velocemente di CL_USE_GPU_ONLY.

Che cos'è? :O

Statistiche, per favore. Per tutti i dispositivi. :)
 
MetaDriver:
Statistiche sul tabellone. Per tutti i dispositivi. :)
CL_USE_ANY

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) Differenza di calcolo tra GPY e 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) Tempo GPU = 141 ms

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


CL_USE_GPU_ONLY

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Differenza di calcolo tra GPY e 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) Tempo GPU = 125 ms

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


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Differenza di calcolo tra GPY e 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) Tempo GPU= 78 ms

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


Raccomando a tutti di provare come ho fatto io, è molto probabile che troverete un dispositivo più veloce dell'impotente grafica discreta. :D


PS. Ho il sospetto che CL_USE_ANY e CL_USE_GPU_ONLY siano la stessa cosa - calcolo sulla CPU, ma il dispositivo 1 è la mia GPU. È una confusione elementare nelle costanti standard.

 
joo:

Consiglio a tutti di pasticciare come ho fatto io, probabilmente troverete un dispositivo più veloce dell'inutile grafica discreta. :D

PS. Ho il sospetto che CL_USE_ANY e CL_USE_GPU_ONLY siano la stessa cosa: calcolo della CPU, ma il dispositivo 1 è la mia GPU. È una confusione elementare nelle costanti standard.

Ecco cosa ho letto! Non era nell'aiuto del terminale! Ho modificato il codice per riflettere questi cambiamenti. Vedi cosa ottieni. Ho capito così:

23:17:00 Tempo SPU = 1155 ms
23:17:01 Totale dispositivi abilitati OpenCL: 2
23:17:02 Tempo GPU #0 = 249 ms
23:17:02 CPY/GPU #0 = 4.639
23:17:03 GPU #1 Tempo = 265 ms
23:17:03 CPY/GPU #1= 4.358

GPU: Advanced Micro Devices, Inc. Turks con OpenCL 1.1 (6 unità, 725 MHz, 1024 Mb, versione CAL 1.4.1703 (VM))
CPU: GenuineIntel Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz con OpenCL 1.1 (4 unità, 2095 MHz, 5990 Mb, versione 2.0)
File:
 
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:

Provate a usare questa struttura, non ha funzionato per me (sospetto che la seconda dimensione debba essere una dimensione fissa, ecco perché non ha funzionato per me):

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

E, per comodità, una funzione come questa per ridimensionare entrambe le dimensioni:

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