OpenCL:MQL5中的内部实现测试 - 页 40

 
joo:

1.电脑游戏不关心GPU的温度,把它加载到最大,什么也不发生--显卡在工作。

2.在这种情况下,还需要MQL-功能返回CPU温度。:),否则处理器可能会被烧毁。

3.- 当然,这不会有什么影响。

1.你怎么知道他们不关心?这不是一个事实。有些人可能不关心。而且论坛上有很多人在玩具上烧了卡。

瑞典发烧友不得不发现,GeForce GTX 590 驱动版本267.52可能会损坏高端GeForce GTX590。第一张双处理器3D卡在试图超频时烧毁了。鉴于GPU电压被超频了,实验者决定看看第二块GPU会有什么表现--它也遭遇了同样的命运。 通过获得英伟达的帮助,无情的瑞典人成功地找出了故障的原因是驱动程序中的一个错误,它使过载保护无法启动。

在一个指导性的视频中记录了卡片失效的过程:


要从我们的服务器下载文件,请注册。

用新的驱动程序 版本--267.71--重新进行了测试。它证实,该错误已被修复,保护机制也在发挥作用。不幸的是,这些卡附带的驱动程序出现了错误。应该注意的是,该保护机制不仅适用于那些用户正在进行频率和电压实验的情况。在正常使用过程中,也可能出现异常情况,在这种情况下,用户的唯一希望就是开发商规定的补救措施。

议爱好者 千万不要安装捆绑的驱动程序,而是从NVIDIA网站上下载一个较新的版本。此外,超频爱好者应确保PC机箱内有良好的通风。

2.我不反驳这一点。但这并不那么关键--当处理器过热时,Windows会崩溃成蓝屏。这是不愉快的,但它没有比较。:)

3.这绝对是可以实现的--有很多程序都在监测卡的温度和 其他参数。(我已经有四个了。)不知怎的,他们得到了这些信息,不是吗?

另外,有传言说在高温下,卡片开始计算错误。在玩具中,它并不关键,但在某种程度上是不可取的。

 

卡片烧毁的原因是显卡驱动程序的错误,这些驱动程序有内置的过载保护机制,而不是因为运行在GPU上的软件没有控制温度。

并非任何人都能免受驱动错误的影响,即使没有应用程序在GPU上运行,显卡仍有可能因驱动错误而烧毁。

你不必担心--将你的硬件加载到最大限度,即使你很努力,也不会发生什么坏事。现代硬件都有防止过载的保护系统,包括CPU和GPU。把冷却器从CPU上拆下来就能引起火灾的日子已经一去不复返了。

 

joo 2012.03.21 09:06

显卡被烧毁的原因是有内置过载保护机制的显卡驱动程序的错误,而不是因为运行在GPU上的软件没有监控温度。

任何人都不可能对驱动错误免疫,即使没有任何应用程序在GPU上运行,该卡也有可能因驱动错误而烧毁。

你不必担心--将你的硬件加载到最大限度,即使你很努力,也不会发生什么坏事。现代硬件都有防止过载的保护系统,包括CPU和GPU。 从CPU上拆下散热器就会引发火灾的时代已经过去了。

我同意,温度控制是一个低级别的实用任务(甚至可能是一个硬件任务)。

用高级语言编写的软件来控制温度是一种自杀式的做法。

 

有谁试过这个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 终端 CPU: GenuineIntel(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 终端 GPU: 英伟达公司 GeForce GTX 570 with OpenCL 1.1 (15单元, 1464 MHz, 1280 Mb, 版本 296.10)

附加的文件:
 
MetaDriver: 另外,有传言说,在更高的温度下,卡片开始出现误导。
是因为苍蝇的大量死亡还是什么?
 
Mathemat:
是苍蝇的死亡还是什么?
尝试运行测试(见我上面的帖子)。屏幕是否冻结,鼠标指针是否移动?
 
Mathemat:
是不是因为苍蝇快死了还是什么?

这是不可能的,因为大部分过程是可逆的。电子-空穴等离子体波动...(哦,怎么会!)。个别位子偶尔会有点击。你和我的路都走不通。:)

在这种情况下,一系列运行之间的几千毫秒可以使温度至少保持在82℃。

我已经把它放进去了,但好在你需要灵活地根据需要把它放进去,温度阈值可以通过程序设置。

 
joo: 尝试运行测试(见我上面的帖子)。屏幕是否冻结,鼠标指针是否移动?

我没有像你这样强大的硬件。

我现在就试试,不过我还是把AMD的驱动插回去吧。

 
Mathemat:

我没有像你这样强大的硬件。

我现在就试试,但我要把AMD的驱动放回去。

顺便说一下,我现在已经为我的CPU安装了AMD的OpenCL驱动--我不得不把它装进去,因为英特尔的驱动安装时没有任何错误,但处理器没有被检测到是OpenCL设备。
 
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秒。