OpenCL: pruebas de implementación interna en MQL5 - página 52

 
joo:
¿Supongo que si queremos pasar un array bidimensional/multidimensional con datos a la GPU, podemos utilizar la representación de los datos en forma de estructura y pasar la estructura?

Lo probé a través de una estructura - ¡funcionó! Yo mismo nunca habría imaginado pasar arrays multidimensionales de esta manera :) Gracias.

He adjuntado un pequeño ejemplo, usando arrays bidimensionales - funciona bien. El ejemplo está un poco torcido - pero en general demuestra la posibilidad de tal perversión bastante bien :)

PS: Su UGA + OpenCL - no es suficiente emociones :) Como solíamos vivir - es terrible recordar...

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

PD: Tu UGA + OpenCL no tiene ninguna emoción :) Cómo vivíamos antes es espeluznante recordarlo...

Gracias, me alegro de que te guste. Y aprovechando la ocasión, me gustaría saludar y dar las gracias a Ilyas Sharapov(mql5).
 

¿CL_DEVICE_ANY y CL_DEVICE_GPU son obsoletos?

¿Son relevantes ahora CL_USE_ANY y CL_USE_GPU_ONLY?

 
joo:

¿CL_DEVICE_ANY y CL_DEVICE_GPU son obsoletos?

¿Son relevantes ahora CL_USE_ANY y CL_USE_GPU_ONLY?

Sí.
 
MetaDriver:
Sí.

Descubrí por el método del Prof. Tychkov un misterioso dispositivo 1 en mi ordenador, que es más rápido que CL_USE_ANY e incluso que CL_USE_GPU_ONLY.

¿Qué es? :O

 
joo:

He encontrado un misterioso dispositivo 1 en mi ordenador, utilizando el método del profesor Tychkov, que funciona más rápido que CL_USE_ANY e incluso más rápido que CL_USE_GPU_ONLY.

¿Qué es? :O

Estadísticas, por favor. Para todos los dispositivos. :)
 
MetaDriver:
Las estadísticas en el tablero. Para todos los dispositivos. :)
CL_USE_ANY

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) Diferencia de cálculo entre GPY y 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) Tiempo GPU = 141 ms

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


CL_USE_GPU_ONLY

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Diferencia de cálculo entre GPY y 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) Tiempo GPU = 125 ms

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


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Diferencia de cálculo entre GPY y 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) Tiempo GPU = 78 ms

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


Recomiendo a todo el mundo que pruebe lo mismo que yo, es muy posible que encuentre un dispositivo más rápido que la indefensa gráfica discreta. :D


PS. Sospecho que CL_USE_ANY y CL_USE_GPU_ONLY son lo mismo: el cálculo en la CPU, pero el dispositivo 1 es mi GPU. Es una confusión elemental en las constantes estándar.

 
joo:

Recomiendo a todo el mundo que trastee con él como hice yo, probablemente encontrará un dispositivo más rápido que la inútil gráfica discreta. :D

PS. Sospecho que CL_USE_ANY y CL_USE_GPU_ONLY son la misma cosa - es un cálculo de la CPU, pero el dispositivo 1 es mi GPU. Es una confusión elemental en las constantes estándar.

Esto es lo que he leído. ¡No estaba en la ayuda de la terminal! Se ha modificado el código para reflejar estos cambios. A ver qué consigues. Lo tengo así:

23:17:00 Tiempo de la EPD = 1155 ms
23:17:01 Total de dispositivos habilitados para OpenCL: 2
23:17:02 Tiempo de la GPU #0 = 249 ms
23:17:02 CPY/GPU #0 = 4.639
23:17:03 GPU #1 Tiempo = 265 ms
23:17:03 CPY/GPU #1= 4.358

GPU: Advanced Micro Devices, Inc. Turcos con OpenCL 1.1 (6 unidades, 725 MHz, 1024 Mb, versión CAL 1.4.1703 (VM))
CPU: Intel(R) Core(TM) i3-2310M original a 2,10 GHz con OpenCL 1.1 (4 unidades, 2095 MHz, 5990 Mb, versión 2.0)
Archivos adjuntos:
 
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:

Prueba a usar esta estructura, a mí no me funcionó (sospecho que la segunda dimensión tiene que ser de un tamaño fijo, por eso no me funcionó):

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

Y, por comodidad, una función como ésta para cambiar el tamaño de ambas dimensiones:

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