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

 
Mathemat:

E o resultado do seu Emulador OpenCL (o seu segundo teste) parece suspeitamente fraco mesmo em comparação com o meu (tive cerca de 10 segundos em "GPU").

Estava a contar com uma GPU com CPU intensiva - tinha mais núcleos do que o meu. E a minha contava com CPU pura com 4 núcleos (dispositivo 1).
 
joo: Estava a calcular em GPU intensivo de CPU - mais núcleos do que o meu. E o meu contava com um CPU puro com 4 núcleos.

Não, não é, Andrew. imho, eu também contei com um CPU puro com 2 núcleos. Há três argumentos para isso. O primeiro é simplesmente revestido a ferro, o segundo e o terceiro não são tão sólidos:

1. Tenho apenas um dispositivo OpenCL no meu sistema. Por outro lado, um desses discos tem de ser o anfitrião de qualquer forma, ou seja, o CPU nu. E é. Não é um GPU, verifiquei-o em tampas de GPU.

Portanto, suspeito que o dispositivo CPU que emula o OpenCL possa ser qualquer rocha que suporte SSE2 ou superior. Não importa se tem ou não gráficos integrados. Incluindo um Intel Core i5-750, a propósito.

2. A minha CPU gráfica é Intel HD Graphics. Tem 6 pipelines, mas 24 processadores (fios, moscas?). Circule as especificações gráficas perto do que tanto você como eu temos.

Uma vez que a frequência de voo é muito mais baixa do que a frequência da pedra, não consigo imaginar que 24 GPU com uma frequência inferior acelerariam a execução em comparação com um CPU puro mais de 25 vezes (e já tive isso). Isso deixa apenas uma coisa: não é a GPU, é a emulação de CPU do OpenCL. Posso estar a contar mal, mas não tenho dados mais detalhados sobre a arquitectura gráfica das pedras da Intel.

Os seus gráficos incorporados são aproximadamente os mesmos que os meus - Intel HD Graphics 2000 - mas algo está torto lá em cima. Não sei como explicar um resultado tão estranhamente baixo de uma pedra de ponte arenosa quase topo de gama da Intel. A sua aceleração deverá ser, de acordo com estimativas aproximadas, na região dos 50.

3. Formalmente, os gráficos integrados da Intel terão suporte OpenCL apenas em Ivy Bridge juntamente com Intel HD Graphics 2500 e 4000 (já terá 64 moscas rápidas que são muito mais rápidas do que as integradas da AMD). E neste momento não parece realmente existir.

Eu próprio ainda não percebi porque é que o meu i3 não está a acelerar os meus cálculos.

 
Mathemat:

...

Ainda não descobri porque é que a minha i3 não está a acelerar os meus cálculos eu próprio.

Viva! Está a funcionar!

2012.04.09 15:32:01 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.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Resultado sobre Cpu MachResult===3.64642 em 1594 passagem
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tempo de CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Resultado sobre Gpu MachResult===3.64642 em 1594 passagem
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU time = 93460 ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) OpenCL init OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Cpu MachResult===3.82222 a 3357 passagem
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo de CPU = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Gpu MachResult===3.82222 a 3357 passagem
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 94787 ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!

 
Ashes:

Viva! Funciona!

2012.04.09 15:32:01 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.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1)CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Tempo de CPU = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Resultado sobre Gpu MachResult===3.64642 em 1594 passagem
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1)GPU time = 93460 ms

Bem, isto é melhor do que 0,7 - pelo menos tem alguma velocidade. Então, o que fez?

Embora... É muito fraco. No meu Pentium G840, como este:

2012.04.08 22:01:08 CPU Terminal: CPU Intel(R) Pentium(R) GenuineIntel G840 @ 2.80GHz com OpenCL 1.2 (2 unidades, 2793 MHz, 8040 Mb, versão 2.0 (sse2))

2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Resultado no Cpu MachResult==4.04242 no passe 1775
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)Tempo de CPU = 269461 ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Resultado sobre Gpu MachResult==4.04242 no passe 1775
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)GPU time = 10343 ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL init OK!

Acha normal que uma pedra de baixo custo bata uma pedra mais poderosa da mesma empresa por quase uma ordem de grandeza? Têm quase a mesma arquitectura, e o conjunto de instruções da i3 não é pelo menos mais pobre.

 
Mathemat:

Bem, já é melhor do que 0,7, pelo menos alguma velocidade. E o que é que fez?

Embora... é muito fraco. No meu Pentium G840 vai assim:

O que pensa, é normal ou não, se uma pedra orçamental bater uma mais poderosa da mesma empresa por quase uma ordem de grandeza? Têm quase a mesma arquitectura, e o conjunto de instruções da i3 não é pelo menos mais pobre.

Actualizou o driver HD Graphics e instalou o novo AMD OpenCL SDK com o inglês.

A minha sugestão em relação à diferença de desempenho é a seguinte: versões diferentes de OCL + inicialmente tem a vantagem da GPU sobre a frequência da CPU (assumindo que a parte da GPU é a mesma).

 
Ashes: Quanto à diferença de desempenho, suponho: versões diferentes de OCL + inicialmente tem a vantagem da frequência GPU sobre a CPU (assumindo que a parte da GPU é a mesma).

Não tenho nenhum dispositivo OpenCL GPU, leia a minha resposta ao joo. E também não deve ter um (estou a falar de gráficos integrados). Tudo se passa em pura emulação em núcleos de CPU. Sim e a vantagem da frequência é de 2x no máximo, enquanto o desempenho difere por uma ordem de grandeza. Isto é uma discrepância.

Segundo: a diferença de versão não afecta o desempenho de absolutamente todos os testes aqui expostos. E foi o mesmo rápido em 1.1 (no meu G840).

 
Mathemat:

Não tenho nenhum dispositivo OpenCL GPU, leia a minha resposta ao joo. E também não deve ter um (estou a falar de gráficos integrados). Tudo funciona em pura emulação em núcleos de CPU. Sim e a vantagem da frequência é de 2x no máximo, enquanto o desempenho difere por uma ordem de magnitude. Isto é uma discrepância.

Segundo: a diferença de versão não afecta o desempenho de absolutamente todos os testes aqui expostos. E foi o mesmo rápido em 1.1 (no meu G840).

Parece que tem razão. Estava a regozijar-me demasiado cedo. A julgar pela carga da CPU, parece que a parte da GPU do guião é paralela a 4 núcleos/transes (carga da CPU a 100%), enquanto a parte da CPU é praticamente executada num núcleo (25-30%).

Assim, acontece que 4*0,7 (overhead?) ~= 2,8 - GPU/CPU.

Não é claro porque existe tal diferença entre o seu e o meu, excepto que o AMD SDK não utiliza todas as características do hardware "de outra pessoa" na versão x64 (tem, tanto quanto sei, x32). HD Graphics driver version (Intel Corporation, 14.02.2012, 8.15.10.2653).

Comparação de G840 e i3-2100 da intel.com:

PS. Oops, falhou os 8040Mb que tem (ou seja, x32/x64 está fora).

 
Mathemat:

Em segundo lugar, a diferença de versão não tem qualquer efeito sobre o desempenho de absolutamente todos os testes aqui publicados. E com 1.1 foi igualmente rápido (no meu G840).

OpenCL 1.2 deu um ganho de cerca de 10% a 1.1:

2012.04.10 09:41:19 Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)
2012.04.10 09:41:19 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.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 94365 ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Gpu MachResult===3.52408 na passagem de 1914
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo de CPU = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Cpu MachResult===3.52408 no passe de 1914
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 93756 ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Gpu MachResult==4.06735 a 1519 passagem
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo de CPU = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado no Cpu MachResult==4.06735 no passe 1519
2012.04.10 10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.58571184775076


2012.04.10 11:33:50 PM Terminal MetaTrader 5 x64 build 619 iniciado (MetaQuotes Software Corp.)
2012.04.10 11:33:50 CPU Terminal: CPU Intel(R) Core(TM) i3-2100 GenuineIntel a 3.10GHz com OpenCL 1.2 (4 unidades, 3092 MHz, 4008 Mb, versão 2.0 (sse2,avx))

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 86923 ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Gpu MachResult==4,27665 a 970 passagens
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo de CPU = 246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Cpu MachResult==4,27665 a 970 passagem
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 87610 ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Gpu MachResult==4.43566 a 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Tempo de CPU = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Contagem de inticadores = 16; Contagem de barras históricas = 50.000; Contagem de passes = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Resultado sobre Cpu MachResult==4.43566 a 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
Presumo que se quisermos passar uma matriz 2D/multidimensional com dados para a GPU, podemos usar a representação de dados como uma estrutura e passar a estrutura?
 
Ashes: OpenCL 1.2 deu um ganho de cerca de 10% a 1.1:

Sim, sobre isso. O ganho é não crítico de qualquer forma, não muitas vezes.

A única diferença é que o AMD SDK não utiliza todas as características em hardware "estrangeiro".

Eu também tinha essa hipótese no início.

Mas os testes de CPU OpenCL pelo utilitário GPU Caps passam todos de forma bastante decente, eu verifiquei-o. A ferramenta está no reboque, se precisar dela. Basta rodar as emulações da CPU.

Em alguns testes os fps em i3 são várias vezes superiores aos do G840 (no Quaternion Julia Set 4D - cerca de 17 vs 4-5).

Assim, acontece que a AMD fez aqui um bom trabalho.

O problema está no terminal que por alguma razão "compreende" o G840 mas "não compreende" pedras mais frescas da Intel com o AMD APP SDK instalado. Enviei uma mensagem ao Servicedesk há uma semana, mas até agora não obtive resposta.

Arquivos anexados: