OpenCL в трейдинге - страница 12

 

Aleksey Vyazmikin #:

А в ME не планируется как то сделать доступным получение информации об ошибках в самом коде OpenCL? А то мне - не профессионалу, бывает очень сложно отлавливать причину ошибок.

В OCL1.2 добавлена функция printf, была бы очень полезна

ПС дебаг программ для видях действительно сложная задача, очень мало инструментария для этого
 
Aleksey Vyazmikin #:

Хотя бы для компьютеров в своей сети бы - экспериментально - для начального тестирования, так сказать. Нет возможности?


Это замечательно - стараюсь своевренмено изучать!

А в ME не планируется как то сделать доступным получение информации об ошибках в самом коде OpenCL? А то мне - не профессионалу, бывает очень сложно отлавливать причину ошибок.

Смотрите новость о билде 3520

  • MQL5: Для получения информации о последней ошибке OpenCL в перечисления добавлены новые значения, которые позволяют получить код ошибки и текстовое описание.
    1. В перечисление ENUM_OPENCL_PROPERTY_INTEGER добавлено значение CL_LAST_ERROR (код 4094) 

      Для получения последней ошибки OpenCL через CLGetInfoInteger параметр handle игнорируется, то есть не имеет значения. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      Для неизвестного кода ошибки вернётся строка "unknown OpenCL error N", где вместо N будет код ошибки.

      Пример:
      //--- первый параметр handle игнорируется при получении кода последней ошибки
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. В перечисление ENUM_OPENCL_PROPERTY_STRING добавлено значение CL_ERROR_DESCRIPTION (4093).
      Текстовое описание ошибки OpenCL можно получить с помощью CLGetInfoString. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      При использовании CL_ERROR_DESCRIPTION в качестве параметра handle в CLGetInfoString следует передать код ошибки. Если вместо кода ошибки передать CL_LAST_ERROR, то функция вернёт описание последней ошибки.

      Пример:
      //--- получить код последней OpenCL ошибки
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // для получения текстового описания ошибки
      
      //--- используем код ошибки для получения текстового описания ошибки
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- чтобы получить описание последней OpenCL ошибки без предварительного получения кода, нужно передать CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Пока в качестве описания ошибки отдаётся имя внутреннего перечисления, расшифровку которого можно посмотреть на странице https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Например, если получено значение CL_INVALID_KERNEL_ARGS, описание для него "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."


    Новая версия платформы MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator - Запустите Authenticator на мобильном телефоне. Отключите использование двухэтапной аутентификации с помощью Google Authenticator...
    Новая версия платформы MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator - Запустите Authenticator на мобильном телефоне. Отключите использование двухэтапной аутентификации с помощью Google Authenticator...
    • 2022.11.24
    • www.mql5.com
    В этом обновлении мы добавили 2FA TOTP-аутентификацию с помощью Google Authenticator в торговый терминал MetaTrader 5. Terminal TOTP-аутентификации с помощью Google Authenticator и других подобных приложений
     
    Rashid Umarov #:

    Смотрите новость о билде 3520


    Спасибо, видимо пропустил. Потестирую данный функционал.

     
    судя по видео там OpenCL поддерживается уже по верисии аж 3.0  в справке 1.1  а в реальности какая версия поддерживается не выше 1.2  ??? то что от версии 1,1  и выше это понятно
     
    ruslan #:
    судя по видео там OpenCL поддерживается уже по верисии аж 3.0  в справке 1.1  а в реальности какая версия поддерживается не выше 1.2  ??? то что от версии 1,1  и выше это понятно

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

     

    Надеюсь, пишу по теме.

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

    Суть в том, что терминал (в том числе тестер) загружает библиотеку opencl.dll, даже если программа не задействует OpenCL.

    Из-за этого в маркете автоматический валидатор выдает следующую ошибку:

    cannot get OpenCL platforms (-123450, 'unknown error'), please install OpenCL drivers

    Вот пример кода (тут минимум кода  OpenCL только для локализации проблемы, используется штатная библиотека, которая не задействуется):

    //+------------------------------------------------------------------+
    #property strict                                              
    #property version "1.0"
    //+------------------------------------------------------------------+
    #property indicator_chart_window
    #property indicator_buffers 0
    #property indicator_plots   0
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    input bool UseOpenCL = false;
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    #include <OpenCL\OpenCL.mqh>
    
    COpenCL _OpenCL;
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int OnInit()
    {
       return INIT_SUCCEEDED;
    }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int OnCalculate(const int        rates_total,       // size of input time series 
                    const int        prev_calculated,   // number of handled bars at the previous call 
                    const datetime&  time[],            // time array 
                    const double&    open[],            // open array 
                    const double&    high[],            // high array 
                    const double&    low[],             // low array 
                    const double&    close[],           // close array 
                    const long&      tick_volume[],     // Tick Volume array 
                    const long&      volume[],          // Real Volume array 
                    const int&       spread[])          // Spread array 
    {
       if (UseOpenCL){
          int Vals[] = {1}; 
          _OpenCL.BufferWrite(0, Vals, 0, 0, 1);
       }
       
       return rates_total;
    }

    Прошу помощи у знающих в решении этой проблемы. 

    П.С. Вполне возможно, что проблема лишь в автовалидаторе. Если это так, тогда вопрос в том, когда это будет исправлено и можно будет в маркете выгладывать/обновлять продукты использующие OpenCL?

     
    Будем разбираться и исправлять, включая наличие опенсл дравера в среде тестирования продуктов.
     
    Renat Fatkhullin #:
    Будем разбираться и исправлять, включая наличие опенсл дравера в среде тестирования продуктов.

    Премного благодарен!

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