Monday 13 November 2017

Moving Average Cuda


Ao calcular uma média móvel em execução, colocar a média no período de tempo médio faz sentido No exemplo anterior, calculamos a média dos três primeiros períodos de tempo e colocá-lo próximo ao período 3. Poderíamos ter colocado a média no meio da Intervalo de tempo de três períodos, ou seja, próximo ao período 2. Isso funciona bem com períodos de tempo ímpar, mas não é tão bom para mesmo períodos de tempo. Então, onde colocamos a primeira média móvel quando M 4 Tecnicamente, a Média Móvel cairá em t 2,5, 3,5. Para evitar esse problema, suavizamos as MAs usando M 2. Assim, suavizamos os valores suavizados Se formos uma média de um número par de termos, precisamos suavizar os valores suavizados A tabela a seguir mostra os resultados usando M 4.Para outra abordagem, você pode Truncar a janela de média móvel exponencial e, em seguida, calcular seu sinal filtrado, fazendo uma convolução entre o seu sinal ea janela exponencial. A convolução pode ser calculada usando a biblioteca CUDA FFT livre (cuFFT) porque, como você deve saber, a convolução pode ser expressa como a multiplicação ponto-sábia dos dois sinais no domínio fourier (Este é o apropriadamente chamado Teorema da Convolução, Que é executado com uma complexidade de O (n log (n))). Este tipo de abordagem irá minimizar o seu código CUDA kernel e correr muito, muito rapidamente, mesmo em uma GeForce 570 Particularmente, se você pode fazer todos os seus cálculos em única (float) de precisão. Eu gostaria de propor a manipular a equação de diferença acima como indicado abaixo e, em seguida, usando CUDA Thrust primitivas. DIFERENÇA EQUAÇÃO MANIPULAÇÃO - FORMA EXPLÍCITA DA DIFERENÇA EQUAÇÃO Por álgebra simples, você pode encontrar o seguinte: Em conformidade, a forma explícita é a seguinte: CUDA THRUST IMPLEMENTAÇÃO Você pode implementar a forma explícita acima pelas seguintes etapas: Inicializar uma entrada sequência dinput para Alfa, exceto para dinput0 1. Definir um vetor d1 overbetatothen igual a 1, 1 / beta, 1 / beta2, 1 / beta3. Multiplique o dinput elementwise por d1overbetatothen Execute um inclusivescan para obter a seqüência do yn / betan Divida a seqüência acima por 1, 1 / beta, 1 / beta2, 1 / beta3. A abordagem acima pode ser recomendada para sistemas Linear Time-Varying (LTV). Para os sistemas Linear Time-Invariant (LTI), a abordagem FFT mencionada por Paul pode ser recomendada. Estou fornecendo um exemplo dessa abordagem usando CUDA Thrust e cuFFT na minha resposta para FIR filtro em CUDA. O que é CUDA Inscrever-se hoje Introdução à Programação Paralela Um curso aberto, em linha da Udacity Instrutores: Dr. John Owens, UC Davis e Dr. David Luebke, NVIDIA CUDA reg é uma plataforma de computação paralela e modelo de programação inventado pela NVIDIA. Permite aumentos dramáticos no desempenho de computação aproveitando a potência da unidade de processamento gráfico (GPU). Com milhões de GPUs CUDA-ativados vendidos até à data, desenvolvedores de software, cientistas e pesquisadores estão encontrando amplos usos para computação GPU com CUDA. Aqui estão alguns exemplos: Identifique a placa oculta nas artérias. Os ataques cardíacos são a principal causa de morte em todo o mundo. Harvard Engineering, Harvard Medical School e Brigham Womens Hospital se uniram para usar GPUs para simular o fluxo sanguíneo e identificar a placa arterial escondida sem técnicas invasivas de imagem ou cirurgia exploratória. Analisar o fluxo de tráfego aéreo. O Sistema Nacional de Espaço Aéreo gerencia a coordenação nacional do fluxo de tráfego aéreo. Modelos de computador ajudam a identificar novas maneiras de aliviar o congestionamento e manter o tráfego do avião se movendo eficientemente. Usando a potência computacional das GPUs, uma equipe da NASA obteve um grande ganho de desempenho, reduzindo o tempo de análise de dez minutos para três segundos. Visualize moléculas. Uma simulação molecular chamada NAMD (nanoescala molecular dinâmica) recebe um grande impulso de desempenho com GPUs. A aceleração é resultado da arquitetura paralela de GPUs, que permite que os desenvolvedores do NAMD transportem porções computacionais intensivas do aplicativo para a GPU usando o CUDA Toolkit. Background GPU Computing: The Revolution Você está enfrentando imperativos: Melhorar o desempenho. Resolver um problema mais rapidamente. O processamento paralelo seria mais rápido, mas a curva de aprendizado é íngreme não é mais. Com CUDA, você pode enviar código C, C e Fortran direto para GPU, sem linguagem de montagem necessária. Desenvolvedores de empresas como a Adobe, a ANSYS, a Autodesk, a MathWorks ea Wolfram Research estão acordando esse gigante adormecido da GPU - para fazer computação científica e de engenharia de propósito geral em uma variedade de plataformas. Usando linguagens de alto nível, os aplicativos acelerados por GPU executam a parte seqüencial de sua carga de trabalho na CPU, otimizada para o desempenho de um único thread, ao mesmo tempo em que aceleram o processamento paralelo na GPU. Isso é chamado de computação GPU. GPU computação é possível porque hoje GPU faz muito mais do que renderizar gráficos: Sizzles com um teraflop de desempenho de ponto flutuante e crunches tarefas de aplicação projetado para qualquer coisa de finanças para medicina. CUDA é amplamente implantado através de milhares de aplicações e trabalhos de pesquisa publicados e apoiado por uma base instalada de mais de 375 milhões de GPUs CUDA habilitado em notebooks, estações de trabalho, clusters de computação e supercomputadores. Visite a Zona CUDA para obter exemplos de aplicações em diversos mercados verticais e desperte seu gigante GPU. História da Computação GPU As primeiras GPUs foram projetadas como aceleradores gráficos, suportando apenas tubulações específicas de função fixa. Começando no final dos anos 90, o hardware tornou-se cada vez mais programável, culminando com a primeira GPU da NVIDIA em 1999. Menos de um ano após a NVIDIA cunhar o termo GPU, os artistas e desenvolvedores de jogos não eram os únicos a fazer trabalho inovador com a tecnologia: Tocando seu excelente desempenho em ponto flutuante. O GPU de General Purpose (GPGPU) movimento tinha amanheceu. Mas GPGPU estava longe de ser fácil na época, mesmo para aqueles que sabiam linguagens de programação gráfica como OpenGL. Os desenvolvedores tinham que mapear cálculos científicos em problemas que poderiam ser representados por triângulos e polígonos. O GPGPU estava praticamente proibido para aqueles que não haviam memorizado as últimas APIs gráficas até que um grupo de pesquisadores da Universidade de Stanford decidiu re-imaginar a GPU como um processador de streaming. Em 2003, uma equipe de pesquisadores liderada por Ian Buck revelou Brook, o primeiro modelo de programação amplamente adotado para estender C com construções paralelas de dados. Usando conceitos como fluxos, kernels e operadores de redução, o compilador Brook eo sistema runtime expuseram a GPU como um processador de propósito geral em uma linguagem de alto nível. Mais importante ainda, os programas do Brook não eram apenas mais fáceis de escrever do que o código GPU manualmente ajustado, eram sete vezes mais rápidos do que o código existente semelhante. A NVIDIA sabia que o hardware incrivelmente rápido precisava ser acoplado a ferramentas intuitivas de software e hardware e convidou Ian Buck para se juntar à empresa e começar a desenvolver uma solução para executar C na GPU. Juntando o software e o hardware, a NVIDIA revelou a CUDA em 2006, a primeira solução do mundo para computação geral em GPUs. ECOSISTEMA Ferramentas e Formação Hoje, o ecossistema CUDA está a crescer rapidamente à medida que mais e mais empresas fornecem ferramentas, serviços e soluções de classe mundial. Se você quiser escrever seu próprio código, a maneira mais fácil de aproveitar o desempenho das GPUs é com o CUDA Toolkit. Que fornece um ambiente de desenvolvimento abrangente para desenvolvedores C e C. O CUDA Toolkit inclui um compilador, bibliotecas matemáticas e ferramentas para depuração e otimização do desempenho de seus aplicativos. Você também encontrará exemplos de código, guias de programação, manuais de usuário, referências de API e outras documentações para ajudá-lo a começar. A NVIDIA fornece tudo isso gratuitamente, incluindo NVIDIA Parallel Nsight para Visual Studio, o primeiro ambiente de desenvolvimento do setor para aplicações paralelas que usam GPUs e CPUs. Aprender a usar CUDA é conveniente, com treinamento on-line abrangente disponível, bem como outros recursos, como webinars e livros. Mais de 400 universidades e faculdades ensinam programação CUDA, incluindo dezenas de CUDA Centros de Excelência e Centros de Pesquisa e Treinamento CUDA. Para desenvolvedoresNão sou um programador com nenhuma habilidade. Apenas alguém curioso sobre CUDA e assim que eu estou fazendo uma leitura pequena. Eu corri através de um exemplo de usar Thrust para fazer uma média móvel: O exemplo, como ele é, é executado e funciona principalmente corretamente. No entanto, é trivial no sentido de que ele só faz uma operação média móvel. Como eu diria 352 dessas operações de média móvel em paralelo, todos operando no mesmo fluxo de dados Na minha mente o fluxo do programa pode ser: Gerar o amplificador de dados enviá-lo para um núcleo CUDA. (Mesmo que o código existente, mas acho que os comprimentos de 1000 ou 10000 em vez de 30) Copie-o do núcleo CUDA em seu para todos os outros 351 núcleos CUDA na minha GTX 465 Diga a cada núcleo CUDA o número de itens de dados para a média. (4. 5. 6. 352. 353. 354) Diga ao dispositivo para executar a média em cada núcleo em paralelo Leia os resultados de cada núcleo Eu recebo que este código faz tudo acontecer, mas como faço para obter Thrust para fazer Muitos destes em paralelo Meu interesse aqui é sobre algo como dados de ações. Se eu estou olhando para os preços GOOG Id que colocar na GPU usando todos os núcleos e deixá-lo lá. Id então ser livre para fazer lotes de processamento sem carregar os dados mais e apenas a leitura de volta os resultados de cada núcleo. NOTA: Talvez eu não queira usar o GOOG em todos os núcleos. Alguns núcleos podem ser GOOG, outros com algum outro símbolo, mas vou chegar lá mais tarde. Im apenas pensando que eu não quero os dados conservados em estoque na memória global se há espaço suficiente em cada núcleo. Eu suponho que isso é bastante simples para CUDA amp Thrust perguntou Sep 12 12 às 19:39 Minha compreensão é que você está interessado nas seguintes duas situações: Você tem uma longa seqüência de itens e você deseja calcular um certo número de médias, por A média em diferentes números de itens, ou seja, usando diferentes comprimentos para a janela da média móvel. Isto é o que eu entendo de sua pergunta original. Você tem uma série de seqüências, armazenadas consecutivamente na memória, e você quer medi-las em paralelo com uma janela de média fixa de tamanho 2 RADIUS 1. Isto é o que o código ArrayFire proposto por asm faz - você aceitou. Em vez de usar CUDA Thrust, acho que seria mais fácil escrever seu próprio kernel CUDA para fazer as operações acima. Abaixo, um exemplo totalmente trabalhado que funciona da mesma maneira que o código ArrayFire proposto por asm, abrangendo assim o caso 2. Modificá-lo para cobrir o caso 1 seria direto. Respondeu Nov 15 14 at 15:42 Sua resposta 2016 Stack Exchange, IncBarracuda Networks, Inc. violou a sua média móvel de 50 dias em uma forma Bullish. CUDA-US. 11 de julho de 2016 Desempenho dos preços das ações em relação aos pares Comparado aos pares, o desempenho inferior relativo do ano passado contrasta com o desempenho mais recente. CUDA-US 8216s desempenho preço de ações de -52,39 nos últimos 12 meses está abaixo da sua mediana de pares, mas a sua tendência de 30 dias no desempenho preço das ações de 15,77 é melhor do que a mediana peer. Este recente aumento do preço das ações pode anunciar uma mudança no desempenho do preço das ações relativas. Definições do quadrante. Pular para saber mais Leading, Fading, Lagging, Rising Screen para as empresas que usam o desempenho relativo do preço da ação Lucro Momentum Barracuda Networks, Inc. tem uma pontuação de ganhos de 68,99 e tem uma valoração relativa de OVERVALUED. Estoques com Momento de Lucro Alto são uma opção preferida para jogadas de momentum. Se eles estão subvalorizados, pode ser uma vantagem adicional e pode indicar impulso sustentado. Definições do quadrante. Pular para saber mais Sobrevalorizado, Momento de Lucro Elevado, Subvalorizado, Momento de Lucro Elevado, Subvalorizado, Momento Baixo de Lucro, Tela Momentum Sobrevalorizada, de Baixo Lucro para empresas que utilizam a Pontuação Momentum de Lucros

No comments:

Post a Comment