Вот что можно сделать с OpenCL прямо в терминале MetaTrader 5 без всяких DLL - страница 5

 
Renat Fatkhullin:

На этом фоне AMD выглядит выигрышной не только за счет явно более быстрых мат расчетов (майнерские фермы на АМД обычно собирают), но и за свою стратегию открытых стандартов(они очень много открыли и продвигают в паблик). Внедрение OpenCL 2.0 в AMD картах вплотную приблизил эту спецификацию к возможностям CUDA и теперь вообще нет смысла закладываться на CUDA.

Вот это полезная информация, а то я когда-то лет 7 назад с CUDA игрался, думал, она и сейчас рулит. 

Вопрос - а что сейчас с отладчиками под OpenCL? Я не про терминал МТ5, а в общем плане. Пока видел только отладчик от Intel, как плагин к Visual Studio и автономный дебаггер (depricated) от нее же. Но вроде там заточка именно на процессоры от Intel и на ее встроенную графику. И вообще плохо понимаю, как параллельный код отлаживать, для меня это пока чисто черный ящик.

 

С CUDA можно работать только для себя или для специфических направлений, где можно требовать явного наличия Nvidia карт.

Да, раньше CUDA имела больше возможностей. Но с выходом железок AMD с OpenCL 2.0 и наличии новой версии OpenCL 2.1 уже нет смысла сидеть под vendor lock-in. Особенно когда этот вендор еще и подрезает функционал.

С точки зрения максимального покрытия выбор только один - OpenCL, который отлично работает и на обычных процессорах. То есть, не надо требовать безусловного наличия GPU или писать две версии кода под GPU и CPU. Один раз написанный OpenCL код будет работать в разных конфигурациях.

Отлаживать CUDA/OpenCL можно только в специализированных отладчиках. Тут чуда быть не может.

 
Renat Fatkhullin:

в примере 

if((cl_ctx=CLContextCreate())==INVALID_HANDLE)

на конфигурации с доступным CPU устройством выводит "OpenCL not found"

А так - 

if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)

работает

 

*вопрос в дефолтности выбора устройста 

 

А можно это все в божеском виде тогда иметь, без всяких кавычек? ппц как неудобно для восприятия и для создания 

А для нейросеток надоб уже стандартные классы иметь, и можно на opcl сразу ) типа как велслабе 

"#define HL1Count "             + (string)hl1NeuronCount + "                     \r\n"
          "#define HL2Count "             + (string)hl2NeuronCount + "                     \r\n"
          //------------------------------------------------------------------------------------
          "#define NeuronSensitivity  "   + (string)NeuronSensitivity_P + "                \r\n"
          //------------------------------------------------------------------------------------
          "#define sampleCount "          + (string)sampleCount + "                        \r\n"
          //------------------------------------------------------------------------------------
          "#define signalCount "          + (string)signalCount + "                        \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrSaSize "         + (string)(sizeof(ArrSample) / sizeof(float)) + "\r\n"
          "typedef struct{float C[StrArrSaSize];} ArrSa;                                   \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrWeSize "         + (string)(sizeof(ArrWe) / sizeof(float)) + "    \r\n"
          "typedef struct{float C[StrArrWeSize];} ArrWe;                                   \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrCrSize "         + (string)(sizeof(ArrCr) / sizeof(float)) + "    \r\n"
          "typedef struct{float C[StrArrCrSize];}ArrCr;                                    \r\n"
          //------------------------------------------------------------------------------------
          "#define Spread "               + (string)(Spread_P * Point()) + "               \r\n"
          //------------------------------------------------------------------------------------
          "#define Point "                + (string)Point() + "                            \r\n"
          "#define SL "                   + (string)(StopLoss_P * Point()) + "             \r\n"
          "#define TP "                   + (string)(TakeProfit_P * Point()) + "           \r\n"
          //------------------------------------------------------------------------------------
          "                                                                                \r\n"
          "__kernel void Work(__global ArrSa *Sample,                                      \r\n"
          "                   __global ArrWe *Weights,                                     \r\n"
          "                   __global ArrCr *Result)                                      \r\n"
          "{                                                                               \r\n"
          "  int thread       = get_global_id(0);                                          \r\n"
          "                                                                                \r\n"
          "  //------------------Переменные нейронной сети---------------------------------\r\n"


 

 
Maxim Dmitrievsky:

А можно это все в божеском виде тогда иметь, без всяких кавычек? ппц как неудобно для восприятия и для создания 

А для нейросеток надоб уже стандартные классы иметь, и можно на opcl сразу ) типа как велслабе 

Ну а почему же нельзя то? Посмотрите, там нет ни одной специфичной функции которую бы не знал MQL. Я на MQL и писал и отлаживал эту функцию для OCL, потом всё заковычил и все дела. Можно даже конвертер кода в OCL сделать но не вижу в этом особого смысла делать для себя. Возможно MQ это сделают, но сомневаюсь в этом. 
 
Renat Fatkhullin:

Это демонстрация не только расчетов на GPU в MQL5 коде, но и графических возможностей терминала:

Полный исходный код в виде скрипта приложен. Ошибка на OpenCL 1.2 исправлена.

Я еще и вышивать умею. И на машинке... (с) Для чего все это торговому терминалу?
 
В облако пойдет для агентов ?
 
GKS:
В облако пойдет для агентов ?
Нет
 

Все здорово, но! С OCL и вообще со всеми средствами параллелизации есть большая проблема - очень малая часть алгоритмов может эффективно распараллеливаться. Почему в примерах параллельных вычислений так любимы имитация волн, падение шара на пирамиду с их разрушением, то есть все то, что можно разбить на мелкие частички и каждую обсчитывать на своем проце.

Для форы/биржи это конечно нейронные сети, различные преобразования типа Фурье, Вейвлет, фильтры и др., все они отлично параллелятся. Но есть линейные алгоритмы, которые вообще не могут быть распараллелены. Как правило, это когда результат следующего шага алгоритма основывается на результатах предыдущего шага.

Это я написал для тех, кто думает, вот куплю сейчас 2 крутые видяхи и все у меня в тестере залетает.

Причина обращения: