MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 25
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как отлаживали OpenCL-часть кода?
Ренат, напишите пожалуйста примерно в каких случаях OpenCL даст преимущество, работа с большим кол-вом массивов или если в одном советнике большой набор символов и индикаторов
Если сможете собрать миллионные массивы без кросс-связей и которые можно анализировать параллельно, то можно ускориться.
Вообще тот, кто решает и понимает лимиты своих задач, легко ответит на свой вопрос. Пока нет понимания лимитов (а есть просто мечты "а вот если бы") постоянно с надрывом решаемых задач, параллельность остается просто прикольной идеей.
Большинство задач нельзя эффективно распараллелить, к сожалению.
Если сможете собрать миллионные массивы без кросс-связей и которые можно анализировать параллельно, то можно ускориться.
Вообще тот, кто решает и понимает лимиты своих задач, легко ответит на свой вопрос. Пока нет понимания лимитов (а есть просто мечты "а вот если бы") постоянно с надрывом решаемых задач, параллельность остается просто прикольной идеей.
Большинство задач нельзя эффективно распараллелить, к сожалению.
про то, что есть сопроводительные моменты в расчетах, я помню, поэтому и возник вопрос в голове
Запуском и распринтовкой результатов.
Разве можно внутри OpenCL-кода ставить распринтовку?
Если грубо про OpenCL
Можно представить, что есть процессор с большими (векторными) регистрами, в которые можно записать отдельные N double значений (например пусть N=64, тогда в регистр можно записать 64 значения ).
Такие регистры можно сложить, перемножить и т.д. между собой, получается что за одну команду, можно выполнить действие над N даблами.
Но есть ограничения.
Нельзя оперировать значениями внутри одного регистра, т.е. например нельзя складывать часть значений одного регистра между собой.
По частоте, такой процессор сильно уступает обычному CPU, поэтому использовать его в задачах, где требуется последовательная обработка по одному значению не имеет смысла.
Кроме меньшей частоты, есть ещё ограничение по памяти, загружать и выгружать значения можно только из специальной памяти.
В эту специальную память можно скопировать данные из ОЗУ, но только по очень узкому (медленному) каналу.
Поэтому задачи, в которых нужно обработать большой объём данных, тоже плохо подходят для OpenCL
Разве можно внутри OpenCL-кода ставить распринтовку?
Снаружи.
Давайте ликбез не разводить. Просто берете и читаете все то, что детально создано и расписано про OpenCL нами и вообще в инете.
Поиск по OpenCL:
Вообще очень интересно, что по "opencl trading" в гугле очень много материалов именно с наших ресурсов:
Вот сравнения на Питоне 3.8 и MQL5 в single thread/OpenCL режимах: время в секундах, чем меньше, тем лучше
Питон в JIT режиме через numba, железо такое:
Пример использования OpenCL очень простой и без изысков по его оптимизации. Хотя задача не массивная для OpenCL и у него сработали оверхеды на подготовку, он все равно показал гораздо лучший результат.
С OpenCL можно штатно гонять очень большие параллельные вычисления. Порог входа не большой, достаточно одного дня поразбираться, чтобы понять как его использовать.
Файлы для воспроизведения приложены.
Эту задачу с вычислением PI на OpenCL оказывается еще 7 лет назад решили:
Есть у кого-нибудь прямые ссылки на то, что нужно скачать? На Intel регистрацию требует.
ЗЫ На Intel GPU в процессоре нужно грохнуть драйвера видеоадаптера, затем установил Intel_OpenCL_driver, после поставить драйвера видеоадаптера. Так все заработало и видео не тормозит.
Vict:
Боюсь, что активное использование данной фичи превратит запуск в многоминутный квест.
Не превратит можно включить кэширование.
Вот сравнения на Питоне 3.8 и MQL5 в single thread/OpenCL режимах: время в секундах, чем меньше, тем лучше
Питон в JIT режиме через numba, железо такое:
В многопоточном режиме вы сравниваете производительнось CPU против GPU в 10000 потоков. В питоне GPU незадействовано.
Если найду комп с подходящей видеокартой исправлю питоновский код и протестирую на этом компе.Спасибо что напомнили про статьи по OpenCL. Попробую запустить ваш код на CPU, думал обязателен GPU.
Вообще не ставил целью доказывать кто быстрее. Интереснее узнать про ваши планы по интеграции Python.
Планируются торговые функции и события о тиках в питоне?
Всё таки GPU похоже обязателен, "AMD APP SDK" не скачать.
Если грубо про OpenCL
Можно представить, что есть процессор с большими (векторными) регистрами, в которые можно записать отдельные N double значений (например пусть N=64, тогда в регистр можно записать 64 значения ).
Такие регистры можно сложить, перемножить и т.д. между собой, получается что за одну команду, можно выполнить действие над N даблами.
Но есть ограничения.
Нельзя оперировать значениями внутри одного регистра, т.е. например нельзя складывать часть значений одного регистра между собой.
По частоте, такой процессор сильно уступает обычному CPU, поэтому использовать его в задачах, где требуется последовательная обработка по одному значению не имеет смысла.
Кроме меньшей частоты, есть ещё ограничение по памяти, загружать и выгружать значения можно только из специальной памяти.
В эту специальную память можно скопировать данные из ОЗУ, но только по очень узкому (медленному) каналу.
Поэтому задачи, в которых нужно обработать большой объём данных, тоже плохо подходят для OpenCL
В примере с вычислением PI нет никаких векторов. Там просто общая сумма делится не несколько независимых кусов и отправляется на каждое OpenCL-ядро. В конце все суммируется.
Например, если нет дискретной видеокарты и в CPU 4 ядра физических + 4 виртуальных, то выполнение происходит в восемь раз быстрее. Т.е. куски суммы будут считаться на каждом из ядер параллельно.