OpenCL: внутренние тесты реализации в MQL5 - страница 40

Vladimir Gomonov
8295
Vladimir Gomonov  
joo:

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

2.  Тогда нужна и MQL-функция возвращающая температуру CPU. :), а то спалится процессор чего доброго.

3.  ЗЫ если это реализуемо - то почему бы и нет? - не помешает конечно.

1.  Откуда знаешь что не заботятся? Не факт. Некоторые, может и не заботятся. Да и народу спалившего карты на игрушках на форумах хватает. 

Шведские энтузиасты на своем горьком опыте выяснили, что драйвер версии 267.52, поставляемый с GeForce GTX 590, может стать причиной выхода дорогостоящего изделия из строя. Первая двухпроцессорная 3D-карта сгорела при попытке разгона. Учитывая, что напряжение GPU было повышено, экспериментаторы решили проверить, как будет вести себя второй экземпляр — и его постигла та же участь. Обратившись за помощью в NVIDIA, неугомонным шведам удалось выяснить, что причиной выхода из строя является ошибка в драйвере, из-за которой не срабатывает защита от перегрузки.

Процесс выхода карты из строя запечатлен на поучительном видео:


Чтобы скачивать файлы с нашего сервера, зарегистрируйтесь.

Тест был повторен с новой версией драйвера — 267.71. Он подтвердил, что ошибка устранена, и механизм защиты срабатывает. К сожалению, в комплект поставки карт входит именно драйвер с ошибкой. Следует отметить, что механизм защиты предусмотрен не только для тех случаев, когда пользователь экспериментирует с частотами и напряжениями. В процессе обычной эксплуатации также возможно возникновение нештатной ситуации, когда единственной надеждой пользователя остается средство, заложенное разработчиками.

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

2.  Я и не спорю. Но это не так критично - при перегреве процессора винда вылетает в синий экран. Это неприятно, но не идёт в сравнение. :)

3.  Это однозначно реализуемо - до чёртиков программ мониторящих температуру и прочие параметры карты. (Только у меня четыре штуки уже есть.) Как-то ж они достают эту информацию, да?

зы.  К тому же был слух, что на повышенных температурах карточки начинают привирать. В игрушках это некритично, а на как-то нежелательно.

Andrey Dik
13255
Andrey Dik  

Карточки погорели из за ошибок в драйвере видеокарты, которые имеют встроенные механизмы защиты от перегрузок, а не из за того, что ПО работающее на GPU не контролирует температуру.

От ошибок драйверов как бы никто не застрахован и возможны случаи, когда даже если вообще никакие приложения не запущены на GPU карточка всё равно сгорит - из за ошибки в драйвере.

Поэтому не парься - грузи железо по полной, ничего страшного не случится, даже если ты сильно постараешься. Современное железо просто напичкано системами защиты от перегрузок, и CPU и GPU. Давно прошли те времена, когда сняв кулер с процессора можно было устроить пожар в буквальном смысле.


Nikolay Demko
13679
Nikolay Demko  

joo 2012.03.21 09:06

Карточки погорели из за ошибок в драйвере видеокарты, которые имеют встроенные механизмы защиты от перегрузок, а не из за того, что ПО работающее на GPU не контролирует температуру.

От ошибок драйверов как бы никто не застрахован и возможны случаи, когда даже если вообще никакие приложения не запущены на GPU карточка всё равно сгорит - из за ошибки в драйвере.

Поэтому не парься - грузи железо по полной, ничего страшного не случится, даже если ты сильно постараешься. Современное железо просто напичкано системами защиты от перегрузок, и CPU и GPU. Давно прошли те времена, когда сняв кулер с процессора можно было устроить пожар в буквальном смысле.

Согласен, контролировать температуру задача низкоуровневых утилит (возможно даже аппаратная задача),

контролировать температуру из ПО написанном на высокоуровневом языке суицидальный путь.

Andrey Dik
13255
Andrey Dik  

Попробуйте ктонить такое издевательство над GPU.

Запускаются параллельно циклы, в каждом из которых 100000000 (сто миллионов) итераций.

Как впечатления?

//+------------------------------------------------------------------+
//|                                                   OpenCLTest.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

//——————————————————————————————————————————————————————————————————————————————
const string cl_src=
"__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   int i = get_global_id(0);                               \r\n"
"   for(int u=0;u<100000000;u++)                            \r\n"
"   {                                                       \r\n"
"    out[i]+=u;                                             \r\n"
"    if(out[i]>10000)                                       \r\n"
"      out[i]=0;                                            \r\n"
"   }                                                       \r\n"
"   out[i]+= i;                                             \r\n"
"  }                                                        \r\n";
//——————————————————————————————————————————————————————————————————————————————


#define BUF_SIZE 480


//——————————————————————————————————————————————————————————————————————————————
void OnStart()
{
  int cl_ctx; // идентификатор контекста
  int cl_prg; // идентификатор программы
  int cl_krn; // идентификатор ядра
  int cl_mem; // идентификатор буфера


  //----------------------------------------------------------------------------
  //--- инициализируем OpenCL объекты
  if((cl_ctx=CLContextCreate(false))==0)
  {
    Print("OpenCL not found");
    return;
  }
  if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==0)
  {
    CLContextFree(cl_ctx);
    Print("OpenCL program create failed");
    return;
  }
  if((cl_krn=CLKernelCreate(cl_prg,"MFractal"))==0)
  {
    CLProgramFree(cl_prg);
    CLContextFree(cl_ctx);
    Print("OpenCL kernel create failed");
    return;
  }
  if((cl_mem=CLBufferCreate(cl_ctx,BUF_SIZE*sizeof(float),CL_MEM_READ_WRITE))==0)
  {
    CLKernelFree(cl_krn);
    CLProgramFree(cl_prg);
    CLContextFree(cl_ctx);
    Print("OpenCL buffer create failed");
    return;
  }
  //----------------------------------------------------------------------------


  //--- подготовимся к выполению
  uint  offset[1]={0};
  uint  work  [1]={BUF_SIZE};


  //--- выставляем неизменяемые параметры функции OpenCL
  //CLSetKernelArg   (cl_krn,4,max);
  CLSetKernelArgMem(cl_krn,0,cl_mem);


  //--- подготовим буфер для вывода пикселей
  uint buf[];
  ArrayResize(buf,BUF_SIZE);


  uint x=GetTickCount();

  //--- выставляем плавающие параметры
  //CLSetKernelArg(cl_krn,0,x0);
  //CLSetKernelArg(cl_krn,1,y0);
  //CLSetKernelArg(cl_krn,2,x1);
  //CLSetKernelArg(cl_krn,3,y1);

  //--- считаем на GPU
  CLExecute(cl_krn,1,offset,work);

  //--- забираем данные из буфера
  CLBufferRead(cl_mem,buf);

  //--- выведем время расчётов
  Print(IntegerToString(GetTickCount()-x)+" msec");

  
/*
  //--- посмотрим ка что там насчитал нам GPU
  for(int i=0;i<BUF_SIZE;i++)
  {
    Print(buf[i]);
  }
*/

  //--- удаляем объекты OpenCL
  CLBufferFree (cl_mem);
  CLKernelFree (cl_krn);
  CLProgramFree(cl_prg);
  CLContextFree(cl_ctx);
}
//——————————————————————————————————————————————————————————————————————————————

2012.03.21 18:20:36    Tast Mand_ (EURUSD,H1)    5741 msec

2012.03.21 18:15:53    Terminal    CPU: GenuineIntel  Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz with OpenCL 1.1 (4 units, 3311 MHz, 8174 Mb, version 2.0)

2012.03.21 18:15:53    Terminal    GPU: NVIDIA Corporation GeForce GTX 570 with OpenCL 1.1 (15 units, 1464 MHz, 1280 Mb, version 296.10)

Файлы:
Sceptic Philozoff
17690
Sceptic Philozoff  
MetaDriver: К тому же был слух, что на повышенных температурах карточки начинают привирать.
Это из-за массовой смерти мух, что ли?
Andrey Dik
13255
Andrey Dik  
Mathemat:
Это из-за смерти мух, что ли?
Попробуй запусти тест (см мой пост выше). Экран не замерает?, курсор мышки шевелится?
Vladimir Gomonov
8295
Vladimir Gomonov  
Mathemat:
Это из-за смерти мух, что ли?

Это вряд ли, поскольку в большинстве процесс обратимый. Флуктуации электронно-дырочной плазмы... (о как!). Отдельные биты изредка перещёлкиваются. Нам с ыми не по пути. :)

Всё же меня колбасит когда карта до 90 цельсиев раскаляется.  Пара тысяч милисекунд между между сериями прогонов в этом случае держит температуру хотя б на 82С.

Я вставил, но по хорошему - гибкость нужна, чтоб вставлялось по необходимости и температурный порог мог быть установлен программно.

Sceptic Philozoff
17690
Sceptic Philozoff  
joo: Попробуй запусти тест (см мой пост выше). Экран не замерает?, курсор мышки шевелится?

Дык у меня такой мощной железяки, как у тебя, нету.

Ща попробую, только драйвер AMD обратно всуну.

Andrey Dik
13255
Andrey Dik  
Mathemat:

Дык у меня такой мощной железяки, как у тебя, нету.

Ща попробую, только драйвер AMD обратно всуну.

У меня, кстати, сейчас стоит драйвер OpenCL для проца от AMD - пришлось поставить, так как интеловский ставится без ошибок но процессор не определяется как OpenCL устройство.
Dmitriy Parfenovich
4582
Dmitriy Parfenovich  
2012.03.21 15:45:49     Tast_Mand_ (EURUSD,H1)  16801 msec

2012.03.21 15:42:19     Terminal        CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2998 MHz, 2048 Mb, version 2.0)
2012.03.21 15:42:19     Terminal        GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 295.73)
Напряга видюхи не заметил, бегает и нажимает. Открыл диспетчер во время теста, тоже все нормально, без тормозов, только время теста стало 17 секунд.