Tal vez Renat pueda ver lo que se puede aprender de esto. Es muy posible que la nueva especificación ofrezca un mejor rendimiento también en MQL5, ¿no es así?
En cuanto a C#/C++, si es necesario, también podemos dejarlo. Lo principal es obtener el máximo rendimiento posible. ;)
Por el momento, me estoy guardando de reescribir el optimizador CL para Sharp esperando que la nueva MT4 proporcione al menos la versión 1.1 eventualmente. El lenguaje es el mismo, el compilador es el mismo y no hay obstáculos principales (realmente no necesito el soporte OpenCL en un probador de MT4, aunque seguiré haciéndolo si aparece). Si no se implementa - pensaré a la izquierda.
Para cada script proporcionaré un enlace al post donde fue publicado para que otros puedan encontrarlo rápidamente, ejecutar las pruebas y comparar los resultados si es necesario.
2013.11.2916:39:50 ParallelTester_00-01 x (EURUSD,H1) CLGetInfoInteger() returned 22013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) OpenCL init OK!
2013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) GPU time = 62 ms
2013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12802013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) Result on Gpu МахResult==1.34787 at 699 pass
2013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) CPU time = 14492 ms
2013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12802013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) Result on Cpu МахResult==1.34787 at 699 pass
2013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) CpuTime/GpuTime = 233.741935483871
P.D. He cambiado el tipo en el código del kernel en los parámetros de la función gpuEMA de__global a__local. Un poco más rápido, pero todavía más lento que en la CPU.
2013.12.01 14:29:46 qpu_Future_EMA-Rainbow (EURUSD,M1) Calculate 1000129 bars at CPU, time = 795 ms
2013.12.01 14:29:51 qpu_Future_EMA-Rainbow (EURUSD,M1) OpenCL: GPU device 'GeForce GTX 650 Ti BOOST' selected
2013.12.01 14:29:52 qpu_Future_EMA-Rainbow (EURUSD,M1) Calculate 1000129 bars at GPU (OpenCL), time = 1061 ms
P.D. Cambiado en el código del kernel en los parámetros de la función gpuEMA de__global a__local. Un poco más rápido, pero todavía más lento que en la CPU.
Mis resultados son similares. Esto se ha discutido durante mucho tiempo y es lógico - la tarea es demasiado simple, la transferencia de memoria hacia y desde la tarjeta de vídeo no vale la pena. La ventaja de la GPU aparece en tareas más complejas.
MetaDriver: Tengo resultados similares. Esto se ha discutido durante mucho tiempo, y tiene sentido - la tarea es demasiado simple, la transferencia de memoria hacia y desde la tarjeta de vídeo no vale la pena. La ventaja de la GPU aparece en tareas más complejas.
Ya veo, gracias, experimentaré con tareas más complejas.
Un ejemplo de uso de la aceleración de la GPU para el comercio (derivados).
Mark Joshi -famoso por sus libros sobre matemáticas financieras, en particular sobre el comercio de derivados y opciones- ha informado aquí sobre su trabajo:
Trasladó su trabajo de estilo OOP a la GPU CUDA. Lo empezó en 2010, luego tuvo un parón, y desde 2011 hasta el verano de 2014 llegó a la versión operativa 0.3. Logró una aceleración de 100X... 137X veces - y eso es en un algoritmo increíble, que es difícil.
El trabajo utilizaba la librería QuantLib en C++, que él mismo admite que tuvo que reelaborar en la línea de "OOP -> enfoque procedimental", para que todo funcionara en la GPU CUDA.
Escribe:
"He implementado la fijación de precios de Monte Carlo del IRD con el LMM en la GPU con mínimos cuadrados para las características del ejercicio temprano.
Puedes obtener el código en kooderive.sourceforge.net tanto en C++ como en CUDA. El documento se encuentra en ......
Utilicé un código completamente diferente para CUDA del que había utilizado anteriormente para C++. En esencia, trato los datos como concepto central y utilizo el código para actuar sobre los datos. El estilo es muy funcional. Me costó mucho trabajo porque mis anteriores implementaciones en C++ habían sido orientadas a objetos".
Tal vez Renat pueda ver lo que se puede aprender de esto. Es muy posible que la nueva especificación ofrezca un mejor rendimiento también en MQL5, ¿no es así?
En cuanto a C#/C++, si es necesario, también podemos dejarlo. Lo principal es obtener el máximo rendimiento posible. ;)
He probado algunos de los scripts de este hilo en una máquina de este tipo:
CPU-Z
CUDA-Z
Para cada script proporcionaré un enlace al post donde fue publicado para que otros puedan encontrarlo rápidamente, ejecutar las pruebas y comparar los resultados si es necesario.
Prueba 1
Prueba 2
Prueba 3
escala = 1000
Prueba 4
Prueba 5
Prueba 6
Prueba7
Prueba 8
También intenté probar el indicadorqpu_EMA-Rainbow de MetaDriver.
En la CPU, el resultado es a veces hasta 2 veces mejor. Aquí está el resultado:
//---
Volodya(MetaDriver), ¿me enseñas tus resultados?
P.D. He cambiado el tipo en el código del kernel en los parámetros de la función gpuEMA de__global a__local. Un poco más rápido, pero todavía más lento que en la CPU.
También intenté probar el indicadorqpu_EMA-Rainbow de MetaDriver.
En la CPU, el resultado es a veces hasta 2 veces mejor. Aquí está el resultado:
Volodya(MetaDriver), ¿me enseñas tus resultados?
P.D. Cambiado en el código del kernel en los parámetros de la función gpuEMA de__global a__local. Un poco más rápido, pero todavía más lento que en la CPU.
Tengo resultados similares. Esto se ha discutido durante mucho tiempo, y tiene sentido - la tarea es demasiado simple, la transferencia de memoria hacia y desde la tarjeta de vídeo no vale la pena. La ventaja de la GPU aparece en tareas más complejas.
Un ejemplo de uso de la aceleración de la GPU para el comercio (derivados).
Mark Joshi -famoso por sus libros sobre matemáticas financieras, en particular sobre el comercio de derivados y opciones- ha informado aquí sobre su trabajo:
http://ssrn.com/abstract=2388415
Trasladó su trabajo de estilo OOP a la GPU CUDA. Lo empezó en 2010, luego tuvo un parón, y desde 2011 hasta el verano de 2014 llegó a la versión operativa 0.3. Logró una aceleración de 100X... 137X veces - y eso es en un algoritmo increíble, que es difícil.
El trabajo utilizaba la librería QuantLib en C++, que él mismo admite que tuvo que reelaborar en la línea de "OOP -> enfoque procedimental", para que todo funcionara en la GPU CUDA.
Escribe:
"He implementado la fijación de precios de Monte Carlo del IRD con el LMM en la GPU con mínimos cuadrados para las características del ejercicio temprano.
Puedes obtener el código en kooderive.sourceforge.net tanto en C++ como en CUDA. El documento se encuentra en ......
Utilicé un código completamente diferente para CUDA del que había utilizado anteriormente para C++. En esencia, trato los datos como concepto central y utilizo el código para actuar sobre los datos. El estilo es muy funcional. Me costó mucho trabajo porque mis anteriores implementaciones en C++ habían sido orientadas a objetos".
Su proyecto es de código abierto:
http://sourceforge.net/projects/kooderive/