OpenCL: testes internos de implementação em MQL5 - página 40

 
joo:

1. os jogos de computador não se preocupam com a temperatura da GPU e carregam-na ao máximo, e nada acontece - as placas gráficas funcionam.

2. neste caso, é também necessária a temperatura da CPU com função MQL de retorno. :), caso contrário o processador pode ser queimado.

3. - Claro, não faria mal.

1. Como sabe que eles não se importam? Não é um facto. Alguns podem não se importar. E há muitas pessoas nos fóruns que queimaram cartões em brinquedos.

Os entusiastas suecos tiveram de descobrir que o controlador GeForce GTX 590 versão 267.52 pode danificar a GeForce GTX 590 de alta qualidade. O primeiro cartão 3D com duplo processador queimou enquanto tentava fazer overclock. Dado que a voltagem da GPU estava sobrelotada, os experimentadores decidiram verificar como se comportaria a segunda - e ela sofreu o mesmo destino. Ao obter ajuda da NVIDIA, os incansáveis suecos conseguiram descobrir que a razão da falha é um bug no condutor, o que impede a protecção contra sobrecarga de fazer efeito.

O processo de falha do cartão é capturado num vídeo instrutivo:


Para descarregar ficheiros do nosso servidor, por favor registe-se.

O teste foi repetido com uma nova versão do condutor- 267,71. Confirmou que o bug é corrigido e que o mecanismo de protecção funciona. Infelizmente, os cartões vieram com o condutor com o erro. É de notar que o mecanismo de protecção não é apenas para os casos em que o utilizador está a experimentar frequências e tensões. Durante a utilização normal, pode também surgir uma situação anormal em que a única esperança para o utilizador é o remédio estabelecido pelos criadores.

Aconselham-se

os entusiastas a nunca instalar o controlador agrupado, mas sim a descarregar uma versão mais recente a partir do sítio web da NVIDIA. Além disso, os entusiastas do overclocking devem assegurar-se de que existe uma boa ventilação na caixa do PC.

2. não discuto com isso. Mas não é tão crítico - quando o processador sobreaquece, o Windows embate num ecrã azul. É desagradável, mas não se compara. :)

3. é definitivamente realizável - existem muitos programas que monitorizam a temperatura e outros parâmetros do cartão. (Só eu já tenho quatro deles.) De alguma forma eles obtêm esta informação, não é verdade?

Zy. Além disso, houve um rumor de que a altas temperaturas as cartas estão a começar a calcular mal. Nos brinquedos não é crítico, mas de alguma forma indesejável.

 

Cartões queimados devido a erros no driver da placa de vídeo, que têm mecanismos de protecção contra sobrecarga incorporados, em vez de porque o software que funciona na GPU não controla a temperatura.

Não é que ninguém esteja imune a erros de condutor e é possível que mesmo que não haja aplicações a correr na GPU, o cartão ainda se queime devido a um erro de condutor.

Não tem de se preocupar com isso - carregue o seu hardware ao máximo, nada de mal pode acontecer mesmo que se esforce. O hardware moderno está repleto de sistemas de protecção contra sobrecargas, tanto CPU como GPU. Há muito que se foi, quando ao remover o refrigerador do CPU se podia literalmente iniciar um incêndio.

 

joo 2012.03.21 09:06

As placas são queimadas devido a erros no driver da placa de vídeo que tem mecanismos de protecção contra sobrecarga incorporados e não porque o software que funciona na GPU não monitoriza a temperatura.

Não é que alguém esteja imune a erros de condutor e é possível que mesmo que nenhuma aplicação esteja a funcionar na GPU, o cartão ainda se queime devido a um erro de condutor.

Não tem de se preocupar com isso - carregue o seu hardware ao máximo, nada de mal pode acontecer mesmo que se esforce. O hardware moderno está repleto de sistemas de protecção contra sobrecargas, tanto CPU como GPU. Há muito que se foi o tempo em que a remoção de um refrigerador do CPU podia literalmente provocar um incêndio.

Concordo, o controlo da temperatura é uma tarefa de utilidade de baixo nível (talvez até uma tarefa de hardware),

O controlo da temperatura a partir de software escrito numa linguagem de alto nível é uma forma suicida.

 

Peça a alguém que experimente esta praxe de GPU.

Correndo em ciclos paralelos, cada um dos quais 100000000 (cem milhões) iterações.

Quais são as suas impressões?

//+------------------------------------------------------------------+
//|                                                   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 Terminal: CPU Intel(R) Core(TM) i5-2500 GenuineIntel a 3.30GHz com OpenCL 1.1 (4 unidades, 3311 MHz, 8174 Mb, versão 2.0)

2012.03.21 18:15:53 GPU Terminal: NVIDIA Corporation GeForce GTX 570 com OpenCL 1.1 (15 unidades, 1464 MHz, 1280 Mb, versão 296.10)

Arquivos anexados:
 
MetaDriver: Além disso, havia um rumor de que, a temperaturas mais elevadas, as cartas começam a enganar.
Será por causa da morte maciça de moscas ou algo assim?
 
Mathemat:
É a morte das moscas ou algo assim?
Tente fazer o teste (ver o meu posto acima). O ecrã congela, o cursor do rato move-se?
 
Mathemat:
Será porque as moscas estão a morrer ou algo assim?

Isto é improvável, uma vez que a maior parte do processo é reversível. Flutuações de plasma por furo de electrões (oh como!). Clique ocasionalmente em bits individuais. Tu e eu estamos fora do nosso caminho. :)

Mas assusta-me quando o cartão chega a 90 Celsius. Alguns milhares de milissegundos entre séries de corridas neste caso mantém a temperatura pelo menos a 82C.

Coloquei-o, mas o bom é que precisa de flexibilidade para o colocar conforme necessário e o limiar de temperatura pode ser definido programticamente.

 
joo: Tente fazer o teste (ver o meu posto acima). O ecrã congela, o cursor do rato move-se?

Não tenho uma peça de hardware tão poderosa como você tem.

Vou tentar agora, mas vou apenas ligar o condutor AMD de volta.

 
Mathemat:

Não tenho um hardware tão potente como o seu.

Vou tentar agora, mas vou voltar a colocar o condutor da AMD.

A propósito, tenho um driver OpenCL para o meu processador AMD - tive de o colocar, pois o Intel é instalado sem erros, mas o processador não é detectado como um dispositivo 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)
Não notou qualquer tensão na placa de vídeo, ela corre e clica. Abriu o despachante durante o teste, também fino, sem atrasos, apenas o tempo de teste passou a ser de 17 segundos.
Razão: