Mais uma vez, sobre multithreading - página 3

 
Renat:

Recomendo-lhe que releia o seu post original, preste atenção a todos os seus epítetos, e depois vá abaixo para as respostas.

As respostas foram dadas calmamente, com algumas perguntas suaves como "Para paralelizar cálculos de algo que se deve primeiro perceber", depois as respostas foram dadas e o estado actual foi explicado "o que realmente deve ser paralelizado".

Mas, em vez de uma curva de aprendizagem rápida, você vomitou mais disparates e pôs os cães em cima de nós. O resultado foi uma resposta dura.

OK, concordo com os epítetos, eu exagerei um pouco, e peço desculpa por isso. Mas não disse nada de mal-educado, apenas críticas demasiado emocionais, mas é totalmente inadequado à dureza com que se reage a isso. Em lado nenhum disse que os criadores são inúteis e não compreendem nada, por isso não exagere.

Desde que abordei este tópico, estou bem ciente do que é necessário e há muito a fazer em paralelo. Nem todos os algoritmos são limitados com "olá mundo!", há algoritmos muito mais complexos e intensivos em recursos. É por isso que é muito estranho ouvir tais ensinamentos morais sobre o que se deve paralelizar e o que não se deve quando ainda nem sequer se viu o algoritmo.

Quanto à implementação do código na DLL, bem como à utilização do OpenCL, não tem qualquer relevância para a MQL. E a questão era sobre programação em MQL.

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 

O OpenCL funciona dentro do código MQL5.

Aqui está um código de amostra.

 
meat:

Quanto à implementação do código na DLL, bem como à utilização do OpenCL, isto já não é relevante para a MQL. E estávamos a falar de programação em MQL.

Há guiões para multithreading. E não precisa disso no testador
 
meat:

E qual foi a sua resposta? Começou a dizer-me que tem um grande terminal e testador, trabalhando em múltiplas correntes. E ainda não disse uma palavra sobre o seu terminal. Referia-me a outra coisa: multi-tarefas em código MQL. Quando um algoritmo pode ser dividido em várias partes, e cada parte é executada em paralelo. E você, sem sequer ter compreendido o ponto, começa a ser mal-educado. Bem, como vejo, com esta abordagem não há uma abordagem construtiva, por isso não vale a pena continuar a discussão.

Existem algumas soluções construtivas, mesmo com o actual estado de coisas. Vários programas mql (Expert Advisors e/ou indicadores) podem trocar mensagens, e consequentemente, tarefas e resultados da execução de tarefas - claro, se criar e organizar um protocolo de troca apropriado. Todos os Conselheiros Especialistas trabalham em fios diferentes (cada um no seu próprio fio), por isso, tal esquema de cálculo conjunto é obviamente multi-tarefas e carregá-las-á uniformemente se houver vários núcleos.

Uma troca de mensagens (utilizando ferramentas mql5) é possível através de

1. eventos terminais

2. canais nomeados

3. DLL

4. ficheiros

5. etc.

A partir deste conjunto de ferramentas, pode escolher a mais adequada ou utilizar mais do que uma (todas de uma só vez). Cada método tem as suas vantagens e desvantagens, por exemplo, os chamados tubos permitem a transferência de informação sobre a rede local, pelo que existe a possibilidade de paralelizar tarefas para mais de um processador multi-core.

Boa sorte.

 
Renat:

O OpenCL funciona dentro do código MQL5.

Aqui está um código de amostra.

Bem, o facto de funcionar é metade da batalha. Mas como editá-lo e depurá-lo depois? Se estiver contida numa constante de corda, como procuraria um erro? Isto significa que deve ser desenvolvido num programa externo e depois inserido no MQL. Mas se lidarmos constantemente com este tipo de portagens, enlouqueceremos, como apontei no primeiro post. Uma vez que o desenvolvimento do código é feito em qualquer outro lugar, de que serve colocar tudo isto na MQL? É mais fácil de compilar como uma DLL e importá-la.

Claro que compreendo que o objectivo é criar um código fonte aberto, sem utilizar quaisquer dlls autoescritas. Mas este é um caso especial. Normalmente o programa é escrito para si próprio e não para os outros. E poucas pessoas quereriam estar constantemente envolvidas em manipulações sem sentido ao arrastar o código de um programa para outro.

Mas se se fizer um compilador integrado para tudo isto, é outra história. E a propósito, porque não? É como uma sintaxe C ali dentro. Isto é, poderia usar tudo como parte de um código mql normal, apenas adicionando funções adicionais ao seu MetaEditor. E depois o compilador formataria o fragmento de código correspondente de forma apropriada, acrescentando \r\n, etc.

 
meat:

Bem, o facto de funcionar é metade da batalha. Como editá-lo e depurá-lo depois? Se estiver na constante da corda, como podemos encontrar o erro? Isto significa que deve ser desenvolvido num programa externo e depois inserido no MQL. Mas se lidarmos constantemente com este tipo de portagens, enlouqueceremos, como apontei no primeiro post. Uma vez que o desenvolvimento do código é feito em qualquer outro lugar, de que serve colocar tudo isto na MQL? É mais fácil de compilar como uma DLL e importá-la.

Claro que compreendo que o objectivo é criar um código fonte aberto, sem utilizar quaisquer dlls autoescritas. Mas este é um caso especial. Normalmente o programa é escrito para si próprio e não para os outros. E poucas pessoas quereriam estar constantemente envolvidas em manipulações sem sentido ao arrastar o código de um programa para outro.

Mas se se fizer um compilador integrado para tudo isto, é outra história. E a propósito, porque não? É como uma sintaxe C ali dentro. Isto é, poderia usar tudo como parte de um código mql normal, apenas adicionando funções adicionais ao seu MetaEditor. E depois o compilador formataria o fragmento de código correspondente de forma apropriada, acrescentando \r\n, etc.

Quem o quiser, procura oportunidades. Quem não quiser, razões © Proverb

 
MetaDriver:

Há soluções construtivas, mesmo com o status quo. Vários programas mql (Expert Advisors e/ou indicadores) podem trocar mensagens, e consequentemente, tarefas e resultados da execução de tarefas - claro, se criar e organizar um protocolo de troca apropriado. Todos os Conselheiros Especialistas trabalham em fios diferentes (cada um no seu próprio fio), por isso, tal esquema de cálculo conjunto é obviamente multi-tarefas e carregá-las-á uniformemente se houver vários núcleos.

Uma troca de mensagens(utilizando ferramentas mql5) é possível através de

1. eventos terminais

2. canais nomeados

3. DLL.

4. ficheiros

5. etc.

A partir deste conjunto de ferramentas, poderá escolher a mais adequada ou utilizar mais do que uma (todas de uma só vez). Cada método tem as suas vantagens e desvantagens, por exemplo, os chamados tubos permitem a transferência de informação sobre a rede local, pelo que existe a possibilidade de paralelizar a tarefa para mais do que um processador multi-core.

Boa sorte.

Bem, digamos que nem todas são ferramentas mql5 :) E não se tratava de como resolver (contornar) este problema. Pode sempre encontrar uma forma de o contornar, não há dúvidas. A questão é porque não podemos adicionar a funcionalidade correspondente ao mql5, para que não tenha de se livrar dele.

Deve admitir que não é racional e fiável lançar um grande número de Consultores Especialistas com gráficos apropriados apenas para organizar o seu processamento em vários tópicos.

 
Poucas pessoas necessitam de multithreading em indicadores ou Expert Advisors. E normalmente estas pessoas são capazes de implementar esta multi-tarefa por si próprias, através de dlls e outras coisas.
 
Reshetov:

Quem quiser, procura possibilidades. Quem não quiser, as razões © Proverb

Antes de mais nada, precisamos de compreender a viabilidade :) Refiro-me à razoabilidade da utilização de MQL5 em geral, e MT5, respectivamente, se vale a pena mudar para esta plataforma. Se, como no MT4, para funcionar correctamente é necessário usar alguma magia, correr vários EAs ou transferir o código para DLL, então não faz sentido mudar um pedaço de rabo por um pedaço de rabo. Se o código deve ser escrito em DLL, então é mais fácil e seguro utilizar uma plataforma com uma API aberta, do que ter um acolchoamento adicional sob a forma de um Expert Advisor (e um terminal em funcionamento como um todo).

 
meat:

Antes de mais nada, precisamos de compreender a viabilidade :) Refiro-me à razoabilidade da utilização de MQL5 em geral, e MT5, respectivamente, se vale a pena actualizar para esta plataforma. Se, como no MT4, para funcionar correctamente é necessário usar alguma magia, correr vários EAs ou transferir o código para DLL, então não faz sentido mudar um pedaço de merda por um pedaço de merda. Se o código tiver de ser escrito em DLL, então é mais fácil e seguro utilizar imediatamente uma plataforma com uma API aberta, do que ter um acolchoamento adicional sob a forma de um Expert Advisor (e um terminal em funcionamento como um todo).

Ninguém está a forçar ninguém a mudar para MQL5. Por exemplo, falhei a funcionalidade da MQL4, pelo que tive de mudar para MQL5.

Por exemplo, todas as funcionalidades podem ser implementadas em С++ e a MQL5 deve conter apenas parte executiva e todo o material deve ser ligado a um protocolo usando canais nomeados. Existem muitas variantes. Tudo o que precisa é de uma vontade forte.

Связь с MetaTrader 5 через именованные каналы без применения DLL
Связь с MetaTrader 5 через именованные каналы без применения DLL
  • 2012.10.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.