DirectX - pagina 2

 
Rorschach:

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

Trasferito allo shader. I primi 15 secondi il codice sorgente gira sulla cpu, poi la versione gpu gira.

"È necessario spostare l'array m_pixels[] da protected: a public: nel file Canvas.mqh prima di compilare"

Hmm. interessante. Risulta la stessa velocità. Probabilmente perché non ci sono conversioni in 3D.

Ho bisogno di provare con questo codice.


ZSY usa questo design in modo da non dover sistemare le librerie originali

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

SZY

Oh no! Scusa - ho fatto un errore nel codice e quindi non ho notato che la parte della CPU non stava funzionando affatto. Corretto.
Risultato - 2,5 volte più veloce attraverso la GPU.

Molto bello da vedere. Grazie mille per questa implementazione. L'ho solo modificato un po'.

File:
 
Rorschach:

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

Trasferito allo shader. I primi 15 secondi eseguono il codice sorgente su cpu, poi eseguono la versione su gpu.

È interessante fare lo stesso con questo codice e vedere come il guadagno di prestazioni cambia a seconda della complessità dei calcoli (aumento dei centri di gravità).

Questo codice non usa un array di seni per accelerare le cose, calcola solo il seno. E si può anche cambiare il numero di centri di gravità rotanti.

File:
Swirl2.mq5  5 kb
 
Nikolai Semko:

Ho bisogno di provare con questo codice.

Voglio fare il calcolo dell'indicatore completamente sulla gpu, ho bisogno di capire come inviare tali volumi di dati.

Nikolai Semko:

Il risultato è 2,5 volte più veloce via GPU.

Nikolai Semko:

Questo codice non usa la matrice del seno per velocizzarlo, calcola semplicemente il seno.

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

A proposito, uso questa formula nel mio shader, quindi l'accelerazione è ~10x.

NikolaiSemko:

È interessante fare lo stesso con questo codice e vedere come il guadagno di prestazioni cambia a seconda della complessità del calcolo (aumento dei centri di gravità).

Cercherò di farlo.

 
Rorschach:

Voglio fare il calcolo dell'indicatore completamente sulla gpu, ho bisogno di capire come trasferire tali volumi di dati.

A proposito, sto usando questa formula nello shader, quindi l'accelerazione è ~10x.

Cercherò di farne uno.

Penso che i risultati dovrebbero ispirare.

Sì, è davvero un'aggiunta molto bella a MQL5! Grazie al team di MQ per questo.

Semplicemente includendo la risorsa nel programma, le prestazioni dei calcoli matematici possono essere aumentate molte volte utilizzando le risorse della scheda video. Questo scarica la CPU stessa. Cioè, una super opzione per il mercato.

E se OpenCL richiede qualche azione da parte dell'utente per installare il software, le DirectX sono già installate in Windows di default. E la cosa più sorprendente - ho guardato quanto aumenta il file ex5 quando si usa DirectX e non ho visto alcun aumento nel file. Molto cool!!! Studiamo e usiamolo.

 
Nikolai Semko:

Penso che i risultati dovrebbero essere stimolanti.

Sì, è davvero un'aggiunta molto bella a MQL5! Grazie al team di MQ per questo.

Semplicemente includendo la risorsa nel programma, le prestazioni dei calcoli matematici possono essere aumentate molte volte utilizzando le risorse della scheda video. Questo scarica la CPU stessa. Cioè, una super opzione per il mercato.

E se OpenCL richiede qualche azione da parte dell'utente per installare il software, le DirectX sono già installate in Windows di default. E la cosa più sorprendente - ho guardato quanto aumenta il file ex5 quando si usa DirectX e non ho visto alcun aumento nel file. Molto cool!!! Studiamo e usiamolo.

A proposito, sì, la DX è più versatile dell'OCL. Stesse capacità + 3D. C'è una modalità CPU e non c'è bisogno di mettere un driver sulla CPU per questo.

 
Rorschach:

A proposito, uso questa formula nello shader, quindi l'accelerazione è ~10x.

Bisogna ancora contare 2,5 volte. La CPU è stata interessata dall'ottimizzazione, ma la gpu no.

Nikolai Semko:

È interessante fare lo stesso con questo codice e vedere come il guadagno di prestazioni cambia a seconda della complessità dei calcoli (aumento dei centri di gravità).

Questo codice non usa un array di seni per accelerare le cose, calcola solo il seno. E si può anche cambiare il numero di centri di gravità rotanti.

Ho abilitato l'ottimizzazione. Il codice è stato riorganizzato in 3 cicli per renderlo più facile da trasferire. Il limite è di 512 centri. Per impostazione predefinita, viene eseguito direttamente sulla gpu.

File:
pixel.zip  1 kb
 
Rorschach:

Devi ancora contare 2,5 volte. La CPU è stata interessata dall'ottimizzazione, ma la GPU no.

Ho abilitato l'ottimizzazione. Ho riscritto il codice a 3 cicli per renderlo più facile da trasportare. Il codice ha un limite di 512 centri. Per impostazione predefinita, viene eseguito direttamente sulla GPU.

Grazie mille!
2,5x solo su semplici calcoli è anche un ottimo risultato. Sul 3D, penso che il risultato sarà ancora più ripido.

 
Rorschach:

Devi ancora contare 2,5 volte. La CPU è stata interessata dall'ottimizzazione, ma la GPU no.

Ho abilitato l'ottimizzazione. Ho riorganizzato il codice in 3 cicli per renderlo più facile da trasportare. Lo abbiamo limitato a 512 centri. Per impostazione predefinita, viene eseguito direttamente sulla GPU.

Avete chiesto l'implementazione di OpenCl. Qualcosa è venuto fuori. Perdonate il codice, non ho avuto il tempo di pulirlo. La cosa principale è che funziona.

__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)]));
}
File:
Swirl2_OCL.mq5  14 kb
test_002.zip  1 kb
 
Serhii Shevchuk:

Avete chiesto un'implementazione di OpenCl. Ho qualcosa. Perdonate il codice, non ho avuto il tempo di ripassarlo. La cosa principale è che funziona.

WOW! Wow! Inaspettato per me, ad essere onesti. Un guadagno di più di 10x con la mia modesta scheda video.
Grazie mille!

 
Serhii Shevchuk:

Avete chiesto un'implementazione di OpenCl. Ho qualcosa. Perdonate il codice, non ho avuto il tempo di ripassarlo. La cosa principale è che funziona.

Grazie mille!

I vostri calcoli sono nel doppio? Allora il risultato è particolarmente impressionante.