MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 25

 
fxsaber:

Como se debugou a parte do código OpenCL?

Executando e despontando os resultados.
 
Fast235:

Renat, forneça uma lista aproximada de casos em que o OpenCL tem uma vantagem, quando se trabalha com um grande número de matrizes ou quando existe um grande conjunto de símbolos e indicadores numa EA.

Se conseguir construir milhões de matrizes sem ligações cruzadas e que possam ser analisadas em paralelo, é possível acelerar.

Em geral, qualquer pessoa que resolva e compreenda os limites das suas tarefas, responderá facilmente à sua pergunta. Enquanto não houver compreensão dos limites (e há apenas sonhos "e se")constantemente com o puxão das tarefas a serem resolvidas, o paralelismo continua a ser apenas uma ideia fixe.

A maioria das tarefas não pode, infelizmente, ser efectivamente paralelizada.

 
Renat Fatkhullin:

Se conseguir construir milhões de matrizes sem ligações cruzadas e que possam ser analisadas em paralelo, pode acelerar.

Em geral, alguém que resolve e compreende os limites das suas tarefas irá facilmente responder à sua pergunta. Enquanto não houver compreensão de limites (e há apenas sonhos "e se") constantemente com tarefas dilacerantes a serem resolvidas, o paralelismo continua a ser apenas uma ideia fixe.

A maioria das tarefas não pode, infelizmente, ser efectivamente paralelizada.

Lembro-me do facto de haver momentos de acompanhamento nos cálculos, por isso a questão surgiu na minha mente

 
Renat Fatkhullin:
Executando e desbastando os resultados.

É possível colocar uma pré-camada dentro do código OpenCL?

 

Falando mais ou menos sobre OpenCL

Pode imaginar que existe um processador com registos grandes (vectoriais), no qual podem ser escritos N valores duplos individuais (por exemplo, deixar N=64, depois 64 valores podem ser escritos no registo).
Tais registos podem ser adicionados, multiplicados, etc., uns com os outros, acontece que, para uma instrução, é possível realizar uma operação em N dables.

Mas há limitações.

É impossível operar com valores num único registo, ou seja, por exemplo, é impossível adicionar uma parte dos valores de um registo entre si.
Na frequência, tal processador é fortemente inferior ao CPU habitual, pelo que não faz sentido utilizá-lo em tarefas onde é necessário um processamento sequencial de um valor.
Além da frequência mais baixa, existe também uma limitação de memória, os valores só podem ser carregados e descarregados a partir da memória especial.
É possível copiar dados da RAM para esta memória especial, mas apenas através de um canal muito estreito (lento).
Portanto, as tarefas que requerem o processamento de grandes quantidades de dados são também pouco adequadas ao OpenCL

 
fxsaber:

É possível colocar uma pré-camada dentro do código OpenCL?

Fora.

Vamos saltar a sessão de palestras. Basta tomar e ler tudo o que foi criado e descrito em detalhe sobre OpenCL por nós e na web em geral.

Pesquisa OpenCL:




Na verdade, é muito interessante que "opencl trading " tenha muito conteúdo de google a partir dos nossos recursos:


 
Renat Fatkhullin:

Aqui está uma comparação em Python 3.8 e MQL5 nos modos de linha única/OpenCL: tempo em segundos, quanto menos melhor

pi-single.py
pi-multi.py
Velocidade PI.mq5 simples
Velocidade PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python em modo JIT via numba, o hardware é assim:

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

O exemplo de utilização do OpenCL é muito simples e não há folhos na sua optimização. Embora a tarefa não seja massiva para o OpenCL e tenha desencadeado despesas gerais em preparação, ainda assim deu um resultado muito melhor.

Cálculos paralelos muito grandes podem ser efectuados rotineiramente com OpenCL. O limiar de entrada não é elevado e só demora um dia a descobrir como utilizá-lo.

Os ficheiros para reprodução são anexados.

Parece que este problema de cálculo de PI no OpenCL já foi resolvido há 7 anos atrás:

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • www.mql5.com
Настоящая статья открывает небольшой цикл публикаций, посвященных программированию на OpenCL, или Open Computing Language. Платформа MetaTrader 5 в ее текущем воплощении до подключения OpenCL не позволяла напрямую, т.е. нативно, использовать преимущества многоядерных процессоров для ускорения вычислений. В разделе "Статьи", правда, еще полтора...
 
Ainda não consigo perceber.
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

Alguém tem alguma ligação directa ao que precisa de ser descarregado? Na Intel é necessário o registo.


HI Na GPU Intel no CPU tenho de apalpar os drivers do adaptador de vídeo, depois instalei Intel_OpenCL_driver, depois coloquei os drivers do adaptador de vídeo. Desta forma, tudo funciona e o vídeo não abranda.

 

Vict:

Receio que a utilização activa desta funcionalidade transformará o arranque numa busca de vários minutos.

Não lhe será possível activar o cache.

Renat Fatkhullin:

Aqui está uma comparação em Python 3.8 e MQL5 nos modos de linha única/OpenCL: tempo em segundos, quanto menos, melhor

pi-single.py
pi-multi.py
Velocidade PI.mq5 simples
Velocidade PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python em modo JIT via numba, o hardware é assim:

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

No modo multithreading está a comparar o desempenho da CPU vs GPU em 10000 fios. O GPU não está envolvido em python.

Se eu encontrar um computador com uma placa de vídeo adequada, vou corrigir o código Python e testá-lo neste computador. Vou tentar executar o vosso código no CPU, pensei que a GPU era necessária.

Não é minha intenção provar quem é de todo mais rápido. Mais interessante para saber sobre os seus planos de integrar Python.

Está a planear alguma função comercial e a assinalar eventos em python?


Ainda assim, a GPU parece ser obrigatória, "AMD APP SDK" não é descarregável.
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция: Ордер – это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк...
 
Ilyas:

Falando mais ou menos sobre OpenCL

Podemos imaginar que existe um processador com registos grandes (vectoriais) onde podemos escrever N valores duplos individuais (por exemplo deixar N=64, depois 64 valores podem ser escritos no registo).
Tais registos podem ser adicionados, multiplicados, etc., uns com os outros, acontece que, para um comando, é possível realizar uma operação em N dables.

Mas há limitações.

É impossível operar com valores num único registo, ou seja, por exemplo, é impossível adicionar uma parte dos valores de um registo entre si.
Na frequência, tal processador é fortemente inferior ao CPU habitual, pelo que não faz sentido utilizá-lo em tarefas onde é necessário um processamento sequencial de um valor.
Além da frequência mais baixa, existe também uma limitação de memória, os valores só podem ser carregados e descarregados a partir da memória especial.
É possível copiar dados da RAM para esta memória especial, mas apenas através de um canal muito estreito (lento).
Portanto, as tarefas que requerem o processamento de grandes quantidades de dados são também pouco adequadas ao OpenCL

Não há vectores no exemplo de cálculo de PI. Simplesmente divide a soma total em vários pedaços independentes e envia-os para cada núcleo OpenCL. Tudo é somado no final.

Por exemplo, se não houver uma placa de vídeo discreta e houver 4 núcleos físicos + 4 virtuais na CPU, a execução será oito vezes mais rápida. Ou seja, em paralelo, serão contados pedaços de soma em cada núcleo.