Discussão do artigo "Redes Neurais de Maneira Fácil (Parte 5): Cálculos em Paralelo com o OpenCL" - página 3

 
Dmitriy Gizlyk:

O uso de operações vetoriais permite que você execute o produto de 4 elementos em paralelo, em vez de sequencialmente. Assista ao vídeo https://ru.coursera.org/lecture/parallelnoye-programmirovaniye/4-1-chto-takoie-viektorizatsiia-i-zachiem-ona-nuzhna-f8lh3. Ele é sobre OpenMP, mas o significado é o mesmo.

Obrigado!

Então a vetorização é feita automaticamente pelo compilador do OpenCL? Não vejo nenhum comando especial no código.

 
Aleksey Vyazmikin:

Obrigado!

Então a vetorização é feita automaticamente pelo compilador para OpenCL? Não vejo nenhum comando especial no código.

Não, não há vetorização automática. No código, primeiro declaramos duas variáveis de vetor.

double4 inp, weight;

Em seguida, gravamos uma parte dos dados nas variáveis de vetor a partir dos buffers de entrada.

         default:
           inp=(double4)(matrix_i[k],matrix_i[k+1],matrix_i[k+2],matrix_i[k+3]);
           weight=(double4)(matrix_w[shift+k],matrix_w[shift+k+1],matrix_w[shift+k+2],matrix_w[shift+k+3]);
           break;

E, em seguida, realizar operações com variáveis de vetor significa realizar operações de vetor. A função ponto usada no código destina-se apenas a operações vetoriais.

      sum+=dot(inp,weight);

Assim, paralelizamos a operação de multiplicação, mas não no nível do thread, e sim no nível de uma operação concreta usando cálculos vetoriais.

 
Dmitriy Gizlyk:

Não, não há vetorização automática. No código, primeiro declaramos 2 variáveis de vetor

Em seguida, gravamos uma parte dos dados nas variáveis de vetor a partir dos buffers de entrada.

E, em seguida, realizar operações com variáveis de vetor significa realizar operações de vetor. A função ponto usada no código destina-se apenas a operações vetoriais.

Assim, paralelizamos a operação de multiplicação, mas não no nível do thread, e sim no nível de uma operação concreta usando cálculos vetoriais.

Ou seja, uma função especial dot() é responsável pela vetorização? Essa vetorização pode ser feita em MQL5 sem OpenCL?

 
Aleksey Vyazmikin:

Ou seja, uma função especial dot() é responsável pela vetorização? Essa vetorização pode ser feita em MQL5 sem OpenCL?

dot realiza apenas o produto escalar. Há outras funções para realizar outras operações.
Não há variáveis vetoriais em MQL.

 
Dmitriy Gizlyk:

dot realiza apenas o produto escalar. Há outras funções para realizar outras operações.
Não há variáveis vetoriais em MQL.

Entendi, obrigado pelo esclarecimento.

 

Apesar da extrema necessidade do artigo e da gratidão ao autor pelo artigo, eu ainda resumo o que realmente está faltando nele:

1. O código do principal programa mql não é considerado, o princípio de negociação em si não é claro

2. Não está claro onde os kernels são chamados.

3. O código contém referências a bibliotecas de terceiros, que não estão descritas no artigo, não está claro

4. Os kernels não são considerados e explicados no próprio artigo, por isso causaram uma discussão tão acalorada no fórum.

5. O kernel em si é escrito de forma muito complicada para a maioria dos usuários sem experiência em OpenCL.

6. O método de treinamento da rede neural não está claro de forma alguma

Esses seis pontos tornam o artigo praticamente inútil para a maioria absoluta.

Vou manter minha opinião:

1. Você precisa criar o código mql de um Expert Advisor muito simples negociando em um indicador simples, escrever sua versão em mql com uma descrição do código e a versão OpenCL e comparar a velocidade, idealmente usando um exemplo pronto como Moving Average.mq5.

2. As chamadas de funções de todas as bibliotecas de terceiros devem ser descritas.

3. Descreva os kernels em detalhes, linha por linha, descreva diversas variantes de kernels e compare o desempenho

4. Descrever detalhadamente a metodologia de treinamento da rede neural.

Bem, é assim que é ....

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Eu gostaria de me familiarizar mais com as redes neurais, para estudá-las a fundo. Mas por onde começar? Me indique algo relevante, mas que não seja difícil.
 
Também estou interessado, mas há tantas fontes que você se afogaria. Por onde começar.
 
O que é o arquivo no arquivo do NeuroNet - copy.mqh?
 
Ivan Titov:
O que é o arquivo NeuroNet.mqh no arquivo?

Limpei um pouco o arquivo NeuroNet.mqh. E, para compatibilidade com EAs de artigos anteriores, salvei a versão antiga em uma cópia.