MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 25

 
fxsaber:

Как отлаживали OpenCL-часть кода?

Запуском и распринтовкой результатов.
 
Fast235:

Ренат, напишите пожалуйста примерно в каких случаях OpenCL даст преимущество, работа с большим кол-вом массивов или если в одном советнике большой набор символов и индикаторов

Если сможете собрать миллионные массивы без кросс-связей и которые можно анализировать параллельно, то можно ускориться.

Вообще тот, кто решает и понимает лимиты своих задач, легко ответит на свой вопрос. Пока нет понимания лимитов (а есть просто мечты "а вот если бы") постоянно с надрывом решаемых задач, параллельность остается просто прикольной идеей.

Большинство задач нельзя эффективно распараллелить, к сожалению.

 
Renat Fatkhullin:

Если сможете собрать миллионные массивы без кросс-связей и которые можно анализировать параллельно, то можно ускориться.

Вообще тот, кто решает и понимает лимиты своих задач, легко ответит на свой вопрос. Пока нет понимания лимитов (а есть просто мечты "а вот если бы") постоянно с надрывом решаемых задач, параллельность остается просто прикольной идеей.

Большинство задач нельзя эффективно распараллелить, к сожалению.

про то, что есть сопроводительные моменты в расчетах, я помню, поэтому и возник вопрос в голове

 
Renat Fatkhullin:
Запуском и распринтовкой результатов.

Разве можно внутри OpenCL-кода ставить распринтовку?

 

Если грубо про OpenCL

Можно представить, что есть процессор с большими (векторными) регистрами, в которые можно записать отдельные N double значений (например пусть N=64, тогда в регистр можно записать 64 значения ).
Такие регистры можно сложить, перемножить и т.д. между собой, получается что за одну команду, можно выполнить действие над N даблами.

Но есть ограничения.

Нельзя оперировать значениями внутри одного регистра, т.е. например нельзя складывать часть значений одного регистра между собой.
По частоте, такой процессор сильно уступает обычному CPU, поэтому использовать его в задачах, где требуется последовательная обработка по одному значению не имеет смысла.
Кроме меньшей частоты, есть ещё ограничение по памяти, загружать и выгружать значения можно только из специальной памяти.
В эту специальную память можно скопировать данные из ОЗУ, но только по очень узкому (медленному) каналу.
Поэтому задачи, в которых нужно обработать большой объём данных, тоже плохо подходят для OpenCL

 
fxsaber:

Разве можно внутри OpenCL-кода ставить распринтовку?

Снаружи.

Давайте ликбез не разводить. Просто берете и читаете все то, что детально создано и расписано про OpenCL нами и вообще в инете.

Поиск по OpenCL:




Вообще очень интересно, что по "opencl trading" в гугле очень много материалов именно с наших ресурсов:


 
Renat Fatkhullin:

Вот сравнения на Питоне 3.8 и MQL5 в single thread/OpenCL режимах: время в секундах, чем меньше, тем лучше

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

Питон в JIT режиме через numba, железо такое:

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

Пример использования OpenCL очень простой и без изысков по его оптимизации. Хотя задача не массивная для OpenCL и у него сработали оверхеды на подготовку, он все равно показал гораздо лучший результат.

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

Файлы для воспроизведения приложены.

Эту задачу с вычислением PI на OpenCL оказывается еще 7 лет назад решили:

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

Есть у кого-нибудь прямые ссылки на то, что нужно скачать? На Intel регистрацию требует.


ЗЫ На Intel GPU в процессоре нужно грохнуть драйвера видеоадаптера, затем установил Intel_OpenCL_driver, после поставить драйвера видеоадаптера. Так все заработало и видео не тормозит.

 

Vict:

Боюсь, что активное использование данной фичи превратит запуск в многоминутный квест.

Не превратит можно включить кэширование.

Renat Fatkhullin:

Вот сравнения на Питоне 3.8 и MQL5 в single thread/OpenCL режимах: время в секундах, чем меньше, тем лучше

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

Питон в JIT режиме через numba, железо такое:

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

В многопоточном режиме вы сравниваете производительнось CPU против GPU  в 10000 потоков. В питоне GPU незадействовано.

Если найду комп с подходящей видеокартой исправлю питоновский код и протестирую на этом компе.Спасибо что напомнили про статьи по OpenCL. Попробую запустить ваш код на CPU, думал обязателен GPU.

Вообще не ставил целью доказывать кто быстрее. Интереснее узнать про ваши планы по интеграции Python.

Планируются торговые функции и события о тиках в питоне?


Всё таки GPU похоже обязателен, "AMD APP SDK" не скачать.
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция: Ордер – это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк...
 
Ilyas:

Если грубо про OpenCL

Можно представить, что есть процессор с большими (векторными) регистрами, в которые можно записать отдельные N double значений (например пусть N=64, тогда в регистр можно записать 64 значения ).
Такие регистры можно сложить, перемножить и т.д. между собой, получается что за одну команду, можно выполнить действие над N даблами.

Но есть ограничения.

Нельзя оперировать значениями внутри одного регистра, т.е. например нельзя складывать часть значений одного регистра между собой.
По частоте, такой процессор сильно уступает обычному CPU, поэтому использовать его в задачах, где требуется последовательная обработка по одному значению не имеет смысла.
Кроме меньшей частоты, есть ещё ограничение по памяти, загружать и выгружать значения можно только из специальной памяти.
В эту специальную память можно скопировать данные из ОЗУ, но только по очень узкому (медленному) каналу.
Поэтому задачи, в которых нужно обработать большой объём данных, тоже плохо подходят для OpenCL

В примере с вычислением PI нет никаких векторов. Там просто общая сумма делится не несколько независимых кусов и отправляется на каждое OpenCL-ядро. В конце все суммируется.

Например, если нет дискретной видеокарты и в CPU 4 ядра физических + 4 виртуальных, то выполнение происходит в восемь раз быстрее. Т.е. куски суммы будут считаться на каждом из ядер параллельно.

Причина обращения: