DirectX - página 2

 
Rorschach:

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

Transferido para shader. Primeiro 15 segundos o código fonte roda na cpu, depois a versão gpu roda.

"Você precisa mover o array m_pixels[] de protegidos: para público: em Canvas.mqh file antes de compilar"

Hmm. Interessante. Acontece a mesma velocidade. Provavelmente porque não há conversões em 3D.

Precisa tentar com este código.


ZSY use este projeto para que você não tenha que consertar as bibliotecas originais

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

SZY

Oh não! Desculpe - cometeu um erro no código e, portanto, não percebeu que a parte da CPU não estava rodando de forma alguma. Corrigido.
Resultado - 2,5 vezes mais rápido através da GPU.

Muito bom de se ver. Muito obrigado por esta implementação. Só afinou um pouco.

Arquivos anexados:
 
Rorschach:

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

Transferido para shader. Os primeiros 15 segundos rodam o código fonte na cpu, depois roda a versão na gpu.

É interessante fazer o mesmo com este código e ver como o ganho de desempenho muda dependendo da complexidade dos cálculos (aumento dos centros de gravidade).

Este código não usa uma série de pecados para acelerar as coisas, ele apenas calcula o seno. E você também pode mudar o número de centros de gravidade rotativos.

Arquivos anexados:
Swirl2.mq5  5 kb
 
Nikolai Semko:

Preciso tentar com este código.

Quero fazer o cálculo de indicadores completamente em gpu, preciso descobrir como transferir tais volumes de dados.

Nikolai Semko:

O resultado é 2,5 vezes mais rápido via GPU.

Nikolai Semko:

Este código não usa a matriz senoidal para acelerá-la, ele simplesmente calcula seno.

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

A propósito, eu uso esta fórmula em meu shader, então a velocidade é de ~10x.

Nikolai Semko:

É interessante fazer o mesmo com este código e ver como o ganho de desempenho muda dependendo da complexidade do cálculo (aumento dos centros de gravidade).

Vou tentar fazer isso.

 
Rorschach:

Quero fazer o cálculo de indicadores completamente em gpu, preciso descobrir como transferir tais volumes de dados.

A propósito, estou usando esta fórmula no sombreador, então a aceleração é de ~10x.

Vou tentar fazer um.

Acho que os resultados devem inspirar.

Sim, é realmente uma adição muito legal à MQL5! Graças à equipe da MQ por isso.

Ao simplesmente incluir o recurso no programa, o desempenho dos cálculos matemáticos pode ser aumentado muitas vezes ao utilizar os recursos da placa de vídeo. Isto descarrega a própria CPU. Ou seja, uma super opção para o mercado.

E se o OpenCL exigir alguma ação por parte do usuário para instalar o software, o DirectX já está instalado no Windows por padrão. E o mais surpreendente - olhei o quanto o arquivo ex5 aumenta quando se usa DirectX e não vi nenhum aumento no arquivo. Muito legal!!! Vamos estudá-lo e usá-lo.

 
Nikolai Semko:

Acho que os resultados devem ser inspiradores.

Sim, é realmente uma adição muito legal à MQL5! Graças à equipe da MQ por isso.

Ao simplesmente incluir o recurso no programa, o desempenho dos cálculos matemáticos pode ser aumentado muitas vezes ao utilizar os recursos da placa de vídeo. Isto descarrega a própria CPU. Ou seja, uma super opção para o mercado.

E se o OpenCL exigir alguma ação por parte do usuário para instalar o software, o DirectX já está instalado no Windows por padrão. E o mais surpreendente - eu olhei o quanto o arquivo ex5 aumenta ao usar DirectX e não vi nenhum aumento no arquivo. Muito legal!!! Vamos estudá-lo e usá-lo.

A propósito, sim, o DX é mais versátil do que o OCL. As mesmas capacidades + 3D. Há um modo CPU e você não precisa colocar um driver na CPU para isso.

 
Rorschach:

A propósito, eu uso esta fórmula no sombreador, então a aceleração é de ~10x.

Ainda tem que contar 2,5 vezes. A CPU foi afetada pela otimização, mas a CPU não foi afetada.

Nikolai Semko:

É interessante fazer o mesmo com este código e ver como o ganho de desempenho muda dependendo da complexidade dos cálculos (aumento dos centros de gravidade).

Este código não usa uma série de pecados para acelerar as coisas, ele apenas calcula o seno. E você também pode mudar o número de centros de gravidade rotativos.

Eu possibilitei a otimização. O código foi rearranjado em 3 ciclos para facilitar a transferência. O limite é de 512 centros. Por padrão, ele é executado diretamente sobre a pólvora gpu.

Arquivos anexados:
pixel.zip  1 kb
 
Rorschach:

Você ainda tem que contar 2,5 vezes. A CPU foi afetada pela otimização, mas a GPU não foi afetada.

Eu possibilitei a otimização. Eu reescrevi o código para 3 ciclos para facilitar a porta. Limitei-o a 512 centros. Por padrão, ele funciona diretamente na GPU.

Muito obrigado!
2,5x apenas em cálculos simples é também um resultado muito bom. Em 3D, acho que o resultado será ainda mais acentuado.

 
Rorschach:

Você ainda tem que contar 2,5 vezes. A CPU foi afetada pela otimização, mas a GPU não foi.

Eu possibilitei a otimização. Reorganizei o código em 3 loops para facilitar a porta. Limitamos a 512 Centros. Por padrão, ele funciona diretamente na GPU.

Você pediu a implementação do OpenCl. Algo se revelou. Perdão pelo código, eu não tive tempo de limpá-lo. O principal é 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)]));
}
Arquivos anexados:
Swirl2_OCL.mq5  14 kb
test_002.zip  1 kb
 
Serhii Shevchuk:

Você pediu uma implementação OpenCl. Algo saiu. Perdoe o código, eu não tive tempo de escová-lo. O principal é que funciona.

COMO! Uau! Inesperado para mim, para ser honesto. Um ganho de mais de 10x com minha modesta placa de vídeo.
Muito obrigado!

 
Serhii Shevchuk:

Você pediu uma implementação OpenCl. Eu tenho algo. Perdoe o código, eu não tive tempo de escová-lo. O principal é que funciona.

Muito obrigado!

Seus cálculos estão no dobro? Então o resultado é particularmente impressionante.