MetaTrader 5 Python User Group - Come usare Python in Metatrader - pagina 25

 
fxsaber:

Come hai debuggato la parte OpenCL del codice?

Eseguendo e staccando i risultati.
 
Fast235:

Renat, potresti per favore fornire alcune indicazioni su quando OpenCL avrebbe un vantaggio lavorando con un gran numero di array o quando c'è un grande insieme di simboli e indicatori in un EA?

Se si possono costruire milioni di matrici senza legami incrociati ed essere in grado di analizzarle in parallelo, si può accelerare il processo.

In generale, chiunque risolva e comprenda i limiti dei suoi compiti risponderà facilmente alla sua domanda. Finché non c'è la comprensione dei limiti (e ci sono solo sogni di "what if")costantemente con il tiro dei compiti da risolvere, il parallelismo rimane solo una bella idea.

La maggior parte dei compiti non può essere efficacemente parallelizzata, purtroppo.

 
Renat Fatkhullin:

Se si possono costruire milioni di array senza legami incrociati e che possono essere analizzati in parallelo, si può accelerare.

In generale, qualcuno che risolve e comprende i limiti dei suoi compiti risponderà facilmente alla sua domanda. Finché non c'è comprensione dei limiti (e ci sono solo sogni "what if") costantemente con lo strappo dei compiti da risolvere, il parallelismo rimane solo un'idea figa.

La maggior parte dei compiti non può essere efficacemente parallelizzata, purtroppo.

Mi ricordo del fatto che ci sono momenti di accompagnamento nei calcoli, per questo mi è venuta in mente la domanda

 
Renat Fatkhullin:
Eseguendo e disinnescando i risultati.

È possibile mettere un primer nel codice OpenCL?

 

Parlando approssimativamente di OpenCL

Si può immaginare che ci sia un processore con grandi registri (vettoriali), in cui possono essere scritti singoli N valori doppi (per esempio, lasciamo che N=64, allora 64 valori possono essere scritti nel registro).
Tali registri possono essere aggiunti, moltiplicati, ecc. l'uno con l'altro, si scopre che per un comando, si può eseguire un'operazione su N tavoli.

Ma ci sono delle limitazioni.

È impossibile operare con i valori di un registro, cioè per esempio è impossibile aggiungere una parte dei valori di un registro tra di loro.
Sulla frequenza, tale processore è fortemente inferiore alla solita CPU, quindi non ha senso usarlo in compiti in cui è richiesta l'elaborazione sequenziale di un valore.
Oltre alla frequenza più bassa, c'è anche una limitazione della memoria, i valori possono essere caricati e scaricati solo dalla memoria speciale.
È possibile copiare dati dalla RAM in questa memoria speciale, ma solo attraverso un canale molto stretto (lento).
Pertanto, i compiti che richiedono l'elaborazione di grandi quantità di dati sono anche poco adatti a OpenCL

 
fxsaber:

È possibile mettere un primer nel codice OpenCL?

Fuori.

Saltiamo la sessione di conferenze. Basta prendere e leggere tutto ciò che è stato creato e descritto in dettaglio su OpenCL da noi e sul web in generale.

Ricerca OpenCL:




In realtà, è molto interessante che "opencl trading" ha un sacco di contenuto di google dalle nostre risorse:


 
Renat Fatkhullin:

Ecco un confronto in Python 3.8 e MQL5 in modalità single thread/OpenCL: tempo in secondi, meno è meglio è

pi-single.py
pi-multi.py
Velocità PI.mq5 singolo
Velocità PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python in modalità JIT tramite numba, l'hardware è così:

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

L'esempio di utilizzo di OpenCL è molto semplice e non ci sono fronzoli nella sua ottimizzazione. Anche se il compito non è massiccio per OpenCL e ha innescato overheads nella preparazione, ha comunque dato un risultato molto migliore.

Calcoli paralleli molto grandi possono essere eseguiti di routine con OpenCL. La soglia di ingresso non è alta e ci vuole solo un giorno per capire come usarlo.

I file per la riproduzione sono allegati.

Si scopre che questo problema del calcolo di PI in OpenCL è stato già risolto 7 anni fa:

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • www.mql5.com
Настоящая статья открывает небольшой цикл публикаций, посвященных программированию на OpenCL, или Open Computing Language. Платформа MetaTrader 5 в ее текущем воплощении до подключения OpenCL не позволяла напрямую, т.е. нативно, использовать преимущества многоядерных процессоров для ускорения вычислений. В разделе "Статьи", правда, еще полтора...
 
Non riesco ancora a capirlo.
Single thread: the value of PI is 3.141592653590
Single thread: calculated in 7.382561 seconds
OpenCL not found. Error code=5100
OpenCL initialization failed with 5100

Qualcuno ha qualche link diretto a ciò che deve essere scaricato? Su Intel richiede la registrazione.


HH Su Intel GPU in CPU devo grokkare i driver dell'adattatore video, poi installato Intel_OpenCL_driver, poi messo i driver dell'adattatore video. In questo modo tutto funziona e il video non rallenta.

 

Vict:

Ho paura che l'uso attivo di questa funzione trasformi l'avvio in una ricerca di più minuti.

Non gira si può abilitare la cache.

Renat Fatkhullin:

Ecco un confronto in Python 3.8 e MQL5 in modalità single thread/OpenCL: tempo in secondi, meno è, meglio è

pi-single.py
pi-multi.py
Velocità PI.mq5 singolo
Velocità PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python in modalità JIT tramite numba, l'hardware è così:

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

In modalità multithreading state confrontando le prestazioni della CPU contro quelle della GPU in 10000 threads. La GPU non è coinvolta in python.

Se trovo un computer con una scheda video adatta, sistemerò il codice Python e lo testerò su questo computer. Proverò ad eseguire il tuo codice sulla CPU, pensavo che la GPU fosse necessaria.

Non è affatto mia intenzione dimostrare chi è più veloce. Più interessante sapere dei vostri piani per integrare Python.

State progettando delle funzioni di trading e degli eventi tick in python?


Ancora, la GPU sembra essere richiesta, "AMD APP SDK" non è scaricabile.
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция: Ордер – это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк...
 
Ilyas:

Parlando approssimativamente di OpenCL

Possiamo immaginare che ci sia un processore con grandi registri (vettoriali) dove possiamo scrivere singoli N valori doppi (per esempio facciamo N=64, allora 64 valori possono essere scritti nel registro).
Tali registri possono essere aggiunti, moltiplicati, ecc. l'uno con l'altro, si scopre che per un'istruzione, si può eseguire un'operazione su N tabelle.

Ma ci sono delle limitazioni.

È impossibile operare con i valori di un registro, cioè per esempio è impossibile aggiungere una parte dei valori di un registro tra di loro.
Sulla frequenza, tale processore è fortemente inferiore alla solita CPU, quindi non ha senso usarlo in compiti in cui è richiesta l'elaborazione sequenziale di un valore.
Oltre alla frequenza più bassa, c'è anche una limitazione della memoria, i valori possono essere caricati e scaricati solo dalla memoria speciale.
È possibile copiare dati dalla RAM in questa memoria speciale, ma solo attraverso un canale molto stretto (lento).
Pertanto, i compiti che richiedono l'elaborazione di grandi quantità di dati sono anche poco adatti a OpenCL

Non ci sono vettori nell'esempio di calcolo di PI. Divide semplicemente la somma totale in diversi chunk indipendenti e li invia a ciascun core OpenCL. Tutto viene sommato alla fine.

Per esempio, se non c'è una scheda video discreta e ci sono 4 core fisici + 4 core virtuali nella CPU, l'esecuzione sarà otto volte più veloce. Cioè, pezzi di somma saranno contati su ogni core in parallelo.