Ошибки, баги, вопросы - страница 3253

 
Aleksey Vyazmikin #:

Спасибо!

Я пока только почитал статьи по OpenCL на сайте, но сложилось ощущение, что под разные карты надо адаптировать код, если это так, то как же с агентами это будет работать, если у разных компьютеров разные карты? Сколько карт будет поддерживаться, т.е. смогу я к агентам на одном компьютере привязать 2-3 карты, агент 1 - карта А, агент 2 - карта Б, агент 3 - карта В?

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

Это CUDA является жестко закрытой технологией только под NVIDIA карты. Поэтому мы отказались от нее.

Мы также расширим поддержку OpenCL 3.0, чтобы улучшить производительность (особенно shared memory) и упростить код.


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


 

Просмотр Журнала в отдельном окне:

2022.10.03 09:14:51.430    Trades    '00000': modify order ...
2022.10.03 09:14:51.433    Trades    '00000': accepted modify order ...
2022.10.03 09:14:51.434    Trades    '00000': modify order ...

Да вы издеваетесь!) Где секунды?

 
Renat Fatkhullin #:

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

Это CUDA является жестко закрытой технологией только под NVIDIA карты. Поэтому мы отказались от нее.

Мы также расширим поддержку OpenCL 3.0, чтобы улучшить производительность (особенно shared memory) и упростить код.


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


Про разную подгонку кода под железно я читал тут.

У меня таких настроек в терминале нет, карта стоит сейчас HD7950. Однако, если я правильно понял, то я смогу дать работать устройству вместе с агентом для удаленной оптимизации, правильно? Но я не понимаю, как привязываться агент будет к устройству, или предполагается, что все агенты будут использовать устройство по очереди, тогда не будет ли это наоборот тормозить процесс?

OpenCL: от наивного кодирования - к более осмысленному
OpenCL: от наивного кодирования - к более осмысленному
  • www.mql5.com
В данной статье продемонстрированы некоторые возможности оптимизации, открывающиеся при хотя бы поверхностном учете особенностей "железа", на котором исполняется кернел. Полученные цифры весьма далеки от предельных, но даже они показывают, что при том наборе возможностей, который имеется здесь и сейчас (OpenCL API в реализации разработчиков терминала не позволяет контролировать некоторые важные для оптимизации параметры - - в частности, размер локальной группы), выигрыш в производительности в сравнении с исполнением хостовой программы очень существенен.
 
Sergey Gridnev #:
Ну, как бы, нет.

Уникальным в рамках своей программы - чтобы искать объект по своему имени, а не по имени графического ресурса.

Или что Вы имели в виду под неуникальностью своего собственного имени в программе?

 
Aleksey Vyazmikin #:

Про разную подгонку кода под железно я читал тут.

У меня таких настроек в терминале нет, карта стоит сейчас HD7950. Однако, если я правильно понял, то я смогу дать работать устройству вместе с агентом для удаленной оптимизации, правильно? Но я не понимаю, как привязываться агент будет к устройству, или предполагается, что все агенты будут использовать устройство по очереди, тогда не будет ли это наоборот тормозить процесс?

Обратите внимание, что статья 2012 года и описывает реалии 2012 года. В то время даже OpenCL драйверы (а внутри компиляторы OpenCL кода) были массово глючными.

Подгонять код не надо, если не ходить по краю допустимого. Вполне достаточно протестировать AMD, NVIDIA и CPU версии.

Боюсь, с HD7950 особых успехов не будет (это карта 2012 года) - возьмите любой OpenCL тест на MQL5 и посмотрите, что напишет терминал в логах при активации устройства.

 
Renat Fatkhullin #:

Обратите внимание, что статья 2012 года и описывает реалии 2012 года. В то время даже OpenCL драйверы (а внутри компиляторы OpenCL кода) были массово глючными.

Подгонять код не надо, если не ходить по краю допустимого. Вполне достаточно протестировать AMD, NVIDIA и CPU версии.

Боюсь, с HD7950 особых успехов не будет (это карта 2012 года) - возьмите любой OpenCL тест на MQL5 и посмотрите, что напишет терминал в логах при активации устройства.

Да, у меня железо 2012 года, поэтому статья актуальной показалась :)

Вроде как эффект от карты есть -  тесты встроенных скриптов проходит.

2022.10.03 22:48:25.101 BitonicSort (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:48:34.802 BitonicSort (EURUSD,H1) Bitonic sort finished. Total stages=25, total passes=325
2022.10.03 22:48:34.808 BitonicSort (EURUSD,H1) time CPU=8065 ms, time GPU =1013 ms, CPU/GPU ratio: 7.961500
2022.10.03 22:48:35.013 BitonicSort (EURUSD,H1) Total error = 0.000000
2022.10.03 22:49:25.359 FFT (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:49:25.633 FFT (EURUSD,H1) FFT calculation for 16384 points.
2022.10.03 22:49:25.633 FFT (EURUSD,H1) time CPU=11043 microseconds, time GPU =4312 microseconds, CPU/GPU ratio: 2.560993
2022.10.03 22:49:25.633 FFT (EURUSD,H1) Average error = 0.015105
2022.10.03 22:50:10.795 MatrixMult (EURUSD,H1)  OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:50:12.108 MatrixMult (EURUSD,H1)  time CPU=33039 ms, time GPU global work groups =1189 ms, CPU/GPU ratio: 27.787216
2022.10.03 22:50:12.108 MatrixMult (EURUSD,H1)  time CPU=33039 ms, time GPU local work groups  =25 ms, CPU/GPU ratio: 1321.560000
2022.10.03 22:50:12.121 MatrixMult (EURUSD,H1)  Total error for method 1 = 0.000000
2022.10.03 22:50:12.121 MatrixMult (EURUSD,H1)  Total error for method 2 = 0.000000
2022.10.03 22:50:48.545 Wavelet (EURUSD,H1)     OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:50:48.677 Wavelet (EURUSD,H1)     time CPU=8377 ms, time GPU=47 ms, CPU/GPU ratio: 178.234043
2022.10.03 22:51:35.991 BitonicSort (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:51:45.209 BitonicSort (EURUSD,H1) Bitonic sort finished. Total stages=25, total passes=325
2022.10.03 22:51:45.217 BitonicSort (EURUSD,H1) time CPU=8239 ms, time GPU =495 ms, CPU/GPU ratio: 16.644444
2022.10.03 22:51:45.414 BitonicSort (EURUSD,H1) Total error = 0.000000
2022.10.03 22:52:07.951 FFT (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:52:08.194 FFT (EURUSD,H1) FFT calculation for 16384 points.
2022.10.03 22:52:08.194 FFT (EURUSD,H1) time CPU=10389 microseconds, time GPU =4263 microseconds, CPU/GPU ratio: 2.437016
2022.10.03 22:52:08.195 FFT (EURUSD,H1) Average error = 0.004486
2022.10.03 22:52:42.853 MatrixMult (EURUSD,H1)  OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:52:43.896 MatrixMult (EURUSD,H1)  time CPU=30631 ms, time GPU global work groups =941 ms, CPU/GPU ratio: 32.551541
2022.10.03 22:52:43.896 MatrixMult (EURUSD,H1)  time CPU=30631 ms, time GPU local work groups  =13 ms, CPU/GPU ratio: 2356.230769
2022.10.03 22:52:43.908 MatrixMult (EURUSD,H1)  Total error for method 1 = 0.000000
2022.10.03 22:52:43.908 MatrixMult (EURUSD,H1)  Total error for method 2 = 0.000000
2022.10.03 22:53:10.568 Wavelet (EURUSD,H1)     OpenCL: GPU device 'Tahiti' selected
2022.10.03 22:53:10.695 Wavelet (EURUSD,H1)     time CPU=9688 ms, time GPU=31 ms, CPU/GPU ratio: 312.516129
 
Artyom Trishkin #:

Уникальным в рамках своей программы - чтобы искать объект по своему имени, а не по имени графического ресурса.

Или что Вы имели в виду под неуникальностью своего собственного имени в программе?

Если посмотреть на код, то видно, что несмотря на неуникальность параметра "name" имя ресурса будет уникально из-за включения в него миллисекунд и случайного числа.
 
Sergey Gridnev #:
Если посмотреть на код, то видно, что несмотря на неуникальность параметра "name" имя ресурса будет уникально из-за включения в него миллисекунд и случайного числа.

Я вообще-то о другом говорил. Я говорил об уникальности краткого имени в своей программе - для собственного удобства. Как удобнее, каждый графический объект в программе называть, например, "obj", и потом считывать и помнить имя графического ресурса, или называть коротким уникальным именем и не заботиться о запоминании имён графических ресурсов, которые при каждом новом запуске/перезапуске будут иными? Или Вам просто захотелось подискутировать ни о чём?

 

Существует ли способ определения, что на интересуемом чарте советник работает?


Например, такой советник не работает, но висит на чарте.

void OnTick()
{
  int i = 0;
  
  Print(1 / i);
}

Хотелось бы понять, среди запущенных боевых советников есть ли подобные "висяки"? Городить через EventChartCustom систему вопрос-ответ для подобной задачи - плохо. Т.к. опрашиваемый советник может быть в паузе ожидания ответа: OrderSend, CopyRates, CopyTicks. Да и советники без исходников - обычное дело.

 
Artyom Trishkin #:

Или Вам просто захотелось подискутировать ни о чём?

У Вас какие-то обиды не к месту.