Mathemat: Sim, você está se gabando de seus cálculos da GPGPU. Alguma aceleração?
Onde o notebook obtém sua aceleração? Leva mais tempo para copiar para o buffer do que para calcular.
É apenas um teste. Haverá aceleração quando o cálculo for relativamente pesado.
Estou apenas adicionando um roteiro para calcular a correlação com um determinado conjunto de padrões (512 padrões em paralelo) para toda a história, e acho que haverá um ganho de cem vezes (por estimativa). A autópsia mostrará como realmente vai ser.
2012.03.0201:15:10 Tester-512_Test_001 (EURUSD,M1) СPU time = 7223 ms
2012.03.0201:15:10 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==1.01871 at 49 pass
2012.03.0201:15:03 Tester-512_Test_001 (EURUSD,M1) GPU time = 312 ms
2012.03.0201:15:03 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==1.01871 at 49 pass
2012.03.0201:15:02 Tester-512_Test_001 (EURUSD,M1) OpenCL init OK!
O resultado é o mesmo (verificação de validade), mas o tempo é muito diferente. Neste caso, 23 vezes a diferença. De qualquer forma - valeu a pena.
Eu passei uma única camada de perceptron por um histórico de 144000 barras, 512 passagens de uma só vez. Eu gostei. ;)
Afinal de contas, os tempos típicos são ainda ligeiramente melhores. Aqui está um olhar sobre as repetições:
2012.03.0201:26:59 Tester-512_Test_001 (EURUSD,M1) СPU time = 7238 ms
2012.03.0201:26:59 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==1.80004 at 320 pass
2012.03.0201:26:51 Tester-512_Test_001 (EURUSD,M1) GPU time = 281 ms
2012.03.0201:26:51 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==1.80004 at 320 pass
2012.03.0201:26:51 Tester-512_Test_001 (EURUSD,M1) OpenCL init OK!
2012.03.0201:26:48 Tester-512_Test_001 (EURUSD,M1) СPU time = 7270 ms
2012.03.0201:26:48 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==1.48404 at 207 pass
2012.03.0201:26:41 Tester-512_Test_001 (EURUSD,M1) GPU time = 281 ms
2012.03.0201:26:41 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==1.48404 at 207 pass
2012.03.0201:26:41 Tester-512_Test_001 (EURUSD,M1) OpenCL init OK!
Mais de 25 vezes. Mesmo muito aha. :)
Esse era um neurônio de 8 entradas. Agora confira a de 16 entradas:
2012.03.0201:32:32 Tester-512_Test_001 (EURUSD,M1) СPU time = 14618 ms
2012.03.0201:32:32 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==1.22936 at 78 pass
2012.03.0201:32:18 Tester-512_Test_001 (EURUSD,M1) GPU time = 327 ms
2012.03.0201:32:18 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==1.22936 at 78 pass
2012.03.0201:32:17 Tester-512_Test_001 (EURUSD,M1) OpenCL init OK!
2012.03.0201:32:01 Tester-512_Test_001 (EURUSD,M1) СPU time = 14618 ms
2012.03.0201:32:01 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==1.21085 at 143 pass
2012.03.0201:31:46 Tester-512_Test_001 (EURUSD,M1) GPU time = 327 ms
2012.03.0201:31:46 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==1.21085 at 143 pass
2012.03.0201:31:46 Tester-512_Test_001 (EURUSD,M1) OpenCL init OK!
Isso é 45 vezes a diferença.
Isso mesmo - quanto mais pesado o cálculo, menor a sobrecarga constante (enviando matrizes para frente e para trás).
2012.03.0201:45:04 Tester-512_Test_001 (EURUSD,M1) СPU time = 29282 ms
2012.03.0201:45:04 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==0.73802 at 802 pass
2012.03.0201:44:35 Tester-512_Test_001 (EURUSD,M1) GPU time = 327 ms
2012.03.0201:44:35 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==0.73802 at 802 pass
2012.03.0201:46:36 Tester-512_Test_001 (EURUSD,M1) СPU time = 29265 ms
2012.03.0201:46:36 Tester-512_Test_001 (EURUSD,M1) Result on Cpu МахResult==1.58618 at 821 pass
2012.03.0201:46:06 Tester-512_Test_001 (EURUSD,M1) GPU time = 328 ms
2012.03.0201:46:06 Tester-512_Test_001 (EURUSD,M1) Result on Gpu МахResult==1.58618 at 821 pass
2012.03.0201:46:06 Tester-512_Test_001 (EURUSD,M1) OpenCL init OK!
Nota - na GPU não há diferença alguma (há 1280 núcleos, ou seja, toda a tarefa cabe em uma única passagem).
A verificação da CPU, é claro, é feita sequencialmente.
Assim, o centésimo exigido é praticamente alcançado: a diferença é 89,5474 vezes (!)
Você pode ler a descrição da rocha aqui. Duvido muito que esta pedra (ou melhor, sua parte de GPU) não suporte OpenCL.
Do ponto de vista da CPU, a pedra não é muito boa. Mas tem vídeo decente integrado e em casos "bons" você pode contar com dezenas de vezes de aceleração sem usar nenhum monstro de vídeo discreto. Não é um supercomputador econômico, eh?
E "cinco" é tal, e acontece que o poder da pedra multi-núcleo é quase inútil. Sem contar, é claro, com a otimização: que diferença faz para você quantos núcleos você tem, 4 ou 6, se a otimização tem que funcionar 24 horas por dia? Por isso, corra Cloud mesmo em um Celeron G530 de núcleo duplo não tão rápido e honesto.
P.S. Eu não sou um fã da AMD, se alguma coisa. Estou apenas tentando calcular para onde toda essa confusão da AMD eventualmente levará.
Sim, você está se gabando de seus cálculos da GPGPU. Alguma aceleração?
Onde o notebook obtém sua aceleração? Leva mais tempo para copiar para o buffer do que para calcular.
É apenas um teste. Haverá aceleração quando o cálculo for relativamente pesado.
Estou apenas adicionando um roteiro para calcular a correlação com um determinado conjunto de padrões (512 padrões em paralelo) para toda a história, e acho que haverá um ganho de cem vezes (por estimativa). A autópsia mostrará como realmente vai ser.
E de qualquer forma, não estou me gabando, estou popularizando o OpenCL. Pronto! :)
Também é divertido.
Como é isso - alguma aceleração?
Isso é de yazzy!!!
O resultado é o mesmo (verificação de validade), mas o tempo é muito diferente. Neste caso, 23 vezes a diferença. De qualquer forma - valeu a pena.
Eu passei uma única camada de perceptron por um histórico de 144000 barras, 512 passagens de uma só vez. Eu gostei. ;)
Isso é muito legal.
Afinal de contas, os tempos típicos são ainda ligeiramente melhores. Aqui está um olhar sobre as repetições:
Mais de 25 vezes. Mesmo muito aha. :)
Esse era um neurônio de 8 entradas. Agora confira a de 16 entradas:
Isso é 45 vezes a diferença.
Isso mesmo - quanto mais pesado o cálculo, menor a sobrecarga constante (enviando matrizes para frente e para trás).
E isso são 1024 passes em paralelo:
Nota - na GPU não há diferença alguma (há 1280 núcleos, ou seja, toda a tarefa cabe em uma única passagem).
A verificação da CPU, é claro, é feita sequencialmente.
Assim, o centésimo exigido é praticamente alcançado: a diferença é 89,5474 vezes (!)
Sim, os cálculos pesados em loop são os melhores para OpenCL.
Você ou alguém que você conhece não tem um computador baseado em A8-3850 por perto? A propósito, tem 400 dutos gráficos (integrados)!
Você ou alguém que você conhece não tem um cálculo baseado em A8-3850? A propósito, ela tem 400 GPUs (integradas)!
Existe alguma confusão? Aqui está http://kazan.kompiko.info/priceshop.php?desc_id=111255
Não parece ser nada especial, apenas quatro núcleos, nem um pio sobre a esteira.
Você pode ler a descrição da rocha aqui. Duvido muito que esta pedra (ou melhor, sua parte de GPU) não suporte OpenCL.
Do ponto de vista da CPU, a pedra não é muito boa. Mas tem vídeo decente integrado e em casos "bons" você pode contar com dezenas de vezes de aceleração sem usar nenhum monstro de vídeo discreto. Não é um supercomputador econômico, eh?
E "cinco" é tal, e acontece que o poder da pedra multi-núcleo é quase inútil. Sem contar, é claro, com a otimização: que diferença faz para você quantos núcleos você tem, 4 ou 6, se a otimização tem que funcionar 24 horas por dia? Por isso, corra Cloud mesmo em um Celeron G530 de núcleo duplo não tão rápido e honesto.
P.S. Eu não sou um fã da AMD, se alguma coisa. Estou apenas tentando calcular para onde toda essa confusão da AMD eventualmente levará.
Volodya, por favor, execute este roteiro e informe os resultados.
Obrigado à MQL5 pela ajuda.