Понравилась статья?
Поставьте ссылку на нее -
пусть другие почитают
Используй новые возможности MetaTrader 5

Как установить и использовать в расчетах OpenCL

21 июня 2013, 11:54
MetaQuotes
35
74 684

OpenCL в клиентском терминале MetaTrader 5

Прошло уже больше года как стало возможным писать программы для OpenCL в MQL5, и теперь при старте терминала MetaTrader 5 в Журнал выводятся сообщения о найденных устройствах с поддержкой OpenCL, как показано на картинке.

Сообщения в Журнале терминала MetaTrader 5 о найденных OpenCL устройствах

В данном случае терминал MetaTrader 5 определил, что для запуска OpenCL расчетов прямо из MQL5-программы доступно 4 способа: две видеокарты от NVIDIA (OpenCL 1.1) и AMD (OpenCL 1.2), а также на выбор два варианта использования центрального процессора Intel Core-i7 - в зависимости от специально установленного драйвера.

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


OpenCL - это интересно!

Однако еще далеко не все пользователи смогли оценить преимущество использования параллельных вычислений в своих советниках, индикаторах или скриптах, так как не знают о новых возможностях или не имеют подходящих знаний.

Все дело в том, что для запуска любой MQL5 программы, использующей OpenCL, необходимо установить соответствующее программное обеспечение. Поэтому многие так и не сумели запустить скрипт расчета фрактала Мандельброта и многие другие программы, представленные на форуме MQL5.community.

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


Что такое OpenCL

OpenCL - это открытый стандарт параллельного программирования, разработанный консорциумом Khronos Group в 2008 году. Этот стандарт позволяет создавать приложения, которые могли бы выполняться параллельно на различных по архитектуре графических (GPU) или центральных (CPU) процессорах, расположенных в некоторой гетерогенной системе.

Другими словами OpenCL позволяет задействовать для вычислений одной задачи все ядра центрального процессора или все вычислительные мощности видеокарты, что, в конечном счете, уменьшает время выполнения программы. И поэтому использование OpenCL является очень полезным для задач, связанных с трудоемкими и ресурсозатратными вычислениями.

Например, применительно к MQL5, увеличение быстродействия может быть очень полезно для некоторого скрипта (индикатора или эксперта), который проводит сложный и длительный анализ исторических данных по нескольким символам и таймфреймам (здесь стоит отметить, что MQL5 программа, претендующая на параллельное исполнение, должна быть написана специальным образом при помощи OpenCL API).


Поддержка OpenCL

Поддержка OpenCL в MQL5 начинается с версии стандарта 1.1, который появился в июне 2010 года. Поэтому, для использования параллельных вычислений, необходимо иметь относительно свежее программное и аппаратное обеспечение, соответствующее этому стандарту.

При всем этом важно отметить, что для использования OpenCL совсем не обязательно иметь видеокарту на Вашем ПК - вполне достаточно будет и наличия центрального процессора. А это значит, что практически каждый пользователь имеет возможность использовать OpenCL для сокращения времени выполнения своих MQL5 программ.

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

Как уже говорилось выше, для параллельных вычислений можно использовать как видеокарты, так и центральные процессоры. На рынке производителей соответствующего устройств есть три основных компании лидера - это Intel, AMD и NVidia. В следующей таблице представлена информация об устройствах и операционных системах, которые поддерживают OpenCL 1.1 для каждого из этих трех производителей:

Производитель Устройства Операционные системы
Intel Процессоры:

Core i3, i5, i7 - для ПК;
Xeon - для серверов;
Xeon Phi - для сопроцессоров (подробнее здесь).
Windows 7, 8;
openSUSE;
Red Hat.
AMD Видеокарты:

AMD Radeon HD Graphics начиная с серии 6400;
ATI Radeon HD Graphics начиная с серии 5400;
ATI FirePro Graphics серии A300, S, W, V;
ATI Mobility Radeon HD начиная с серии 5400;
ATI FirePro M7820 M5800 (подробнее здесь).

Процессоры семейства K8 и старше:

Opteron, Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron, Turion 64, Turion 64 X2, Phenom, Phenom II (подробнее здесь).

APU (гибридный процессор, включающий в себя центральный и графический процессоры):

Процессоры серий A, C, E, E2, G, R.
Windows Vista SP2, 7, 8;
openSUSE 11.x;
Ubuntu 11.04;
Red Hat 6.x.
NVidia Видеокарты (использующие архитектуру CUDA):

Tesla, Quadro, GeForce (подробнее здесь).
Windows XP, Vista, 7, 8
Linux и Mac OS
(подробнее здесь)
Также на официальном сайте разработчика Khronos Group вы можете ознакомиться с полной информацией о том, какие устройства и софт необходимы для поддержки стандарта OpenCL для каждой из версий.

Проверьте, установлено ли на вашем персональном компьютере хотя бы одно устройство (CPU или GPU) и операционная система, которые поддерживают OpenCL 1.1. Если таковые имеются, то Вы смело можете переходить к следующему параграфу, который описывает процедуру настройки OpenCL в зависимости от производителя аппаратного обеспечения.

 

Настройка OpenCL

Если на Вашем ПК установлено необходимое оборудование и операционная система, то для использования параллельных вычислений в MetaTrader 5 нужно сделать всего один шаг -  настроить OpenCL для одного из Ваших устройств.

Процедура настройки OpenCL различается в зависимости от того какое аппаратное обеспечение Вы собрались использовать - видеокарту или центральный процессор. Если терминал MetaTrader 5 распознал видеокарту с поддержкой OpenCL, то достаточно сделать апдейт ее драйвера до последней версии.

Ставить для центрального процессора специальный комплект средств разработки (SDK) потребуется только в том случае, если на компьютере не установлена подходящая видеокарта.

Важно: Если уже есть установленная видеокарта с поддержкой OpenCL, то ставить софтверную версию для эмуляции OpenCL на центральном процессоре не нужно!

Ну, разве что для проведения экспериментов, так как видеокарты для использования OpenCL имеют безусловное преимущество.

Следующие параграфы описывают процедуру настройки OpenCL в зависимости от производителя. Вы можете перейти сразу на интересующую Вас инструкцию настройки, нажав на соответствующую ссылку:



1. Intel

Для использования OpenCL на процессорах Intel необходимо скачать и установить "Intel SDK for OpenCL Applications". Для этого перейдем на страницу сайта разработчика, с которой это можно сделать.

Рис. 1.1. Страница загрузки Intel SDK для OpenCL.

Рис. 1.1. Страница загрузки Intel SDK для OpenCL.

Здесь представлена общая информация об OpenCL, а также список доступных пакетов для скачивания. Чтобы скачать представленные пакеты нужно нажать на кнопку "Compare and Download Products" в правом верхнем углу страницы.

Рис. 1.2. Информация о доступных пакетах и требованиях для установки.

Рис. 1.2. Информация о доступных пакетах и требованиях для установки.

После нажатия на кнопку появится окошко, в котором будет представлена информация о том, для каких типов процессоров и операционных систем подходят указанные пакеты. Выбираем и загружаем подходящий пакет, нажав на кнопку "Download" над его изображением.

Рис. 1.3. Ссылки для скачивания SDK.

Рис. 1.3. Ссылки для скачивания SDK.

Появится еще одно окошко с ссылками для скачивания - выбираем и загружаем SDK нужной битности. Ждем несколько минут и, после завершения загрузки, запускаем полученный файл. Подтверждаем установку компонентов SDK и распаковываем файлы для установки в один из каталогов.

Рис. 1.4. Начало установки Intel SDK для OpenCL.

Рис. 1.4. Начало установки Intel SDK для OpenCL.

На экране появится окно установки "Intel SDK for OpenCL Applications" с поддержкой OpenCL 1.2. Жмем "Next" и следуем инструкции по установке.

Рис. 1.5. Принятие лицензионного соглашения.

Рис. 1.5. Принятие лицензионного соглашения.

Соглашаемся с условиями лицензионного соглашения. После этого в окне отобразятся компоненты, которые будут установлены - нажимаем "Next" и идем далее.

Рис. 1.6. Интеграция SDK c Visual Studio.

Рис. 1.6. Интеграция SDK c Visual Studio.

Если на Вашем ПК установлена "Microsoft Visual Studio" начиная с 2008 года, то будет предложено провести интеграцию для использования OpenCL также внутри нее. Далее остается лишь выбрать для каких пользователей будут доступны установленные компоненты и путь для установки SDK, после чего нажать "Install".

Рис. 1.7. Процесс установки.

Рис. 1.7. Процесс установки.

Начнется процесс установки, который займет пару минут, после чего на экране отобразится результат успешного выполнения. Нажимаем "Finish" и заканчиваем установку.

Рис. 1.8. Завершение установки.

Рис. 1.8. Завершение установки.

 

2.1. Видеокарты и APU от AMD

Для установки OpenCL на видеокарту от AMD обновим ее драйвер до последней версии. Для этого переходим на страницу загрузки драйверов.

Рис. 2.1.1. Страница загрузки драйвера AMD.

Рис. 2.1.1. Страница загрузки драйвера AMD.

Если вы знаете характеристики Вашей видеокарты, то драйвер можно найти, заполнив форму в левой части страницы. После выбора нужных строк из списков, жмем на "Display Results" для поиска подходящего драйвера.

Рис. 2.1.2. Загрузка AMD Catalyst.

Рис. 2.1.2. Загрузка AMD Catalyst.

Система подберет несколько драйверов в наборе "Catalyst Software Suite", в том числе и драйвер для OpenCL. Загружаем "Catalyst" и запускаем полученный файл.

Рис. 2.1.3. Страница загрузки приложения для определения типа видеокарты и версии драйвера.

Рис. 2.1.3. Страница загрузки приложения для определения типа видеокарты и версии драйвера.

Также можно воспользоваться системой автоматического поиска драйверов, нажав на соответствующую ссылку в правом верхнем углу страницы (рис. 2.1.1.). Вам будет предложено загрузить приложение "AMD Driver Autodetect" - делаем это. Затем запускаем загруженное приложение.

Рис. 2.1.4. Приложение для определения и загрузки подходящего драйвера.

Рис. 2.1.4. Приложение для определения и загрузки подходящего драйвера.

Приложение проведет анализ системы и предложит загрузить подходящий драйвер для видеокарты. Загружаем его и запускаем полученный файл. Программа установки предложит выбрать директорию для распаковки файлов - выбираем и нажимаем "Install".

Рис. 2.1.5. Программа установки AMD Catalyst.

Рис. 2.1.5. Программа установки AMD Catalyst.

Появится окошко с лицензионным соглашением - принимаем его. Далее выбираем режим быстрой установки, каталог для установки "AMD Catalyst" и нажимаем далее.

Рис. 2.1.6. Процесс установки.

Рис. 2.1.6. Процесс установки.

Процесс установки займет пару минут, после чего появится уведомление об успешном завершении.

Рис. 2.1.7. Завершение установки.

Рис. 2.1.7. Завершение установки.

 

2.2. Процессоры от AMD

Для установки OpenCL на процессор от AMD необходимо скачать и установить "AMD APP SDK" последней версии. Для этого переходим на следующую страницу на официальном сайте разработчика.

Рис. 2.2.1. Страница загрузки AMD APP SDK.

Рис. 2.2.1. Страница загрузки AMD APP SDK.

На этой странице есть некоторая информация о самом SDK и о том, что представляет собой OpenCL. Нас же интересует ссылка "Go to Downloads" внизу описания - переходим по ней.

Рис. 2.2.2. Таблица доступных для скачивания SDK.

Рис. 2.2.2. Таблица доступных для скачивания SDK.

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

После запуска загруженного установщика Вам будет предложено распаковать файлы для установки в некоторую директорию. А далее начнется процесс установки уже знакомого нам "AMD Catalyst", содержащего внутри себя "AMD APP SDK" для вашего центрального процессора. Процедуру установки "Катализатора" можно посмотреть на рисунках 2.1.5 - 2.1.7 в пункте 2.1.

 

3. NVidia

Если у Вас имеется видеокарта от NVidia, то для установки OpenCL также необходимо обновить ее драйвер до последней версии. Для этого откроем страницу загрузки драйверов на сайте разработчика.

Рис. 3.1. Страница загрузки драйвера NVidia.

Рис. 3.1. Страница загрузки драйвера NVidia.

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

Рис. 3.2. Загрузка выбранного драйвера.

Рис. 3.2. Загрузка выбранного драйвера.

В автоматическом режиме нужно нажать на "Графические драйверы", после чего вам будет предложено выполнить сканирование вашей системы при помощи java-приложения "GPU_Reader".

Рис. 3.3. Запуск приложения для определения типа видеокарты и версии драйвера.

Рис. 3.3. Запуск приложения для определения типа видеокарты и версии драйвера.

Запускаем приложение, нажав на "Run". Ждем несколько секунд, после чего на странице появится информация о Вашей видеокарте, текущей версии установленного драйвера и версии самого свежего, рекомендованного для установки драйвера. Жмем на "Download" и попадаем на страницу загрузки, показанную на рисунке 3.2.

Рис. 3.4. Результат автоматического определения типа видеокарты и версии драйвера.

Рис. 3.4. Результат автоматического определения типа видеокарты и версии драйвера.

Нажимаем "Загрузить сейчас" и соглашаемся с лицензионным соглашением, нажав на "Принять и скачать".

Рис. 3.5. Принятие лицензионного соглашения и скачивание драйвера.

Рис. 3.5. Принятие лицензионного соглашения и скачивание драйвера.

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

Рис. 3.6. Принятие лицензионного соглашения на первом этапе установки.

Рис. 3.6. Принятие лицензионного соглашения на первом этапе установки.

Затем выбираем "Экспресс" режим установки и нажимаем "Далее". Дополнительно Вам будет предложено установить утилиту "NVidia Experience" - делать это не обязательно.

Рис. 3.7. Выбор режима установки.

Рис. 3.7. Выбор режима установки.

После этого начнется непосредственно процесс установки драйвера, сопровождаемый рекламой последних разработок NVidia - ждем пару минут.

Рис. 3.8. Процесс установки.

Рис. 3.8. Процесс установки.

И всё, драйвер установлен, осталось лишь перезагрузить систему, и Вы сможете использовать OpenCL внутри терминала MetaTrader 5.

Рис. 3.9. Завершение установки.

Рис. 3.9. Завершение установки.

 

Сравнение производительности

Для того чтобы продемонстрировать преимущество использования OpenCL в MQL5, был написан скрипт OpenCL_Sample.mq5, который вычисляет значения функции от двух переменных на некотором множестве и отображает результат в окне графика при помощи графической метки (OBJ_BITMAP_LABEL). Вычисления проводятся двумя способами - с использованием OpenCL и без. Эти блоки оформлены соответственно в функциях WithOpenCL() и WithoutOpenCL():

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//...
   Print("\nРасчеты без OpenCL:");
   WithoutOpenCL(values1,colors1,w,h,size,const_1,const_2);
//--- расчеты с OpenCL
   Print("\nРасчеты с OpenCL:");
   WithOpenCL(values2,colors2,w,h,size,const_1,const_2);
//...
  }
//+------------------------------------------------------------------+
//| Проведение вычислений без использования OpenCL                   |
//+------------------------------------------------------------------+
void WithoutOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                   const uint size,const uint const_1,const uint const_2)
  {
//--- запомним время начала расчетов
   uint x=GetTickCount();
//--- расчет значений функции
   for(uint i=0;i<h;i++)
      for(uint j=0;j<w;j++)
         values[i*w+j]=Func(InpXStart+i*InpXStep,InpYStart+j*InpYStep);
//--- распечатаем время расчета значений функции
   Print("Вычисление значений функции = "+IntegerToString(GetTickCount()-x)+" мс");
//--- определим минимальное значение, и разницу между 
//--- минимальным и максимальным значениями точек множества
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- запомним время начала расчетов
   x=GetTickCount();
//--- расчет цветов для раскраски множества
   uint a;
   for(uint i=0;i<size;i++)
     {
      a=(uint)MathRound(255*(values[i]-min)/dif);
      colors[i]=const_1*(a/16)+const_2*(a%16);
     }
//--- распечатаем время определения цветов для раскраски множества
   Print("Определение цветов раскраски = "+IntegerToString(GetTickCount()-x)+" мс");
  }
//+------------------------------------------------------------------+
//| Проведение вычислений с использованием OpenCL                    |
//+------------------------------------------------------------------+
void WithOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                const uint size,const uint const_1,const uint const_2)
  {
//--- переменные для использования OpenCL
   int cl_ctx;
   int cl_prg;
   int cl_krn_1;
   int cl_krn_2;
   int cl_mem_1;
   int cl_mem_2;
//--- создание контекста для OpenCL (выбор девайса)
   if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)
     {
      Print("OpenCL not found");
      return;
     }
//--- создание программы на основе кода в строке cl_src
   if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE)
     {
      CLContextFree(cl_ctx);
      Print("OpenCL program create failed");
      return;
     }
//--- создание кернела для расчета значений функции от двух переменных
   if((cl_krn_1=CLKernelCreate(cl_prg,"Func"))==INVALID_HANDLE)
     {
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_1 create failed");
      return;
     }
//--- кернел для раскраски точек множества на плоскости
   if((cl_krn_2=CLKernelCreate(cl_prg,"Grad"))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_2 create failed");
      return;
     }
//--- буфер OpenCL для получения значений функции
   if((cl_mem_1=CLBufferCreate(cl_ctx,size*sizeof(float),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- буфер OpenCL для получения цветов точек
   if((cl_mem_2=CLBufferCreate(cl_ctx,size*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLBufferFree(cl_mem_1);
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- запомним время начала расчетов
   uint x=GetTickCount();
//--- массив задает индексы, начиная с которых будут проводиться расчеты 
   uint offset[2]={0,0};
//--- массив задает пределы, до которых будут проводиться расчеты
   uint work[2];
   work[0]=h;
   work[1]=w;
//--- расчет значений функции
//--- передадим значения в кернел
   CLSetKernelArg(cl_krn_1,0,InpXStart);
   CLSetKernelArg(cl_krn_1,1,InpYStart);
   CLSetKernelArg(cl_krn_1,2,InpXStep);
   CLSetKernelArg(cl_krn_1,3,InpYStep);
   CLSetKernelArgMem(cl_krn_1,4,cl_mem_1);
//--- запустим выполнение кернела
   CLExecute(cl_krn_1,2,offset,work);
//--- прочитаем полученные значения в массив
   CLBufferRead(cl_mem_1,values);
//--- распечатаем время расчета значений функции
   Print("Вычисление значений функции = "+IntegerToString(GetTickCount()-x)+" мс");
//--- определим минимальное значение, и разницу между 
//--- минимальным и максимальным значениями точек множества
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- запомним время начала расчетов
   x=GetTickCount();
//--- зададим пределы для вычислений
   uint offset2[1]={0};
   uint work2[1];
   work2[0]=size;
//--- расчет цветов для раскраски множества
//--- передадим значения в кернел
   CLSetKernelArg(cl_krn_2,0,min);
   CLSetKernelArg(cl_krn_2,1,dif);
   CLSetKernelArg(cl_krn_2,2,const_1);
   CLSetKernelArg(cl_krn_2,3,const_2);
   CLSetKernelArgMem(cl_krn_2,4,cl_mem_1);
   CLSetKernelArgMem(cl_krn_2,5,cl_mem_2);
//--- запустим выполнение кернела
   CLExecute(cl_krn_2,1,offset2,work2);
//--- прочитаем полученные значения в массив
   CLBufferRead(cl_mem_2,colors);
//--- распечатаем время определения цветов для раскраски множества
   Print("Определение цветов раскраски = "+IntegerToString(GetTickCount()-x)+" мс");
//--- удаление объектов OpenCL
   CLBufferFree(cl_mem_1);
   CLBufferFree(cl_mem_2);
   CLKernelFree(cl_krn_1);
   CLKernelFree(cl_krn_2);
   CLProgramFree(cl_prg);
   CLContextFree(cl_ctx);
  }

После выполнения скрипта, в окне графика на несколько секунд появится раскрашенное множество значений функции. Каждому из них сопоставляется один из тонов цвета, выбранного во входных параметрах (красный, зеленый или синий).

Результат работы скрипта для множества точек плоскости от -22 до 22 с шагом 0.1.

Результат работы скрипта для множества точек плоскости от -22 до 22 с шагом 0.1.

Помимо самой картинки в журнал "Эксперты" выводится время расчета функций каждым из способов, что позволяет легко убедиться в преимуществе и целесообразности использования OpenCL в MQL5. Увеличим значение шага и получим результаты работы скрипта:

Расчет значений функции и их раскраска двумя способами.

Расчет значений функции и их раскраска двумя способами.

Суммарное время расчета функций на CPU с OpenCL уменьшилось более чем в 5 раз, а ведь это еще далеко не предел! Хорошо известно, что расчеты на современных видеокартах с поддержкой OpenCL выполняются на порядок быстрее, чем на процессорах. Этот факт хорошо отражают результаты выполнения скрипта на разных устройствах с OpenCL, представленные в следующей таблице:

Устройство с OpenCL
Время выполнения без OpenCL в миллисекундах
Время выполнения с OpenCL в миллисекундах
Выигрыш
AMD Radeon HD 7970 20 361 мс
171 мс
 119.07 раз
NVidia GeForce GT 630
24 742 мс
578 мс
 42.8 раз
Intel Core i5 430M
27 222 мс
5 428 мс
 5.01 раз
AMD Athlon X2 Dual-Core QL-65
45 723 мс
9 516 мс  4.8 раз

Как видно, использование OpenCL на топовой видеокарте от AMD привело к сокращению времени расчетов более чем в 100 раз! Не менее значимы результаты и на чуть более старой видеокарте GeForce GT 630 от 2011 года - здесь разница во времени в 42 раза. Процессоры от Intel и AMD замыкают таблицу, однако достигаемое на них ускорение будет также очень и очень полезным для расчетов сложных задач.

На этом статья подошла к своему концу. Таблица сравнений наглядно демонстрирует преимущество использования параллельных вычислений в задачах массовой обработки данных. Остается сделать всего лишь один шаг - установить подходящий драйвер для Вашей видеокарты или процессора.

Прикрепленные файлы |
opencl_sample.mq5 (12.81 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (35)
Boris Egorov

>Для того чтобы продемонстрировать преимущество использования OpenCL в MQL5, был написан скрипт OpenCL_Sample.mq5, который вычисляет значения функции от двух переменных на некотором множестве и отображает результат в окне графика при помощи графической метки (OBJ_BITMAP_LABEL)

Пример интересный но потрясающе бесполезный.....

Может ли хоть кто нибудь сделать пример оптимизации стандартного советника на OpenCL .... 

а вообще я считаю что статья ни о чом, весь мир движется в сторону фреймворков (типа CNTK), разработчик под MQL5 должен писать код на MQL5,  а не под OpenCL/CUDA, а ядра (CU) всех видеокарт должны быть видны просто как обычные ядра в списке доступных ядер для оптимизации и все

я так  думаю ... 

Igor Makanu
Boris Egorov:

разработчик под MQL5 должен писать код на MQL5,  а не под OpenCL/CUDA, а ядра (CU) всех видеокарт должны быть видны просто как обычные ядра в списке доступных ядер для оптимизации и все

я так  думаю ... 

как бы дали возможность писать код на MQL5 и рассчитывать задачи на GPU, чего шумите?

другой вопрос, что Вы не представляете какой круг задач можно решать на GPU, а какие нет

вот хорошая статья, сам читал в начале года https://habr.com/ru/company/combox/blog/425731/

если сумеете задачу оптимизации распараллелить, тогда используйте GPU

Boris Egorov
Igor Makanu:

как бы дали возможность писать код на MQL5 и рассчитывать задачи на GPU


так же как это делается в питоне/с#

там и близко нет OpenCL, есть подключение фреймворка, ему просто указываешь на чём считать, вот лично мне проще ферму из GPU собрать, чем на CPU 

Igor Makanu
Boris Egorov:

так же как это делается в питоне/с#

там и близко нет OpenCL, есть подключение фреймворка

все правильно и фреймворк сразу заточен под задачи на GPU , я тензорфлоу так тестил


тогда вопрос не к MQL5, а к создателям фреймворков для MQL5 - увы, а их (фрейворков) нет, сам страдаю от этого,

вернее есть лишь немного - алглиб в СБ и много статей по интеграции со сторонними языками 

т.е. как пишут разработчики - пишите сами, готовых решений нет

Boris Egorov
Igor Makanu:

все правильно и фреймворк сразу заточен под задачи на GPU , я тензорфлоу так тестил


тогда вопрос не к MQL5, а к создателям фреймворков для MQL5 - увы, а их (фрейворков) нет, сам страдаю от этого,

вернее есть лишь немного - алглиб в СБ и много статей по интеграции со сторонними языками 

т.е. как пишут разработчики - пишите сами, готовых решений нет

не совсем так

вот разработчики молодцы и сделали реально много, они внедрили Fuzzy, Alglib, python только вот вопрос - зачем? Зачем они тратили столь ценное время крутых разработчиков на внедрение всего этого, ведь по факту толку от них просто ноль.

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

Не радует и python ... ну посудите как перенести логику советника в совершенно другой язык .... а потом еще и назад .... правильно никак ... да и зачем этот геморой

следовательно надо было изначально внедрять либо cntk либо tenzorflow ... тогда уже не нужен штатный оптимизатор, не нужен генетический алгоритм и можно считать на GPU без проблем ...

Итоги MQL5 Маркета за 2 квартал 2013 года Итоги MQL5 Маркета за 2 квартал 2013 года
За полтора года успешной работы MQL5 Маркет стал крупнейшим трейдерским магазином торговых стратегий и технических индикаторов. В нем опубликовано около 800 торговых приложений от 350 разработчиков со всего мира. При этом трейдеры уже купили и установили в свои терминалы MetaTrader 5 свыше 100 000 торговых программ.
Рецепты MQL5 - Мультивалютный эксперт: пример простой, точной и быстрой схемы Рецепты MQL5 - Мультивалютный эксперт: пример простой, точной и быстрой схемы
В этой статье мы рассмотрим реализацию простой схемы для мультивалютного эксперта. В данном случае имеется в виду, что эксперт можно будет настроить на тестирование/торговлю по одинаковым условиям, но с разными параметрами для каждого символа. В качестве примера создадим схему для двух символов, но сделаем это так, чтобы при необходимости можно было добавлять дополнительные символы, внося небольшие изменения в код.
Рецепты MQL5 - Разработка мультивалютного эксперта с неограниченным количеством параметров Рецепты MQL5 - Разработка мультивалютного эксперта с неограниченным количеством параметров
В этой статье мы создадим схему, в которой для оптимизации торговой системы будет использоваться единый набор параметров, а количество символов можно использовать сколько угодно. Список символов будем составлять в обычном текстовом файле (*.txt). Входные параметры для каждого символа также теперь будут храниться в файлах. Так мы сможем обойти ограничение терминала на количество входных параметров эксперта.
Рецепты MQL5 - Разработка схемы для торговой системы типа "Три экрана Элдера" Рецепты MQL5 - Разработка схемы для торговой системы типа "Три экрана Элдера"
В этой статье мы разработаем схему для торговой системы типа "Три экрана Элдера" на MQL5. Писать эксперта будем не с нуля, а просто модифицируем уже практически готовую под эту схему программу из предыдущей статьи "Рецепты MQL5 - Использование индикаторов для формирования условий торговли в эксперте". То есть, целью статьи будет также показать, как можно легко модифицировать схемы уже готовых программ.