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

 
Mathemat:

Y el resultado de tu emulador OpenCL (tu segunda prueba) parece sospechosamente débil incluso en comparación con el mío (tuve unos 10 segundos en "GPU").

Contaba con la GPU de uso intensivo de la CPU: tenía más núcleos que la mía. Y el mío contaba con una CPU pura de 4 núcleos (dispositivo 1).
 
joo: Estabas calculando en una GPU de uso intensivo de la CPU, con más núcleos que la mía. Y el mío contaba con una CPU pura de 4 núcleos.

No, no es así, Andrei. imho, también contaba con una CPU pura con 2 núcleos. Hay tres argumentos para ello. La primera es simplemente férrea, la segunda y la tercera no son tan sólidas:

1. Sólo tengo un dispositivo OpenCL en mi sistema. Por otra parte, uno de esos discos tiene que ser el anfitrión de todos modos, es decir, la CPU desnuda. Lo es. No es una GPU, lo he comprobado en GPU Caps.

Así que sospecho que el dispositivo de la CPU que emula OpenCL podría ser cualquier piedra que soporte SSE2 y superior. No importa si tiene gráficos integrados o no. Incluyendo un Intel Core i5-750, por cierto.

2. La gráfica de mi CPU es Intel HD Graphics. Tiene 6 pipelines, pero 24 procesadores (¿hilos, moscas?). Cierra las especificaciones gráficas cerca de lo que tú y yo tenemos.

Dado que la frecuencia de la mosca es mucho más baja que la de la piedra, no puedo imaginar que 24 hilos de la GPU a una frecuencia más baja aceleren la ejecución en comparación con una CPU pura en más de 25 veces (y lo he tenido). Eso sólo deja una cosa: no es la GPU, es la emulación de la CPU de OpenCL. Puedo estar contando mal, pero no tengo datos más detallados sobre la arquitectura gráfica de las piedras de Intel.

Tus gráficos integrados son más o menos los mismos que los míos - Intel HD Graphics 2000 - pero algo está torcido ahí arriba. No sé cómo explicar un resultado tan extrañamente bajo de una piedra Intel Sandy Bridge casi de gama alta. La aceleración en él debe ser, según estimaciones aproximadas, del orden de 50.

3. Formalmente, los gráficos integrados de Intel tendrán soporte para OpenCL sólo en Ivy Bridge junto con los Intel HD Graphics 2500 y 4000 (ya tendrá 64 moscas rápidas que son mucho más rápidas que las integradas de AMD). Y ahora mismo parece que no existe.

Yo mismo aún no he podido averiguar por qué mi i3 no acelera los cálculos.

 
Mathemat:

...

Todavía no he descubierto por qué mi i3 no acelera mis cálculos.

¡Hurra! ¡Funciona!

2012.04.09 15:32:01 CPU del terminal: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.1 (4 unidades, 3092 MHz, 4008 Mb, versión 2.0)
2012.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Resultado en Cpu MachResult==3.64642 a 1594 pass
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tiempo de CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Resultado en Gpu MachResult==3.64642 a 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tiempo GPU = 93460 ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) ¡Inicio de OpenCL OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Cpu MachResult==3.82222 a 3357 pass
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo de CPU = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Gpu MachResult==3.82222 a 3357 pass
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contar inticadores = 16; Contar barras de historia = 50.000; Contar pasadas = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo GPU = 94787 ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) ¡Inicio de OpenCL OK!

 
Ashes:

¡Sí! ¡Funciona!

2012.04.09 15:32:01 CPU del terminal: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.1 (4 unidades, 3092 MHz, 4008 Mb, versión 2.0)
2012.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1)CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tiempo de CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Resultado en Gpu MachResult==3.64642 a 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1)Tiempo GPU = 93460 ms

Bueno, esto es mejor que 0.7 - al menos tiene algo de velocidad. ¿Y qué has hecho?

Aunque... Es muy débil. En mi Pentium G840, así:

2012.04.08 22:01:08 CPU del terminal: GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80GHz con OpenCL 1.2 (2 unidades, 2793 MHz, 8040 Mb, versión 2.0 (sse2))

2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Resultado en Cpu MachResult==4.04242 a 1775 pass
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Tiempo de CPU = 269461 ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Resultado en Gpu MachResult==4.04242 a 1775 pass
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Tiempo GPU = 10343 ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) ¡Inicio de OpenCL OK!

¿Le parece normal que una roca de bajo coste gane a una más potente de la misma empresa por casi un orden de magnitud? Tienen casi la misma arquitectura, y el conjunto de instrucciones del i3 al menos no es más pobre...

 
Mathemat:

Bueno, ya es mejor que el 0.7, al menos algo de velocidad. ¿Y qué has hecho?

Aunque... es muy débil. En mi Pentium G840 va así:

¿Qué te parece, es normal o no, que una piedra de presupuesto supere a otra más potente de la misma empresa por casi un orden de magnitud? Tienen casi la misma arquitectura, y el conjunto de instrucciones del i3 al menos no es más pobre...

Actualizamos el controlador de gráficos HD e instalamos el nuevo SDK de AMD OpenCL en inglés.

Mi sugerencia con respecto a la diferencia de rendimiento es la siguiente: diferentes versiones de OCL + inicialmente tienes la ventaja de la frecuencia de la GPU sobre la de la CPU (asumiendo que la parte de la GPU es la misma).

 
Ashes: En cuanto a la diferencia de rendimiento asumiré: diferentes versiones de OCL + inicialmente tienes ventaja de frecuencia de GPU sobre CPU (asumiendo que la parte de GPU es la misma).

No tengo ningún dispositivo GPU OpenCL, lee mi respuesta a joo. Y tampoco deberías tener uno (hablo de gráficos integrados). Todo va en emulación pura en los núcleos de la CPU. Sí, y la ventaja de la frecuencia es de 2 veces como máximo, mientras que el rendimiento difiere en un orden de magnitud. Esto es una discrepancia.

Segundo: la diferencia de versión no afecta al rendimiento de absolutamente todas las pruebas aquí expuestas. Y fue igual de rápido en 1.1 (en mi G840).

 
Mathemat:

No tengo ningún dispositivo GPU OpenCL, lee mi respuesta a joo. Y tampoco deberías tener uno (hablo de gráficos integrados). Todo se ejecuta en emulación pura en los núcleos de la CPU. Sí, y la ventaja de la frecuencia es de 2 veces como máximo, mientras que el rendimiento difiere en un orden de magnitud. Esto es una discrepancia.

Segundo: la diferencia de versión no afecta al rendimiento de absolutamente todas las pruebas aquí expuestas. Y fue igual de rápido en 1.1 (en mi G840).

Parece que tienes razón. Me alegré demasiado pronto. A juzgar por la carga de la CPU parece que la parte de la GPU del script está paralelizada a 4 núcleos/hilos (carga de la CPU 100%), mientras que la parte de la CPU se ejecuta prácticamente en un núcleo (25-30%).

Así que resulta que 4*0,7 (¿sobrecarga?) ~= 2,8 - GPU/CPU.

No está claro por qué hay tanta diferencia entre el tuyo y el mío, salvo que el SDK de AMD no utiliza todas las características del hardware "ajeno" en la versión x64 (tú tienes, según tengo entendido, x32). Versión del controlador de gráficos HD (Intel Corporation, 14.02.2012, 8.15.10.2653).

Comparación del G840 y el i3-2100 de intel.com:

PS. Ups, se me pasó el 8040Mb que tienes (es decir, x32/x64 está fuera).

 
Mathemat:

En segundo lugar, la diferencia de versión no afecta al rendimiento de absolutamente todas las pruebas publicadas aquí. Y con el 1.1 era igual de rápido (en mi G840).

OpenCL 1.2 dio una ganancia de alrededor del 10% a 1.1:

2012.04.10 09:41:19 Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)
2012.04.10 09:41:19 CPU del terminal: GenuineIntel Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz con OpenCL 1.1 (4 unidades, 3092 MHz, 4008 Mb, versión 2.0)

2012.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) ¡Inicio de OpenCL OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo GPU = 94365 ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Gpu MachResult==3.52408 en 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo de CPU = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Cpu MachResult==3.52408 en 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) ¡Inicio de OpenCL OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo GPU = 93756 ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Gpu MachResult==4.06735 a 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo de CPU = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Cpu MachResult==4.06735 a 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.58571184775076


2012.04.10 11:33:50 PM Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)
2012.04.10 11:33:50 CPU del terminal: CPU genuina Intel(R) Core(TM) i3-2100 a 3,10GHz con OpenCL 1.2 (4 unidades, 3092 MHz, 4008 Mb, versión 2.0 (sse2,avx))

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) ¡Inicio de OpenCL OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo GPU = 86923 ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Gpu MachResult==4.27665 a 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo de CPU = 246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Cpu MachResult==4.27665 a 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) ¡Inicio de OpenCL OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo GPU = 87610 ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contar inticadores = 16; Contar barras de historia = 50.000; Contar pasadas = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Gpu MachResult==4.43566 a 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tiempo de CPU = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Recuento de inticadores = 16; Recuento de barras históricas = 50.000; Recuento de pasadas = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado en Cpu MachResult==4.43566 a 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
¿Supongo que si queremos pasar un array 2D/multidimensional con datos a la GPU, podemos utilizar la representación de los datos como una estructura y pasar la estructura?
 
Ashes: OpenCL 1.2 dio una ganancia de alrededor del 10% a la 1.1:

Sí, sobre eso. De todos modos, la ganancia no es crítica, ni mucho menos.

La única diferencia es que el SDK de AMD no utiliza todas las características en el hardware "extranjero".

Yo también tenía esa hipótesis al principio.

Pero las pruebas de OpenCL de la CPU realizadas por la utilidad GPU Caps pasan todas de forma bastante decente, lo he comprobado. La herramienta está en el remolque si la necesitas. Sólo hay que girar las emulaciones de la CPU.

En algunas pruebas los fps en el i3 son varias veces superiores a los del G840 (en el 4D Quaternion Julia Set - unos 17 frente a 4-5).

Así que resulta que AMD hizo un buen trabajo aquí.

El problema está en el terminal que por alguna razón "entiende" el G840 pero "no entiende" las piedras Intel más frías con el SDK de AMD APP instalado. Envié un mensaje a servicedesk hace una semana, pero sin respuesta hasta ahora.

Archivos adjuntos:
Razón de la queja: