English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Come installare e utilizzare OpenCL per i calcoli

Come installare e utilizzare OpenCL per i calcoli

MetaTrader 5Esempi | 11 gennaio 2022, 17:01
390 0
MetaQuotes
MetaQuotes

OpenCL nel terminale client MetaTrader 5

È passato più di un anno da quando è diventato possibile scrivere programmi per OpenCL in MQL5. Le voci di qualsiasi dispositivo OpenCL trovato possono ora essere visualizzate nel Journal al lancio del terminale MetaTrader 5, come mostrato di seguito.

Voci del Journal nel terminale MetaTrader 5 relative ai dispositivi OpenCL trovati

In questo caso, il terminale MetaTrader 5 ha rilevato 4 metodi disponibili per avviare OpenCL direttamente da un programma MQL5: una scheda grafica di NVIDIA (OpenCL 1.1) e una di AMD (OpenCL 1.2), oltre a due utilizzi della CPU Intel Core-i7 opzioni, a seconda del driver installato. Se il tuo computer dispone già di un dispositivo OpenCL versione 1.1 o successiva, puoi tranquillamente saltare la parte della descrizione e procedere direttamente al Confronto delle prestazioni per essere in grado di vedere di persona il miglioramento delle prestazioni per le attività che consentono il calcolo parallelo.


OpenCL è affascinante!

Tuttavia, non molti utenti hanno approfittato dell'utilizzo del calcolo parallelo nei loro Expert Advisor, indicatori o script poiché non sono consapevoli delle nuove possibilità offerte e non dispongono delle conoscenze necessarie.

Il fatto è che l'avvio di qualsiasi programma MQL5 che utilizza OpenCL richiede l'installazione del software appropriato. Ecco perché molti utenti semplicemente non erano in grado di eseguire lo script set di Mandelbrot, così come molti altri programmi disponibili nel forum MQL5.community.

In questo articolo, ti mostreremo come installare OpenCL sul tuo computer in modo che tu possa vedere in prima persona i vantaggi dell'utilizzo del calcolo parallelo in MQL5. Non prenderemo in considerazione i dettagli della scrittura di programmi per OpenCL in MQL5 poiché il sito Web presenta già due ottimi articoli che trattano questo argomento:


Cos'è OpenCL?

OpenCL è lo standard aperto per la programmazione parallela sviluppato dal consorzio Khronos Group nel 2008. Questo standard consente di sviluppare applicazioni che potrebbero essere eseguite in parallelo su GPUs o CPUs con architettura diversa in un sistema eterogeneo.

In altre parole, OpenCL consente di utilizzare tutti i core della CPU o l'enorme capacità di calcolo della GPU durante il calcolo di un'attività, riducendo così i tempi di esecuzione del programma. L'uso di OpenCL è quindi molto utile quando si ha a che fare con attività associate a calcoli laboriosi e che consumano risorse.

Ad esempio, parlando di MQL5, il guadagno di prestazioni può essere molto gratificante quando si gestisce un determinato script (indicatore o Expert Advisor) che esegue un'analisi complessa e lunga dei dati storici mediante diversi simboli e intervalli di tempo (va qui notato che un programma MQL5 che è destinato a utilizzare l'esecuzione parallela dovrebbe essere scritto in un modo speciale utilizzando OpenCL API).


Supporto OpenCL

Il supporto per OpenCL in MQL5 è fornito a partire dalla versione 1.1 rilasciata nel giugno 2010. Quindi, per utilizzare il calcolo parallelo, è necessario disporre di un software e di un hardware relativamente nuovi appropriati per lo standard.

Detto questo, va notato che per iniziare a utilizzare OpenCL non importa se hai o meno una scheda grafica sul tuo PC: una CPU basterà. Ciò significa che OpenCL è disponibile praticamente per ogni utente che desidera ridurre il tempo di esecuzione dei propri programmi MQL5.

Le CPU sono decisamente molto indietro rispetto ai loro rivali grafici in termini di velocità di elaborazione distribuita. Tuttavia, una buona CPU multi-core dovrebbe andare bene per ottenere un aumento significativo della velocità. Ma torniamo all'argomento della nostra discussione.

Come già accennato in precedenza, puoi utilizzare sia le schede grafiche che le CPU per il calcolo parallelo. Ci sono tre principali produttori di dispositivi rilevanti sul mercato: Intel, AMD e NVIDIA. La tabella seguente fornisce informazioni sui dispositivi e sui sistemi operativi che supportano OpenCL 1.1 per ciascuno dei tre produttori:

Produttore Dispositivi Sistemi operativi
Intel CPU:

Core i3, i5, i7 - per PC;
Xeon - per server;
Xeon Phi - per coprocessori (per approfondire).
Windows 7, 8;
openSUSE;
Cappello rosso.
AMD Schede grafiche:

AMD Radeon HD Graphics dalla serie 6400 in su;
ATI Radeon HD Graphics dalla serie 5400 in su;
Grafica ATI FirePro serie A300, S, W, V;
ATI Mobility Radeon HD dalla serie 5400 in su;
ATI FirePro M7820 M5800 (leggi di più).

CPU basate su architettura K8 e successive:

Opteron, Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron, Turion 64, Turion 64 X2, Phenom, Phenom II (leggi di più).

APU (processore ibrido CPU/GPU):

CPU serie A, C, E, E2, G, R.
Windows Vista SP2, 7, 8;
openSUSE 11.x;
Ubuntu 11.04;
Red Hat 6.x.
NVidia GPUs (with CUDA Architecture):

Tesla, Quadro, GeForce (leggi di più).
Windows XP, Vista, 7, 8
Linux e Mac OS
(leggi di più)
Inoltre, il sito Web ufficiale dello sviluppatore, il Khronos Group, fornisce informazioni complete sull'hardware e sul software richiesti per ciascuna versione di OpenCL.

Assicurati di avere almeno un dispositivo (CPU o GPU) disponibile sul tuo computer e controlla se quel dispositivo, così come il sistema operativo installato, supporta OpenCL 1.1. Se questi requisiti sono soddisfatti, puoi tranquillamente passare alla sezione successiva che descrive come configurare OpenCL, a seconda del produttore dell'hardware.

 

Configurazione di OpenCL

Se hai installato l'hardware e il software necessari sul tuo computer, tutto ciò che devi fare per iniziare a utilizzare il calcolo parallelo in MetaTrader 5 è configurare OpenCL per uno dei tuoi dispositivi.

La procedura di configurazione di OpenCL varia a seconda dell'hardware che si intende utilizzare: GPU o CPU. Se il terminale MetaTrader 5 ha trovato una scheda grafica con supporto OpenCL, devi solo aggiornare i suoi driver all'ultima versione.

Ti verrà richiesto di installare un SDK per la CPU solo se il tuo computer non ha la scheda grafica appropriata.

Importante: Se hai già una scheda grafica con supporto OpenCL installato, non è necessario installare una versione software per l'emulazione OpenCL sulla CPU!

A meno che non sia richiesto per esperimenti in quanto le schede grafiche per OpenCL offrono indiscutibili vantaggi.

I paragrafi seguenti descrivono la procedura di configurazione di OpenCL, a seconda del produttore. È possibile accedere alle relative istruzioni di configurazione utilizzando il collegamento corrispondente:



1. Intel

Per poter utilizzare OpenCL su CPU Intel, è necessario scaricare e installare Intel SDK for OpenCL Applications. Per fare ciò, vai alla pagina di download dello sviluppatore ufficiale.

Figura 1.1. Pagina di download di Intel SDK per OpenCL.

Fig. 1.1. Pagina di download di Intel SDK per OpenCL.

Qui puoi trovare informazioni generali su OpenCL, nonché un elenco di prodotti disponibili per il download. Per scaricare i prodotti disponibili, fare clic sul pulsante Confronta e scarica prodotti nell'angolo in alto a destra della pagina.

Figura 1.2. Informazioni sui prodotti disponibili e requisiti di installazione.

Fig. 1.2. Informazioni sui prodotti disponibili e requisiti di installazione.

Dopo aver fatto clic, verrà visualizzata una finestra con le informazioni sui requisiti del prodotto in merito ai tipi di processore e ai sistemi operativi supportati. Seleziona e scarica un prodotto adatto facendo clic sul pulsante Download sopra l'icona del prodotto.

Figura 1.3. Link per il download dell'SDK

Fig. 1.3. Scarica il link

Verrà visualizzata un'altra finestra con i collegamenti per il download. Seleziona e scarica l'SDK a 32 o 64 bit. Attendi un paio di minuti ed esegui il file ottenuto al termine del download. Conferma l'installazione dei componenti SDK ed estrai i file in una delle cartelle.

Figura 1.4. Avvio dell'installazione di Intel SDK per OpenCL.

Fig. 1.4. Avvio dell'installazione di Intel SDK per OpenCL.

Vedrai la finestra di installazione che dice Intel SDK per applicazioni OpenCL con supporto OpenCL 1.2. Fare clic su Avanti e seguire le istruzioni di installazione.

Figura 1.5. Accettazione del contratto di licenza con l'utente finale.

Fig. 1.5. Accettazione del contratto di licenza con l'utente finale.

Accetta i termini e le condizioni del contratto di licenza. Successivamente, nella finestra verranno visualizzati i componenti da installare - fare clic suAvanti per continuare.

Figura 1.6. Integrazione dell'SDK con Visual Studio.

Fig. 1.6. Integrazione dell'SDK con Visual Studio.

Se il software Microsoft Visual Studio 2008 (o versioni successive) è già disponibile sul tuo PC, ti verrà chiesto di integrarlo per scopi OpenCL. Quindi dovrai solo selezionare gli utenti che saranno in grado di accedere ai componenti installati, specificare il percorso di installazione dell'SDK e fare clic su Installa.

Figura 1.7. Installazione.

Fig. 1.7. Installazione

L'installazione richiederà un paio di minuti. Una volta completato con successo, vedrai il risultato sullo schermo. Fare clic su Fine per completare il processo di installazione.

Figura 1.8. Fine dell'installazione.

Fig. 1.8. Completamento dell'installazione

 

2.1. Schede grafiche e APU AMD

Per installare OpenCL per una scheda grafica AMD, aggiorniamo il suo driver all'ultima versione disponibile. Questo può essere fatto dalla pagina download del driver.

Figura 2.1.1. Pagina di download del driver AMD.

Fig. 2.1.1. Pagina di download del driver AMD.

Se conosci le specifiche della tua scheda grafica, il driver può essere facilmente trovato compilando un modulo sul lato sinistro della pagina. Dopo aver selezionato le opzioni necessarie in tutti i campi del modulo, fare clic su Visualizza risultati per trovare il driver appropriato.

Figura 2.1.2. Download del catalizzatore AMD.

Fig. 2.1.2. Download del catalizzatore AMD.

Il sistema offrirà alcuni driver in Catalyst Software Suite, incluso il driver OpenCL. Scarica Catalyst ed esegui il file ottenuto.

Figura 2.1.3. Pagina di download dell'applicazione per l'identificazione del tipo di scheda grafica e della versione del driver.

Fig. 2.1.3. Pagina di download dell'applicazione per l'identificazione del tipo di scheda grafica e della versione del driver.

È inoltre possibile utilizzare il sistema Driver Autodetect facendo clic sul collegamento corrispondente nell'angolo in alto a destra della pagina (Fig. 2.1.1.). Ti verrà chiesto di scaricare l'applicazione AMD Driver Autodetect: fallo e avviala.

Figura 2.1.4. Applicazione per il rilevamento e il download del driver appropriato.

Fig. 2.1.4. Applicazione per il rilevamento e il download del driver appropriato.

L'applicazione analizzerà il sistema e ti offrirà di scaricare il driver della scheda grafica appropriato. Scaricalo ed esegui il file ottenuto. Il Gestore installazione ti chiederà di selezionare la cartella per decomprimere i file: seleziona e fai clic su Installa.

Figura 2.1.5. AMD Catalyst Install Manager.

Fig. 2.1.5. Gestione dell'installazione di AMD Catalyst.

Il contratto di licenza con l'utente finale apparirà in una finestra pop-up. Dobbiamo accettare i suoi termini e condizioni. Selezioniamo ulteriormente l'installazione rapida, specifichiamo la posizione di installazione di AMD Catalyst e facciamo clic su Avanti.

Figura 2.1.6. Installazione.

Fig. 2.1.6. Installazione

L'installazione richiederà un paio di minuti. Una volta completata, vedrai il relativo messaggio sullo schermo.

Figura 2.1.7. Completamento dell'installazione.

Fig. 2.1.7. Completamento dell'installazione

 

2.2. CPU AMD

Per installare OpenCL per una CPU AMD, è necessario scaricare e installare l'ultima versione di AMD APP SDK. A tal fine, vai alla pagina following sul sito ufficiale dello sviluppatore.

Figura 2.2.1. Pagina di download dell'SDK dell'APP AMD.

Fig. 2.2.1. Pagina di download dell'SDK dell'APP AMD.

Questa pagina fornisce alcune informazioni sull'SDK in quanto tale e dà un'idea di OpenCL. Ciò di cui abbiamo bisogno qui è trovare e fare clic sul collegamento Vai a download sotto la descrizione.

Figura 2.2.2. Tabella degli SDK disponibili per il download.

Fig. 2.2.2. Tabella degli SDK disponibili per il download.

Nella parte inferiore della pagina, vedrai una tabella con un elenco delle ultime versioni dell'SDK per vari sistemi operativi, a 32 o 64 bit, nonché i collegamenti per il download. Selezionare la versione richiesta facendo clic sul collegamento pertinente. Verrai indirizzato alla pagina con il contratto di licenza con l'utente finale. Accettalo per avviare il download.

Dopo aver eseguito il programma di installazione scaricato, ti verrà chiesto di estrarre i file di installazione in una cartella. Questo sarà seguito dall'installazione dell'AMD Catalyst sopra descritto contenente AMD APP SDK per la tua CPU. La procedura di installazione di Catalyst è mostrata nelle Fig. 2.1.5 - 2.1.7 della sezione 2.1. sopra.

 

3. NVidia

Se hai una scheda grafica NVidia, devi aggiornare il suo driver all'ultima versione per poter installare OpenCL. Puoi scaricarlo dalla pagina download del driver sul sito Web dello sviluppatore.

Figura 3.1. Pagina di download del driver NVidia.

Fig. 3.1. Pagina di download del driver Nvidia.

Questa pagina offre opzioni per trovare il driver richiesto manualmente o automaticamente. Utilizzando l'opzione manuale, è necessario selezionare il tipo di prodotto, la serie, il sistema operativo e fare clic su Cerca. Il sistema troverà il driver più recente adatto alla tua scheda grafica e ti chiederà di scaricarlo.

Figura 3.2. Download del driver selezionato.

Fig. 3.2. Download del driver selezionato.

Se si opta per l'opzione 2, è necessario fare clic su Driver di grafica per cui verrà chiesto di eseguire la scansione del sistema utilizzando l'applicazione Java GPU_Reader.

Figura 3.3. Esecuzione dell'applicazione per identificare il tipo di scheda grafica e la versione del driver.

Fig. 3.3. Esecuzione dell'applicazione per identificare il tipo di scheda grafica e la versione del driver.

Eseguire l'applicazione facendo clic su Esegui. Attendi qualche secondo per poter vedere le informazioni sulla scheda grafica, la versione corrente del driver installato e l'ultima versione del driver consigliata. Fare clic su Download per essere indirizzati alla pagina di download mostrata in Fig. 3.2.

Figura 3.4. Risultati dell'identificazione automatica del tipo di scheda grafica e della versione del driver.

Fig. 3.4. Risultati dell'identificazione automatica del tipo di scheda grafica e della versione del driver.

Fare clic su Scarica ora e accettare il contratto di licenza del software NVidia facendo clic sul pulsante Accetta e scarica.

Figura 3.5. Accettazione del contratto di licenza e download del driver.

Fig. 3.5. Accettazione del contratto di licenza e download del driver.

Pertanto, otteniamo l'ultima versione del driver per la scheda grafica. Quindi eseguiamo il file ottenuto: ti verrà chiesto di estrarre i file di installazione del driver in una delle cartelle. L'installazione verrà avviata dopo aver decompresso i file. Innanzitutto, è necessario accettare nuovamente i termini e le condizioni del contratto di licenza del software NVidia.

Figura 3.6. Accettazione del Contratto di Licenza nella prima fase di installazione.

Fig. 3.6. Accettazione del contratto di licenza nella prima fase di installazione.

Quindi selezionare l'opzione di installazione rapida e fare clic su Avanti. Inoltre, ti verrà offerto di installare il programma aggiuntivo NVidia Experience che è opzionale.

Figura 3.7. Selezione dell'opzione di installazione.

Fig. 3.7. Selezione dell'opzione di installazione.

L'installazione del driver inizierà subito dopo, accompagnata dalla pubblicità degli ultimi sviluppi di NVidia.

Figura 3.8. Installazione.

Fig. 3.8. Installazione

Questo è tutto. Il driver è stato installato e dobbiamo solo riavviare il sistema per poter utilizzare OpenCL nel terminale MetaTrader 5.

Figura 3.9. Completamento dell'installazione.

Fig. 3.9. Completamento dell'installazione

 

Confronto delle prestazioni

OpenCL_Sample.mq5 è stato scritto per dimostrare i vantaggi dell'utilizzo di OpenCL in MQL5. Calcola i valori della funzione di due variabili in alcuni set e visualizza i risultati nella finestra del grafico utilizzando un'etichetta grafica (OBJ_BITMAP_LABEL). I calcoli vengono eseguiti in due modi: utilizzando e senza utilizzare OpenCL. Questi blocchi sono implementati rispettivamente sotto forma di funzioni WithOpenCL() e WithoutOpenCL():

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//...
   Print("\nCalculations without OpenCL:");
   WithoutOpenCL(values1,colors1,w,h,size,const_1,const_2);
//--- calculations with OpenCL
   Print("\nCalculations with OpenCL:");
   WithOpenCL(values2,colors2,w,h,size,const_1,const_2);
//...
  }
//+------------------------------------------------------------------+
//| Calculations without using  OpenCL                               |
//+------------------------------------------------------------------+
void WithoutOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                   const uint size,const uint const_1,const uint const_2)
  {
//--- store the calculation start time
   uint x=GetTickCount();
//--- calculation of function values
   for(uint i=0;i<h;i++)
      for(uint j=0;j<w;j++)
         values[i*w+j]=Func(InpXStart+i*InpXStep,InpYStart+j*InpYStep);
//--- print the function calculation time
   Print("Calculation of function values = "+IntegerToString(GetTickCount()-x)+" ms");
//--- determine the minimum value and the difference between 
//--- the minimum and maximum values of points in the set
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- store the calculation start time
   x=GetTickCount();
//--- calculate paint colors for the set
   uint a;
   for(uint i=0;i<size;i++)
     {
      a=(uint)MathRound(255*(values[i]-min)/dif);
      colors[i]=const_1*(a/16)+const_2*(a%16);
     }
//--- print the paint color calculation time
   Print("Calculation of paint colors = "+IntegerToString(GetTickCount()-x)+" ms");
  }
//+------------------------------------------------------------------+
//| Calculations using OpenCL                                        |
//+------------------------------------------------------------------+
void WithOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                const uint size,const uint const_1,const uint const_2)
  {
//--- variables for using OpenCL
   int cl_ctx;
   int cl_prg;
   int cl_krn_1;
   int cl_krn_2;
   int cl_mem_1;
   int cl_mem_2;
//--- create context for OpenCL (selection of device)
   if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)
     {
      Print("OpenCL not found");
      return;
     }
//--- create a program based on the code in the cl_src line
   if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE)
     {
      CLContextFree(cl_ctx);
      Print("OpenCL program create failed");
      return;
     }
//--- create a kernel for calculation of values of the function of two variables
   if((cl_krn_1=CLKernelCreate(cl_prg,"Func"))==INVALID_HANDLE)
     {
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_1 create failed");
      return;
     }
//--- kernel for painting points of the set in the plane
   if((cl_krn_2=CLKernelCreate(cl_prg,"Grad"))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_2 create failed");
      return;
     }
//--- OpenCL buffer for function values
   if((cl_mem_1=CLBufferCreate(cl_ctx,size*sizeof(float),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- OpenCL buffer for point colors
   if((cl_mem_2=CLBufferCreate(cl_ctx,size*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLBufferFree(cl_mem_1);
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- store the calculation start time
   uint x=GetTickCount();
//--- array sets indices at which the calculation will start 
   uint offset[2]={0,0};
//--- array sets limits up to which the calculation will be performed
   uint work[2];
   work[0]=h;
   work[1]=w;
//--- calculation of function values
//--- pass the values to the kernel
   CLSetKernelArg(cl_krn_1,0,InpXStart);
   CLSetKernelArg(cl_krn_1,1,InpYStart);
   CLSetKernelArg(cl_krn_1,2,InpXStep);
   CLSetKernelArg(cl_krn_1,3,InpYStep);
   CLSetKernelArgMem(cl_krn_1,4,cl_mem_1);
//--- start the execution of the kernel
   CLExecute(cl_krn_1,2,offset,work);
//--- read the obtained values to the array
   CLBufferRead(cl_mem_1,values);
//--- print the function calculation time
   Print("Calculation of function values = "+IntegerToString(GetTickCount()-x)+" ms");
//--- determine the minimum value and the difference between 
//--- the minimum and maximum values of points in the set
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- store the calculation start time
   x=GetTickCount();
//--- set the calculation limits
   uint offset2[1]={0};
   uint work2[1];
   work2[0]=size;
//--- calculation of paint colors for the set
//--- pass the values to the kernel
   CLSetKernelArg(cl_krn_2,0,min);
   CLSetKernelArg(cl_krn_2,1,dif);
   CLSetKernelArg(cl_krn_2,2,const_1);
   CLSetKernelArg(cl_krn_2,3,const_2);
   CLSetKernelArgMem(cl_krn_2,4,cl_mem_1);
   CLSetKernelArgMem(cl_krn_2,5,cl_mem_2);
//--- start the execution of the kernel
   CLExecute(cl_krn_2,1,offset2,work2);
//--- read the obtained values to the array
   CLBufferRead(cl_mem_2,colors);
//--- print the paint color calculation time
   Print("Calculation of paint colors = "+IntegerToString(GetTickCount()-x)+" ms");
//--- delete OpenCL objects
   CLBufferFree(cl_mem_1);
   CLBufferFree(cl_mem_2);
   CLKernelFree(cl_krn_1);
   CLKernelFree(cl_krn_2);
   CLProgramFree(cl_prg);
   CLContextFree(cl_ctx);
  }

Dopo aver eseguito lo script, per alcuni secondi sarai in grado di vedere l'insieme dipinto di valori di funzione nella finestra del grafico. Ciascuno di essi corrisponde ad uno dei toni del colore selezionato nei parametri di input (rosso, verde o blu).

Risultati dell'esecuzione dello script per l'insieme di punti nel piano da -22 a 22 al passo 0.1.

Risultati dell'esecuzione dello script per l'insieme di punti nel piano da -22 a 22 al passo 0.1.

Oltre all'immagine stessa, il tempo di calcolo della funzione per entrambi i metodi viene visualizzato nel giornale "Expert Advisors" in modo da poter vedere chiaramente i vantaggi e il valore pratico dell'utilizzo di OpenCL in MQL5. Aumenta il valore del passaggio e ottieni i risultati dell'esecuzione dello script:

Risultati del calcolo della funzione e dei valori del colore della pittura utilizzando due metodi.

Risultati del calcolo della funzione e dei valori di colore della pittura utilizzando due metodi.

Il tempo totale di calcolo delle funzioni sulla CPU utilizzando OpenCL sembra essere più di 5 volte inferiore e questo è lungi dall'essere il limite! È risaputo che i calcoli su GPU avanzate con supporto OpenCL sono molto più veloci rispetto alle CPU. Puoi trovare una chiara prova di questo fatto nei risultati dell'esecuzione dello script su diversi dispositivi OpenCL, come mostrato nella tabella seguente:

Dispositivo OpenCL
Tempo di esecuzione senza utilizzare OpenCL, ms
Tempo di esecuzione utilizzando OpenCL, ms
Guadagno di prestazioni
AMD Radeon HD 7970 20.361 ms
171 ms
 119.07 volte
NVidia GeForce GT 630
24.742 ms
578 ms
 42,8 volte
Intel Core i5 430M
27,222 ms
5,428 ms
 5,01 volte
AMD Athlon X2 Dual-Core QL-65
45,723 ms
9,516 ms  4,8 volte

Come si può notare, l'utilizzo di OpenCL sulla scheda grafica AMD top di gamma ha comportato una riduzione di 100 volte dei tempi di calcolo! Risultati significativi sono stati ottenuti anche sulla GeForce GT 630 del 2011, leggermente più vecchia, con una riduzione dei tempi di 42 volte. Le CPU di Intel e AMD sono arrivate per ultime. Tuttavia, il guadagno di prestazioni ottenuto su di essi sarà anche molto utile quando si ha a che fare con calcoli complessi.

Questo è tutto. La tabella dei confronti dimostra un chiaro vantaggio dell'utilizzo del calcolo parallelo nell'elaborazione di dati di massa. Tutto quello che dovresti fare è installare il driver appropriato per la tua scheda grafica o CPU.

Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/690

File allegati |
opencl_sample.mq5 (12.93 KB)
Un'altra classe OOP MQL5 Un'altra classe OOP MQL5
Questo articolo mostra come costruire da zero un Expert Advisor orientato agli oggetti. Dal concepimento di un'idea di trading teorica alla programmazione di un MQL5 EA che porta quell’idea nel mondo reale. Imparare facendo è IMHO un approccio solido per avere successo. Mostrerò un esempio pratico per farti vedere come potrai codificare trasformare le tue idee in codice, per creare i tuoi robot Forex. Il mio obiettivo è anche quello di invitarvi ad aderire ai principi OO.
Manuale MQL5: Gestire gli eventi tipici dei grafici Manuale MQL5: Gestire gli eventi tipici dei grafici
Questo articolo prende in considerazione gli eventi tipici dei grafici e include esempi della loro elaborazione. Ci concentreremo su eventi del mouse, sequenze di tasti, creazione/modifica/rimozione di un oggetto grafico, clic del mouse su un grafico e su un oggetto grafico, spostamento di un oggetto grafico con il mouse, completamento della modifica del testo in un campo di testo, nonché sugli eventi di modifica del grafico. Viene fornito un campione di un programma MQL5 per ogni tipo di evento considerato.
Creazione di EA di reti neurali utilizzando MQL5 Wizard e Hlaiman EA Generator Creazione di EA di reti neurali utilizzando MQL5 Wizard e Hlaiman EA Generator
L'articolo descrive un metodo di creazione automatizzata di EA di reti neurali utilizzando MQL5 Wizard e Hlaiman EA Generator. Ti mostra come puoi facilmente iniziare a lavorare con le reti neurali, senza dover imparare l'intero corpo di informazioni teoriche e ti mostra come scrivere il tuo codice.
MQL5 Cloud Network: Stai ancora calcolando? MQL5 Cloud Network: Stai ancora calcolando?
Presto sarà passato un anno e mezzo dal lancio di MQL5 Cloud Network. Questo evento all'avanguardia ha inaugurato una nuova era del trading algoritmico: ora con un paio di clic, i trader possono avere centinaia e migliaia di core di calcolo a loro disposizione per l'ottimizzazione delle loro strategie di trading.