Обсуждение статьи "Нейросети — это просто (Часть 5): Многопоточные вычисления в OpenCL" - страница 3

 
Dmitriy Gizlyk:

Использование векторных операций позволяет выполнять не последовательно, а параллельно произведение 4-х элементов. Посмотрите видео https://ru.coursera.org/lecture/parallelnoye-programmirovaniye/4-1-chto-takoie-viektorizatsiia-i-zachiem-ona-nuzhna-f8lh3. Там речь об OpenMP, но смысл тот же.

Спасибо!

Т.е. векторизация делается компилятором автоматически для OpenCL? Не вижу в коде специальных команд.

 
Aleksey Vyazmikin:

Спасибо!

Т.е. векторизация делается компилятором автоматически для OpenCL? Не вижу в коде специальных команд.

Нет, автоматической векторизации нет. В коде мы сначала объявляем 2 векторные переменные

double4 inp, weight;

Затем из входящих буферов записываем порцию данных в векторные переменные.

         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;

А затем проведение операций с векторными переменными означает проведение векторных операций. Использованная в коде функция dot предназначена только для векторных операций.

      sum+=dot(inp,weight);

Таким образом мы распараллелили операцию умножения, но уже не на уровне потоков, а на уровне конкретной операции, используя векторные вычисления.

 
Dmitriy Gizlyk:

Нет, автоматической векторизации нет. В коде мы сначала объявляем 2 векторные переменные

Затем из входящих буферов записываем порцию данных в векторные переменные.

А затем проведение операций с векторными переменными означает проведение векторных операций. Использованная в коде функция dot предназначена только для векторных операций.

Таким образом мы распараллелили операцию умножения, но уже не на уровне потоков, а на уровне конкретной операции, используя векторные вычисления.

T.e. за векторизация отвечает специальная функция dot()? А в MQL5 без OpenCL можно делать эту векторизацию?

 
Aleksey Vyazmikin:

T.e. за векторизация отвечает специальная функция dot()? А в MQL5 без OpenCL можно делать эту векторизацию?

dot выполняет только скалярное произведение. Для выполнения других операций есть другие функции.
В MQL нет векторных переменных.

 
Dmitriy Gizlyk:

dot выполняет только скалярное произведение. Для выполнения других операций есть другие функции.
В MQL нет векторных переменных.

Понял, спасибо за разъяснения.

 

Я все таки несмотря на крайнюю нужность статьи и благодарность автору за статью резюмирую чего в ней по настоящему не хватает:

1. Не рассмотрен код основной mql программы, не понятен сам принцип торговли

2. Не понятно где вызывается кернелы

3. В коде ссылки на сторонние библиотеки, которые никак в статье не описываются, это не понятно

4. Кернелы в самой статье не рассмотрены и не объяснены, потому вызвали столь бурное обсуждение на форуме

5. Сам кернел написан ну очень сложно для большинства не опытных в OpenCL пользователей

6. Совсем не понятна методика обучения нейросети

Вот эти 6 пунктов делают статью практически бесполезной для абсолютного большинства.

Останусь при своем мнении:

1. Нужно создать mql код совсем простого советника торгующем на одном простом индикаторе, написать его версию на mql с описанием кода и версию c OpenCL и сравнить скорость, в идеале взять готовый пример типа Moving Average.mq5

2. Вызовы функций из всех сторонних библиотек нужно описать

3. Подробно описать кернелы, прямо построчно, описать несколько вариантов кернелов и сравнить производительность 

4. Подробно описать методику обучения нейросети

ну вот как то так .... 

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Хотелось бы получше ознакомиться с нейросетями, изучить поглубже. Но с чего начать? Посоветуйте что то актуальное, если не трудно.
 
То же интересно, но столько источниов, что утонешь. С чего начать.
 
Что-за файл в архиве NeuroNet — копия.mqh?
 
Ivan Titov:
Что-за файл в архиве NeuroNet — копия.mqh?

Немного почистил файл NeuroNet.mqh. А для совместимости с советниками прошлых статей старую версию сохранил в копии.