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

 
Mathemat:

Bueno, por fin, lo estábamos esperando. Si está listo para experimentar, instale Intel OpenCL Runtime ( instrucciones del enlace).

Ejecuta el script sin cambiar nada en él y publica el log desde la pestaña "Expertos" tal y como hicieron tus compañeros anteriores. El script tardará unos 3 minutos en ejecutarse en tu gema, ten paciencia. Al mismo tiempo, descubriremos cómo se ejecuta OpenCL en la piedra más fría de Sandy Bridge.

Si no tienes paciencia o crees que está por encima de tus posibilidades, no pasa nada, no te ofendas.

P.D. El propósito de este script es ver lo que una CPU desnuda puede hacer sin ningún tipo de dragones de vídeo discretos. Sospecho que con el Intel Runtime correctamente insertado, este script tendrá una aceleración alrededor de 200 o incluso ligeramente superior.

Hay dudas de que Intel OpenCL Runtime esté instalado correctamente.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1347.164383561644

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==0.9316 at 10253 pass

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 4


 
casinonsk:

Hay dudas de que Intel OpenCL Runtime esté instalado correctamente.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

Probablemente has puesto el argumento de CLContextCreate() a algo distinto de cero. ¡Bueno, te pedí que no cambiaras nada! Ya conocemos las capacidades de su dragón de vídeo de dos cabezas. Pero parece que usted tiene incluso varios de ellos.

Según mis estimaciones aproximadas, en CLContextCreate(0) deberías tener cifras de tiempo de CPU = 180000 ms y de GPU = 900 ms (aproximadamente). Su primer tiempo de ejecución es extrañamente alto para una CPU así. ¿Quizás estaba sobrecargado con otras tareas?

¿Puedes ejecutar el script tal y como lo he adjuntado, sin cambiar nada en el código, ni un solo carácter?

P.D. Por supuesto, tal vez dispositivo = 0 no corresponde a la CPU sino a otra cosa. Bien, entonces experimenta (de 0 a 3). En teoría, el mayor tiempo de la GPU debería corresponder a la CPU desnuda, es decir, al host.

 
Mathemat:

No has puesto cero como argumento de CLContextCreate() sino otra cosa. ¡Bueno, te pedí que no cambiaras nada! Ya conocemos las capacidades de su dragón de vídeo de dos cabezas. Pero parece que tienes varios.

Según mi estimación aproximada, en CLContextCreate(0) deberías tener cifras del orden de tiempo de CPU = 180000 ms y tiempo de GPU = 900 ms (aproximadamente). Su primer tiempo de ejecución es extrañamente alto para una CPU así. ¿Quizás estaba sobrecargado con otras tareas?

¿Puedes ejecutar el script tal y como lo he adjuntado, sin cambiar nada, ni un solo carácter?

P.D. Por supuesto, tal vez dispositivo = 0 no corresponde a la CPU sino a otra cosa. Bien, entonces experimenta (de 0 a 3). En teoría, el mayor tiempo de la GPU debería corresponder a la CPU desnuda, es decir, al host.

¡No he cambiado los parámetros! Lo he hecho tal cual.

Según el vídeo, sí es 2x590.

Lo he vuelto a intentar con CLContextCreate(0)1,2,3, el resultado es el mismo que antes.

El problema puede ser conIntel OpenCL Runtime.

 
casinonsk:

¡No cambiaron los parámetros! Empezó tal cual.

Lo ejecuté de nuevo con CLContextCreate(0)1,2,3 el resultado es el mismo que antes.

¿Todos los resultados son iguales? No lo creo... Bueno, este script no puede tener un tiempo de GPU = 219 ms en una CPU desnuda. En el mejor de los casos, serían unos 800 ms, pero no unos 200 ms.

Este es mi resultado típico (tengo una CPU Pentium G840):

2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CpuTime/GpuTime = 88.40817091454272
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Result on Cpu МахResult==1.05116 at 7785 pass
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CPU time = 235873 ms
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Result on Gpu МахResult==1.05116 at 7785 pass
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    GPU time = 2668 ms
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    OpenCL init OK!
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    CLGetInfoInteger() returned 1

Bien, sigamos adelante.

 
Mathemat:

¿Son todos los resultados iguales? No lo creo... Bueno, este script no puede tener un tiempo de GPU = 219 ms en una CPU desnuda. En el mejor de los casos será de unos 800 ms, pero no de unos 200 ms.

Vale, olvídalo.

Acabo de probar de nuevo conCLContextCreate(0)

 2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1265.405982905983

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==1.48772 at 2051 pass

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 296105 ms

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==1.48772 at 2051 pass

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 234 ms

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 5


 
casinonsk: Acabo de probar de nuevo conCLContextCreate(0)

Evidentemente, se trata de una tarjeta discreta, no de la CPU: esos aumentos de velocidad en la emulación son difícilmente posibles. Y el número de dispositivos que tienes ya es de 5, es escalofriante.

Si no te importa ejecutar un código ligeramente modificado, por favor, y publicar el resultado aquí. En el código, los cálculos para los distintos dispositivos OpenCL se ponen en un bucle (deberían ser rápidos) mientras que los cálculos en x86, el más largo, se ejecutan sólo una vez. Será largo, pero el script en sí se ejecuta una vez.

Me doy cuenta de que ya te estoy aburriendo. Pero en cualquier caso sería una buena información para el equipo de soporte.
Archivos adjuntos:
 

Tengo un resultado interesante )) Lo tengo, no es el número total de dispositivos, es el número actual

2012.04.22 22:02:51     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0

Aunque los cálculos están en proceso, los publicaré cuando estén listos.

Por cierto, ni CLGetInfoInteger() ni CL_DEVICE_COUNT están presentes en la ayuda.

PS. resultado

2012.04.22 22:02:51     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        GPU time = 11357 ms
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 1
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        GPU time = 998 ms
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        CPU time = 428706 ms
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Cpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        CpuTime/GpuTime = 429.565130260521
 
fyords: Por cierto, no hay CLGetInfoInteger() o CL_DEVICE_COUNT en la ayuda.

PS. resultado

Actualice su ayuda, la suya está obsoleta.

2. Usted tiene

2012.03.04 22:27:16     Terminal        GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 295.73)
2012.03.04 22:27:16     Terminal        CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2812 MHz, 2048 Mb, version 2.0)

Es muy probable que el primer número, 11357 ms, se refiera al host (CPU desnuda), y el segundo, 998 ms, a la tarjeta gráfica. El orden de ganancia en el host, a grandes rasgos, es bastante coherente con la aceleración conseguida en AMD OpenCL (unas 38 veces en un Athlon II de 4 núcleos). Aunque en realidad no es mucho, debería ser más, cerca de 50-60. Es muy posible que su memoria sea muy lenta.

La cifra CpuTime/GpuTime, por supuesto, sólo se calcula para el último dispositivo calculado.

 
Mathemat:

1. actualizar la ayuda, la suya está claramente desfasada.

2. La cifra CpuTime/GpuTime, por supuesto, sólo se calcula para el último dispositivo calculado.

1. actualizado manualmente todo está ahí, gracias, pero ¿no se actualiza la ayuda junto con el terminal y el meta-editor?

2. Sí, pero aún así, bonito ).

 
papaklass:

Con tu hardware está casi claro, sólo tienes el host siendo un dispositivo OpenCL. Por otra parte, es extraño que haya obtenido un resultado tan alto antes (página 51):

2012.04.08 13:28:01     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       OpenCL init OK!
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       GPU time = 7145 ms
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Gpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CPU time = 422888 ms
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Cpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CpuTime/GpuTime = 59.18656403079076

Por alguna razón no puedo sacar el cursor de la inserción del código. Y si cito a alguien, la misma tontería. ¿Es un error del foro?

Es más probable que sea un error del motor del foro, pero no siempre es así. Suelo hacer clic en la barra de HTML e insertar manualmente un par de letras después de la última etiqueta. Luego vuelvo al modo de edición visual del post.