OpenCL: pruebas de implementación interna en MQL5 - página 47
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Algo no me funciona. La línea de inicialización está bien:
2012.04.01 05:52:01 Terminal CPU: GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.2 (2 units, 2793 MHz, 7912 Mb, version 2.0 (sse2))
(Puse OpenCL 1.1 de AMD, y 1.2 encima). Pero ahora la ejecución de la prueba da
2012.04.01 06:06:49 ParallelTester_00-01x (EURUSD,H1) OpenCL not found.
Antes de esta actualización Intel Graphics Driver para la versión más reciente, a continuación, tiró hacia abajo los controladores de AMD con la misma instalación, y luego establecer de nuevo.
¿Qué estoy haciendo mal ahora?
P.D. Pronto llegará Ivy y mostrará realmente lo que Intel puede hacer en gráficos integrados, junto con Intel HD 4000. Mira los gráficos.
¿Qué estoy haciendo mal ahora?
¿Qué estoy haciendo mal ahora?
En la nueva compilación, el parámetro de la función CLContextCreate ha cambiado, se utiliza int device en lugar de bool use_gpu.
con device>=0 se utiliza como número de dispositivo OpenCL en la secuencia
con device==OPENCL_DEVICE_ANY (-1) utilizado para seleccionar automáticamente entre todos los dispositivos disponibles
con device==OPENCL_DEVICE_GPU (-2) utilizado para seleccionar automáticamente entre todos los dispositivos GPU disponibles
¿Puedes mostrarme cómo hacer esto en el código? Llamo a CLContextCreate( OPENCL_DEVICE_ANY ) y obtengo el resultado al compilar:
'OPENCL_DEVICE_ANY' - undeclared identifier ParallelTester_00-01x.mq5 145 31
Construye 619.
Y segunda pregunta: ¿dónde puedo encontrar la última ayuda?
P.D. Funcionó en cuanto puse el argumento en -1. La constante OPENCL_DEVICE_ANY aún no ha sido declarada :)
Pero en futuras construcciones será CL_USE_ANY/CL_USE_GPU_ONLY
Decidí comprobar cómo funcionaría OpenCL en el i3-2120 (no es mi ordenador, no hay vídeo discreto en el sistema). Instalado AMD APP SDK, OpenCL-Z detectó todo. El terminal mostró una línea durante la inicialización:
2012.04.02 03:59:47 Terminal CPU: GenuineIntel Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz with OpenCL 1.1 (4 units, 3310 MHz, 8039 Mb, version 2.0)
Comprobado en el código de MetaDriver adjunto a este post y ligeramente modificado con los últimos cambios en la compilación 619 (ver las primeras pruebas aquí). Resultado:
2012.04.02 04:00:43 ParallelTester_00-01x (EURUSD,H1) CpuTime/GpuTime = 0.741385550890401
2012.04.02 04:00:43 ParallelTester_00-01x (EURUSD,H1) Result on Cpu МахResult==0.79567 at 734 pass
2012.04.02 04:00:43 ParallelTester_00-01x (EURUSD,H1) Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.04.02 04:00:43 ParallelTester_00-01x (EURUSD,H1) CPU time = 20483 ms
2012.04.02 04:00:22 ParallelTester_00-01x (EURUSD,H1) Result on Gpu МахResult==0.79567 at 734 pass
2012.04.02 04:00:22 ParallelTester_00-01x (EURUSD,H1) Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.04.02 04:00:22 ParallelTester_00-01x (EURUSD,H1) GPU time = 27628 ms
2012.04.02 03:59:55 ParallelTester_00-01x (EURUSD,H1) OpenCL init OK!
En tiempo de ejecución en la "GPU", los cuatro hilos del procesador estaban totalmente ocupados, al 100%.
¿Qué tengo que hacer para conseguir la aceleración? En un sistema basado en Pentium G840 (también sin vídeo discreto), era 25 veces más rápido:
P.D. He enviado un mensaje al Servicio de Atención al Cliente, pero me temo que el problema es más bien mío... Aparentemente he aprendido a instalar y desinstalar correctamente el SDK de AMD APP con los ojos cerrados, pero creo que no he llegado a todas las trampas. Aunque Intel OpenCL Runtime está instalado en mi sistema, todavía no se reconoce en el terminal como un dispositivo OpenCL.
P.P.S. Resulta que aquí hay algo más que desenterré(https://www.mql5.com/ru/forum/6042/page25):
Cenizas: 2012.03.05 17:43:16 CPU del terminal: CPU GenuineIntel(R) Core(TM) i3-2100 a 3,10GHz con OpenCL 1.1 (4 unidades, 3092 MHz, 4008 Mb, versión 2.0)
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) CpuTime/GpuTime = 0.734767766287369
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) Resultado en Cpu MachResult==1.27347 a 1125 pass
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD, M1) Recuento de inticadores = 16; Recuento de barras históricas = 144000; Recuento de pasadas = 1280
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD, M1) Tiempo de CPU = 21309 ms
2012.03.05 17:45:02 ParallelTester_00-01x (EURUSD,M1) Resultado en Gpu MachResult==1.27347 a 1125 pass
2012.03.05 17:45:02 ParallelTester_00-01x (EURUSD, M1) Recuento de inticadores = 16; Recuento de barras históricas = 144000; Recuento de pasadas = 1280
2012.03.05 17:45:02 ParallelTester_00-01x (EURUSD, M1) Tiempo GPU = 29001 ms
2012.03.05 17:44:33 ParallelTester_00-01x (EURUSD,M1) ¡Inicio de OpenCL OK!
:(((
¿Quizás tengo "granadas del sistema equivocado"? (Me refiero a la versión del SDK de AMD)
La GPU+OpenCL es una gran herramienta, después de todo.
2012.04.08 00:41:22 ParallelTester_00-02-(16x7x3) (USDJPY,M30) CpuTime/GpuTime = 728.1857142857143
2012.04.08 00:41:22 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Resultado en Cpu MachResult==3.78654 a 50 pass
2012.04.08 00:41:22 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Cuenta de inticadores = 16; Cuenta de barras históricas = 50.000; Cuenta de pasadas = 1280
2012.04.08 00:41:22 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Tiempo de CPU = 101946 ms
2012.04.08 00:39:40 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Resultado en Gpu MachResult==3.78654 a 50 pass
2012.04.08 00:39:40 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Cuenta de inticadores = 16; Cuenta de barras históricas = 50.000; Cuenta de pasadas = 1280
2012.04.08 00:39:40 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Tiempo GPU = 140 ms
La GPU+OpenCL es una gran herramienta, después de todo.
2012.04.08 00:39:40 ParallelTester_00-02-(16x7x3) (USDJPY,M30) Tiempo GPU = 140 ms
Propongo hacer las pruebas para que el tiempo de cálculo de la GPU no sea tan pequeño. De todos modos, 140 ms, imho, es un valor demasiado poco fiable, especialmente con los errores de medición de GetTickCount() en decenas de milisegundos.
MD, soy yo el que está celoso de ti.
Sugiero hacer las pruebas para que el tiempo de cálculo de la GPU no sea tan pequeño.
No tengo paciencia para esperar una CPU :) Cuanto más se adentra en el bosque, más fría es la GPU...
Igualmente. :)
Pero lo ejecutaré en 4096 abejas. La CPU lo contará en cinco minutos.