OpenCL: MQL5의 내부 구현 테스트 - 페이지 40

 
joo :

1. 컴퓨터 장난감은 GPU의 온도와 가장 부주의한 부하에 신경 쓰지 않으며 비디오 카드는 작동하지 않습니다.

2. 그런 다음 CPU 온도를 반환하는 MQL 함수가 필요합니다. :) 그렇지 않으면 프로세서가 타버릴 것입니다.

3. ZY 실현 가능하다면 왜 안되나요? - 물론 아프지 않을 것이다.

1. 그들이 관심이 없다는 것을 어떻게 압니까? 사실이 아닙니다. 일부는 신경 쓰지 않을 수 있습니다. 예, 포럼에서 장난감에 카드를 태운 사람들이 충분히 있습니다.

스웨덴 매니아들은 GeForce GTX 590 과 함께 제공되는 드라이버 버전 267.52로 인해 값비싼 제품이 실패할 수 있다는 것을 어렵게 배웠습니다. 첫 번째 듀얼 프로세서 3D 카드는 오버클럭을 시도하는 동안 타버렸습니다. GPU 전압이 높아진 것을 고려하여 실험자들은 두 번째 인스턴스가 어떻게 동작할지 확인하기로 결정했고 동일한 운명을 겪었습니다. NVIDIA에 도움을 요청한 안절부절 못하는 스웨덴인은 실패의 원인이 과부하 보호가 작동하지 않는 드라이버의 버그라는 것을 알아냈습니다.

카드 실패 과정은 유익한 비디오에 캡처됩니다.


서버에서 파일을 다운로드하려면 등록하십시오.

테스트는 새 드라이버 버전인 267.71로 반복되었습니다. 그는 오류가 수정되었고 보호 메커니즘이 작동하고 있음을 확인했습니다. 불행히도, 카드의 배송 패키지에 포함된 오류가 있는 드라이버입니다. 사용자가 주파수와 전압을 실험하는 경우에만 보호 메커니즘이 제공되는 것은 아닙니다. 정상 작동 중에도 개발자가 제공한 도구가 사용자에게 유일한 희망인 비상 상황이 발생할 수도 있습니다.

열광자는 번들 드라이버를 설치하지 말고 NVIDIA 웹 사이트에서 최신 버전을 다운로드할 것을 촉구합니다. 또한 오버클러커는 PC 케이스에 통풍이 잘되는지 확인해야 합니다.

2. 나는 논쟁하지 않는다. 그러나 이것은 그다지 중요하지 않습니다. 프로세서가 과열되면 Windows가 블루 스크린으로 충돌합니다. 짜증나지만 비교가 안됩니다. :)

3. 이것은 카드 의 온도 및 기타 매개 변수를 모니터링하는 프로그램으로 지옥에 분명히 실현 가능합니다. (이미 4개만 가지고 있습니다.) 어떻게든 이 정보를 얻겠죠?

추신 또한 카드가 고온에 놓이기 시작한다는 소문이있었습니다. 장난감에서 이것은 중요하지 않지만 어떻게 든 바람직하지 않습니다.

 

과부하 보호 메커니즘이 내장된 비디오 카드 드라이버의 오류로 인해 카드가 타는 것이지 GPU에서 실행되는 소프트웨어가 온도를 제어하지 않기 때문이 아닙니다.

아무도 드라이버 오류로부터 안전하지 않으며 GPU에서 실행 중인 응용 프로그램이 전혀 없더라도 드라이버 오류로 인해 카드가 계속 소모되는 경우가 있을 수 있습니다.

따라서 걱정하지 마십시오. 다리미를 최대한 넣으십시오. 열심히 노력하더라도 끔찍한 일은 일어나지 않을 것입니다. 최신 하드웨어는 CPU와 GPU 모두 과부하 보호 시스템으로 가득 차 있습니다. 프로세서에서 쿨러를 제거하여 말 그대로 화재를 일으킬 수 있었던 시대는 지났습니다.

 

2012.03.21 09:06

과부하 보호 메커니즘이 내장된 비디오 카드 드라이버의 오류로 인해 카드가 타는 것이지 GPU에서 실행되는 소프트웨어가 온도를 제어하지 않기 때문이 아닙니다.

아무도 드라이버 오류로부터 안전하지 않으며 GPU에서 실행 중인 응용 프로그램이 전혀 없더라도 드라이버 오류로 인해 카드가 계속 소모되는 경우가 있을 수 있습니다.

따라서 걱정하지 마십시오. 다리미를 최대한 넣으십시오. 열심히 노력하더라도 끔찍한 일은 일어나지 않을 것입니다. 최신 하드웨어는 CPU와 GPU 모두 과부하 보호 시스템으로 가득 차 있습니다. 프로세서에서 쿨러를 제거하여 말 그대로 화재를 일으킬 수 있었던 시대는 지났습니다.

온도 제어는 저수준 유틸리티(하드웨어 작업일 수도 있음)의 작업이라는 데 동의합니다.

고급 언어로 작성된 소프트웨어에서 온도를 제어하는 것은 자살 방법입니다.

 

GPU를 조롱하는 ktonit을 사용해 보세요.

루프는 각각 100,000,000(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 테이스트 맨드_ (EURUSD,H1) 5741밀리초

2012.03.21 18:15:53 ​터미널 CPU: 정품 Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz(OpenCL 1.1 포함)(4개 장치, 3311MHz, 8174Mb, 버전 2.0)

2012.03.21 18:15:53 ​터미널 GPU: NVIDIA Corporation GeForce GTX 570 with OpenCL 1.1(15개 유닛, 1464MHz, 1280Mb, 버전 296.10)

파일:
 
MetaDriver : 게다가 카드가 고온에 놓이기 시작한다는 소문이 있었습니다.
파리의 대량 죽음 때문입니까, 아니면 무엇입니까?
 
Mathemat :
이것은 파리의 죽음 때문입니까, 아니면 무엇입니까?
테스트를 실행해보십시오(위의 내 게시물 참조). 화면이 멈추나요? 마우스 커서가 움직이나요?
 
Mathemat :
이것은 파리의 죽음 때문입니까, 아니면 무엇입니까?

대부분의 경우 프로세스가 되돌릴 수 있기 때문에 이것은 가능성이 낮습니다. 전자-정공 플라즈마의 변동... (어떻게!). 개별 비트가 때때로 뒤집힙니다. 우리는 그들과 함께 가고 있지 않습니다. :)

그래도 카드가 섭씨 90도까지 뜨거워지면 마음이 아픕니다. 이 경우 실행 사이의 몇 천 밀리초는 온도를 섭씨 82도 이상으로 유지합니다.

삽입했지만 적절한 이유가 있습니다. 유연성이 필요하므로 필요에 따라 삽입하고 온도 임계값을 프로그래밍 방식으로 설정할 수 있습니다.

 
joo : 테스트를 실행해보십시오(위의 내 게시물 참조). 화면이 멈추나요? 마우스 커서가 움직이나요?

그래서 나는 당신처럼 강력한 강철 조각을 가지고 있지 않습니다.

시도해 보겠습니다. 하지만 AMD 드라이버를 다시 삽입하겠습니다.

 
Mathemat :

그래서 나는 당신처럼 강력한 강철 조각을 가지고 있지 않습니다.

시도해 보겠습니다. 하지만 AMD 드라이버를 다시 삽입하겠습니다.

그건 그렇고, 이제 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 )
vidyuhi의 텐션을 눈치채지 못하고 달리고 눌렀다. 테스트 중에 디스패처가 열렸고 브레이크없이 모든 것이 정상이며 테스트 시간 만 17 초였습니다.