Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5
Aleksey Vyazmikin, 2022.11.05 11:05
Так как тема о вчерашнем обновлении терминала самоликвидировалась пока я писал сообщение, то спрошу тут.
Итак, в последнем обновлении появилась возможность выбирать устройства для работы с OpenCL в терминале, в частности разрешать их продавать в клауд и использовать для оптимизации на локальных компьютерах и в своей сети, в связи с этим вопросы:
1. Как программе на MQL5 принудительно указать, какое устройство использовать для вычислений?
2. Как привязать устройство к конкретному агенты? Ведь очевидно, что при оптимизации только один агент будет рационально использовать устройство, в противном случае будет большая очередь.
3. Как в клауде рассчитывается стоимость устройства - на скринах видел там на порядок другой оценочный коэффициент?
4. Как в клауде выбрать агентов с нужным мне устройством - ведь у карт разная архитектура, и возможно, что мне достаточно старого и дешёвого поколения для вычислений, так как в моих задачах прирост будет минимален.
И тут же спрошу, если при отправке кода на исполнение в OpenCL через стандартный класс указать число задач в локальной группе более 10 то вычисления не происходят - возвращается массив с нулями, при этом этот показатель влияет на точность расчетов, что как то не логично.
Какое там значение ставиться по умолчанию, зависит ли оно как то от архитектуры самой карты?
1. Вы сами в настройках терминала можете включить и отключить нужные OpenCL устройства
В MQL5 программе у вас есть два метода выбора OpenCL устройств:
В зависимости от того, что разрешено в настройках, будет выбираться нужное устройство. Приоритет за более быстрыми устройствами при равных условиях.
2. В агентах OpenCL еще не используется, мы сначала готовим полноценное использование в самом терминале в следующих релизах
3. ответ выше
4. ответ выше
1. Вы сами в настройках терминала можете включить и отключить нужные OpenCL устройства
В MQL5 программе у вас есть два метода выбора OpenCL устройств:
В зависимости от того, что разрешено в настройках, будет выбираться нужное устройство. Приоритет за более быстрыми устройствами при равных условиях.
2. В агентах OpenCL еще не используется, мы сначала готовим полноценное использование в самом терминале в следующих релизах
3. ответ выше
4. ответ выше
Про выбор устройства в терминале понятно - спасибо.
Про то, что агенты ещё не поддерживают OpenCL и ответы не будут даны на вытекающие из поддержки вопросы - понял.
Возможно ли будет сразу запускать задачу на нескольких устройствах?
Что стоит основного ожидать от "полноценной поддержки в следующих релизах"?
И всё же, хотел бы понять про параметр "const uint &local_work_size[]"
Посмотрите примеры использования этого параметра в MQL5\Scripts\Examples\OpenCL\Float\FFT.mq5
Плюс документацию на саму официальную спецификацию OpenCL. Спецификация независима от карт, так что не имеет смысла задавать вопросы про специфичность того или иного устройства.
А почему вы считаете const чудом, отменяющим результаты создания/удаления обьекта в цикле?
Потому что компилятор, а не интерпретатор. Должен был выкинуть const-объект и сделать напрямую.
Потому что компилятор, а не интерпретатор. Должен был выкинуть const-объект и сделать напрямую.
Не должен.
Объект не может быть сконструирован/пропущен частично на основе запредельной логики минимализма использования. Иначе на каждый инстанс объекта пришлось бы строить полный граф использования каждого члена.
На простых типах типа int такое легко делается, но не для сложного/любого объекта/структуры.
Ренат,
можно ли провести аудит EventChartCustom()
Вот такой код выдает:
Print("start");
double marker;
long ch = ChartID();
for (int i = 0; i < 50; i++) {
marker = GetMicrosecondCount();
EventChartCustom(ch, 1011, 123, 0, "");
marker = (GetMicrosecondCount() - marker) / 1000.0;
Print(marker);
}
Выдает вот такой результат:
start
11.484
1.058
0.085
0.187
0.169
0.139
0.535
0.145
0.056
...
Поскольку эта функция вызывается редко в коде, то average получается 3-4 мсек, что странно...