http://www.ixbt.com/video3/rad2.shtml- Es mejor utilizar librerías optimizadas para big data que ponerse "creativo" escribiendo programas en OpenCL (no lo descarto). Se puede utilizar un sistema híbrido, en el que las cantidades pequeñas se manejan conOpenCL y las grandescon bibliotecas optimizadas. Es posible que tenga que convertir la biblioteca a un lenguaje de programación específico y crear condiciones para la inclusión de esta biblioteca. Si esto se puede llevar a cabo, daría un resultado impresionante y, en consecuencia, aceleraría la operación muchas veces. Nota para .....
GKS: Puede ser necesario convertir las bibliotecas a un lenguaje de programación específico y crear condiciones para habilitar esta biblioteca. Si se puede aplicar esto, se obtendrá un resultado impresionante y, en consecuencia, la operación se acelerará muchas veces.
No es tecnológico que los desarrolladores ajusten el compilador específicamente para un producto extremadamente específico, aunque único.
Y hasta ahora no veo ninguna tarea de los comerciantes que requiera un tamaño tan grande de matrices multiplicadas.
En los próximos días se publicará una actualización de la plataforma MetaTrader 5. Una vez publicada la actualización, habrá un comunicado de prensa adicional con la lista final de cambios y los números de compilación. Se prevén los siguientes cambios:
Terminal de cliente MetaTrader 5 build 648
MetaTester: Se ha añadido soporte para el uso de programas OpenCL en los agentes de prueba.
Los que entienden de OpenCL, preparan una tarea-prueba bajo Cloud+OpenCL. Perspectivas matemáticas muy interesantes.
Controlador de vídeo recientemente actualizado (NVIDIA301.42).
Hice una de las antiguas pruebas por interés (ParallelTester_00-01x) y no podía creer lo que veía.
En la página 24 estaba haciendo pruebas y había 29, luego puse la memoria en modo 2 canales y pasó a 39.
Ahora es ~306.
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) GPU time = 141 ms
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CPU time = 43259 ms
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 306.8014184397163
fyords, ¿cómo has hecho para que los eventos anteriores aparezcan más arriba en el registro?
Y en general es genial, te entiendo. Yo también me alegré cuando compré mi HD 4870 a precio de saldo y vi su potencia.
Una pequeña recomendación: elegir los parámetros de manera que el tiempo de ejecución de la GPU sea comparable a 1 segundo. Entonces, la relación de tiempo también será más precisa. El error medio de la función GteTickCount() no es inferior a decenas de milisegundos. Así que podrías conseguir fácilmente 120 ms o 170 ms en la GPU. Y el valor de la aceleración depende en gran medida de esto.
He afinado un poco este script para que funcione en todos los dispositivos disponibles (mira de abajo a arriba: 1) CPU en plataforma Intel, luego 2) HD 4870 en plataforma AMD, y 3) CPU en plataforma AMD):
2012.05.3115:48:35 OpenCL CPU: GenuineIntel Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version2.0 (sse2))
2012.05.3115:48:35 OpenCL GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.05.3115:48:35 OpenCL CPU: Intel(R) Corporation Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version1.1)
Los resultados del guión son de abajo hacia arriba.
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 24.769437551695622012.06.0101:06:12 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 9672 ms
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 22012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 204.76068376068382012.06.0101:06:02 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 1170 ms
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 12012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ------------
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CpuTime/GpuTime = 77.555843314988662012.06.0101:06:01 ParallelTester_00-01 x_new_cycle (EURUSD,H1) GPU time = 3089 ms
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Device number = 02012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) -------------------------
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Result on Cpu МахResult==0.87527 at 10902 pass
2012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:57 ParallelTester_00-01 x_new_cycle (EURUSD,H1) CPU time = 239570 ms
2012.06.0101:01:58 ParallelTester_00-01 x_new_cycle (EURUSD,H1) ========================================
Con este último parámetro, que es 10 veces menor, mi tarjeta no es tan rápida como la suya. Probablemente no tenga tiempo para hacer un overclock adecuado :)
fyords, ¿cómo has hecho para que los eventos anteriores aparezcan más arriba en el registro?
En los informes, botón derecho "Ver", nueva ventana botón "Consulta" y el registro se construye por el tiempo correctamente, y es más conveniente para leer (para mí).
En cuanto al script, gracias, lo probaré mañana, es una larga espera para su realización, sobre todo con Count pass = 12800.
Por ahora aquí hay un viejo script con Count pass = 12800
2012.06.0101:05:53 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) GPU time = 999 ms
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CPU time = 434167 ms
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 434.6016016016016
Renat: Para información: GetTickCount tiene un error mucho menor que 16 ms, no estás usando Windows 95.
En realidad, el error no es mucho menor. Sí, cerca de ella, pero hay valores atípicos respecto a la media, que se agrupan en torno a 32, 48 e incluso más. Son raros, no discuto, se pueden ignorar.
Pero cuando una persona ejecuta un script, no está necesariamente haciendo nada en el ordenador. Y el sistema también puede ejecutar sus propias tareas, lo que puede ralentizar la ejecución.
Técnicamente, la desviación estándar es realmente pequeña, en torno a 6-7, y depende débilmente del propio tiempo de ejecución. Pero refleja mal la verdadera variación. Aquí hay un histograma de los tiempos registrados al realizar los mismos cálculos:
La distancia entre barras adyacentes es de 16ms. Las columnas más pequeñas son bastante probables, y se diferencian entre sí por tan sólo 32ms. Si la columna del medio ("tiempo de ejecución real") es de 140 milisegundos, la de la izquierda es de 124 ms y la de la derecha de 156 ms.
Por lo tanto, la variación real cuando se divide por el tiempo de ejecución de la GPU baja puede ser bastante grande:
20 segundos/124 ms ~ 161
20 segundos/156 ms ~ 128.
La "verdadera proporción" de los tiempos de ejecución corresponde aproximadamente a la barra más grande:
20 seg/140ms ~ 143.
Si tomamos un mayor tiempo de ejecución en la GPU, el impacto de este error será mucho menor. Por lo menos que sean 500ms.
Guión para la simulación:
#define BIG 10000000#define SMALL 1000voidOnStart( )
{
Print( "Script started..." );
double k;
int times[ SMALL ];
MathSrand( TimeCurrent( ) );
for( int ii = 0; ii < SMALL; ii ++ )
{
Comment( ii );
int st = GetTickCount( );
for( int i = 0; i < BIG; i ++ ) k = sin( i );
int timeTotal = GetTickCount( ) - st;
times[ ii ] = timeTotal;
}
int h = FileOpen( "gtc_times.txt", FILE_WRITE, "\r\n" );
for( int ii = 0; ii < SMALL; ii ++ )
FileWrite( h, times[ ii ] );
FileClose( h );
Print("Script unloaded");
}
//+------------------------------------------------------------------+
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
http://www.ixbt.com/video3/rad2.shtml- Es mejor utilizar librerías optimizadas para big data que ponerse "creativo" escribiendo programas en OpenCL (no lo descarto). Se puede utilizar un sistema híbrido, en el que las cantidades pequeñas se manejan conOpenCL y las grandescon bibliotecas optimizadas. Es posible que tenga que convertir la biblioteca a un lenguaje de programación específico y crear condiciones para la inclusión de esta biblioteca. Si esto se puede llevar a cabo, daría un resultado impresionante y, en consecuencia, aceleraría la operación muchas veces. Nota para .....
P.D Esto puede ser un nuevo hilo en el foro
No es tecnológico que los desarrolladores ajusten el compilador específicamente para un producto extremadamente específico, aunque único.
Y hasta ahora no veo ninguna tarea de los comerciantes que requiera un tamaño tan grande de matrices multiplicadas.
Anuncio de la actualización de MetaTrader 5
En los próximos días se publicará una actualización de la plataforma MetaTrader 5. Una vez publicada la actualización, habrá un comunicado de prensa adicional con la lista final de cambios y los números de compilación. Se prevén los siguientes cambios:
Terminal de cliente MetaTrader 5 build 648
MetaTester: Se ha añadido soporte para el uso de programas OpenCL en los agentes de prueba.
Entendiendo OpenCL, prepara una tarea-prueba para Cloud+OpenCL. Perspectivas matemáticas muy interesantes.
Eso es más para MetaDriver........................
Controlador de vídeo recientemente actualizado (NVIDIA301.42).
Hice una de las antiguas pruebas por interés (ParallelTester_00-01x) y no podía creer lo que veía.
En la página 24 estaba haciendo pruebas y había 29, luego puse la memoria en modo 2 canales y pasó a 39.
Ahora es ~306.
Increíble. Parece que NVIDIA ha ajustado los drivers humanamente.fyords, ¿cómo has hecho para que los eventos anteriores aparezcan más arriba en el registro?
Y en general es genial, te entiendo. Yo también me alegré cuando compré mi HD 4870 a precio de saldo y vi su potencia.
Una pequeña recomendación: elegir los parámetros de manera que el tiempo de ejecución de la GPU sea comparable a 1 segundo. Entonces, la relación de tiempo también será más precisa. El error medio de la función GteTickCount() no es inferior a decenas de milisegundos. Así que podrías conseguir fácilmente 120 ms o 170 ms en la GPU. Y el valor de la aceleración depende en gran medida de esto.
He afinado un poco este script para que funcione en todos los dispositivos disponibles (mira de abajo a arriba: 1) CPU en plataforma Intel, luego 2) HD 4870 en plataforma AMD, y 3) CPU en plataforma AMD):
Los resultados del guión son de abajo hacia arriba.
Con este último parámetro, que es 10 veces menor, mi tarjeta no es tan rápida como la suya. Probablemente no tenga tiempo para hacer un overclock adecuado :)fyords, ¿cómo has hecho para que los eventos anteriores aparezcan más arriba en el registro?
En los informes, botón derecho "Ver", nueva ventana botón "Consulta" y el registro se construye por el tiempo correctamente, y es más conveniente para leer (para mí).
En cuanto al script, gracias, lo probaré mañana, es una larga espera para su realización, sobre todo con Count pass = 12800.
Por ahora aquí hay un viejo script con Count pass = 12800
La ganancia ha sido aún mayor.En realidad, el error no es mucho menor. Sí, cerca de ella, pero hay valores atípicos respecto a la media, que se agrupan en torno a 32, 48 e incluso más. Son raros, no discuto, se pueden ignorar.
Pero cuando una persona ejecuta un script, no está necesariamente haciendo nada en el ordenador. Y el sistema también puede ejecutar sus propias tareas, lo que puede ralentizar la ejecución.
Técnicamente, la desviación estándar es realmente pequeña, en torno a 6-7, y depende débilmente del propio tiempo de ejecución. Pero refleja mal la verdadera variación. Aquí hay un histograma de los tiempos registrados al realizar los mismos cálculos:
La distancia entre barras adyacentes es de 16ms. Las columnas más pequeñas son bastante probables, y se diferencian entre sí por tan sólo 32ms. Si la columna del medio ("tiempo de ejecución real") es de 140 milisegundos, la de la izquierda es de 124 ms y la de la derecha de 156 ms.
Por lo tanto, la variación real cuando se divide por el tiempo de ejecución de la GPU baja puede ser bastante grande:
20 segundos/124 ms ~ 161
20 segundos/156 ms ~ 128.
La "verdadera proporción" de los tiempos de ejecución corresponde aproximadamente a la barra más grande:
20 seg/140ms ~ 143.
Si tomamos un mayor tiempo de ejecución en la GPU, el impacto de este error será mucho menor. Por lo menos que sean 500ms.
Guión para la simulación: