Графические карты могут помочь в Backtest? - страница 2

 
Volchanskiy Alexey:


Благодарность за вход, я буду читать этой статьи.
 
Vasiliy Sokolov:
Несколько прогонов советников с разными параметрами - разве не векторная операция? Параллелизация прогонов напрашивается сама собой.

Всё правильно, MT5 как раз распаралеливает оптимизацию по всем логическим ядрам процессора, и тестирует сразу по нескольким разным комбинациям параметров одновременно. У кого процессор Intel core i7 или старшие модели core i5 - может одновременно тестировать сразу по 8 комбинаций параметров. Но видеокарта не способна контролировать весь процесс тестирования советника, у неё нет таких возможностей, такое распаралеливание возможно только на ядрах CPU.

MT4 например так не может, он всегда тестирует все комбинации параметров по очереди.

 
Так есть же статьи на эту тему, вот одна https://www.mql5.com/ru/articles/407 из серии статей. Есть примеры готовых скриптов, на которых можно посмотреть разницу в производительности gpu от cpu, или просто распределения на несколько кернелов. Я проверял на своей карточке - производительность в разы выше чем на проце.. Правда в бэктесте не пробовал, но какая разница.. Можно маленько код примеров подправить да посмотреть чо будет..
OpenCL: от наивного кодирования - к более осмысленному
OpenCL: от наивного кодирования - к более осмысленному
  • 2012.06.05
  • Sceptic Philozoff
  • www.mql5.com
В данной статье продемонстрированы некоторые возможности оптимизации, открывающиеся при хотя бы поверхностном учете особенностей "железа", на котором исполняется кернел. Полученные цифры весьма далеки от предельных, но даже они показывают, что при том наборе возможностей, который имеется здесь и сейчас (OpenCL API в реализации разработчиков терминала не позволяет контролировать некоторые важные для оптимизации параметры - - в частности, размер локальной группы), выигрыш в производительности в сравнении с исполнением хостовой программы очень существенен.
 
Dr.Trader:

MT4 например так не может, он всегда тестирует все комбинации параметров по очереди.

Очень спорное утверждение. При оптимизации в МТ4 все ядра ЦП заняты. Спрашивается, чем они заняты, если не параллельными прогонами?

Dr.Trader:

Всё правильно, MT5 как раз распаралеливает оптимизацию по всем логическим ядрам процессора, и тестирует сразу по нескольким разным комбинациям параметров одновременно. У кого процессор Intel core i7 или старшие модели core i5 - может одновременно тестировать сразу по 8 комбинаций параметров. Но видеокарта не способна контролировать весь процесс тестирования советника, у неё нет таких возможностей, такое распаралеливание возможно только на ядрах CPU.

Речь идет именно о аппаратной неспособности организовать распараллеливание, если да, то о каких именно?

Alexey Volchanskiy:

Это не векторизация, а параллельное выполнение потоков Windows под ЦП x64. У карт своя особая архитектура, отличная от x64. Проще тогда уж это использовать, архитектуры близки. http://www.intel.ru/content/www/ru/ru/processors/xeon/xeon-phi-detail.html

Т.е. запускать параллельную обработку нескольких задач на GPU нельзя?
 
Vasiliy Sokolov:

Т.е. запускать параллельную обработку нескольких задач на GPU нельзя?

В терминологии Windows задачей называют программу, в которой может быть несколько потоков. Наверное, все же потоки имелись в виду?

Разумеется можно, но напрямую перенести код x86/64 на карту нельзя, вы же сами понимаете. Кстати, тут писали про OpenCL, это работает в оптимизаторе МТ5? Я проверить не могу, карта слабая - не игрок.

 
Alexey Volchanskiy:
Разумеется можно, но напрямую перенести код x86/64 на карту нельзя, вы же сами понимаете. Кстати, тут писали про OpenCL, это работает в оптимизаторе МТ5? Я проверить не могу, карта слабая - не игрок.
Можнож и на cpu на ядра распределить, тоже скорость повысится, не обязательно gpu
 
Maxim Dmitrievsky:
Можнож и на cpu на ядра распределить, тоже скорость повысится, не обязательно gpu
Ну это MQ давно сделали, тут же карты обсуждали 
 
Alexey Volchanskiy:
Ну это MQ давно сделали, тут же карты обсуждали 
При обычном тестировании (не оптимизации) одно ядро используется всегда ведь. По крайней мере у меня в тестере всегда одно из 6-и. А через openCl все можно подгрузить наверно. Надо попробовать будет ага
 

mt4 не использует больше одного потока, вы наверное с mt5 путаете. Или ваш советник использует dll которая в свою очередь использует параллельные вычисления на всех ядрах. Иногда специально запускаю сразу несколько mt4 терминалов и каждому даю разные параметры для оптимизации, чтоб ускорить процесс.

Видеокарты не поддерживают инструкции intel процессоров, они просто физически неспособны выполнять такой код. Их процессоры строго заточены под только математические операции. А советнику для работы нужно ещё много чего что доступно только у CPU, регистры и стэк например. Код советника аппаратно не исполняем на процессоре gpu.

GPU может параллельно выполнять одинаковый код на большом объёме данных. Например увеличить на 1 значения сразу во всех ячейках большой таблицы. Или перемножить значения соответствующих ячеек двух таблиц. Если нужно параллельно выполнить совершенно разные операции - то gpu уже не поможет. На крайняк можно по каким-то логическим условиям в одних случаях например делить, а в других случаях умножать числа, но весь этот код всё равно должен быть внутри одной функции, которая должна получить ещё и ссылки на все исходные массивы данных.

 
Dr.Trader:

mt4 не использует больше одного потока, вы наверное с mt5 путаете. Или ваш советник использует dll которая в свою очередь использует параллельные вычисления на всех ядрах. Иногда специально запускаю сразу несколько mt4 терминалов и каждому даю разные параметры для оптимизации, чтоб ускорить процесс.

Видеокарты не поддерживают инструкции intel процессоров, они просто физически неспособны выполнять такой код. Их процессоры строго заточены под только математические операции. А советнику для работы нужно ещё много чего что доступно только у CPU, регистры и стэк например. Код советника аппаратно не исполняем на процессоре gpu.

GPU может параллельно выполнять одинаковый код на большом объёме данных. Например увеличить на 1 значения сразу во всех ячейках большой таблицы. Или перемножить значения соответствующих ячеек двух таблиц. Если нужно параллельно выполнить совершенно разные операции - то gpu уже не поможет. На крайняк можно по каким-то логическим условиям в одних случаях например делить, а в других случаях умножать числа, но весь этот код всё равно должен быть внутри одной функции, которая должна получить ещё и ссылки на все исходные массивы данных.

Про мт5 и разговор да, что и как передавать описано в статье, только там скрипты, а интересно в тестере будет работать распределение или нет. В реале то все гуд.