Discussão do artigo "OpenCL: A ponte para mundos paralelos"

 

Novo artigo OpenCL: A ponte para mundos paralelos foi publicado:

No final de janeiro de 2012, a empresa de desenvolvimento de software que fica por trás do desenvolvimento do MetaTrader 5 anunciou o suporte nativo para OpenCL no MQL5. Usando um exemplo ilustrativo, o artigo estabelece o básico da programação no OpenCL no ambiente MQL5 e fornece alguns exemplos de otimização nativa do programa para o aumento da velocidade operacional.

Autor: Sceptic Philozoff

 

Muito obrigado!

Há muito tempo estou esperando por um artigo sobre OpenCL.

Vou lê-lo agora. :)

 
Muito bukaf :) Mas o bukaf é muito necessário e útil, vou mastigar esse granito. Obrigado!
 
joo: Há muito tempo estou esperando por um artigo sobre OpenCL.

Vou lê-lo. :)

Você provavelmente não precisa muito dele. Você já deve saber tudo.

No próximo artigo, o assunto será mais sério e haverá muito sobre hardware.

 
Sim, é realmente muito cedo para incluí-lo, mas é claro que é necessário adaptar esse padrão para a especialização. Talvez seja possível fazer isso na próxima versão do sexto thester, eu gostaria de ter essa funcionalidade antes....
 
GKS: Sim. É realmente muito cedo para ativar

O que é muito cedo para ativar, por favor, esclareça. Se for o OpenCL, ele já está ativado. Todos os experimentos foram realizados diretamente no MetaEditor 5.

P.S. O principal é que, por meio do OCL, o programador realmente tem acesso a algo que não tinha antes. Esses são:

- (S)SSEx, que pode ser incluído no Visual Studio, mas não pode ser incluído na MQL5 sem OCL (sem contar as dlls).

- acesso a cálculos em GPUs discretas, o que acelera ainda mais o que pode ser feito em um único núcleo em MQL5 sem nenhum truque do tipo dll.
.

 
Mathemat:

1. Você provavelmente não precisa muito disso. Você já deve saber como fazer todas essas coisas.

2. No próximo artigo, o assunto será sério, haverá muita coisa sobre hardware.

1. Eu preciso disso.

2. ótimo!

A questão ainda não está clara para mim: por que você chama a execução do programa OCL na CPU de "emulação"? A CPU é apenas um dos dispositivos, junto com a GPU, com o qual o programa OCL pode funcionar se houver um driver correspondente para o dispositivo e todos os núcleos do processador estiverem carregados.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
joo: A pergunta ainda não está clara para mim: Por que você chama a execução de um programa OCL na CPU de "emulação"?

Porque é isso que a emulação é, emulação lenta. Na CPU (graças à Intel, ela tem um compilador inteligente que procura a vetorização se você não a proibir explicitamente), a paralelização é feita por instruções (S)SSEx e talvez pela análise de dependências, enquanto as GPUs têm muito mais possibilidades relacionadas aos mecanismos SIMD. Além disso, há barramentos mais amplos e memória mais rápida, especialmente memória local e privada.

Sobre o hardware. As principais recomendações se aplicarão ao hardware da AMD. Mas muitas delas, com uma terminologia ligeiramente modificada, também se aplicam ao hardware da NVidia.

 
Mathemat:

Porque é emulação, emulação lenta. Nas CPUs (graças à Intel, ela tem um compilador inteligente que procura a vetorização se você não a proibir explicitamente), a paralelização é feita por instruções (S)SSEx e, possivelmente, pela análise de dependências, enquanto as GPUs têm muito mais possibilidades relacionadas aos mecanismos SIMD. Além disso, há barramentos mais amplos e memória mais rápida, especialmente memória local e privada.

Sobre o hardware. As principais recomendações se aplicarão ao hardware da AMD. Mas muitas delas, com uma terminologia ligeiramente modificada, também se aplicam ao hardware da NVidia.

O OpenCL (Open Computing Language) é um padrão aberto e livre de royalties para programação paralela de uso geral em CPUs, GPUs e outros processadores, oferecendo aos desenvolvedores de software acesso portátil e eficiente ao poder dessas plataformas de processamento heterogêneas.

Veja - não há menção à OCL para GPUs e ao modo de emulação para outros dispositivos. OpenCL é uma linguagem de programação universal para organizar cálculos paralelos em qualquer dispositivo que tenha mais de um núcleo de computação e suporte a OCL. Não se trata de CUDA ou ATI Stream, que são personalizados para GPUs.

Além disso, em alguns casos, a paralelização e os cálculos OCL em CPUs são ainda mais rápidos do que em GPUs. Agora, torno obrigatória a escolha de um dispositivo nas configurações dos meus programas, porque a velocidade dos cálculos depende diretamente da quantidade de dados processados e da "gravidade" dos cálculos (também depende das configurações de entrada) - às vezes é mais rápido na GPU, às vezes na CPU.

 
joo:

O OpenCL (Open Computing Language) é um padrão aberto e livre de royalties para programação paralela de uso geral em CPUs, GPUs e outros processadores, oferecendo aos desenvolvedores de software acesso portátil e eficiente ao poder dessas plataformas de processamento heterogêneas.

Veja - não há menção à OCL para GPUs e ao modo de emulação para outros dispositivos. OpenCL é uma linguagem de programação universal para organizar cálculos paralelos em qualquer dispositivo que tenha mais de um núcleo de computação e suporte a OCL. Não se trata de CUDA ou ATI Stream, que são projetados para GPUs.

Talvez você esteja certo em alguns aspectos, já que a CPU é vista como um dispositivo. Mas alguns dados sugerem que isso é mais parecido com emulação. Por exemplo, há suspeitas de que a gravação de um buffer na memória do dispositivo CLBufferWrite() no caso da CPU é feita apenas "por um tique", porque a CPU tem apenas uma memória global. Entretanto, a CPU também tem um cache, mas não sei o que acontece com ele e como funciona.

Além disso, em alguns casos, a paralelização e os cálculos OCL na CPU são ainda mais rápidos do que na GPU.

Sim, há casos em que, por exemplo, o produto escalar de dot( ) é mais rápido na CPU. Mas eu não especularia sobre o que seria mais rápido se a comparação fosse entre um Core 2 Duo e uma placa de vídeo mais potente do que a do link. Especialmente se você cuidar da otimização do algoritmo. É diferente para CPU e GPU, não importa o que você diga.

 
Mathemat:

Por favor, esclareça o que é necessário habilitar antes. Se for OpenCL, ele já está ativado. Todos os experimentos foram realizados diretamente no MetaEditor 5.

P.S. O principal é que, por meio do OCL, o programador realmente tem acesso a algo que ele não tinha antes. Esses são:

- (S)SSEx, que pode ser incluído no Visual Studio, mas não pode ser incluído na MQL5 sem OCL (sem contar as dlls).

- acesso a cálculos em GPUs discretas, o que acelera ainda mais o que pode ser feito em um único núcleo em MQL5 sem nenhum truque do tipo dll.
.

Eu quis dizer adaptação para computação em nuvem, se você imaginar que cada núcleo do processador é auxiliado por muitas "abelhas famintas" de aceleradores gráficos conectados em rede com muitos computadores, será muito legal e rápido.

Metade do trabalho está feito, agora é só uma questão de ativá-lo para a nuvem....