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

 
Mathemat:

Bem, finalmente, temos estado à sua espera. Se estiver pronto para experimentar, instale o Intel OpenCL Runtime ( instruções de ligação).

Executar o guião sem alterar nada nele e afixar o registo do separador "Especialistas" tal como os seus colegas anteriores fizeram. O guião demorará cerca de 3 minutos a correr na sua jóia, tenha paciência comigo. Ao mesmo tempo, veremos como o OpenCL funciona na pedra mais fria da ponte Sandy Bridge.

Se não tiver paciência ou se achar que está para além das suas capacidades, não há problema, não se sente ofendido.

P.S. O objectivo deste guião é ver o que uma CPU nua pode fazer sem quaisquer dragões de vídeo discretos. Suspeito que com o Intel Runtime devidamente inserido, este guião terá uma aceleração de cerca de 200 ou mesmo ligeiramente superior.

Há algumas dúvidas de que o Intel OpenCL Runtime esteja instalado correctamente.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1347.164383561644

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==0.9316 at 10253 pass

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 4


 
casinonsk:

Existem dúvidas de que o Intel OpenCL Runtime esteja instalado correctamente.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

Provavelmente, o argumento CLContextCreate() foi fixado em algo diferente de zero. Bem, eu pedi-lhe para não mudar nada! Já conhecemos as capacidades do seu dragão vídeo de duas cabeças. Mas parece que tem até vários deles.

De acordo com as minhas estimativas aproximadas, em CLContextCreate(0) deverá ter números sobre o tempo de CPU = 180000 ms e tempo de GPU = 900 ms (aproximadamente). O seu primeiro tempo de execução é estranhamente elevado para uma CPU deste tipo. Talvez estivesse sobrecarregado com outras tarefas?

Pode simplesmente executar o guião como eu o anexei - sem alterar nada no código, nem um único carácter?

P.S. Claro, talvez dispositivo = 0 corresponde não ao CPU mas a algo mais. Bem, então experimente (de 0 a 3). O tempo mais elevado de GPU deve em teoria corresponder ao CPU nu, ou seja, hospedeiro.

 
Mathemat:

Não se fixou zero como argumento de CLContextCreate() mas algo mais. Bem, eu pedi-lhe para não mudar nada! Já conhecemos as capacidades do seu dragão vídeo de duas cabeças. Mas parece ter vários deles.

De acordo com a minha estimativa aproximada, em CLContextCreate(0) deverá ter valores na ordem de tempo de CPU = 180000 ms e tempo de GPU = 900 ms (aproximadamente). O seu primeiro tempo de execução é estranhamente elevado para uma CPU deste tipo. Talvez estivesse sobrecarregado com outras tarefas?

Pode simplesmente executar o guião tal como o anexei - sem alterar nada, nem um único personagem?

P.S. Claro, talvez dispositivo = 0 corresponde não ao CPU mas a algo mais. Bem, então experimente (de 0 a 3). O tempo mais elevado de GPU deve em teoria corresponder ao CPU nu, ou seja, hospedeiro.

Eu não mudei os parâmetros! Funcionou como está.

De acordo com o vídeo, sim é 2x590.

Tentei novamente com CLContextCreate(0)1,2,3, o resultado é o mesmo de antes.

O problema pode ser com oIntel OpenCL Runtime.

 
casinonsk:

Não alterou os parâmetros! Começou como está.

Voltou a correr com CLContextCreate(0)1,2,3 o resultado é o mesmo de antes.

Todos os resultados são os mesmos? Eu não acredito... Bem, este script não pode ter tempo de GPU = 219 ms numa CPU nua. No melhor dos casos, seriam cerca de 800 ms, mas não cerca de 200 ms.

Aqui está o meu resultado típico (tenho o CPU Pentium G840):

2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CpuTime/GpuTime = 88.40817091454272
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Result on Cpu МахResult==1.05116 at 7785 pass
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CPU time = 235873 ms
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Result on Gpu МахResult==1.05116 at 7785 pass
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    GPU time = 2668 ms
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    OpenCL init OK!
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    CLGetInfoInteger() returned 1

OK, vamos continuar.

 
Mathemat:

Os resultados são todos iguais? Eu não acredito... Bem, este script não pode ter tempo de GPU = 219 ms numa CPU nua. Na melhor das hipóteses serão cerca de 800 ms, mas não cerca de 200 ms.

Ok, esquece.

Acabei de tentar novamente comCLContextCreate(0)

 2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1265.405982905983

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==1.48772 at 2051 pass

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 296105 ms

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==1.48772 at 2051 pass

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 234 ms

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 5


 
casinonsk: Tentei novamente comCLContextCreate(0)

Está obviamente numa placa discreta, não no CPU: tais acelerações na emulação são dificilmente possíveis. E o número de dispositivos que já possui é de 5, o que é assustador.

Se não se importar de executar um código ligeiramente modificado, por favor, e afixar o resultado aqui. No código, os cálculos para os vários dispositivos OpenCL são colocados num laço (devem ser rápidos) enquanto o cálculo no x86, o mais longo, é executado apenas uma vez. Será longo, mas o guião em si é executado uma vez.

Compreendo que já estou a aborrecê-lo. Mas em qualquer caso será uma boa informação para a Equipa de Apoio.
Arquivos anexados:
 

Tenho um resultado interessante )) Já percebi, não é o número total de dispositivos, é o número actual

2012.04.22 22:02:51     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0

Embora os cálculos estejam em curso, afixá-los-ei quando estiverem prontos.

A propósito, nem CLGetInfoInteger() nem CL_DEVICE_COUNT estão presentes na ajuda.

Resultado PS.

2012.04.22 22:02:51     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        GPU time = 11357 ms
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:03:03     ParallelTester_00-01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 1
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        GPU time = 998 ms
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:04     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        CPU time = 428706 ms
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        Result on Cpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01 x_cycle (EURUSD,M30)        CpuTime/GpuTime = 429.565130260521
 
fyords: A propósito, não há CLGetInfoInteger() ou CL_DEVICE_COUNT na ajuda.

Resultado PS.

Actualize a sua ajuda, a sua está desactualizada.

2. Tem

2012.03.04 22:27:16     Terminal        GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 295.73)
2012.03.04 22:27:16     Terminal        CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2812 MHz, 2048 Mb, version 2.0)

muito provavelmente, o primeiro número, 11357 ms, refere-se ao anfitrião (CPU nua), e o segundo, 998 ms, refere-se à placa gráfica. A ordem de ganho no anfitrião, grosso modo, é bastante consistente com a aceleração alcançada no AMD OpenCL (cerca de 38 vezes num Athlon II de 4 núcleos). Embora não muito, deveria ser mais, algures perto de 50-60. É bem possível que a sua memória seja muito lenta.

O valor CpuTime/GpuTime, claro, só é calculado para o último dispositivo calculado.

 
Mathemat:

1. actualizar a ajuda, a sua está claramente desactualizada.

2. O valor CpuTime/GpuTime, claro, só é calculado para o último dispositivo calculado.

1. actualizado manualmente tudo está lá, obrigado, mas a ajuda não é actualizada juntamente com o terminal e o meta-editor?

2. Sim, mas ainda assim, simpático ).

 
papaklass:

Com o seu hardware é quase claro, só tem o anfitrião sendo um dispositivo OpenCL. Por outro lado, é estranho como se obteve um resultado tão elevado mais cedo (página 51):

2012.04.08 13:28:01     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       OpenCL init OK!
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       GPU time = 7145 ms
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Gpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CPU time = 422888 ms
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Cpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CpuTime/GpuTime = 59.18656403079076

Por alguma razão, não consigo tirar o cursor da inserção do código. E se eu citar alguém, o mesmo disparate. É um bug do fórum?

Mais provavelmente um bug no motor do fórum, mas nem sempre assim. Normalmente clico na barra HTML e insero manualmente um par de letras após a última tag. Depois volto para o modo de edição visual do post.

Razão: