DirectX - página 2

 
Rorschach:

https://www.mql5.com/ru/forum/227736

Transferido al shader. Los primeros 15 segundos se ejecuta el código fuente en la cpu, luego se ejecuta la versión gpu.

"Tienes que mover el array m_pixels[] de protected: a public: en el archivo Canvas.mqh antes de compilar"

Hmm. Interesante. Resulta la misma velocidad. Probablemente porque no hay conversiones en 3D.

Hay que probar con este código.


ZSY utiliza este diseño para no tener que arreglar las bibliotecas originales

#define protected public
#include <Canvas\Canvas.mqh>
#undef protected

SZY

¡Oh, no! Lo siento, cometí un error en el código y por eso no me di cuenta de que la parte de la CPU no estaba funcionando. Lo he corregido.
Resultado: 2,5 veces más rápido a través de la GPU.

Es muy agradable de ver. Muchas gracias por esta aplicación. Sólo lo he retocado un poco.

Archivos adjuntos:
 
Rorschach:

https://www.mql5.com/ru/forum/227736

Transferido al shader. Los primeros 15 segundos se ejecuta el código fuente en la cpu, luego se ejecuta la versión en la gpu.

Es interesante hacer lo mismo con este código y ver cómo cambia la ganancia de rendimiento en función de la complejidad de los cálculos (aumentando los centros de gravedad).

Este código no utiliza una matriz de senos para acelerar las cosas, sólo calcula el seno. Y también puedes cambiar el número de centros de gravedad giratorios.

Archivos adjuntos:
Swirl2.mq5  5 kb
 
Nikolai Semko:

Tengo que probar con este código.

Quiero hacer el cálculo del indicador completamente en la gpu, necesito averiguar cómo enviar tales volúmenes de datos.

Nikolai Semko:

El resultado es 2,5 veces más rápido a través de la GPU.

Nikolai Semko:

Este código no utiliza la matriz del seno para acelerarlo, simplemente calcula el seno.

XRGB(uchar(128+127*sin(d*45)),uchar(128+127*sin(d*70)),uchar(128+127*sin(d*25)));

Por cierto, utilizo esta fórmula en mi shader, por lo que el aumento de velocidad es ~10x.

NikolaiSemko:

Es interesante hacer lo mismo con este código y ver cómo cambia la ganancia de rendimiento en función de la complejidad del cálculo (aumentando los centros de gravedad).

Intentaré hacerlo.

 
Rorschach:

Quiero hacer el cálculo de indicadores completamente en la gpu, necesito averiguar cómo transferir tales volúmenes de datos.

Por cierto, estoy utilizando esta fórmula en el shader, por lo que la aceleración es ~10x.

Intentaré hacerlo.

Creo que los resultados deberían inspirar.

Sí, es un complemento muy interesante para MQL5. Gracias al equipo de MQ por ello.

Con sólo incluir el recurso en el programa, el rendimiento de los cálculos matemáticos puede aumentar muchas veces al utilizar los recursos de la tarjeta de vídeo. Esto descarga a la propia CPU. Es decir, una súper opción para el mercado.

Y si OpenCL requiere alguna acción por parte del usuario para instalar el software, DirectX ya está instalado en Windows por defecto. Y lo más sorprendente: miré cuánto aumenta el archivo ex5 al usar DirectX y no vi ningún aumento en el archivo en absoluto. ¡¡¡Muy chulo!!! Estudiémoslo y utilicémoslo.

 
Nikolai Semko:

Creo que los resultados deberían ser inspiradores.

Sí, ¡es una adición muy interesante a MQL5! Gracias al equipo de MQ por ello.

Con sólo incluir el recurso en el programa, el rendimiento de los cálculos matemáticos puede aumentar muchas veces al utilizar los recursos de la tarjeta de vídeo. Esto descarga a la propia CPU. Es decir, una súper opción para el mercado.

Y si OpenCL requiere alguna acción por parte del usuario para instalar el software, DirectX ya está instalado en Windows por defecto. Y lo más sorprendente: miré cuánto aumenta el archivo ex5 al usar DirectX y no vi ningún aumento en el archivo en absoluto. ¡¡¡Muy chulo!!! Estudiémoslo y utilicémoslo.

Por cierto, sí, el DX es más versátil que el OCL. Las mismas capacidades + 3D. Hay un modo de CPU y no es necesario poner un controlador en la CPU para ello.

 
Rorschach:

Por cierto, uso esta fórmula en el shader, por lo que la aceleración es ~10x.

Todavía hay que contar 2,5 veces. La CPU se vio afectada por la optimización, pero la gpu no.

Nikolai Semko:

Es interesante hacer lo mismo con este código y ver cómo cambia la ganancia de rendimiento en función de la complejidad de los cálculos (aumento de los centros de gravedad).

Este código no utiliza una matriz de senos para acelerar las cosas, sólo calcula el seno. Y también puedes cambiar el número de centros de gravedad giratorios.

He activado la optimización. El código se ha reorganizado en 3 ciclos para facilitar la transferencia. El límite es de 512 centros. Por defecto, se ejecuta directamente en la gpu.

Archivos adjuntos:
pixel.zip  1 kb
 
Rorschach:

Todavía tienes que contar 2,5 veces. La CPU se vio afectada por la optimización, pero la gpu no.

He activado la optimización. Reescribí el código a 3 ciclos para que sea más fácil de portar. Lo he limitado a 512 centros. Por defecto, se ejecuta directamente en la GPU.

¡Muchas gracias!
2,5 veces sólo en cálculos sencillos es también un resultado muy bueno. En el caso del 3D, creo que el resultado será aún más pronunciado.

 
Rorschach:

Todavía tienes que contar 2,5 veces. La CPU se vio afectada por la optimización, pero la GPU no.

He activado la optimización. He reorganizado el código en 3 bucles para que sea más fácil de portar. Lo hemos limitado a 512 Centros. Por defecto, se ejecuta directamente en la GPU.

Has pedido la implementación de OpenCl. Algo salió. Perdón por el código, no tuve tiempo de limpiarlo. Lo principal es que funciona.

__kernel void Func(int N, __global double *XP, __global double *YP, __global uchar *h, __global uint *buf)
{
   size_t X = get_global_id(0);
   size_t Width = get_global_size(0);
   size_t Y = get_global_id(1);
   
   float2 p;
   double D=0,S1=0,S2=0;
   
   for(int w=0;w<N;w++){ 
      p.x = XP[w]-X;
      p.y = YP[w]-Y;
      D = fast_length(p);
      S2+=D;
      if(w<N/2)
         S1+=D;
   }   
   //
   double d=S1/S2;
   buf[Y*Width+X] = upsample(upsample((uchar)0xFF,(uchar)h[(int)(d*11520)]),upsample((uchar)h[(int)(d*17920)],(uchar)h[(int)(d*6400)]));
}
Archivos adjuntos:
Swirl2_OCL.mq5  14 kb
test_002.zip  1 kb
 
Serhii Shevchuk:

Has pedido una implementación de OpenCl. Algo salió. Perdona el código, no he tenido tiempo de repasarlo. Lo principal es que funciona.

¡WOW! ¡Wow! Inesperado para mí, para ser honesto. Una ganancia de más de 10 veces con mi modesta tarjeta de vídeo.
¡Muchas gracias!

 
Serhii Shevchuk:

Has pedido una implementación de OpenCl. Tengo algo. Perdona el código, no he tenido tiempo de repasarlo. Lo principal es que funciona.

¡Muchas gracias!

¿Sus cálculos están en el doble? Entonces el resultado es particularmente impresionante.