Я пока только почитал статьи по OpenCL на сайте, но сложилось ощущение, что под разные карты надо адаптировать код, если это так, то как же с агентами это будет работать, если у разных компьютеров разные карты? Сколько карт будет поддерживаться, т.е. смогу я к агентам на одном компьютере привязать 2-3 карты, агент 1 - карта А, агент 2 - карта Б, агент 3 - карта В?
Прелесть открытой OpenCL спецификации в том, что код единый для всех устройств.
Это CUDA является жестко закрытой технологией только под NVIDIA карты. Поэтому мы отказались от нее.
Мы также расширим поддержку OpenCL 3.0, чтобы улучшить производительность (особенно shared memory) и упростить код.
В настройках OpenCL можно управлять всеми устройствами, сортируя их по рейтингу и отключая ненужные. Терминал и тестеры будут использовать более-менее равномерно все разрешенные устройтва.
Прелесть открытой OpenCL спецификации в том, что код единый для всех устройств.
Это CUDA является жестко закрытой технологией только под NVIDIA карты. Поэтому мы отказались от нее.
Мы также расширим поддержку OpenCL 3.0, чтобы улучшить производительность (особенно shared memory) и упростить код.
В настройках OpenCL можно управлять всеми устройствами, сортируя их по рейтингу и отключая ненужные. Терминал и тестеры будут использовать более-менее равномерно все разрешенные устройтва.
У меня таких настроек в терминале нет, карта стоит сейчас HD7950. Однако, если я правильно понял, то я смогу дать работать устройству вместе с агентом для удаленной оптимизации, правильно? Но я не понимаю, как привязываться агент будет к устройству, или предполагается, что все агенты будут использовать устройство по очереди, тогда не будет ли это наоборот тормозить процесс?
В данной статье продемонстрированы некоторые возможности оптимизации, открывающиеся при хотя бы поверхностном учете особенностей "железа", на котором исполняется кернел. Полученные цифры весьма далеки от предельных, но даже они показывают, что при том наборе возможностей, который имеется здесь и сейчас (OpenCL API в реализации разработчиков терминала не позволяет контролировать некоторые важные для оптимизации параметры - - в частности, размер локальной группы), выигрыш в производительности в сравнении с исполнением хостовой программы очень существенен.
У меня таких настроек в терминале нет, карта стоит сейчас HD7950. Однако, если я правильно понял, то я смогу дать работать устройству вместе с агентом для удаленной оптимизации, правильно? Но я не понимаю, как привязываться агент будет к устройству, или предполагается, что все агенты будут использовать устройство по очереди, тогда не будет ли это наоборот тормозить процесс?
Обратите внимание, что статья 2012 года и описывает реалии 2012 года. В то время даже OpenCL драйверы (а внутри компиляторы OpenCL кода) были массово глючными.
Подгонять код не надо, если не ходить по краю допустимого. Вполне достаточно протестировать AMD, NVIDIA и CPU версии.
Боюсь, с HD7950 особых успехов не будет (это карта 2012 года) - возьмите любой OpenCL тест на MQL5 и посмотрите, что напишет терминал в логах при активации устройства.
Обратите внимание, что статья 2012 года и описывает реалии 2012 года. В то время даже OpenCL драйверы (а внутри компиляторы OpenCL кода) были массово глючными.
Подгонять код не надо, если не ходить по краю допустимого. Вполне достаточно протестировать AMD, NVIDIA и CPU версии.
Боюсь, с HD7950 особых успехов не будет (это карта 2012 года) - возьмите любой OpenCL тест на MQL5 и посмотрите, что напишет терминал в логах при активации устройства.
Да, у меня железо 2012 года, поэтому статья актуальной показалась :)
Вроде как эффект от карты есть - тесты встроенных скриптов проходит.
2022.10.0322:48:25.101 BitonicSort (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:48:34.802 BitonicSort (EURUSD,H1) Bitonic sort finished. Total stages=25, total passes=3252022.10.0322:48:34.808 BitonicSort (EURUSD,H1) time CPU=8065 ms, time GPU =1013 ms, CPU/GPU ratio: 7.9615002022.10.0322:48:35.013 BitonicSort (EURUSD,H1) Total error = 0.0000002022.10.0322:49:25.359 FFT (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:49:25.633 FFT (EURUSD,H1) FFT calculation for16384 points.
2022.10.0322:49:25.633 FFT (EURUSD,H1) time CPU=11043 microseconds, time GPU =4312 microseconds, CPU/GPU ratio: 2.5609932022.10.0322:49:25.633 FFT (EURUSD,H1) Average error = 0.0151052022.10.0322:50:10.795 MatrixMult (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:50:12.108 MatrixMult (EURUSD,H1) time CPU=33039 ms, time GPU global work groups =1189 ms, CPU/GPU ratio: 27.7872162022.10.0322:50:12.108 MatrixMult (EURUSD,H1) time CPU=33039 ms, time GPU local work groups =25 ms, CPU/GPU ratio: 1321.5600002022.10.0322:50:12.121 MatrixMult (EURUSD,H1) Total error for method 1 = 0.0000002022.10.0322:50:12.121 MatrixMult (EURUSD,H1) Total error for method 2 = 0.0000002022.10.0322:50:48.545 Wavelet (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:50:48.677 Wavelet (EURUSD,H1) time CPU=8377 ms, time GPU=47 ms, CPU/GPU ratio: 178.2340432022.10.0322:51:35.991 BitonicSort (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:51:45.209 BitonicSort (EURUSD,H1) Bitonic sort finished. Total stages=25, total passes=3252022.10.0322:51:45.217 BitonicSort (EURUSD,H1) time CPU=8239 ms, time GPU =495 ms, CPU/GPU ratio: 16.6444442022.10.0322:51:45.414 BitonicSort (EURUSD,H1) Total error = 0.0000002022.10.0322:52:07.951 FFT (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:52:08.194 FFT (EURUSD,H1) FFT calculation for16384 points.
2022.10.0322:52:08.194 FFT (EURUSD,H1) time CPU=10389 microseconds, time GPU =4263 microseconds, CPU/GPU ratio: 2.4370162022.10.0322:52:08.195 FFT (EURUSD,H1) Average error = 0.0044862022.10.0322:52:42.853 MatrixMult (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:52:43.896 MatrixMult (EURUSD,H1) time CPU=30631 ms, time GPU global work groups =941 ms, CPU/GPU ratio: 32.5515412022.10.0322:52:43.896 MatrixMult (EURUSD,H1) time CPU=30631 ms, time GPU local work groups =13 ms, CPU/GPU ratio: 2356.2307692022.10.0322:52:43.908 MatrixMult (EURUSD,H1) Total error for method 1 = 0.0000002022.10.0322:52:43.908 MatrixMult (EURUSD,H1) Total error for method 2 = 0.0000002022.10.0322:53:10.568 Wavelet (EURUSD,H1) OpenCL: GPU device 'Tahiti' selected
2022.10.0322:53:10.695 Wavelet (EURUSD,H1) time CPU=9688 ms, time GPU=31 ms, CPU/GPU ratio: 312.516129
Уникальным в рамках своей программы - чтобы искать объект по своему имени, а не по имени графического ресурса.
Или что Вы имели в виду под неуникальностью своего собственного имени в программе?
Если посмотреть на код, то видно, что несмотря на неуникальность параметра "name" имя ресурса будет уникально из-за включения в него миллисекунд и случайного числа.
Sergey Gridnev #: Если посмотреть на код, то видно, что несмотря на неуникальность параметра "name" имя ресурса будет уникально из-за включения в него миллисекунд и случайного числа.
Я вообще-то о другом говорил. Я говорил об уникальности краткого имени в своей программе - для собственного удобства. Как удобнее, каждый графический объект в программе называть, например, "obj", и потом считывать и помнить имя графического ресурса, или называть коротким уникальным именем и не заботиться о запоминании имён графических ресурсов, которые при каждом новом запуске/перезапуске будут иными? Или Вам просто захотелось подискутировать ни о чём?
Существует ли способ определения, что на интересуемом чарте советник работает?
Например, такой советник не работает, но висит на чарте.
voidOnTick()
{
int i = 0;
Print(1 / i);
}
Хотелось бы понять, среди запущенных боевых советников есть ли подобные "висяки"? Городить через EventChartCustom систему вопрос-ответ для подобной задачи - плохо. Т.к. опрашиваемый советник может быть в паузе ожидания ответа: OrderSend, CopyRates, CopyTicks. Да и советники без исходников - обычное дело.
Спасибо!
Я пока только почитал статьи по 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 ...
Да вы издеваетесь!) Где секунды?
Прелесть открытой OpenCL спецификации в том, что код единый для всех устройств.
Это CUDA является жестко закрытой технологией только под NVIDIA карты. Поэтому мы отказались от нее.
Мы также расширим поддержку OpenCL 3.0, чтобы улучшить производительность (особенно shared memory) и упростить код.
В настройках OpenCL можно управлять всеми устройствами, сортируя их по рейтингу и отключая ненужные. Терминал и тестеры будут использовать более-менее равномерно все разрешенные устройтва.
Про разную подгонку кода под железно я читал тут.
У меня таких настроек в терминале нет, карта стоит сейчас HD7950. Однако, если я правильно понял, то я смогу дать работать устройству вместе с агентом для удаленной оптимизации, правильно? Но я не понимаю, как привязываться агент будет к устройству, или предполагается, что все агенты будут использовать устройство по очереди, тогда не будет ли это наоборот тормозить процесс?
Ну, как бы, нет.
Уникальным в рамках своей программы - чтобы искать объект по своему имени, а не по имени графического ресурса.
Или что Вы имели в виду под неуникальностью своего собственного имени в программе?
Про разную подгонку кода под железно я читал тут.
У меня таких настроек в терминале нет, карта стоит сейчас HD7950. Однако, если я правильно понял, то я смогу дать работать устройству вместе с агентом для удаленной оптимизации, правильно? Но я не понимаю, как привязываться агент будет к устройству, или предполагается, что все агенты будут использовать устройство по очереди, тогда не будет ли это наоборот тормозить процесс?
Обратите внимание, что статья 2012 года и описывает реалии 2012 года. В то время даже OpenCL драйверы (а внутри компиляторы OpenCL кода) были массово глючными.
Подгонять код не надо, если не ходить по краю допустимого. Вполне достаточно протестировать AMD, NVIDIA и CPU версии.
Боюсь, с HD7950 особых успехов не будет (это карта 2012 года) - возьмите любой OpenCL тест на MQL5 и посмотрите, что напишет терминал в логах при активации устройства.
Обратите внимание, что статья 2012 года и описывает реалии 2012 года. В то время даже OpenCL драйверы (а внутри компиляторы OpenCL кода) были массово глючными.
Подгонять код не надо, если не ходить по краю допустимого. Вполне достаточно протестировать AMD, NVIDIA и CPU версии.
Боюсь, с HD7950 особых успехов не будет (это карта 2012 года) - возьмите любой OpenCL тест на MQL5 и посмотрите, что напишет терминал в логах при активации устройства.
Да, у меня железо 2012 года, поэтому статья актуальной показалась :)
Вроде как эффект от карты есть - тесты встроенных скриптов проходит.
Уникальным в рамках своей программы - чтобы искать объект по своему имени, а не по имени графического ресурса.
Или что Вы имели в виду под неуникальностью своего собственного имени в программе?
Если посмотреть на код, то видно, что несмотря на неуникальность параметра "name" имя ресурса будет уникально из-за включения в него миллисекунд и случайного числа.
Я вообще-то о другом говорил. Я говорил об уникальности краткого имени в своей программе - для собственного удобства. Как удобнее, каждый графический объект в программе называть, например, "obj", и потом считывать и помнить имя графического ресурса, или называть коротким уникальным именем и не заботиться о запоминании имён графических ресурсов, которые при каждом новом запуске/перезапуске будут иными? Или Вам просто захотелось подискутировать ни о чём?
Существует ли способ определения, что на интересуемом чарте советник работает?
Например, такой советник не работает, но висит на чарте.
Хотелось бы понять, среди запущенных боевых советников есть ли подобные "висяки"? Городить через EventChartCustom систему вопрос-ответ для подобной задачи - плохо. Т.к. опрашиваемый советник может быть в паузе ожидания ответа: OrderSend, CopyRates, CopyTicks. Да и советники без исходников - обычное дело.
Или Вам просто захотелось подискутировать ни о чём?