OpenCL:MQL5での内部実装テスト - ページ 40

 
joo:

1.コンピュータゲームはGPUの温度を気にせず、最大まで負荷をかけても何も起こらない-グラフィックスカードは動作します。

2.この場合、CPUの温度を返すMQL機能も必要です。そうしないと、プロセッサが焦げるかもしれません。

3.- 確かに、損はないでしょう。

1.なぜ、気にしないと言えるのか?事実ではありません。気にしない人もいるかもしれません。掲示板には、おもちゃでカードを燃やした人もたくさんいますしね。

スウェーデンの愛好家は、GeForce GTX 590 ドライバ バージョン 267.52 は、ハイエンドの GeForce GTX590 を損傷する可能性がありますを発見する必要があった。最初のデュアルプロセッサーの3Dカードは、オーバークロックをしようとして焼失しました。GPUの電圧がオーバークロックされていたため、2つ目のGPUがどのような挙動を示すかを確認することにしましたが、これも同じ運命をたどりました。 NVIDIAの協力を得て、この執拗なスウェーデン人たちは、障害の原因がドライバのバグであり、過負荷保護機能が働かないことにあることを突き止めることに成功したのです。

カードが故障するまでの過程を、分かりやすくビデオに収めました。


サーバーからファイルをダウンロードするには、会員登録が必要です。

新しいドライバーの バージョン267.71でテストを繰り返しました。バグが修正され、保護機構が機能することを確認した。残念ながら、カードにはエラーのあるドライバが付属していました。なお、この保護機構は、ユーザーが周波数や電圧を実験している場合だけではないことに注意する必要がある。通常の使用において、異常事態が発生した場合、開発者の救済措置が唯一の希望となることもあり得ます。
マニアの

方は、同梱のドライバを絶対にインストールせず、NVIDIAのウェブサイトから新しいバージョンをダウンロードすることをお勧めします。また、オーバークロック愛好家は、PCケース内の換気をよくする必要があります。

2.反論はしません。しかし、それほど重大なことではありません。プロセッサが過熱すると、Windowsはブルースクリーンにクラッシュしてしまいます。不愉快だが、比べものにならない。:)

3.間違いなく実現可能です。カードの温度や その他のパラメータを監視するプログラムは非常にたくさんあります。(ただ、私はすでに4つ持っています。) どういうわけか、この情報を入手しているのですね?

Zy あと、高温になるとカードが誤算を起こし始めるという噂もありましたね。おもちゃの場合、それは致命的なことではなく、どこか好ましくないことなのです。

 

カードが燃えたのは、GPU上で動作するソフトウェアが温度を制御できなかったからではなく、過負荷保護機構を内蔵するビデオカードのドライバーにエラーが発生したためです。

ドライバエラーと無縁な人はいませんし、GPUでアプリケーションを実行していなくても、ドライバエラーが原因でカードが焼き切れる可能性はあります。

心配しなくても、ハードに最大限の負荷をかければ、頑張っても何も悪いことは起きないのです。最近のハードウェアは、CPUもGPUも過負荷に対する保護システムが搭載されています。CPUからクーラーを取り外せば、文字通り火事になるような時代ではなくなりました。

 

joo 2012.03.21 09:06

カードが焼けるのは、過負荷保護機構を内蔵したビデオカードのドライバーにエラーが発生したためで、GPU上で動作するソフトウェアが温度を監視していないためではありません。

ドライバエラーと無縁な人はいませんし、GPU上でアプリケーションが動作していなくても、ドライバエラーが原因でカードが焼き切れる可能性はあります。

心配しなくても、ハードに最大限の負荷をかければ、頑張っても何も悪いことは起きないのです。最近のハードウェアは、CPUもGPUも過負荷に対する保護システムが搭載されています。 CPUからクーラーを取り外すと、文字通り火事になるような時代はもう昔の話です。

そうですね、温度制御は低レベルのユーティリティタスク(もしかしたらハードウェアタスクかもしれません)ですね。

高級言語で書かれたソフトウェアから温度をコントロールするのは、自殺行為です。

 

このGPUのハズレを試した人はいますか?

並列ループで実行し、それぞれが100000000(1億)回反復する。

感想をお聞かせください。

//+------------------------------------------------------------------+
//|                                                   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ユニット、1464MHz、1280Mb、バージョン296.10)

ファイル:
 
MetaDriver: また、温度が高くなるとカードが誤動作し始めるという噂もありました。
ハエが大量死したりするからでしょうか?
 
Mathemat:
ハエの死か何かですか?
テストを実行してみてください(上記の私の投稿を参照してください)。画面が固まったり、マウスカーソルが動いたりしませんか?
 
Mathemat:
ハエが死ぬからとか?

これは、ほとんどの工程が可逆的であるため、あり得ないことです。電子-正孔プラズマの揺らぎ...(oh how!)です。個々のビットが時々クリックする。あなたと私は、道を外れた。:)

私はカードが90℃になると本当に怖くなります。 この場合、一連の実行の間に数千ミリ秒をかけると、少なくとも82℃に保たれます。

入れていますが、必要に応じて柔軟に入れる必要があることと、温度の閾値をプログラムで設定できることが良い点です。

 
joo: テストを実行してみてください(上記の私の投稿を参照してください)。画面が固まったり、マウスカーソルが動いたりしませんか?

まあ、私はあなたのような強力なハードウェアを持っていないのですが。

これから試してみますが、AMDのドライバを入れ直します。

 
Mathemat:

私はあなたのような強力なハードを持っていないのです。

これから試してみますが、AMDのドライバを入れ直します。

ちなみに、現在私のCPUにはAMDのOpenCLドライバが入っています。Intelのものは何のエラーもなくインストールされますが、プロセッサが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秒になっただけでした。