Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Eu já vou fazer isso, (provavelmente) será apenas a coleta de estatísticas em um histórico grande. Mas nada a ver com muves. Eu odeio muves - tenho o direito de fazer isso :)
Sincronizar cotações.
Essa é uma tarefa para CPU em vez de GPU. Nem toda tarefa é adequada para a GPU, não é mesmo? É melhor escolher uma que seja adequada, pois é para isso que serve a GPU.
Esse será um array bidimensional.
Presumo que, no futuro, será um artigo tridimensional. Ao mesmo tempo, ficará claro como trabalhar com o buffer da GPU que exibe uma matriz de qualquer dimensão.
Já vou fazer isso, (muito provavelmente) será apenas para coletar estatísticas em uma grande história....
Presumo que em um artigo futuro será tridimensional. Ao mesmo tempo, ficará claro como gravar uma matriz de qualquer dimensionalidade no buffer da GPU e como trabalhar com ela.
ótimo! Vamos aguardar...
Elas também precisam ser sincronizadas?
P.S. Li a ajuda e vi que isso é necessário.
Recalculei os resultados do artigo levando em conta a atualização do hardware.
Um ano atrás: CPU Intel Pentium G840 (2 núcleos a 2,8 GHz) + placa de vídeo AMD HD4870.
Recentemente: CPU Intel Xeon E3-1230v2 (4 núcleos/8 threads a 3,3 GHz; um pouco atrás do i7-3770) + placa de vídeo AMD HD.6 870.
Os resultados dos cálculos em OpenCL são mostrados no gráfico (horizontalmente - o número de otimizações aplicadas no artigo):
O tempo de computação é mostrado verticalmente em segundos. O tempo de execução do script "em um golpe na CPU" (em um núcleo, sem OpenCL) variou dependendo das alterações do algoritmo em 95 mais ou menos 25 segundos.
Como podemos ver, tudo parece claro, mas ainda não muito óbvio.
O mais óbvio é o G840 dual-core. Bem, isso já era esperado. Outras otimizações não alteraram muito o tempo de execução, que variou de 4 a 5,5 segundos. Observe que, mesmo nesse caso, a aceleração da execução do script atingiu valores superiores a 20 vezes.
Na competição entre duas placas de vídeo de gerações diferentes - a antiga HD4870 e a mais moderna HD6870 - podemos quase considerar a 6870 como a vencedora. Exceto pelo último estágio de otimização, em que a antiga e monstruosa 4870 ainda conseguiu uma vitória nominal (embora tenha ficado para trás quase o tempo todo). Os motivos, francamente falando, não são claros: os shaders são menores e sua frequência também é mais baixa, mas mesmo assim ele venceu.
Vamos supor que isso seja um capricho do desenvolvimento de gerações de placas de vídeo. Ou um erro em meu algoritmo :)
Fiquei francamente satisfeito com o Xeon, que conseguiu ser melhor do que o antigo 4870 em todas as otimizações, e lutou com o 6870 quase em igualdade de condições e, no final, até conseguiu vencer todos eles. Não estou dizendo que sempre será assim em qualquer tarefa. Mas a tarefa era computacionalmente muito difícil - afinal, era a multiplicação de duas matrizes de tamanho 2000 x 2000!
A conclusão é simples: se você já tem uma CPU decente, como o i7, e os cálculos do OpenCL não são muito longos, talvez não precise de um aquecedor potente adicional (placa de vídeo). Por outro lado, carregar a pedra a 100% por dezenas de segundos (durante cálculos longos) não é muito agradável, porque o computador "perde a capacidade de resposta" durante esse tempo.
Olá,
Você pode dar um exemplo de como o OpenCL pode acelerar o backtesting de um EA no modo EveryTick? Atualmente, levo 18 minutos para executar dados de 14 anos no modo EveryTick. Acredito que muitos traders ficarão interessados se o OpenCL puder reduzir o tempo de teste em 50%.
Ótimo artigo, mas não entendi como a transferência da linha de dentro do loop para fora da memória privada pode acelerar o processo.
A mesma operação de transferência ocorre de qualquer forma, não tive nenhum impacto em meu código, mas é claro que cada caso é diferente. (mas, novamente, 0 impacto após adicionar algo significa que algo ficou mais rápido, mas sem ganho)
Essa parte está no código-fonte do OpenCL:
Onde você o move para fora do loop de trituração
Obrigado pela atenção