Не работает мт5 - страница 2

 
mql5:
К сожалению, OpenCL за годы его жизни так и не вышел на стабильную(безотказную) работу.


BSOD(синий экран) мы ещё не встречали, но много сталкивались, когда при обращении к OpenCL возникал креш процесса терминала, причём ошибка возникала в реализации функций OpenCL в драйверах видеокарт или драйвере OpenCL от Intel.
В случае креша Терминал не инициализирует OpenCL при следующих загрузках.

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

Спасибо большое 

 
deniskore:

В вашем случае падение системы происходит в драйвере nvlddmkm.sys (NVIDIA Windows Kernel Mode Driver)

Сообщите пожалуйста вашу версию драйверов NVIDIA, затем обновитесь до последней версии на сайте NVIDIA.

Я как раз вчера вечером обновился до последней версии, и сегодня мт5 перестал работать. Я не писал об этом так как думал что гпу нвидия не используется, обычно он у меня включается только в играх
 
mql5:
В следующем билде инициализация OpenCL будет происходит при первом обращении к OpenCL из MQL программы, а не при старте терминала как сейчас, пожалуйста подождите.
А для генерации тиков в тестере он разве не используется?
 
komposter:
А для генерации тиков в тестере он разве не используется?

К сожалению, нет.

Слишком высоки накладные расходы на переход/связь с OpenCL для реализации столь малой задачи как генерация тиков. OpenCL имеет смысл, когда в него выгружается существенная часть в виде 50-80% задачи.

 
Renat:

К сожалению, нет.

Слишком высоки накладные расходы на переход/связь с OpenCL для реализации столь малой задачи как генерация тиков. OpenCL имеет смысл, когда в него выгружается существенная часть в виде 50-80% задачи.

А откуда я это взял? Странно.

Или обсуждалась идея? Или какое-то другое ускорение задействуется при генерации?

Загадка... 

 

Может кто то знает, почему простенький код для OpenCL на процессоре работает, а на видеокарте вылетает видеодрайвер?

Если убрать внутренний цикл, то работает на видеокарте без проблем.  NVIDIA GeForce GTX 750

#property link      "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs;

input int _device = 0;        /// номер дивайса OpenCL 

string d2s( double arg, int dig )         { return DoubleToString( arg, dig ); }
//+------------------------------------------------------------------+

string i2s( int arg )                     { return IntegerToString( arg ); }
//+------------------------------------------------------------------+

const string clSrc =
      "#pragma  OPENCL EXTENSION cl_khr_fp64 : enable                      \r\n"
      "                                                                    \r\n"
      "__kernel void test( __global double *out )                          \r\n"                 
      "{                                                                   \r\n"                  
      "  double x = 0.0;  double x1 = 0.0;                                 \r\n"                      
      "  for( long j = 0; j < 1000000; j ++ )                              \r\n"
      "  {                                                                 \r\n"
      "     x =x+0.01;                                                     \r\n"     
      "     for( long n = 1; n < 10000; n ++ ) x1=x1+0.01;                 \r\n"
      "  }                                                                 \r\n"
      "  out[ 0 ] = x;                                                     \r\n"
      "}                                                                   \r\n";
      

int OnStart()
{
   int clCtx = CLContextCreate( _device );
   
   int clPrg = CLProgramCreate( clCtx, clSrc );
   int clKrn = CLKernelCreate( clPrg, "test" );

   uint st = GetTickCount( );

   int clMem = CLBufferCreate( clCtx,  sizeof( double ), CL_MEM_READ_WRITE );            
   CLSetKernelArgMem( clKrn, 0, clMem );
   Print (i2s(clCtx)+";"+i2s(clPrg)+";"+i2s(clKrn));
   bool ex = CLExecute( clKrn ); 
                       
   double buf[1];                                                
   uint read = CLBufferRead( clMem, buf );                                                 
   
   Print( "out = " + d2s( buf[0], 12 ) );
      
   CLBufferFree( clMem );
   CLKernelFree( clKrn );
   CLProgramFree( clPrg );
   CLContextFree( clCtx );
   
   double gone = ( GetTickCount( ) - st ) / 1000.;
   Print( "OpenCl: gone = " + d2s( gone, 3 ) + " sec." );
   Print( "________________________" );
   
   return( 0 );
}//+------------------------------------------------------------------+
 
PetrovichV:

Может кто то знает, почему простенький код для OpenCL на процессоре работает, а на видеокарте вылетает видеодрайвер?

Попробуйте обратиться к Математу, он один из немногих кто в теме из здешних обитателей.
 
PetrovichV:

Может кто то знает, почему простенький код для OpenCL на процессоре работает, а на видеокарте вылетает видеодрайвер?

Если убрать внутренний цикл, то работает на видеокарте без проблем.  NVIDIA GeForce GTX 750

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

Начните с этого https://msdn.microsoft.com/en-us/library/windows/hardware/ff569918%28v=vs.85%29.aspx


  • TdrDelay

    Specifies the number of seconds that the GPU can delay the preempt request from the GPU scheduler. This is effectively the timeout threshold. The default value is 2 seconds.

    KeyPath   : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers
    KeyValue  : TdrDelay
    ValueType : REG_DWORD
    ValueData : Number of seconds to delay. 2 seconds is the default value.
    
    


TDR Registry Keys (Windows Drivers)
  • docs.microsoft.com
You can use the following TDR-related registry keys for testing or debugging purposes only. That is, they should not be manipulated by any applications outside targeted testing or debugging. Specifies the initial level of recovery. The default value is to recover on timeout (TdrLevelRecover). Specifies the number of seconds that the GPU...
 

Большое спасибо! 

Помогло  TrdLevel=0
 
Вопрос снят.
Причина обращения: