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

 
Ashes:

2012.03.05 17:43:16 CPU Terminal: CPU Intel(R) Core(TM) i3-2100 GenuineIntel a 3.10GHz com OpenCL 1.1 (4 unidades, 3092 MHz, 4008 Mb, versão 2.0)

2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) CpuTime/GpuTime = 0,73476776766287369

[...] Talvez eu tenha "granadas do sistema errado"? (Refiro-me à versão AMD SDK).

Fantástico. Comprei o núcleo, a mãe, a memória e o refrigerador na loja mais habitual que encontrei na rede. Custa totalmente cerca de 6k. Provavelmente, eles trouxeram-me um calhau do futuro por acidente.

Talvez seja por causa do SDK. Acho que não vale a pena culpar a memória, por defeito é apenas DDR-III. E monocanal ou não, afecta-o certamente, mas não tão terrivelmente.

 
Mathemat:

Interessante. O cartão fyords é mais forte (GeForce GT 440), e o tempo de cálculo é uma ordem de magnitude maior ... ...

Pergunto-me se a velocidade de cálculo depende da resolução (tenho 1920x1080), porque o ambiente de trabalho também come algo (tema Aero)?

Talvez seja por isso que demore mais tempo a calcular.

 
fyords: E pergunto-me se a velocidade de cálculo depende da resolução (tenho 1920x1080), porque o ambiente de trabalho também come alguma coisa (tema Aero)?

Sim, talvez. O que mostra o seu índice de desempenho do Windows Aero? Aqui está a minha:


Não preciso de nada disso de laço, por isso está desligado.

P.S. verificado. Sem qualquer efeito.

 

O último teste (3.12.2011) passou normalmente, mas agora surge alguma falha, mas a pontuação é de 6,8 para vídeo. Talvez seja esse o problema (a falha). O novo hardware não está instalado. Pode ser um problema com o novo hardware, então vou esperar por um novo lançamento, lá novamente farei um teste.

 

x32

x32

x64

x64

cpu-z

1

2

 

Adicionei uma genética estúpida e fiz um laço para maximizar. Consegui um optimizador que encaixa uma grelha de camada única em dados simulados equivalentes a 500 dias de história em preços abertos de cinco minutos (16 indicadores por entrada).

Por favor, testar.

Nesta altura considero a agitação concluída com sucesso, porque o teste do optimizador é insuficiente. ;)

Quem tem um abrandamento (em comparação com outros) - agora sabe o que poupar ;-)

Assim, os meus resultados:

2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Full time of optimization == 14 sec 305 ms
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Optimization is closing. Best result == 1.91356 at 92 generation.
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 92: MaxResult==1.91356
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 91: MaxResult==1.91356
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 90: MaxResult==1.91356
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 89: MaxResult==1.91356
.............
.........

Deixem-me explicar pela última vez nos meus dedos: Este é um ciclo completo de optimização de uma rede neural primitiva Expert Advisor.

// Bem, quase um Expert Advisor. Cálculos adicionais no código deste "Expert Advisor", para que possa calcular os lucros de forma suficientemente realista,

// não excederá (em tempo de conta. com implementação inteligente) os cálculos que já lá se encontram. Ou seja, o abrandamento pode ser, digamos, duplo.

Arquivos anexados:
 
MetaDriver:

Acrescentei uma genética estúpida e um laço na maximização. Consegui um optimizador que encaixa uma malha de uma camada em dados simulados equivalentes a 500 dias de história em preços de abertura de cinco minutos (16 indicadores por entrada).

Por favor, testar.

...

Obrigado.))

...

NJ 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:06 Generation 36: MaxResult==2.29423
NO 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:08 Generation 37: MaxResult==2.29426
FE 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:10 Generation 38: MaxResult==2.29426
PJ 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:14 Generation 39: MaxResult==2.29427
HO 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:14 Generation 40: MaxResult==2.29427
QE 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:14 Generation 41: MaxResult==2.29427
EJ 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Generation 42: MaxResult==2.29427
LP 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Generation 43: MaxResult==2.29427
KE 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Generation 44: MaxResult==2.29427
DI 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Optimization is closing. Best result == 2.29427 at 44 generation.
KO 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Full time of optimization == 81 sec 917 ms 
 

MetaDriver, muito obrigado. Fez o seu trabalho de angariação de votos com um A. Ao mesmo tempo, deu-me a oportunidade de verificar a minha configuração "sem cavalos" sem uma placa gráfica discreta e ficar muito, muito surpreendido.

Dirigiu o seu optimizador. É assim:

2012.03.05 23:00:12     Terminal        CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 (2 units, 2793 MHz, 7912 Mb, version 2.0)
2012.03.06 04:24:34     ParallelOptimazer_00-02 (EURUSD,H1)     Full time of optimization == 58 sec 141 ms
2012.03.06 04:24:34     ParallelOptimazer_00-02 (EURUSD,H1)     Optimization is closing. Best result == 1.87689 at 60 generation.
2012.03.06 04:24:34     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 60: MaxResult==1.87689
2012.03.06 04:24:33     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 59: MaxResult==1.87689
2012.03.06 04:24:32     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 58: MaxResult==1.87689
2012.03.06 04:24:31     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 57: MaxResult==1.87689

Assumindo que cada geração conta durante aproximadamente o mesmo período de tempo, obtemos isso em comparação com a sua Ferrari, o meu "tazi" é cerca de 6,5-7 vezes mais lento, tal como da última vez (58,14 segundos por 60 gerações ~ 0,97 segundos/geração).

2 Graff: Se pudesse desactivar os gráficos discretos durante a duração do teste e executar o teste nos gráficos integrados da pedra, seria muito interessante (ao mesmo tempo e ver o progresso da Intel nesta área na transição de Lynnfield para Sandy Bridge).

Mas para o fazer, teria de descarregar o SDK da AMD para o OpenCL. Não irá piorar a situação para o seu cartão discreto (tem o seu próprio condutor), mas pode obter o OpenCL 1.1 no seu PC, embora eu não esteja 100% seguro de que irá funcionar.

Mas se recusar, não ficarei ofendido.

 

Novo posto do fórum mql4.

Caros colegas, vão ter muita confusão e engates com o OpenCL. Não espere resultados fáceis.

Há muitas opções porque o OpenCL é uma tecnologia de software que é articulada no controlador de vídeo. De facto, o controlador de vídeo torna-se um pequeno sistema operativo. Tudo o que se prende ao longo do caminho: UltraVNC, MSI afterbufner, Agnitum OutPost web-control interactivo e um milhar de outros programas podem impedir o funcionamento normal do OpenCL.

Dito isto, mesmo que se consiga fazer com que o OpenCL funcione para cálculos simples com threads, há ainda outro obstáculo intransponível a ultrapassar, nomeadamente: para cálculos complexos - a precisão tecnológica (suporte IEEE parcial de 32 bits) e operacional(perda de precisão ao fazer overclocking a uma carta de jogo) da GPU ainda não é suficiente para cálculos científicos sérios. Além disso, enquanto as GPUs nVidia têm processamento de dupla precisão de 64 bits em quase todas as placas de vídeo modernas, as placas de vídeo AMD têm-no apenas em algumas séries topo-de-gama. nVidia também tem um bug, mas diferente - eles estão em liga com a Microsoft e, portanto, a sua notória CUDA (e OpenCL) não funcionam realmente no Server 2003, por exemplo, mas ao mesmo tempo funcionam bem no Server 2008 e mesmo no velho Win XP - apenas devido a algumas considerações de marketing da Microsoft.

OpenCL é para cálculos de fluxo rápido imprecisos de 32 bits como convolução ou filtragem.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
AlexEros:Perda de precisão ao fazer overclocking a um cartão de jogo

Quem vai fazer o overclock? Obter um ganho de 10-15% na velocidade de cálculo, mas com o risco de um erro de cálculo devido à morte de apenas uma abelha? Bem, não estamos aqui a jogar um jogo, onde não desenhar cem vértices não afecta muito...

OpenCL é para cálculos de fluxo rápido imprecisos de 32 bits, tais como convolução ou filtragem.

Vamos fazer uma advertência. Os cálculos devem ser realmente massivos e pesados para considerar a perda de precisão significativa. A integração é uma soma/ multiplicação maciça, é um caso pesado.

Uma coisa é adicionar dois números, multiplicar por um terço (cada um com uma precisão de cálculo de 32 bits suficiente para cálculos práticos) e escrever o resultado em alguma célula como resultado de uma iteração de laço e não o utilizar de qualquer outra forma dentro da GPU.

Outra coisa é calcular pi em mil milhões de iterações usando a série Leibniz convergente mais lenta (esta série é popularmente utilizada para demonstrar a tecnologia OpenMP):


No segundo caso, quando se utilizam números de 32 bits, existe um perigo real de perda de precisão, porque se somam mil milhões de números. Terver diz que em 99,7% dos casos, o erro resultante não excederá a precisão de um número multiplicado por 2*10^5. Isso é grave - e nem sempre.

Ninguém está a impedir um programador de fazer vários cálculos precisos sobre uma CPU honesta para estimar erros reais.

Parece-me que com precauções razoáveis esta tecnologia pode ser utilizada. E se utilizar processadores modernos de ambos os fabricantes (AMD APU Llano ou mesmo Intel Sandy Bridge), pode esquecer a placa gráfica discreta durante algum tempo: que diferença faz se sou 100 ou apenas 25 vezes mais rápido... E nenhuma abelha morrerá, pois também não vou fazer overclock ao processador.